<!--
Copyright 2013 The Chromium Authors. All rights reserved.
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 histograms along
with a detailed description for each histogram.

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

For brief details on how to modify this file to add your description, see
https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/one-pager.md

Please pretty-print and validate your edits by running the pretty_print.py
and validate_format.py scripts in the same directory as this file before
uploading your change for review.
-->

<histogram-configuration>

<!-- Histogram definitions -->

<histograms>

<histogram name="Accessibility.AndroidServiceInfo"
    enum="AccessibilityAndroidServiceInfoEnum">
  <owner>dmazzoni@chromium.org</owner>
  <owner>paulmiller@chromium.org</owner>
  <summary>
    Tracks flags and capabilities of enabled accessibility services. Recorded
    every time an Android web content view first creates a virtual view
    hierarchy, indicating that some accessibility service is running. The number
    of emits of this histogram won't be as useful as the unique user counts. The
    primary purpose of this is to guide optimization by determining what
    capabilities of accessibility services are widespread and which ones are
    relatively rare.
  </summary>
</histogram>

<histogram name="Accessibility.CrosAlwaysShowA11yMenu" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <summary>
    Whether the Chrome OS Accessibility Menu is set to be shown regardless of
    the state of a11y features.(checked once 45 secs after startup).
  </summary>
</histogram>

<histogram name="Accessibility.CrosAutoclick" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>tengs@chromium.org</owner>
  <summary>
    Whether the Chrome OS Autoclick feature is on (checked once 45 secs after
    startup).
  </summary>
</histogram>

<histogram name="Accessibility.CrosAutoclickDelay" units="ms">
  <owner>dmazzoni@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>tengs@chromium.org</owner>
  <summary>
    If the user has enabled Autoclick, this is the delay set by the user for
    autoclicks to occur, in milliseconds.
  </summary>
</histogram>

<histogram name="Accessibility.CrosCaretHighlight" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <summary>
    Whether the Chrome OS caret highlighting is on (checked once 45 secs after
    startup).
  </summary>
</histogram>

<histogram name="Accessibility.CrosChromeVoxNext" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <summary>
    Set when a Chrome OS user has spoken feedback enabled, recorded once each
    time ChromeVox starts up. True if the user has enabled &quot;ChromeVox
    Next&quot;, a new ChromeVox experience that became the default in Chrome 56
    (but can be toggled on or off by the user), false otherwise.
  </summary>
</histogram>

<histogram name="Accessibility.CrosCursorHighlight" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <summary>
    Whether the Chrome OS cursor highlighting is on (checked once 45 secs after
    startup).
  </summary>
</histogram>

<histogram name="Accessibility.CrosDictation" enum="BooleanEnabled">
  <owner>zhelfins@chromium.org</owner>
  <owner>dtseng@chromium.org</owner>
  <summary>
    Whether the ChromeOS dictation feature is enabled (checked once 45 secs
    after startup).
  </summary>
</histogram>

<histogram name="Accessibility.CrosDictation.ToggleDictationMethod"
    enum="CrosDictationToggleDictationMethod">
  <owner>zhelfins@chromium.org</owner>
  <owner>dtseng@chromium.org</owner>
  <summary>Records how users invoke Dictation.</summary>
</histogram>

<histogram name="Accessibility.CrosFocusHighlight" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <summary>
    Whether the Chrome OS focus highlighting is on (checked once 45 secs after
    startup).
  </summary>
</histogram>

<histogram name="Accessibility.CrosHighContrast" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <summary>
    Whether the Chrome OS High Contrast mode feature is on (checked once 45 secs
    after startup).
  </summary>
</histogram>

<histogram name="Accessibility.CrosLargeCursor" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <summary>
    Whether the Chrome OS Large Cursor feature is on (checked once 45 secs after
    startup).
  </summary>
</histogram>

<histogram name="Accessibility.CrosLargeCursorSize" units="dip">
  <owner>yawano@chromium.org</owner>
  <owner>lpalmaro@chromium.org</owner>
  <summary>
    Cursor size of the Chrome OS Large Cursor (checked once 45 secs after
    startup).
  </summary>
</histogram>

<histogram name="Accessibility.CrosScreenMagnifier" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <summary>
    Whether the Chrome OS Screen Magnifier feature is on (checked once 45 secs
    after startup).
  </summary>
</histogram>

<histogram name="Accessibility.CrosSelectToSpeak" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <summary>
    Whether the Chrome OS select-to-speak is on (checked once 45 secs after
    startup).
  </summary>
</histogram>

<histogram name="Accessibility.CrosSelectToSpeak.SpeechPitch"
    enum="CrosSelectToSpeakSpeechPitch">
  <owner>katie@chromium.org</owner>
  <summary>
    The speech pitch setting when Select-to-Speak was activated. It is stored as
    a sparse histogram with values (100 * speech_pitch). For example, a speech
    pitch of 1.0 (default) will be seen as 100.
  </summary>
</histogram>

<histogram name="Accessibility.CrosSelectToSpeak.SpeechRate"
    enum="CrosSelectToSpeakSpeechRate">
  <owner>katie@chromium.org</owner>
  <summary>
    The speech rate setting when Select-to-Speak was activated. It is stored as
    a sparse histogram with values (100 * speech_rate). For example, a speech
    rate of 1.0 (default) will be seen as 100.
  </summary>
</histogram>

<histogram name="Accessibility.CrosSelectToSpeak.StartSpeechMethod"
    enum="CrosSelectToSpeakStartSpeechMethod">
  <owner>katie@chromium.org</owner>
  <summary>
    A user may activate Select-to-Speak by holding down 'search' and clicking or
    dragging a region with the mouse, or by highlighting an area and using
    search + s to read just the highlighted area. Track the methods here.
  </summary>
</histogram>

<histogram name="Accessibility.CrosSelectToSpeak.StateChangeEvent"
    enum="CrosSelectToSpeakStateChangeEvent">
  <owner>katie@chromium.org</owner>
  <summary>
    A user has tapped a button in the tray to change Select-to-Speak's state.
    The tap was interpreted by Select-to-Speak as a request to start selection,
    to cancel speech, or to cancel selection, depending on Select-to-Speak's
    internal state when the tap occured. This tracks when the button was tapped
    and the event that it generated.
  </summary>
</histogram>

<histogram name="Accessibility.CrosSelectToSpeak.WordHighlighting"
    enum="BooleanEnabled">
  <owner>katie@chromium.org</owner>
  <summary>
    Whether Select-to-Speak had per-word highlighting enabled when activated.
  </summary>
</histogram>

<histogram name="Accessibility.CrosSpokenFeedback" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <summary>
    Whether the Chrome OS Spoken Feedback feature is on (checked once 45 secs
    after startup).
  </summary>
</histogram>

<histogram name="Accessibility.CrosStickyKeys" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>tengs@chromium.org</owner>
  <summary>
    Whether the Chrome OS Sticky Keys feature is on (checked once 45 secs after
    startup).
  </summary>
</histogram>

<histogram name="Accessibility.CrosSwitchAccess" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <summary>
    Whether the Chrome OS switch access is on (checked once 45 secs after
    startup).
  </summary>
</histogram>

<histogram name="Accessibility.CrosVirtualKeyboard" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <summary>
    Whether the Chrome OS Virtual Keyboard feature is on (checked once 45 secs
    after startup).
  </summary>
</histogram>

<histogram name="Accessibility.InvertedColors" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <summary>
    Whether Windows system settings show that high-contrast mode is enabled and
    the user has selected a light-on-dark color scheme (checked once 45 secs
    after startup). This causes Chrome to prompt the user with a bubble to
    optionally install a High Contrast extension and theme.
  </summary>
</histogram>

<histogram name="Accessibility.iOS.NewLargerTextCategory" enum="BooleanHit">
  <owner>mrsuyi@chromium.org</owner>
  <summary>
    When a web page reloads or user changes text size category in Settings,
    FontSizeTabHelper gets the category and maps it to a scaling number. This is
    hit if the category is not listed in the map defined in
    /ios/chrome/browser/web/font_size_tab_helper.mm. In that case, we should
    update the code by adding an entry for the new category in that map.
  </summary>
</histogram>

<histogram name="Accessibility.Mac.DifferentiateWithoutColor"
    enum="BooleanEnabled">
  <owner>ellyjones@chromium.org</owner>
  <summary>
    Whether the &quot;differentiate without color&quot; Mac system setting is
    enabled. This is checked once, 45 seconds after startup.
  </summary>
</histogram>

<histogram name="Accessibility.Mac.FullKeyboardAccessEnabled"
    enum="BooleanEnabled">
  <owner>ellyjones@chromium.org</owner>
  <summary>
    Whether the &quot;full keyboard access&quot; Mac system setting is enabled.
    This is checked once, 45 seconds after startup.
  </summary>
</histogram>

<histogram name="Accessibility.Mac.IncreaseContrast" enum="BooleanEnabled">
  <owner>ellyjones@chromium.org</owner>
  <summary>
    Whether the &quot;increase contrast&quot; Mac system setting is enabled.
    This is checked once, 45 seconds after startup.
  </summary>
</histogram>

<histogram name="Accessibility.Mac.ReduceTransparency" enum="BooleanEnabled">
  <owner>ellyjones@chromium.org</owner>
  <summary>
    Whether the &quot;reduce transparency&quot; Mac system setting is enabled.
    This is checked once, 45 seconds after startup.
  </summary>
</histogram>

<histogram name="Accessibility.ManuallyEnabled" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <summary>
    Whether Chrome has enabled accessibility support because the user passed the
    --force-renderer-accessibility flag on the command-line (checked once 45
    secs after startup).
  </summary>
</histogram>

<histogram name="Accessibility.ModeFlag" enum="AccessibilityModeFlagEnum">
  <owner>dmazzoni@chromium.org</owner>
  <owner>aboxhall@chromium.org</owner>
  <summary>
    Whether individual accessibility mode flags are set. Tracked when each mode
    flag is flipped from false to true. These flags are flipped automatically
    when software communicates with Chrome via accessibility APIs. Flags can
    only be flipped off by advanced users or for debugging using
    chrome://accessibility/ - and that isn't tracked in this histogram.
  </summary>
</histogram>

<histogram name="Accessibility.OOBEStartupSoundDelay" units="ms">
  <owner>lpalmaro@chromium.org</owner>
  <owner>alemate@chromium.org</owner>
  <summary>
    Delay between login_prompt_visible and Chrome OS OOBE startup sound
    playback. Depends on sound subsystem initialization time.
  </summary>
</histogram>

<histogram name="Accessibility.State" enum="BooleanEnabled">
  <obsolete>
    Deprecated 12/2016 in Issue 672205 with the addition of
    Accessibility.ModeFlag.
  </obsolete>
  <owner>dmazzoni@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <summary>
    Whether Chrome has enabled accessibility support because it detects
    supported assistive technology running, or due to being manually enabled via
    a command-line flag (checked once 45 secs after startup).
  </summary>
</histogram>

<histogram name="Accessibility.WinAPIs" enum="AccessibilityWinAPIEnum">
  <owner>dmazzoni@chromium.org</owner>
  <owner>nektar@chromium.org</owner>
  <summary>Tracks usage of all public Windows accessibility APIs.</summary>
</histogram>

<histogram name="Accessibility.WinAudioDescription" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <summary>
    Whether Windows system settings show that audio descriptions are enabled
    (checked once 45 secs after startup).
  </summary>
</histogram>

<histogram name="Accessibility.WinJAWS" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <summary>
    Whether the third-party JAWS screen reader is running (checked once 45 secs
    after startup).
  </summary>
</histogram>

<histogram name="Accessibility.WinNVDA" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <summary>
    Whether the third-party NVDA screen reader is running (checked once 45 secs
    after startup).
  </summary>
</histogram>

<histogram name="Accessibility.WinSAToGo" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <summary>
    Whether the third-party System Access To Go screen reader is running
    (checked once 45 secs after startup).
  </summary>
</histogram>

<histogram name="Accessibility.WinScreenReader" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <summary>
    Whether Windows system settings show that a screen reader is running
    (checked once 45 secs after startup). Note that this does not necessarily
    mean that Chrome has detected a supported screen reader and has enabled its
    accessibility mode.
  </summary>
</histogram>

<histogram name="Accessibility.WinStickyKeys" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <summary>
    Whether Windows system settings show that Sticky Keys are enabled.
  </summary>
</histogram>

<histogram name="Accessibility.WinZoomText" enum="BooleanEnabled">
  <owner>dmazzoni@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <summary>
    Whether the third-party ZoomText screen magnifier is running.
  </summary>
</histogram>

<histogram name="ActivityTracker.Collect.AnalyzerCreationError"
    enum="ActivityTrackerAnalyzerCreationError">
  <owner>manzagop@chromium.org</owner>
  <summary>
    The analyzer creation error code. Logged each time analyzer creation fails,
    at most once per processed stability debug file.
  </summary>
</histogram>

<histogram name="ActivityTracker.Collect.InitStatus"
    enum="ActivityTrackerCollectInitStatus">
  <owner>manzagop@chromium.org</owner>
  <summary>
    Status of the initialization to collect stability debug files. Logged once,
    during the initialization of the stability debug file collection.
  </summary>
</histogram>

<histogram name="ActivityTracker.Collect.StabilityFileCount" units="count">
  <owner>manzagop@chromium.org</owner>
  <summary>
    Number of files found during stability file collection. Logged each time the
    stability file collection proceeds (at most once per launch).
  </summary>
</histogram>

<histogram name="ActivityTracker.Collect.Status"
    enum="ActivityTrackerCollectStatus">
  <owner>manzagop@chromium.org</owner>
  <summary>
    Status for the collection of a stability debug file. Logged each time a
    debug file collection attempt is made.
  </summary>
</histogram>

<histogram name="ActivityTracker.Collect.SystemSessionAnalysisStatus"
    enum="ActivityTrackerSystemSessionAnalysisStatus">
  <owner>manzagop@chromium.org</owner>
  <summary>
    Status for the analysis of the system session state. Logged each time a
    debug file is collected.
  </summary>
</histogram>

<histogram name="ActivityTracker.Collect.TotalTime" units="ms">
  <owner>manzagop@chromium.org</owner>
  <summary>
    Time spent collecting stability debug information. Logged each time a
    collection is performed.
  </summary>
</histogram>

<histogram name="ActivityTracker.Collect.UncleanShutdownCount" units="count">
  <obsolete>
    Deprecated 05/2017 in favor of ActivityTracker.Collect.Status.
  </obsolete>
  <owner>manzagop@chromium.org</owner>
  <summary>
    Number of unclean shutdowns, as derived from the stability instrumentation.
    Logged each time stability file collection is performed.
  </summary>
</histogram>

<histogram name="ActivityTracker.Collect.UncleanSystemCount" units="count">
  <obsolete>
    Deprecated 05/2017 in favor of ActivityTracker.Collect.Status.
  </obsolete>
  <owner>manzagop@chromium.org</owner>
  <summary>
    Number of unclean shutdowns that can potentially be attributed to system
    instability. This should be smaller or equal to UncleanShutdownCount. Logged
    each time stability file collection is performed.
  </summary>
</histogram>

<histogram name="ActivityTracker.Collect.WriteDumpStatus"
    enum="ActivityTrackerWriteDumpStatus">
  <owner>manzagop@chromium.org</owner>
  <summary>
    Status of the minidump writing. Logged each time a writing a minidump is
    attempted.
  </summary>
</histogram>

<histogram name="ActivityTracker.CollectCrash.Event"
    enum="ActivityTrackerCollectOnCrashEvent">
  <owner>manzagop@chromium.org</owner>
  <summary>
    Events that occur during crash collection of the debug file. Logged each
    time an event of interest occurs during crash debug file collection.
  </summary>
</histogram>

<histogram name="ActivityTracker.CollectCrash.OpenForDeleteSuccess"
    enum="BooleanSuccess">
  <obsolete>
    Deprecated 05/2017 in favor of ActivityTracker.CollectCrash.Event.
  </obsolete>
  <owner>manzagop@chromium.org</owner>
  <summary>
    Success of the attempt to open the debug file for deletion. Logged each time
    a debug file is opened for deletion during collection from the crash
    handler.
  </summary>
</histogram>

<histogram name="ActivityTracker.CollectCrash.Status"
    enum="ActivityTrackerCollectStatus">
  <owner>manzagop@chromium.org</owner>
  <summary>
    Status for the collection of a stability debug file. Logged each time a
    debug file collection attempt is made from the crash handler.
  </summary>
</histogram>

<histogram name="ActivityTracker.Record.Event"
    enum="ActivityTrackerRecordEvent">
  <owner>manzagop@chromium.org</owner>
  <summary>
    Events pertaining to recording to the debug file. Logged each time an event
    of interest occurs wrt debug file recording.
  </summary>
</histogram>

<histogram name="ActivityTracker.Record.InitStatus"
    enum="ActivityTrackerRecordInitStatus">
  <obsolete>
    Deprecated 05/2017 in favor of ActivityTracker.Record.Event.
  </obsolete>
  <owner>manzagop@chromium.org</owner>
  <summary>
    Status of internal activity tracking initialization. Logged once, during the
    activity tracking initialization.
  </summary>
</histogram>

<histogram name="ActivityTracker.Record.SetupTime" units="ms">
  <owner>manzagop@chromium.org</owner>
  <summary>
    Time spent setting up the stability debugging instrumentation. Logged once,
    during setup of the stability debugging instrumentation.
  </summary>
</histogram>

<histogram name="ActivityTracker.ThreadTrackers.Count" units="count">
  <owner>bcwhite@chromium.org</owner>
  <summary>
    The number of threads being tracked for activities such as waiting for a
    lock/event, a thread to join, or a task to run. Analysis of this data can
    reveal why a thread will not exit. This value is updated every time a new
    thread gets an activity tracked for the first time so will show one count
    for every permanent thread but multiple counts for a thread than exits and
    is replaced.
  </summary>
</histogram>

<histogram name="ActivityTracker.ThreadTrackers.MemLimitTrackerCount"
    units="count">
  <owner>bcwhite@chromium.org</owner>
  <summary>
    The limit on the number of thread trackers that could be allocated from the
    persistent memory segment. Trackers beyond this number were allocated from
    the heap and thus were not available for analysis. This value is updated on
    every &quot;memory full&quot; failure.
  </summary>
</histogram>

<histogram name="Ads.Features.AdResourceIsIsolated" enum="AdIsolatedInfo">
  <owner>csharrison@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    For a given ad request, logs information related to whether it is isolated
    from the top-level context. Logged per ad subresource request.
  </summary>
</histogram>

<histogram name="Ads.Features.ResourceIsSecure" enum="AdSecureInfo">
  <owner>csharrison@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    For a given request, logs information related to whether it is marked as an
    ad, and whether it is secure (e.g. https). Logged per subresource request.
  </summary>
</histogram>

<histogram name="AnchorElementMetrics.Clicked.ContainsImage" enum="Boolean">
  <owner>chelu@chromium.org</owner>
  <summary>
    True if the anchor element contains an image element, false if it is not.
    This histogram is recorded when the anchor element is clicked.
  </summary>
</histogram>

<histogram name="AnchorElementMetrics.Clicked.HrefEngagementScore"
    units="score">
  <obsolete>
    Deprecated 07/2018. Replaced with
    AnchorElementMetrics.Clicked.HrefEngagementScore2.
  </obsolete>
  <owner>chelu@chromium.org</owner>
  <summary>
    The target link (href) engagement score of an anchor element. The score is
    retrived from the site engagement service. Currently all scores reported are
    set to 0. This will soon change. This histogram is recorded when the anchor
    element is clicked.
  </summary>
</histogram>

<histogram name="AnchorElementMetrics.Clicked.HrefEngagementScore2"
    units="score">
  <owner>chelu@chromium.org</owner>
  <summary>
    The site engagement score of the target link (href) of an anchor element.
    The score is retrived from the site engagement service. This histogram is
    recorded when the anchor element is clicked.
  </summary>
</histogram>

<histogram name="AnchorElementMetrics.Clicked.HrefEngagementScorePositive"
    units="score">
  <owner>chelu@chromium.org</owner>
  <summary>
    The site engagement score of the target link (href) of an anchor element.
    The score is retrived from the site engagement service. This histogram is
    recorded when the anchor element is clicked, and the score is larger than 0.
  </summary>
</histogram>

<histogram name="AnchorElementMetrics.Clicked.IsInIFrame" enum="Boolean">
  <owner>chelu@chromium.org</owner>
  <summary>
    True if the anchor element is within an iframe, false if it is not. This
    histogram is recorded when the anchor element is clicked.
  </summary>
</histogram>

<histogram name="AnchorElementMetrics.Clicked.IsSameHost" enum="Boolean">
  <owner>chelu@chromium.org</owner>
  <summary>
    True if the target link of the anchor element has the same host as the root
    document. This histogram is recorded when the anchor element is clicked.
  </summary>
</histogram>

<histogram name="AnchorElementMetrics.Clicked.IsUrlIncrementedByOne"
    enum="Boolean">
  <owner>chelu@chromium.org</owner>
  <summary>
    True if the target URL of the anchor element and the URL of the root
    document only differ by one number, and the number in the target URL equals
    the number in the the URL of the root document plus one.  This histogram is
    recorded when the anchor element is clicked.
  </summary>
</histogram>

<histogram name="AnchorElementMetrics.Clicked.RatioArea" units="%">
  <owner>chelu@chromium.org</owner>
  <summary>
    The ratio times 100 between the clickable region area of an anchor element,
    and the viewport area. This histogram is recorded when the anchor element is
    clicked.
  </summary>
</histogram>

<histogram name="AnchorElementMetrics.Clicked.RatioDistanceCenterToVisibleTop"
    units="%">
  <owner>chelu@chromium.org</owner>
  <summary>
    The ratio times 100 between the distance from the center of the clickable
    region of an anchor element to the top edge of the visible region, and the
    viewport height. This histogram is recorded when the anchor element is
    clicked.
  </summary>
</histogram>

<histogram name="AnchorElementMetrics.Clicked.RatioDistanceRootBottom"
    units="%">
  <owner>chelu@chromium.org</owner>
  <summary>
    The ratio times 100 between the distance from the bottom of the clickable
    region of an anchor element to the bottom edge of the root frame, and the
    viewport height. This histogram is recorded when the anchor element is
    clicked.
  </summary>
</histogram>

<histogram name="AnchorElementMetrics.Clicked.RatioDistanceRootTop" units="%">
  <owner>chelu@chromium.org</owner>
  <summary>
    The ratio times 100 between the distance from the top of the clickable
    region of an anchor element to the top edge of the root frame, and the
    viewport height. This histogram is recorded when the anchor element is
    clicked.
  </summary>
</histogram>

<histogram name="AnchorElementMetrics.Clicked.RatioDistanceTopToVisibleTop"
    units="%">
  <owner>chelu@chromium.org</owner>
  <summary>
    The ratio times 100 between the distance from the top of the clickable
    region of an anchor element to the top edge of the visible region, and the
    viewport height. This histogram is recorded when the anchor element is
    clicked.
  </summary>
</histogram>

<histogram name="AnchorElementMetrics.Clicked.RatioVisibleArea" units="%">
  <owner>chelu@chromium.org</owner>
  <summary>
    The ratio times 100 between the visible clickable region area of an anchor
    element, and the viewport area. This histogram is recorded when the anchor
    element is clicked.
  </summary>
</histogram>

<histogram name="Android.Activity.ChromeTabbedActivity.StopReason"
    enum="AndroidActivityStopReason">
  <owner>dfalcantara@chromium.org</owner>
  <summary>
    What caused ChromeTabbedActivity#onStop() to be called, which indicates that
    Chrome is sent to the background.
  </summary>
</histogram>

<histogram name="Android.Activity.ChromeTabbedActivity.SystemBackAction"
    enum="AndroidActivitySystemBackAction">
  <owner>dfalcantara@chromium.org</owner>
  <summary>
    What happened when the user hit the system back button in
    ChromeTabbedActivity.
  </summary>
</histogram>

<histogram name="Android.ArmFpu" enum="AndroidArmFpu">
  <owner>fdegans@chromium.org</owner>
  <summary>
    Reports the FPU capabilities of the Android ARM device. This is recorded
    once per browser session during startup.
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskCanceled"
    enum="BackgroundTaskId">
  <owner>fgorski@chromium.org</owner>
  <owner>nyquist@chromium.org</owner>
  <summary>Records that a specific background task has been canceled.</summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskLoadedNative"
    enum="BackgroundTaskId">
  <owner>fgorski@chromium.org</owner>
  <owner>nyquist@chromium.org</owner>
  <summary>Records that a specific background task has loaded native.</summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskScheduled.Failure"
    enum="BackgroundTaskId">
  <owner>fgorski@chromium.org</owner>
  <owner>nyquist@chromium.org</owner>
  <summary>
    Records that a specific background task has failed to be scheduled.
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskScheduled.Success"
    enum="BackgroundTaskId">
  <owner>fgorski@chromium.org</owner>
  <owner>nyquist@chromium.org</owner>
  <summary>
    Records that a specific background task has been successfully scheduled.
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskStarted"
    enum="BackgroundTaskId">
  <owner>fgorski@chromium.org</owner>
  <owner>nyquist@chromium.org</owner>
  <summary>Records that a specific background task has been started.</summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskStopped"
    enum="BackgroundTaskId">
  <owner>fgorski@chromium.org</owner>
  <owner>nyquist@chromium.org</owner>
  <summary>
    Records that a specific background task has been stopped by Background Task
    Scheduler before it was able to complete itself.
  </summary>
</histogram>

<histogram name="Android.ChildProcessLauncher.OnServiceConnectedTime"
    units="ms">
  <obsolete>
    Deprecated 08/2017. Made decision in issue 736066 with already acquired
    data. So this is no longer needed.
  </obsolete>
  <owner>boliu@chromium.org</owner>
  <summary>
    Measure time from bindService call to onServiceConnected. This is part of
    launching child services on Android that's under Android's control. Recorded
    in the first onServiceConnected of a connection.
  </summary>
</histogram>

<histogram name="Android.ChildProcessLauncher.OnServiceConnectedTimedOut"
    enum="BooleanTimedOut">
  <obsolete>
    Deprecated 08/2017. Made decision in issue 736066 with already acquired
    data. So this is no longer needed.
  </obsolete>
  <owner>boliu@chromium.org</owner>
  <summary>
    Boolean histogram that records whether bindServiced timed out. Timeout is
    recorded in a delayed task, and success is recorded in onServiceConnected
    callback.
  </summary>
</histogram>

<histogram name="Android.ChromeBrowserProvider.CallerHasPermission"
    enum="ClientAppId">
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Android: Count of requests to Chrome browser which are granted to other apps
    to read/write user's bookmarks and history. Only records cases when the app
    has permission according to Android's permission manager.
  </summary>
</histogram>

<histogram name="Android.ChromeBrowserProvider.SignaturePassed"
    enum="ClientAppId">
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Android: Count of requests to Chrome browser which are granted to other apps
    to read/write user's bookmarks and history. Only records cases where the app
    is a system app or signed by Google.
  </summary>
</histogram>

<histogram name="Android.ChromeHome.DurationOpen" units="ms">
  <owner>mdjones@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>The duration the Chrome Home bottom sheet was open.</summary>
</histogram>

<histogram name="Android.ChromeHome.OpenReason" enum="ChromeHomeOpenReason">
  <owner>mdjones@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>The reason the bottom sheet was opened.</summary>
</histogram>

<histogram name="Android.ChromeHome.OpenSheetVelocity.Fail"
    units="microseconds/dp">
  <obsolete>
    Deprecated 03/2018. Chrome Home is being deprecated.
  </obsolete>
  <owner>mdjones@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records the reciprocal of the velocity of a swipe that did not result in the
    bottom sheet opening. This value is recorded in microseconds per dp traveled
    and is only recorded if the &quot;chrome-home-swipe-logic&quot; experiment
    is set to &quot;velocity&quot;.
  </summary>
</histogram>

<histogram name="Android.ChromeHome.OpenSheetVelocity.Navigation"
    units="microseconds/dp">
  <obsolete>
    Deprecated 03/2018. Chrome Home is being deprecated.
  </obsolete>
  <owner>mdjones@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records the reciprocal of the velocity of a swipe that resulted in the
    bottom sheet opening and the user navigating to a URL or a different sheet
    content. This value is recorded in microseconds per dp traveled.
  </summary>
</histogram>

<histogram name="Android.ChromeHome.OpenSheetVelocity.NoNavigation"
    units="microseconds/dp">
  <obsolete>
    Deprecated 03/2018. Chrome Home is being deprecated.
  </obsolete>
  <owner>mdjones@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records the reciprocal of the velocity of a swipe that resulted in the
    bottom sheet opening but the user taking no action (i.e. the next action is
    the sheet closing). This value is recorded in microseconds per dp traveled.
  </summary>
</histogram>

<histogram name="Android.ChromeHome.OpenSheetVelocity.Success"
    units="microseconds/dp">
  <obsolete>
    Deprecated 03/2018. Chrome Home is being deprecated.
  </obsolete>
  <owner>mdjones@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records the reciprocal velocity of a swipe that resulted in the bottom sheet
    opening. This value is recorded in microseconds per dp traveled and is only
    recorded if the &quot;chrome-home-swipe-logic&quot; experiment is set to
    &quot;velocity&quot;.
  </summary>
</histogram>

<histogram name="Android.ChromeHome.Promo.Result.Menu"
    enum="ChromeHomePromoResult">
  <obsolete>
    Deprecated 01/2018 with the removal of the first version of Chrome Home.
  </obsolete>
  <owner>mdjones@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The result of showing the Chrome Home promo when launched from the overflow
    menu. This action can only be performed if Chrome Home is enabled.
  </summary>
</histogram>

<histogram name="Android.ChromeHome.Promo.Result.NTP"
    enum="ChromeHomePromoResult">
  <obsolete>
    Deprecated 01/2018 with the removal of the first version of Chrome Home.
  </obsolete>
  <owner>mdjones@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The result of showing the Chrome Home promo when launched from the NTP. This
    action can only be performed if Chrome Home is disabled.
  </summary>
</histogram>

<histogram name="Android.ChromeHome.Promo.Result.Startup"
    enum="ChromeHomePromoResult">
  <obsolete>
    Deprecated 01/2018 with the removal of the first version of Chrome Home.
  </obsolete>
  <owner>mdjones@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The result of showing the Chrome Home promo when launched from startup. This
    action can only be performed if Chrome Home is disabled.
  </summary>
</histogram>

<histogram name="Android.ChromeHome.Promo.ShowReason"
    enum="ChromeHomePromoShowReason">
  <obsolete>
    Deprecated 01/2018 with the removal of the first version of Chrome Home.
  </obsolete>
  <owner>mdjones@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>The reason the Chrome Home promo was shown.</summary>
</histogram>

<histogram name="Android.ChromeHome.Survey.DownloadResponseCode"
    enum="SurveyDownloadResponseCodes">
  <obsolete>
    Deprecated 04/2018. Replaced with Android.Survey.DownloadResponseCode.
  </obsolete>
  <owner>danielpark@chromium.org</owner>
  <summary>The response code of the completed survey download request.</summary>
</histogram>

<histogram name="Android.ChromeHome.Survey.InfoBarClosingState"
    enum="InfoBarClosingStates">
  <obsolete>
    Deprecated 04/2018. Replaced with Android.Survey.InfoBarClosingState.
  </obsolete>
  <owner>danielpark@chromium.org</owner>
  <summary>
    If the infobar was visible when it was closed and if it was closed directly
    or not.
  </summary>
</histogram>

<histogram name="Android.ChromeHome.Survey.ShowSurvey" enum="BooleanSuccess">
  <obsolete>
    Deprecated 04/2018. Replaced with Android.Survey.ShowSurvey.
  </obsolete>
  <owner>danielpark@chromium.org</owner>
  <summary>
    Whether or not the survey was successfully shown after its download.
  </summary>
</histogram>

<histogram name="Android.ChromeHome.Survey.SurveyFilteringResults"
    enum="SurveyFilteringResult">
  <obsolete>
    Deprecated 04/2018. Replaced with Android.Survey.SurveyFilteringResults.
  </obsolete>
  <owner>danielpark@chromium.org</owner>
  <summary>
    The result of the survey filtering process. Each enum represents a different
    filter that caught the user. This is recorded on cold starts when we check
    if a user qualifies for a survey.
  </summary>
</histogram>

<histogram name="Android.ChromeHome.TimeBetweenCloseAndNextOpen" units="ms">
  <owner>mdjones@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The time between the last time the Chrome Home bottom sheet was closed and
    the next time it was opened.
  </summary>
</histogram>

<histogram name="Android.ChromeHome.TimeToFirstOpen" units="ms">
  <owner>mdjones@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The time between app creation and the first open of the Chrome Home bottom
    sheet for this run of Chrome.
  </summary>
</histogram>

<histogram name="Android.ChromeHome.UserPreference.Enabled"
    enum="BooleanEnabled">
  <owner>mdjones@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records whether or not the user preference for Chrome Home is set to
    enabled. This is recorded whenever the browser is restarted and the state of
    Chrome Home is first checked. This metric is only recorded if the user's
    preference is set.
  </summary>
</histogram>

<histogram name="Android.CompressedResources.ExtractionBlockingTime" units="ms">
  <owner>estevenson@chromium.org</owner>
  <owner>agrieve@chromium.org</owner>
  <summary>
    The amount of time Chrome spends blocked on resource extraction. Generally,
    extraction is completed in the background but in certain cases a main-thread
    getResources() call may block on resource extraction.
  </summary>
</histogram>

<histogram name="Android.CompressedResources.ExtractionStatus"
    enum="AndroidResourceExtractionStatus">
  <owner>estevenson@chromium.org</owner>
  <owner>agrieve@chromium.org</owner>
  <summary>
    Describes the result of Android resource extraction, and is recorded once
    per browser start as part of deferred startup (not at time of extraction).
  </summary>
</histogram>

<histogram name="Android.CompressedResources.ExtractionTime" units="ms">
  <owner>estevenson@chromium.org</owner>
  <owner>agrieve@chromium.org</owner>
  <summary>
    The amount of time spent on resource extraction, whether or not extraction
    was performed in the background or foreground.
  </summary>
</histogram>

<histogram name="Android.CustomFeedback.Category"
    enum="AndroidFeedbackCategory">
  <owner>jwanda@chromium.org</owner>
  <summary>
    Recorded when the user selects a category button when in the Custom Feedback
    UI.
  </summary>
</histogram>

<histogram name="Android.CustomFeedback.CategoryDetails"
    enum="AndroidFeedbackCategoryDetails">
  <owner>jwanda@chromium.org</owner>
  <summary>
    Recorded when a user selects an option related to their problem within the
    Custom Feedback UI.
  </summary>
</histogram>

<histogram name="Android.DeviceSize.LargestDisplaySize" units="dp">
  <owner>twellington@chromium.org</owner>
  <owner>tedchoc@chromium.org</owner>
  <summary>
    Records the largest display dimension in dp during deferred startup. The
    display size is not affected by Android N multi-window mode. Clamped at
    200dp to 1200dp.
  </summary>
</histogram>

<histogram name="Android.DeviceSize.SmallestDisplaySize" units="dp">
  <owner>twellington@chromium.org</owner>
  <owner>tedchoc@chromium.org</owner>
  <summary>
    Records the smallest display dimension in dp during deferred startup. The
    display size is not affected by Android N multi-window mode. Clamped at 0 to
    1000dp.
  </summary>
</histogram>

<histogram name="Android.Download.InfoBar.CloseButtonClicked"
    enum="DownloadInfoBarState">
  <owner>shaktisahu@chromium.org</owner>
  <summary>
    Records the state of the download infobar when the user taps on the
    infobar's close button.
  </summary>
</histogram>

<histogram name="Android.Download.InfoBar.Shown"
    enum="DownloadInfoBar.ShownState">
  <owner>shaktisahu@chromium.org</owner>
  <summary>
    Records various types of messages representing the state of the downloads as
    they are shown on the download infobar.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.Filter"
    enum="AndroidDownloadFilterType">
  <owner>dfalcantara@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <owner>ianwen@chromium.org</owner>
  <summary>
    Recorded when the user selects a filter from the Chrome download manager
    navigation drawer.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.ForegroundServiceLifecycle"
    enum="DownloadNotificationForegroundLifecycle">
  <owner>jming@chromium.org</owner>
  <owner>xingliu@chromium.org</owner>
  <summary>
    Records instances where the foreground undergoes a lifecycle change (when
    the foreground starts, changes pinned notification, or stops).
  </summary>
</histogram>

<histogram name="Android.DownloadManager.InitialCount">
  <owner>dfalcantara@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <owner>ianwen@chromium.org</owner>
  <summary>
    The number of non-incognito download items displayed when the download UI is
    initialized.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.InitialCount.Viewed">
  <owner>xingliu@chromium.org</owner>
  <summary>
    The number of non-incognito download items displayed that are already viewed
    by the user at any time, recorded when the download UI is initialized.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.Item.OpenFailed"
    enum="AndroidDownloadFilterType">
  <owner>dfalcantara@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <owner>ianwen@chromium.org</owner>
  <summary>Recorded when a download fails to open.</summary>
</histogram>

<histogram name="Android.DownloadManager.Item.OpenSucceeded"
    enum="AndroidDownloadFilterType">
  <owner>dfalcantara@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <owner>ianwen@chromium.org</owner>
  <summary>Recorded when a download is opened.</summary>
</histogram>

<histogram name="Android.DownloadManager.List.View.Action"
    enum="Android.DownloadManager.List.View.Actions">
  <owner>dtrainor@chromium.org</owner>
  <summary>The count of Download Home list entry actions taken.</summary>
</histogram>

<histogram name="Android.DownloadManager.Menu.Action"
    enum="Android.DownloadManager.Menu.Actions">
  <owner>dtrainor@chromium.org</owner>
  <summary>The count of Download Home top level menu actions taken.</summary>
</histogram>

<histogram name="Android.DownloadManager.Menu.Delete.SelectedCount">
  <owner>dtrainor@chromium.org</owner>
  <summary>
    The number of items selected when performing a multi-delete action.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.Menu.Share.SelectedCount">
  <owner>dtrainor@chromium.org</owner>
  <summary>
    The number of items selected when performing a multi-share action.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.NotificationInteraction"
    enum="DownloadNotificationInteractions">
  <owner>jming@chromium.org</owner>
  <owner>xingliu@chromium.org</owner>
  <summary>
    Records instances where a user interacts with a download notification (ie.
    clicks on, pauses, resumes, cancels).
  </summary>
</histogram>

<histogram name="Android.DownloadManager.NotificationLaunch"
    enum="DownloadNotificationLaunchType">
  <owner>jming@chromium.org</owner>
  <owner>xingliu@chromium.org</owner>
  <summary>
    Records instances when a notification is being launched for the first time
    or relaunched due to the need to dissociate the notification from the
    foreground (only on API less than 24).
  </summary>
</histogram>

<histogram name="Android.DownloadManager.NotificationsCount.ForegroundDisabled"
    units="notifications">
  <owner>jming@chromium.org</owner>
  <owner>xingliu@chromium.org</owner>
  <summary>
    Records the number of notifications that are already existing (presumably
    displayed) when a new notification is being launched to help understand the
    frequency of multiple downloads with downloads as a foreground service
    disabled.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.NotificationsCount.ForegroundEnabled"
    units="notifications">
  <owner>jming@chromium.org</owner>
  <owner>xingliu@chromium.org</owner>
  <summary>
    Records the number of notifications that are already existing (presumably
    displayed) when a new notification is being launched to help understand the
    frequency of multiple downloads with downloads as a foreground service
    enabled.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.OpenSource.Audio"
    enum="AndroidDownloadOpenSource">
  <owner>xingliu@chromium.org</owner>
  <summary>Records how users open audio download files on Android.</summary>
</histogram>

<histogram name="Android.DownloadManager.OpenSource.Video"
    enum="AndroidDownloadOpenSource">
  <owner>xingliu@chromium.org</owner>
  <summary>Records how users open video download files on Android.</summary>
</histogram>

<histogram name="Android.DownloadManager.OtherExtensions.InitialCount"
    enum="AndroidDownloadExtensionType">
  <owner>dfalcantara@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The extension type for non-incognito download items that match the
    &quot;other&quot; filter type. Recorded when the download UI is initialized.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.OtherExtensions.OpenFailed"
    enum="AndroidDownloadExtensionType">
  <owner>dfalcantara@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The extension type for downloads that match the &quot;other&quot; filter
    type. Recorded when a download fails to open.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.OtherExtensions.OpenSucceeded"
    enum="AndroidDownloadExtensionType">
  <owner>dfalcantara@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The extension type for downloads that match the &quot;other&quot; filter
    type. Recorded when a download is opened.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.OtherExtensions.Share"
    enum="AndroidDownloadExtensionType">
  <owner>dfalcantara@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The extension type for downloads that match the &quot;other&quot; filter
    type. Recorded when downloads are shared through the download manager.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.ServiceStopped.DownloadForeground"
    enum="DownloadNotificationServiceStopped">
  <owner>jming@chromium.org</owner>
  <owner>xingliu@chromium.org</owner>
  <summary>
        Records instances of DownloadForegroundService stops. The number of
    expected stops (stopped) and unexpected stops (task removed, low memory,
    etc) can be compared to get a sense of how often the service crashes to see
    how it handles restarts. For example, the number of times the service is
    stopped because of low memory can be compared to the number of times the
    service has been destroyed to see how frequently it occurs. Or, the number
    of start sticky's will indicate how often the service is able to restart due
    to an unexpected stop.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.ServiceStopped.DownloadNotification"
    enum="DownloadNotificationServiceStopped">
  <owner>jming@chromium.org</owner>
  <owner>xingliu@chromium.org</owner>
  <summary>
        Records instances of DownloadNotificationService stops. The number of
    expected stops (stopped) and unexpected stops (task removed, low memory,
    etc) can be compared to get a sense of how often the service crashes to see
    how it handles restarts. For example, the number of times the service is
    stopped because of low memory can be compared to the number of times the
    service has been destroyed to see how frequently it occurs. Or, the number
    of start sticky's will indicate how often the service is able to restart due
    to an unexpected stop.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.Share.Count">
  <owner>dfalcantara@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <owner>ianwen@chromium.org</owner>
  <summary>The number of downloads shared at the same time.</summary>
</histogram>

<histogram name="Android.DownloadManager.Share.FileTypes"
    enum="AndroidDownloadFilterType">
  <owner>dfalcantara@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <owner>ianwen@chromium.org</owner>
  <summary>
    Recorded when downloads are shared through the download manager. A recorded
    value of &quot;All&quot; indicates that multiple types of downloads were
    shared.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.ShowStorageInfo" enum="BooleanVisible">
  <owner>shaktisahu@chromium.org</owner>
  <summary>
    Recorded when the user clicks the info button on download home to toggle the
    storage info. The state recorded is after the visibility is toggled.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.SpaceUsed" units="%">
  <owner>dfalcantara@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <owner>ianwen@chromium.org</owner>
  <summary>The percentage of total storage downloads consume.</summary>
</histogram>

<histogram name="Android.DownloadManager.ViewRetentionTime.Audio"
    units="minutes">
  <owner>xingliu@chromium.org</owner>
  <summary>
    The duration between when an audio file is downloaded and when the file is
    opened, only recorded when the user opens the file in download home UI.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.ViewRetentionTime.Video"
    units="minutes">
  <owner>xingliu@chromium.org</owner>
  <summary>
    The duration between when a video file is downloaded and when the file is
    opened, only recorded when the user opens the file in download home UI.
  </summary>
</histogram>

<histogram name="Android.HistoryPage.OpenSelected">
  <owner>twellington@chromium.org</owner>
  <summary>
    The number of selected items the user opened in new tabs from the native
    Android history page.
  </summary>
</histogram>

<histogram name="Android.HistoryPage.RemoveSelected">
  <owner>twellington@chromium.org</owner>
  <summary>
    The number of selected items the user removed from the native Android
    history page.
  </summary>
</histogram>

<histogram name="Android.InstantApps.ApiCallDuration2" units="ms">
  <obsolete>
    Not being recorded as of 2017.
  </obsolete>
  <owner>mariakhomenko@chromium.org</owner>
  <summary>
    Measures the amount of time spent in the getInstantAppIntent() API call.
  </summary>
</histogram>

<histogram name="Android.InstantApps.ApiCallDurationWithApp" units="ms">
  <owner>thildebr@chromium.org</owner>
  <summary>
    Measures the amount of time spent in the getInstantAppIntent() API call when
    the API was able to find an Instant App for the URL. This is recorded for
    external intents coming into Chrome only and measures the delay before we
    dispatch the intent to Instant Apps.
  </summary>
</histogram>

<histogram name="Android.InstantApps.ApiCallDurationWithoutApp" units="ms">
  <owner>thildebr@chromium.org</owner>
  <summary>
    Measures the amount of time spent in the getInstantAppIntent() API call when
    the API was not able to find an Instant App for the URL. This is recorded
    for external intents coming into Chrome that get checked for their Instant
    Apps eligibility, but end up being loaded in Chrome. It's critical to keep
    this latency low for our startup performance.
  </summary>
</histogram>

<histogram name="Android.InstantApps.CallSource" enum="InstantAppsCallSource">
  <owner>thildebr@chromium.org</owner>
  <summary>
    For intents to load a web page in browser from Instant Apps, records where
    the request to load came from.
  </summary>
</histogram>

<histogram name="Android.InstantApps.DirectInstantAppsIntent"
    enum="DirectIntentType">
  <owner>thildebr@chromium.org</owner>
  <summary>
    Records events that occur when a user clicks on an intent:// URL that is
    dispatched to instant apps. The intent:// URLs to the Instant Apps are
    explicitly disabled unless they are launched from Google SERP, but we record
    other attempts as well.
  </summary>
</histogram>

<histogram name="Android.InstantApps.EligiblePageLoaded" enum="Boolean">
  <owner>thildebr@chromium.org</owner>
  <summary>
    Records whether any given successful page load (for http and https schemes
    only) could have been handled by an Instant App.
  </summary>
</histogram>

<histogram name="Android.InstantApps.FallbackDuration" units="ms">
  <owner>thildebr@chromium.org</owner>
  <summary>
    Measures the time from when we first received an eligible intent for Instant
    Apps to the time we processed it in the case where the Instant Apps activity
    had to invoke a fallback intent. This happens only on Android N and older.
  </summary>
</histogram>

<histogram name="Android.InstantApps.HandleIntentDuration" units="ms">
  <owner>thildebr@chromium.org</owner>
  <summary>
    Measures the amount of time spent triaging an incoming event to decide
    whether it needs to be routed to Instant Apps. This is time from
    ChromeLauncherActivity.onCreate() call to the time either startActivity() is
    called or the request proceeds. This is a superset of
    Android.InstantApps.ApiCallDurationWith[out]App.
  </summary>
</histogram>

<histogram name="Android.InstantApps.ShouldShowBanner" enum="InstantAppsBanner">
  <owner>thildebr@chromium.org</owner>
  <summary>
    Logs the reasons the banner is shown or hidden on an instant apps eligible
    pages. Triggered every time asynchronous Instant Apps API indicates the
    currently loaded page is instant apps eligible. Does not include Instant
    Apps eligible pages loaded directly through the omnibox.
  </summary>
</histogram>

<histogram name="Android.Intent.LaunchExternalAppFormSubmitHasUserGesture"
    enum="Boolean" expires_after="M71">
  <owner>tedchoc@chromium.org</owner>
  <owner>thildebr@chromium.org</owner>
  <summary>
    When an external application was launched as a result of a form submit, this
    tracks whether there was a user gesture associated with the submit.
  </summary>
</histogram>

<histogram name="Android.IsLastSharedAppInfoRetrieved"
    enum="BooleanIsLastSharedAppInfoRetrieved">
  <owner>jaekyun@chromium.org</owner>
  <summary>
    Signifies whether the last shared app information is retrieved successfully
    or not. This is logged when configuring the direct sharing menu item.
  </summary>
</histogram>

<histogram name="Android.KernelVersion" enum="AndroidKernelVersion">
  <owner>rsesek@chromium.org</owner>
  <summary>
    Reports the kernel major and minor version from the utsname.release field.
    The low 16 bits of each version are combined into a 32-bit integer. The
    range is from [0x00020006,0x0004000a] to track kernel versions 2.6 through
    4.10.
  </summary>
</histogram>

<histogram
    name="Android.MainActivity.ExplicitMainViewIntentDispatched.OnCreate"
    enum="BooleanDispatched">
  <owner>dskiba@chromium.org</owner>
  <summary>
    Whether VIEW intent sent explicitly to .Main activity was dispatched by
    onCreate().
  </summary>
</histogram>

<histogram
    name="Android.MainActivity.ExplicitMainViewIntentDispatched.OnNewIntent"
    enum="BooleanDispatched">
  <owner>dskiba@chromium.org</owner>
  <summary>
    Whether VIEW intent sent explicitly to .Main activity was dispatched by
    onNewIntent().
  </summary>
</histogram>

<histogram name="Android.MainActivity.UndispatchedExplicitMainViewIntentSource"
    enum="ClientAppId">
  <owner>dskiba@chromium.org</owner>
  <summary>
    Sources (ExternalAppId) of undispatched VIEW intents sent explicitly to
    .Main activity alias.
  </summary>
</histogram>

<histogram name="Android.ManageSpace.ActionTaken"
    enum="AndroidManageSpaceButton">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Recorded when the user presses a button in the 'Manage Space' screen for
    Chrome. Note: the 'Clear App Data' option is likely incorrect, as the result
    of that button disables UMA recording (as we factory reset the app).
  </summary>
</histogram>

<histogram name="Android.MemoryPressureMonitor.GetMyMemoryState.Failed.Time"
    units="microseconds">
  <owner>dskiba@chromium.org</owner>
  <summary>
    The duration of each failed ActivityManager.getMyMemoryState() call made by
    MemoryPressureMonitor.

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

<histogram name="Android.MemoryPressureMonitor.GetMyMemoryState.Succeeded.Time"
    units="microseconds">
  <owner>dskiba@chromium.org</owner>
  <summary>
    The duration of each successful ActivityManager.getMyMemoryState() call made
    by MemoryPressureMonitor.

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

<histogram base="true" name="Android.MemoryPressureNotification"
    enum="Android.MemoryPressureNotification">
  <owner>dskiba@chromium.org</owner>
  <summary>
    Memory pressure notifications sent by Android through ComponentCallbacks2.
    This metric was added 04/2018; for prior data for the browser process see
    MemoryAndroid.NotificationBackground and
    MemoryAndroid.NotificationForeground.
  </summary>
</histogram>

<histogram name="Android.ModerateBindingCount" units="bindings">
  <owner>jaekyun@chromium.org</owner>
  <summary>
    The number of moderate bindings which were kept while Chrome process is in
    the foreground. This is logged right before Chrome process goes into the
    background.
  </summary>
</histogram>

<histogram name="Android.MultiInstanceMigration.FailedToRenameMetadataFile"
    enum="Boolean">
  <owner>twellington@chromium.org</owner>
  <owner>tedchoc@chromium.org</owner>
  <summary>
    Renaming the old tab metadata file failed during multi-instance migration.
    Only true is recorded.
  </summary>
</histogram>

<histogram name="Android.MultiInstanceMigration.NewMetadataFileExists"
    enum="Boolean">
  <owner>twellington@chromium.org</owner>
  <owner>tedchoc@chromium.org</owner>
  <summary>
    The new tab metadata file already existed when multi-instance migration was
    attempted. Only true is recorded.
  </summary>
</histogram>

<histogram name="Android.MultiWindowMode.Active" enum="BooleanEnabled">
  <owner>twellington@chromium.org</owner>
  <owner>tedchoc@chromium.org</owner>
  <summary>
    Records on every metrics upload whether the activity is running in Android N
    multi-window mode or not.
  </summary>
</histogram>

<histogram name="Android.MultiWindowMode.IsTabletScreenWidthBelow600"
    enum="Boolean">
  <owner>twellington@chromium.org</owner>
  <owner>tedchoc@chromium.org</owner>
  <summary>
    Records whether the screen width is below 600dp when the activity is in
    Android N multi-window mode. True if the screen width is less than 600dp and
    false if is greater than or equal to 600dp.
  </summary>
</histogram>

<histogram name="Android.MultiWindowMode.ScreenHeight" units="dp">
  <owner>twellington@chromium.org</owner>
  <owner>tedchoc@chromium.org</owner>
  <summary>
    Records the screen height in dp when the activity is in Android N
    multi-window mode. Clamped at 200dp to 1200dp.
  </summary>
</histogram>

<histogram name="Android.MultiWindowMode.ScreenWidth" units="dp">
  <owner>twellington@chromium.org</owner>
  <owner>tedchoc@chromium.org</owner>
  <summary>
    Records the screen width in dp when the activity is in Android N
    multi-window mode. Clamped at 200dp to 1200dp.
  </summary>
</histogram>

<histogram name="Android.MultiWindowMode.TabletScreenWidth" units="dp">
  <owner>twellington@chromium.org</owner>
  <owner>tedchoc@chromium.org</owner>
  <summary>
    Records the screen width in dp when the activity is in Android N
    multi-window mode and the width is below 600dp.
  </summary>
</histogram>

<histogram name="Android.NativeLibraryPreloader.Result.Browser"
    enum="NativeLibraryPreloaderResult">
  <owner>michaelbai@chromium.org</owner>
  <summary>
    The return value of NativeLibraryPreloader.loadLibrary() in browser process,
    is recorded once per browser process start.
  </summary>
</histogram>

<histogram name="Android.NativeLibraryPreloader.Result.Renderer"
    enum="NativeLibraryPreloaderResult">
  <owner>michaelbai@chromium.org</owner>
  <summary>
    The return value of NativeLibraryPreloader.loadLibrary() in renderer
    process, is recorded once per renderer process start.
  </summary>
</histogram>

<histogram name="Android.NTP.Impression" enum="NTPImpressionType">
  <owner>finkm@chromium.org</owner>
  <summary>
    Counts impressions of the NTP on Android. It also counts potential
    impressions. A potential impression is a place where it would make sense to
    open the NTP instead of the current view. E.g. the no-tab view is counted as
    a potential impression since this view could be replaced with the NTP. For
    better comparison regular impressions are also counted. The no-tab view
    counting happens right after the user closed the last tab and the regular
    impression counting happens at construction time of the NTP (=whenever a new
    tab is opened).
  </summary>
</histogram>

<histogram base="true" name="Android.OfflineItems.StateAtCancel"
    enum="OfflineItemsStateAtCancel">
  <owner>chili@chromium.org</owner>
  <summary>
    State of a download or offline page request at user-initiated cancel.
  </summary>
</histogram>

<histogram name="Android.Omnibox.InvalidMatch" enum="MatchResult">
  <owner>tedchoc@chromium.org</owner>
  <summary>
    Recorded every time AutocompleteController.java interacts with
    autocomplete_controller_android.cc via an index reference to an item.
    Indicates how often the match referenced by Java is different from the match
    referenced by C++ at that position.
  </summary>
</histogram>

<histogram name="Android.OmniboxFocusReason" enum="OmniboxFocusReason">
  <owner>mdjones@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <owner>amaralp@chromium.org</owner>
  <summary>Records how the omnibox was focused.</summary>
</histogram>

<histogram name="Android.PackageStats.CacheSize" units="MB">
  <owner>nyquist@chromium.org</owner>
  <summary>
    Records the size of the user's cache at startup on Android O and above.
  </summary>
</histogram>

<histogram name="Android.PackageStats.CodeSize" units="MB">
  <owner>nyquist@chromium.org</owner>
  <summary>
    At startup, records the space on disk taken by Chrome application including
    APK resources, compiled libraries, and extracted native code. Only recorded
    for Android O and above.
  </summary>
</histogram>

<histogram name="Android.PackageStats.DataSize" units="MB">
  <owner>nyquist@chromium.org</owner>
  <summary>
    Records the size of the user's data directory at startup on Android O and
    above. Does not include cache size.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.BitmapScalerTask" units="ms">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the amount of time the BitmapScaler spent scaling a bitmap.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.CacheHits" units="Hits">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the total number of images served from the high-res cache during
    the lifetime of the dialog.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.DecodeRequests" units="Hits">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the total number of images sent for decoding during the lifetime of
    the dialog.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.DecoderHostFailureOutOfMemory" units="%">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The percentage of out-of-memory decoding failures, per batch of photos
    decoded. Intended to help identify if there are browsers where decoding
    fails 100% of the time.  Be wary at looking at other numbers in the
    histogram, as a value emitted at, say, 50% may represent one failure in a
    two-item decoding or 50 failures in a hundred-item decoding.  These are
    qualitatively different experiences for a user.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.DecoderHostFailureRuntime" units="%">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The percentage of runtime error decoding failures, per batch of photos
    decoded. Intended to help identify if there are browsers where decoding
    fails 100% of the time.  Be wary at looking at other numbers in the
    histogram, as a value emitted at, say, 50% may represent one failure in a
    two-item decoding or 50 failures in a hundred-item decoding.  These are
    qualitatively different experiences for a user.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.DialogAction"
    enum="PhotoPickerDialogAction">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records which action the user takes in the PhotoPickerDialog.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.EnumeratedFiles" units="Files">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the total number of files returned from the enumeration operation.
    Measured once at the end of the enumeration operation.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.EnumeratedRate"
    units="Files per 10th of a second">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the enumeration rate (files per tenths of a second). Measured once
    at the end of the enumeration operation.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.EnumerationTime" units="ms">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the amount of time the BitmapScaler spent enumerating files on
    disk. Measured once at the end of the enumeration operation.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.ExifOrientation" enum="ExifOrientation">
  <owner>finnur@chromium.org</owner>
  <summary>
    Records whether the EXIF orientation directive is present and what it is set
    to. Collected once per decoded image, but only on Android N and above (and
    when no IO error occurs).
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.ImageByteCount" units="KB">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the byte count of a decoded image. Only recorded on successful
    decodes.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.ImageDecodeTime" units="ms">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the amount of time it takes the decoder to decode one image. Only
    recorded on successful decodes.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.RequestProcessTime" units="ms">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the amount of time it takes to process one decode request end to
    end (RPC and actual decoding of the bits by utility process). Recorded
    whether or not the RPC/decode request was successful.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.UpscaleLowResBitmap" units="ms">
  <owner>finnur@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the amount of time it takes to upscale a bitmap from the low-res
    cache. Recorded only when there a cache miss from the high-res bitmap but a
    cache hit from the low-res (placeholder) bitmap.
  </summary>
</histogram>

<histogram name="Android.PrepareMenu.OpenWebApkVisibilityCheck" units="ms">
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <summary>
    Measures the amount of time spent querying for whether a WebAPK is already
    installed.
  </summary>
</histogram>

<histogram name="Android.RecentTabsManager.OtherDevices" units="count">
  <owner>huayinz@chromium.org</owner>
  <summary>
    Records the number of other devices listed in recent tabs page when recent
    tabs page is loaded.
  </summary>
</histogram>

<histogram name="Android.RecentTabsManager.RecentlyClosedTabs" units="count">
  <owner>huayinz@chromium.org</owner>
  <summary>
    Records the number of recently-closed tabs shown in recent tabs page when
    recent tabs page is loaded.
  </summary>
</histogram>

<histogram name="Android.RecentTabsManager.TotalTabs" units="count">
  <owner>huayinz@chromium.org</owner>
  <summary>
    Records the total number of tabs listed in recent tabs page (sum of all tab
    from other devices plus recently-closed tabs) when recent tabs page is
    loaded.
  </summary>
</histogram>

<histogram name="Android.RestoreResult" enum="AndroidRestoreResult">
  <owner>aberent@chromium.org</owner>
  <summary>
    Whether Chrome tried to restore its settings from a previous device or
    installation, and what happened when it did. Only recorded on first run.
  </summary>
</histogram>

<histogram name="Android.SeccompStatus.PhotoPickerSandbox"
    enum="AndroidSeccompSandboxStatus">
  <owner>peter@chromium.org</owner>
  <owner>rsesek@chromium.org</owner>
  <summary>
    Reports the status of the seccomp-bpf sandbox in photo picker decoding
    processes. Anything other than &quot;Sandbox Engaged&quot; indicates the
    sandbox is not turned on. See https://crbug.com/477049.
  </summary>
</histogram>

<histogram name="Android.SeccompStatus.Prctl" enum="AndroidSeccompStatus">
  <owner>rsesek@chromium.org</owner>
  <summary>
    Reports the level of kernel support for the seccomp-bpf sandbox using
    prctl(PR_SET_SECCOMP).
  </summary>
</histogram>

<histogram name="Android.SeccompStatus.RendererSandbox"
    enum="AndroidSeccompSandboxStatus">
  <owner>rsesek@chromium.org</owner>
  <summary>
    Reports the status of the seccomp-bpf sandbox in renderer processes.
    Anything other than &quot;Sandbox Engaged&quot; indicates the sandbox is not
    turned on. See https://crbug.com/477049.
  </summary>
</histogram>

<histogram name="Android.SeccompStatus.Syscall" enum="AndroidSeccompStatus">
  <owner>rsesek@chromium.org</owner>
  <summary>
    Reports the level of kernel support for the seccomp-bpf sandbox using the
    seccomp system call.
  </summary>
</histogram>

<histogram name="Android.SelectFileDialogImgCount" units="images">
  <owner>finnur@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    Records the number of images selected in either the new Photo Picker or the
    standard Android file picker. Note: Only recorded in situations determined
    to warrant the new Photo Picker (not, for example, if mixed content, like
    images and text files, was requested).
  </summary>
</histogram>

<histogram name="Android.SelectFileDialogScope" enum="SelectFileDialogScope">
  <owner>peter@chromium.org</owner>
  <summary>
    Records the scope of accepted content for a select file dialog when shown by
    a Web developer.
  </summary>
</histogram>

<histogram name="Android.StrictMode.CheckGooglePlayServicesTime" units="ms">
  <owner>wnwen@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Measures the amount of time due to a StrictMode violation from checking for
    whether play services is available.
  </summary>
</histogram>

<histogram name="Android.StrictMode.CheckGoogleSignedTime" units="ms">
  <owner>estevenson@chromium.org</owner>
  <owner>wnwen@chromium.org</owner>
  <summary>
    Measures the amount of time due to a StrictMode violation from checking for
    whether a package is Google signed.
  </summary>
</histogram>

<histogram name="Android.StrictMode.DocumentModeSharedPrefs" units="ms">
  <obsolete>
    Deprecated 05/2016 in Issue 582539 with the removal of document mode.
  </obsolete>
  <owner>hartmanng@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Measures the amount of time due to a StrictMode violation from fetching the
    DocumentMode shared preferences file.
  </summary>
</histogram>

<histogram name="Android.StrictMode.DocumentTabStateLoad" units="ms">
  <obsolete>
    Deprecated 05/2016 in Issue 582539 with the removal of document mode.
  </obsolete>
  <owner>wnwen@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Measures the amount of time due to a StrictMode violation from document mode
    loading its prioritized tab's state.
  </summary>
</histogram>

<histogram name="Android.StrictMode.DownloadsDir" units="ms">
  <owner>wnwen@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Measures the amount of time due to a StrictMode violation from fetching and
    possibly creating the downloads directory.
  </summary>
</histogram>

<histogram name="Android.StrictMode.NotificationUIBuildTime" units="ms">
  <owner>wnwen@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Measures the amount of time due to a StrictMode violation from custom
    notification builder through date formatting.
  </summary>
</histogram>

<histogram name="Android.StrictMode.OverrideUrlLoadingTime" units="ms">
  <owner>yfriedman@chromium.org</owner>
  <owner>wnwen@chromium.org</owner>
  <summary>
    Measures the amount of time due to a StrictMode violation from calling out
    to Android activity manager.
  </summary>
</histogram>

<histogram name="Android.StrictMode.SnippetUIBuildTime" units="ms">
  <owner>wnwen@chromium.org</owner>
  <owner>peconn@chromium.org</owner>
  <summary>
    Measures the amount of time due to a StrictMode violation from snippet UI
    through date formatting.
  </summary>
</histogram>

<histogram name="Android.StrictMode.TabPersistentStore" units="ms">
  <owner>wnwen@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Measures time spent during StrictMode-whitelisted code in
    TabPersistentStore.
  </summary>
</histogram>

<histogram name="Android.StrictMode.ThumbnailCacheDir" units="ms">
  <owner>wnwen@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Measures the amount of time due to a StrictMode violation from fetching for
    the thumbnail cache directory.
  </summary>
</histogram>

<histogram name="Android.StrictMode.WebappAuthenticatorMac" units="ms">
  <owner>wnwen@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Measures the amount of time due to a StrictMode violation from looking up a
    webapp's MAC on startup.
  </summary>
</histogram>

<histogram name="Android.StrictMode.WebappDir" units="ms">
  <owner>wnwen@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Measures the amount of time due to a StrictMode violation from fetching for
    creating the webapp directory.
  </summary>
</histogram>

<histogram name="Android.StrictMode.WebappSaveState" units="ms">
  <owner>wnwen@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Measures the amount of time due to a StrictMode violation from reading and
    saving webapp state.
  </summary>
</histogram>

<histogram name="Android.StrictMode.WebappSharedPrefs" units="ms">
  <owner>hartmanng@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Measures the amount of time due to a StrictMode violation from fetching the
    Webapp shared preferences file.
  </summary>
</histogram>

<histogram name="Android.Survey.DownloadResponseCode"
    enum="SurveyDownloadResponseCodes">
  <owner>danielpark@chromium.org</owner>
  <summary>The response code of the completed survey download request.</summary>
</histogram>

<histogram name="Android.Survey.InfoBarClosingState"
    enum="InfoBarClosingStates">
  <owner>danielpark@chromium.org</owner>
  <summary>
    If the infobar was visible when it was closed and if it was closed directly
    or not.
  </summary>
</histogram>

<histogram name="Android.Survey.ShowSurvey" enum="BooleanSuccess">
  <owner>danielpark@chromium.org</owner>
  <summary>
    Whether or not the survey was successfully shown after its download.
  </summary>
</histogram>

<histogram name="Android.Survey.SurveyFilteringResults"
    enum="SurveyFilteringResult">
  <owner>danielpark@chromium.org</owner>
  <summary>
    The result of the survey filtering process. Each enum represents a different
    filter that caught the user. This is recorded on cold starts when we check
    if a user qualifies for a survey.
  </summary>
</histogram>

<histogram name="Android.SysUtilsLowEndMatches" enum="BooleanEqual">
  <owner>ssid@chromium.org</owner>
  <summary>
    Measures whether Chrome low-end detection logic based on RAM size matches
    the Android system utility value for isLowRamDevice(). This is recorded once
    per browser start and may be recorded in the renderer if isLowEndDevice()
    bit is checked.
  </summary>
</histogram>

<histogram name="Android.TabNavigationInterceptResult"
    enum="NavigationInterceptResult">
  <owner>thildebr@chromium.org</owner>
  <summary>
    The distribution of results when running ExternalNavigationHandler, this
    shows how often we send intents to be handled by other applications.
  </summary>
</histogram>

<histogram name="Android.TabPersistentStore.MergeStateMetadataFileSize"
    units="bytes">
  <owner>twellington@chromium.org</owner>
  <summary>
    The number of bytes read for the other tab state's metadata file when
    merging tab states in Android N+.
  </summary>
</histogram>

<histogram name="Android.TabPersistentStore.MergeStateTabCount" units="tabs">
  <owner>twellington@chromium.org</owner>
  <summary>
    The number of normal and incognito tabs merged (for Android N+
    multi-instance). This will be logged for both cold-start and non-cold-start
    merging assuming that the native library is loaded.
  </summary>
</histogram>

<histogram name="Android.TabPersistentStore.MergeStateTimePerTab" units="ms">
  <owner>twellington@chromium.org</owner>
  <summary>
    Measures the amount of time it takes to restore state for each merged tab
    (for Android N+ multi-instance). This will only be logged for non-cold-start
    merging, because restoring merged tabs is not distingushed from restoring
    regular tabs on cold start.
  </summary>
</histogram>

<histogram name="Android.TabPersistentStore.MetadataFileSize">
  <owner>wnwen@chromium.org</owner>
  <owner>dfalcantara@chromium.org</owner>
  <summary>The number of bytes written for the tab metadata file.</summary>
</histogram>

<histogram name="Android.WebView.LoadDataWithBaseUrl.HistoryUrl"
    enum="HistoryUrlType">
  <owner>jamwalla@chromium.org</owner>
  <summary>
    Records whether the historyUrl parameter to loadDataWithBaseUrl is empty/
    null, the same as the baseUrl parameter, or different from baseUrl.
  </summary>
</histogram>

<histogram name="Android.WebView.LoadUrl.DataUriHasOctothorpe" enum="Boolean">
  <owner>smcgruer@chromium.org</owner>
  <summary>
    Records if a data url passed to loadUrl had a '#' character. This is to be
    used in the effort to deprecate the incorrect treatment of '#' characters in
    data URIs; see http://crbug.com/823666#c30.
  </summary>
</histogram>

<histogram name="Android.WebView.Startup.CreationTime.Stage1.FactoryInit"
    units="ms">
  <owner>changwan@chromium.org</owner>
  <summary>
    How long it takes to initialize a WebViewChromiumFactoryProvider. This is
    the first major phase of the WebViewChromium construction.
  </summary>
</histogram>

<histogram name="Android.WebView.Startup.CreationTime.Stage2.ProviderInit.Cold"
    units="ms">
  <owner>changwan@chromium.org</owner>
  <summary>
    How long it takes to initialize a WebViewProvider, the first time that one
    is initialized. WebViewProvider initialization is the second major phase of
    WebViewChromium construction. The first initialization is recorded
    separately because it is usually much slower than subsequent ones.
  </summary>
</histogram>

<histogram name="Android.WebView.Startup.CreationTime.Stage2.ProviderInit.Warm"
    units="ms">
  <owner>changwan@chromium.org</owner>
  <summary>
    How long it takes to initialize a WebViewProvider, the first time that one
    is initialized. WebViewProvider initialization is the second major phase of
    WebViewChromium construction. When it is not the first time, it is faster
    and thus recorded separately.
  </summary>
</histogram>

<histogram name="Android.WebView.TargetSdkVersion" enum="AndroidApiLevel">
  <owner>changwan@chromium.org</owner>
  <summary>
    The version of the target SDK of the app WebView is running in. This is
    recorded at WebView creation.
  </summary>
</histogram>

<histogram name="Android.WebView.VariationsEnableState"
    enum="AndroidWebViewVariationsEnableState" expires_after="M70">
  <owner>paulmiller@chromium.org</owner>
  <owner>changwan@chromium.org</owner>
  <summary>
    Indicates whether variations is enabled. We want to know how enabling
    variations affects metrics, but we can't enable variations as a variations
    study, since variations can't enable/disable itself. Instead, WebView
    hard-codes a random variable for enabling variations, and reports the result
    in this histogram.
  </summary>
</histogram>

<histogram name="AndroidTabCloseUndo.Toast"
    enum="AndroidTabCloseUndoToastEvent">
  <owner>dtrainor@chromium.org</owner>
  <summary>
    When a user closes a tab an undo toast will popup on certain devices giving
    the user the chance to undo closing that tab.  This stat tracks how the user
    interacts with that UI and what actions they take.  A cold start means that
    the undo bar wasn't showing when it was triggered to show again.  A warm
    start means that it was.  Warm starts can happen when the user closes
    multiple tabs close together.  When the undo bar is dismissed, all closes
    that were queued up to be undone are committed.  This can happen either by a
    timeout or by an action by the user to move to another part of the UI.
  </summary>
</histogram>

<histogram name="AnimatedImage.NumOfFramesSkipped" units="count">
  <owner>khushalsagar@chromium.org</owner>
  <summary>
    If the frame rate for the image animation can not be reached, frames in the
    animation are skipped to catch up to the desired frame. This metric tracks
    the number of frames skipped during catch up, and can be used to assess the
    smoothness of these animations. It records the number of frames skipped each
    time the animation is ticked forward to draw the next frame. In the ideal
    case, where the animation can be drawn at the desired rate, 0 frames should
    be skipped. Note that skipping of frames can also be triggered if the
    animation was intentionally paused (on becoming off-screen, or the tab being
    hidden).
  </summary>
</histogram>

<histogram name="AppBanners.BeforeInstallEvent"
    enum="AppBannersBeforeInstallEvent">
  <owner>dominickn@chromium.org</owner>
  <summary>
    App banners promote an application related to the current website, and are
    requested specifically through the current page's HTML.  This stat tracks
    usage of the BeforeInstallPromptEvent, which allows developers to control
    when an app banner appears. The events in this histogram are not mutually
    exclusive - for example, preventDefault() must be called if prompt() is
    called.
  </summary>
</histogram>

<histogram name="AppBanners.DismissEvent" enum="AppBannersDismissEvent">
  <owner>dfalcantara@chromium.org</owner>
  <summary>
    App banners promote an application related to the current website, and are
    requested specifically through the current page's HTML.  This stat tracks
    the different ways that an app banner left the screen, e.g. through an
    automatic dismissal after navigation or an explicit user action.
  </summary>
</histogram>

<histogram name="AppBanners.DisplayEvent" enum="AppBannersDisplayEvent">
  <owner>dfalcantara@chromium.org</owner>
  <summary>
    App banners promote an application related to the current website, and are
    requested specifically through the current page's HTML.  This stat tracks
    when an app banner was requested and how the request was handled, e.g. the
    user blocked its appearance or the banner was ultimately created.
  </summary>
</histogram>

<histogram name="AppBanners.InstallableStatusCode"
    enum="AppBannersInstallableStatusCode">
  <owner>dominickn@chromium.org</owner>
  <summary>
    App banners promote an application related to the current website, and are
    requested specifically through the current page's HTML.  This stat tracks
    the status code logged by the app banner system as it processes a site's
    eligibility for an app banner. Every request for a banner will be logged in
    a bucket of this histogram.
  </summary>
</histogram>

<histogram name="AppBanners.InstallEvent" enum="AppBannersInstallEvent">
  <owner>dfalcantara@chromium.org</owner>
  <summary>
    App banners promote an application related to the current website, and are
    requested specifically through the current page's HTML.  This stat tracks
    when a user triggers an install dialog for the app promoted by the banner,
    as well as whether or not the user ultimately decided to install the app.
  </summary>
</histogram>

<histogram name="AppBanners.MinutesFromFirstVisitToBannerShown" units="minutes">
  <owner>dominickn@chromium.org</owner>
  <summary>
    App banners promote an application related to the current website, and are
    requested specifically through the current page's HTML.  This stat tracks
    the number of minutes between the first recorded visit to an origin and the
    time when the banner is actually shown.
  </summary>
</histogram>

<histogram name="AppBanners.UserResponse" enum="AppBannersUserResponse">
  <owner>dominickn@chromium.org</owner>
  <summary>
    App banners promote an application related to the current website, and are
    requested specifically through the current page's HTML.  This stat
    specifically tracks a user's response to a displayed banner.
  </summary>
</histogram>

<histogram name="appcache.CheckResponseResult"
    enum="AppCacheCheckResponseResult">
  <owner>michaeln@chromium.org</owner>
  <summary>AppCache check response result code.</summary>
</histogram>

<histogram name="appcache.CompletionQueueTime" units="ms">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Time elapsed between a completion task being queued and run.
  </summary>
</histogram>

<histogram name="appcache.CompletionRunTime" units="ms">
  <owner>michaeln@chromium.org</owner>
  <summary>
    The amount of time taken to run a completion task on the IO thread.
  </summary>
</histogram>

<histogram name="appcache.CorruptionDetected">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Tracks the number of times corruption is detected in the sql database.
  </summary>
</histogram>

<histogram name="appcache.InitResult" enum="AppCacheInitResult">
  <owner>michaeln@chromium.org</owner>
  <summary>AppCache initialization result code.</summary>
</histogram>

<histogram name="appcache.JobStartDelay.AppCache" units="ms">
  <owner>michaeln@chromium.org</owner>
  <summary>
    How long URLRequests to be retrieved from the appcache are delayed.
  </summary>
</histogram>

<histogram name="appcache.JobStartDelay.Error" units="ms">
  <owner>michaeln@chromium.org</owner>
  <summary>
    How long URLRequests that result in a synthesized error are delayed.
  </summary>
</histogram>

<histogram name="appcache.JobStartDelay.Network" units="ms">
  <owner>michaeln@chromium.org</owner>
  <summary>
    How long URLRequests to be retrieved over the network are delayed.
  </summary>
</histogram>

<histogram name="appcache.MainPageLoad" enum="BooleanSecure">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Counts the number of appcached page loads for secure vs insecure origins.
  </summary>
</histogram>

<histogram name="appcache.MainResourceResponseRetrieval" enum="BooleanSuccess">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Tracks the success rate of retrieving a main resource from the appcache.
  </summary>
</histogram>

<histogram name="appcache.MissingManifestDetectedAtCallsite"
    enum="AppCacheErrorSite">
  <owner>michaeln@chromium.org</owner>
  <summary>Identifies where a missing manifest was detected occured.</summary>
</histogram>

<histogram name="appcache.MissingManifestEntry" enum="BooleanSuccess">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Logged on each occurrence of there being no record for the manifest file in
    the entries table.
  </summary>
</histogram>

<histogram name="appcache.ReinitAttempt">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Tracks the number of times the appcache reinit process occurs. The boolean
    value indicates whether it was a repeated attempt to reinitialize during a
    browsing session.
  </summary>
</histogram>

<histogram name="appcache.SubResourceResponseRetrieval" enum="BooleanSuccess">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Tracks the success rate of retrieving a sub resource from the appcache.
  </summary>
</histogram>

<histogram name="appcache.TaskQueueTime" units="ms">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Time elapsed between a background task being queued and run.
  </summary>
</histogram>

<histogram name="appcache.TaskRunTime" units="ms">
  <owner>michaeln@chromium.org</owner>
  <summary>The amount of time taken to run a background task.</summary>
</histogram>

<histogram name="appcache.UpdateJobResult" enum="AppCacheUpdateJobResult">
  <owner>michaeln@chromium.org</owner>
  <summary>AppCache update job result code.</summary>
</histogram>

<histogram name="appcache.UpdateProgressAtPointOfFaliure" units="%">
  <owner>michaeln@chromium.org</owner>
  <summary>Percent completion at point of failure of an update job.</summary>
</histogram>

<histogram name="appcache.UpdateWasOffOriginAtPointOfFailure" enum="Boolean">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Whether the resource causing the failure was from a different origin.
  </summary>
</histogram>

<histogram name="appcache.UpdateWasStalledAtPointOfFailure" enum="Boolean">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Whether any progresss had been made in the 5 minutes preceeding failure.
  </summary>
</histogram>

<histogram name="AppleScript.CommandEvent" enum="AppleScriptCommandEvents">
  <owner>spqchan@chromium.org</owner>
  <summary>The number of times an AppleScript event gets called.</summary>
</histogram>

<histogram name="Apps.AppInfoDialog.Launches" enum="AppInfoDialogLaunchOrigin">
  <owner>sashab@chromium.org</owner>
  <summary>
    The number of times the app info dialog is launched. This is gathered each
    time the app info dialog is opened, from each of the places the dialog can
    be opened from.
  </summary>
</histogram>

<histogram name="Apps.AppInfoDialog.OpenedForLocation" enum="AppLocation">
  <owner>sashab@chromium.org</owner>
  <summary>
    The location of the app that the dialog was opened for. This is gathered
    each time the app info dialog is opened.
  </summary>
</histogram>

<histogram name="Apps.AppInfoDialog.OpenedForType" enum="ExtensionType">
  <owner>sashab@chromium.org</owner>
  <summary>
    The type of the app that the dialog was opened for. This is gathered each
    time the app info dialog is opened.
  </summary>
</histogram>

<histogram name="Apps.AppLaunch" enum="AppLaunch">
  <owner>tapted@chromium.org</owner>
  <owner>benwells@chromium.org</owner>
  <summary>
    The number of times v2 packaged apps are launched grouped by
    extension_misc::AppLaunchBuckets. See also Extensions.AppLaunch.
  </summary>
</histogram>

<histogram name="Apps.AppLauncherPromo" enum="AppLauncherPromo">
  <obsolete>
    Deprecated 11/2017 in issue 600915 with the removal of app list on platforms
    other than Chrome OS.
  </obsolete>
  <owner>mad@chromium.org</owner>
  <summary>Interactions with the App Launcher promo dialog.</summary>
</histogram>

<histogram name="Apps.AppListAppLaunched" enum="SuggestedAppListAppLaunched">
  <owner>newcomer@chromium.org</owner>
  <summary>
    The number of apps launched from the launcher. This is logged each time an
    app is launched.
  </summary>
</histogram>

<histogram name="Apps.AppListAppLaunchedFullscreen"
    enum="SuggestedAppListAppLaunched">
  <owner>newcomer@chromium.org</owner>
  <summary>
    The number of apps launched from the fullscreen launcher. This is logged
    each time an app is launched. The bucket denotes whether the app is
    suggested.
  </summary>
</histogram>

<histogram name="Apps.AppListAppMovingType" enum="AppListAppMovingType">
  <owner>weidongg@chromium.org</owner>
  <summary>
    The different ways to move an app in app list's apps grid. Logged when the
    app moving succeeds.
  </summary>
</histogram>

<histogram name="Apps.AppListBadgedAppsCount" units="apps">
  <owner>vadimt@chromium.org</owner>
  <summary>
    Number of apps (including ones in folders) with Chrome badge, across all
    Launcher pages. This is gathered per open-launcher event.
  </summary>
</histogram>

<histogram name="Apps.AppListCreationTime" units="ms">
  <owner>calamity@chromium.org</owner>
  <summary>
    The amount of time it takes to build the app list UI. This is logged each
    time the app list is built from scratch.
  </summary>
</histogram>

<histogram name="Apps.AppListDoodleAction" enum="AppListDoodleAction">
  <obsolete>
    App list doesn't support doodles anymore.
  </obsolete>
  <owner>calamity@chromium.org</owner>
  <summary>
    The number of user interactions with the app list doodle. This is logged
    once per action.
  </summary>
</histogram>

<histogram name="Apps.AppListFolder.ShowHide.AnimationSmoothness" units="%">
  <owner>wutao@chromium.org</owner>
  <summary>
    Relative smoothness of animations of showing and hiding app list folder.
    100% represents ideally smooth 60 frames per second. 50% represents only 30
    frames per second is achieved during the animations. 0% should not happen.
    This metric is recorded exactly once when the user starts the folder
    animation in the launcher.
  </summary>
</histogram>

<histogram name="Apps.AppListFolderOpened" enum="AppListFolderOpened">
  <owner>newcomer@chromium.org</owner>
  <summary>
    The number of times folders are opened in the app list. This is logged when
    the folder is clicked.
  </summary>
</histogram>

<histogram name="Apps.AppListHide.InputLatency" units="ms">
  <owner>wutao@chromium.org</owner>
  <summary>
    Elapsed time from the input event to hide the launcher UI. This is logged
    each time the launcher is dismissed by pressing search key, clicking shelf
    button, or focusing out side of the launcher.
  </summary>
</histogram>

<histogram name="Apps.AppListHowEnabled" enum="AppListEnableSource">
  <obsolete>
    Deprecated 03/2018 with Mash AppList refactoring.
  </obsolete>
  <owner>tapted@chromium.org</owner>
  <summary>
    The trigger that caused the app list to be enabled. Recorded when the user
    first shows the app list. If not shown after one hour, will be recorded
    then. If Chrome was not running at the one-hour mark, will be recorded
    during the next Chrome startup.
  </summary>
</histogram>

<histogram name="Apps.AppListPageOpened" enum="AppListPage">
  <owner>calamity@chromium.org</owner>
  <summary>
    The page that the app list goes to. This is gathered every time the user
    initiates a transition to another page in the launcher.
  </summary>
</histogram>

<histogram name="Apps.AppListPageSwitcherSource"
    enum="AppListPageSwitcherSource">
  <owner>newcomer@chromium.org</owner>
  <summary>
    The source used to switch pages in the app list's app grid. Logged when the
    page switch succeeds.
  </summary>
</histogram>

<histogram name="Apps.AppListPeekingToFullscreen"
    enum="AppListPeekingToFullscreenSource">
  <owner/>
  <summary>
    Replaced with Apps.AppListPeekingToFullscreenSource on 9/2017.
  </summary>
</histogram>

<histogram name="Apps.AppListPeekingToFullscreenSource"
    enum="AppListPeekingToFullscreenSource">
  <owner>newcomer@chromium.org</owner>
  <summary>
    The source which transitions the app list from Peeking to Fullscreen. This
    is logged when the transition method is used.
  </summary>
</histogram>

<histogram name="Apps.AppListPlayStoreQueryState"
    enum="AppListPlayStoreQueryState">
  <owner>hejq@chromium.org</owner>
  <summary>The state of a Play Store app search request.</summary>
</histogram>

<histogram name="Apps.AppListSearchBoxActivated"
    enum="SearchBoxActivationSource">
  <owner>newcomer@chromium.org</owner>
  <summary>
    The number of times the applist searchbox has been activated. This is split
    by keystroke, mouse press, and gesture tap activations. This is gathered
    each time the searchbox goes from inactive to active, not necessarily empty
    to non-empty.
  </summary>
</histogram>

<histogram name="Apps.AppListSearchCommenced" units="searches">
  <owner>tapted@chromium.org</owner>
  <summary>
    The number of searches that are started in the app list. This is gathered
    each time the app list search box transitions from empty to non-empty.
  </summary>
</histogram>

<histogram name="Apps.AppListSearchQueryLength" units="characters">
  <owner>calamity@chromium.org</owner>
  <summary>
    The length of the app list search query when a result is opened. This is
    gathered per click of a search result.
  </summary>
</histogram>

<histogram name="Apps.AppListSearchResultDistanceFromOrigin" units="keystrokes">
  <owner>calamity@chromium.org</owner>
  <summary>
    The minimum number of arrow keys a user would need to press to navigate to
    the opened search result. This is gathered per click of a search result.
  </summary>
</histogram>

<histogram name="Apps.AppListSearchResultOpenDisplayType"
    enum="AppListSearchResultDisplayType">
  <owner>calamity@chromium.org</owner>
  <summary>
    The display type of the app list search result that was opened by the user.
    This is gathered per click of a search result.
  </summary>
</histogram>

<histogram name="Apps.AppListSearchResultOpenedSource"
    enum="ApplistSearchResultOpenedSource">
  <owner>newcomer@chromium.org</owner>
  <summary>The state of the app list when a search result was opened.</summary>
</histogram>

<histogram name="Apps.AppListSearchResultOpenType" enum="AppListSearchResult">
  <owner>tapted@chromium.org</owner>
  <summary>
    The type of app list search result that was opened by the user. This is
    gathered per click of a search result.
  </summary>
</histogram>

<histogram name="Apps.AppListShow.InputLatency" units="ms">
  <owner>wutao@chromium.org</owner>
  <summary>
    Elapsed time from the input event to show the launcher UI. This is logged
    each time the app list is shown by pressing search key, clicking shelf
    button, or swiping from shelf.
  </summary>
</histogram>

<histogram name="Apps.AppListShowSource" enum="AppListShowSource">
  <owner>newcomer@chromium.org</owner>
  <summary>
    The number of times the different sources for showing the app list are used.
    This is logged when the app list is shown.
  </summary>
</histogram>

<histogram name="Apps.AppListStateTransitionSource"
    enum="AppListStateTransitionSource">
  <owner>newcomer@chromium.org</owner>
  <summary>
    The number of transitions from the different AppListStates. This is gathered
    each time the launcher transitions from various states in
    AppListView::SetState (Peeking, Half, Fullscreen All Apps, Fullscreen
    Search, and Closed). Not all state transitions are collected because they
    are not meaningful in measuring user activity. This metric is only recorded
    when the Fullscreen App List feature is enabled.
  </summary>
</histogram>

<histogram name="Apps.AppListTimeToDiscover" units="ms">
  <owner>tapted@chromium.org</owner>
  <summary>
    Time between enabling the app list, and a user explicitly choosing to show
    it. If the app list is not shown after one hour, an entry in the last bucket
    is recorded. If the user installs a second packaged app within one hour, or
    if the app list was not enabled by installing a packaged app from the Web
    Store, no time value is recorded - only Apps.AppListHowEnabled.
  </summary>
</histogram>

<histogram name="Apps.AppListWarmupDuration" units="ms">
  <obsolete>
    Deprecated 07/2016 in Issue 600915 with the removal of the app list on
    Windows.
  </obsolete>
  <owner>tapted@chromium.org</owner>
  <summary>
    The amount of time spent in warmup (in WarmupForProfile call). This will
    tell us how long warmup blocks the UI.
  </summary>
</histogram>

<histogram name="Apps.AppShimErrorVersion">
  <owner>jackhou@chromium.org</owner>
  <summary>
    Counts which major milestone versions of app_mode_loader are sending
    --app-shim-error. --app-shim-error is sent as a command line argument to
    Chrome when app_mode_loader was unable to dyload the Chrome Framework and
    call ChromeAppModeMain. For example, when Chrome updates from 32-bit to
    64-bit, an older shim will find the new framework version but fail to dyload
    it.
  </summary>
</histogram>

<histogram name="Apps.AppsInFolders" units="Apps">
<!-- Name completed by histogram_suffixes
     name="AppListFolderExperiment" -->

  <owner>newcomer@chromium.org</owner>
  <summary>
    The total number of apps in folders ignoring OEM folders. This is logged
    each time the app list is initialized. The
    &quot;FullscreenAppListDisabled&quot; suffix has been deprecated.
  </summary>
</histogram>

<histogram base="true" name="Apps.ContextMenuExecuteCommand"
    enum="ChromeOSUICommands">
<!-- Name completed by histogram_suffixes
     name="ContextMenuFromApp" -->

  <owner>=newcomer@chromium.org</owner>
  <summary>
    The number of times a certain command was executed by a context menu, split
    by whether the context menu came from an app, or another part of the system
    UI.
  </summary>
</histogram>

<histogram base="true" name="Apps.ContextMenuShowSource" enum="MenuSourceType">
<!-- Name completed by histogram_suffixes
     name="AppUIComponent" -->

  <owner>=newcomer@chromium.org</owner>
  <summary>
    The show source (touch, mouse, keyboard, etc) for a context menu. Split by
    the component from which the context menu originated.
  </summary>
</histogram>

<histogram base="true" name="Apps.ContextMenuUserJourneyTime" units="ms">
<!-- Name completed by histogram_suffixes
     name="AppUIComponent" -->

  <owner>=newcomer@chromium.org</owner>
  <summary>
    The user journey time for a ContextMenu, defined as the time between
    launching a context menu and the context menu's close callback being
    activated. Not recorded whenever the context menu is not for an app icon on
    the shelf.
  </summary>
</histogram>

<histogram name="Apps.LockScreen.AppsProfile.Creation.Duration" units="ms">
  <owner>tbarzic@chromium.org</owner>
  <summary>
    The amount of time needed to create a lock screen apps profile. This metric
    is recorded only if the profile creation was successful. The lock screen
    apps profile is created if the user has an app enabled on Chrome OS lock
    screen, and is used as the context in which the app is launched on top of
    the lock screen.
  </summary>
</histogram>

<histogram name="Apps.LockScreen.AppsProfile.Creation.Success"
    units="BooleanSuccess">
  <owner>tbarzic@chromium.org</owner>
  <summary>
    Boolean indicating whether the lock screen apps profile creation succeeded.
    The lock screen apps profile is created if the user has an app enabled on
    Chrome OS lock screen, and is used as the context in which the app is
    launched on top of the lock screen.
  </summary>
</histogram>

<histogram name="Apps.LockScreen.DataItemStorage.ClearTextItemSize"
    units="bytes">
  <owner>tbarzic@chromium.org</owner>
  <summary>
    The size of a data item stored in the lock screen data item storage using
    chrome.lockScreen.data API as sent from the app - the item will be encrypted
    before getting stored in the storage.
  </summary>
</histogram>

<histogram name="Apps.LockScreen.DataItemStorage.EncryptedItemSize"
    units="bytes">
  <owner>tbarzic@chromium.org</owner>
  <summary>
    The size of an encrypted data item stored in the lock screen data item
    storage using chrome.lockScreen.data API.
  </summary>
</histogram>

<histogram base="true"
    name="Apps.LockScreen.DataItemStorage.FailedOperationDuration" units="ms">
  <owner>tbarzic@chromium.org</owner>
  <summary>
    The amount of time it took to complete a lock screen data item storage
    operation. Reported only on the operation failure.
  </summary>
</histogram>

<histogram base="true" name="Apps.LockScreen.DataItemStorage.OperationDuration"
    units="ms">
  <owner>tbarzic@chromium.org</owner>
  <summary>
    The amount of time it took to complete a lock screen data item storage
    operation. Reported only on the operation success.
  </summary>
</histogram>

<histogram base="true" name="Apps.LockScreen.DataItemStorage.OperationResult"
    enum="LockScreenDataItemOperationResult">
  <owner>tbarzic@chromium.org</owner>
  <summary>
    The result of a lock screen data item storage operation returned through
    chrome.lockScreen.data extension API.
  </summary>
</histogram>

<histogram name="Apps.LockScreen.DataItemStorage.RegisteredItemsCount">
  <owner>tbarzic@chromium.org</owner>
  <summary>
    The number of data items saved in the lock screen data item storage per app.
    This is recorded on startup, when the app attempts to use the
    chrome.lockScreen.data API.
  </summary>
</histogram>

<histogram name="Apps.LockScreen.NoteTakingApp.AppStatusOnNoteLaunch"
    enum="LockScreenNoteAppStatusOnLaunch">
  <owner>tbarzic@chromium.org</owner>
  <summary>
    Reported when a user attempts to launch a note taking app on the lock
    screen. It reports the note taking app state in the lock screen apps profile
    at the launch attempt time - for example, whether the app was enabled, or
    whether the app had been terminated and an app reload was attempted.
  </summary>
</histogram>

<histogram base="true" name="Apps.LockScreen.NoteTakingApp.AppWindowLifeTime"
    units="ms">
  <owner>tbarzic@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    The amount of time a lock screen enabled app window spent in a certain state
    during the app window activity. The state to which the histogram refers to
    is defined by the suffix. The metric is logged upon leaving the associated
    state.
  </summary>
</histogram>

<histogram name="Apps.LockScreen.NoteTakingApp.AvailabilityOnScreenLock"
    enum="LockScreenActionAvailability">
  <owner>tbarzic@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    The note taking action availability state on the lock screen, recorded when
    the user session is locked.
  </summary>
</histogram>

<histogram name="Apps.LockScreen.NoteTakingApp.FinalAppSessionState"
    enum="LockScreenAppSessionState">
  <owner>tbarzic@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    The state in which lock screen enabled note taking app was when the note
    taking session ended.
  </summary>
</histogram>

<histogram name="Apps.LockScreen.NoteTakingApp.LaunchDurationAtLaunchCancel"
    units="ms">
  <owner>tbarzic@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    The amount time a lock screen app had been launching when the app launch was
    canceled. Logged if the lock screen app session ends before the lock screen
    app window is shown.
  </summary>
</histogram>

<histogram name="Apps.LockScreen.NoteTakingApp.LaunchRequestOrdinalNumber">
  <owner>tbarzic@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    Ordinal number of a note taking app launch request from a lock screen within
    a lock screen session. If a note taking app is launched n times during a
    single lock screen session, this histogram will be reported with values 1
    through n. The launch counter is reset on screen unlock.
  </summary>
</histogram>

<histogram name="Apps.LockScreen.NoteTakingApp.LaunchRequestReason"
    enum="NewLockScreenNoteRequestType">
  <owner>tbarzic@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    The user action that launched note taking from the lock screen.
  </summary>
</histogram>

<histogram name="Apps.LockScreen.NoteTakingApp.LockScreenAppUnloaded"
    enum="LockScreenAppUnloadStatus">
  <owner>tbarzic@chromium.org</owner>
  <summary>
    Reported when a note taking app is unloaded from the lock screen apps
    profile while lock screen note taking is available. Reports the unload
    reason type, which can be used to deduce whether the app can be reloaded in
    the profile. The app unload event is not reported if the app is unloaded due
    to lock screen note taking becoming unavailble (e.g. when the user unlocks
    the screen).
  </summary>
</histogram>

<histogram name="Apps.LockScreen.NoteTakingApp.LockScreenInstallationDuration"
    units="ms">
  <owner>tbarzic@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    Amount of time needed to install a copy of a lock screen note taking app
    into lock screen apps profile.
  </summary>
</histogram>

<histogram name="Apps.LockScreen.NoteTakingApp.NoteTakingExitReason"
    enum="LockScreenNoteTakingExitReason">
  <owner>tbarzic@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    The reason the note taking on lock screen was ended (and lock screen app
    window was closed).
  </summary>
</histogram>

<histogram name="Apps.LockScreen.NoteTakingApp.ReloadCountOnAppTermination">
  <owner>tbarzic@chromium.org</owner>
  <summary>
    Reported when a note taking app is terminated in the lock screen apps
    profile. It reports the number of times the app was reloaded in the lock
    screen apps profile during the current lock screen session (prior to the
    termination).
  </summary>
</histogram>

<histogram name="Apps.LockScreen.NoteTakingApp.TimeToLoadAppWindowContents"
    units="ms">
  <owner>tbarzic@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    The amount of time needed to load a note taking app window contents on the
    lock screen - i.e. the time passed from the user requesting an app launch to
    the app window contents being loaded.
  </summary>
</histogram>

<histogram name="Apps.LockScreen.NoteTakingApp.TimeToShowWindow" units="ms">
  <owner>tbarzic@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    The amount of time needed to launch a note taking app window from the lock
    screen - i.e. the time passed from the user requesting an app launch to the
    app window appearing on the screen.
  </summary>
</histogram>

<histogram name="Apps.LockScreen.NoteTakingApp.UnlockUIAction"
    enum="LockScreenNoteTakingUnlockUIAction">
  <owner>tbarzic@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    The action the user took on the lock screen UI shown when lock screen app
    window is in background, shown under the lock screen.
  </summary>
</histogram>

<histogram name="Apps.NoteTakingApp.DefaultLaunchResult"
    enum="NoteTakingAppLaunchResult">
  <owner>derat@chromium.org</owner>
  <owner>jdufault@chromium.org</owner>
  <summary>
    The result of attempting to launch a default note-taking app on Chrome OS.
    Only reported if the preferred app was unspecified or failed to launch.
  </summary>
</histogram>

<histogram name="Apps.NoteTakingApp.PreferredLaunchResult"
    enum="NoteTakingAppLaunchResult">
  <owner>derat@chromium.org</owner>
  <owner>jdufault@chromium.org</owner>
  <summary>
    The result of attempting to launch the user-specified preferred note-taking
    app, if any, on Chrome OS.
  </summary>
</histogram>

<histogram name="Apps.NumberOfFolders" units="folder(s)">
  <owner>newcomer@google.com</owner>
  <summary>
    The number of folders that users have in their Launcher. Includes the OEM
    folder. This metric is recorded every time the launcher is shown.
  </summary>
</histogram>

<histogram name="Apps.NumberOfPages" units="page(s)">
  <owner>weidongg@chromium.com</owner>
  <summary>
    The number of pages that users have in the top level apps grid of their
    Launcher. This metric is recorded every time the launcher is shown.
  </summary>
</histogram>

<histogram name="Apps.NumberOfPagesNotFull" units="page(s)">
  <owner>weidongg@chromium.com</owner>
  <summary>
    The number of pages that are not full in the top level apps grid of
    Launcher. This metric is recorded every time the launcher is shown.
  </summary>
</histogram>

<histogram name="Apps.PaginationTransition.AnimationSmoothness" units="%">
  <owner>wutao@chromium.org</owner>
  <summary>
    Relative smoothness of animations of launcher pagination transitions. 100%
    represents ideally smooth 60 frames per second. 50% represents only 30
    frames per second is achieved during the animations. 0% should not happen.
    This metric is recorded exactly once when the user starts the pagination
    transition animation of the launcher.
  </summary>
</histogram>

<histogram name="Apps.StateTransition.AnimationSmoothness" units="%">
  <owner>vadimt@chromium.org</owner>
  <summary>
    Relative smoothness of animations of peeking launcher state transitions.
    100% represents ideally smooth 60 frames per second. 50% represents only 30
    frames per second is achieved during the animations. 0% should not happen.
    This metric is recorded exactly once when the user switches states of the
    launcher.
  </summary>
</histogram>

<histogram name="Apps.Window.Type" enum="AppsWindowType">
  <owner>stevenjb@chromium.org</owner>
  <summary>
    The type of app window opened (through the chrome.app.window API).
  </summary>
</histogram>

<histogram name="Arc.AndroidBootTime" units="ms">
  <owner>elijahtaylor@google.com</owner>
  <owner>shihuis@google.com</owner>
  <summary>The time elapsed for booting up the ARC instance.</summary>
</histogram>

<histogram name="Arc.AppCount">
  <owner>elijahtaylor@google.com</owner>
  <owner>shihuis@google.com</owner>
  <summary>
    The number of ARC apps open at any given time. Collected every 5 minutes.
    This indicates both how many users are engaging with apps and, when they do
    engage, how many apps they are engaging with at a time.
  </summary>
</histogram>

<histogram name="Arc.AppShortcuts.BuildMenuTime" units="ms">
  <owner>warx@chromium.org</owner>
  <summary>
    Record the time to build ARC app shortcut items on menu model. We get the
    needed metadata from Android and decode icons in the utility process. It is
    an asynchronous procedure so we need to know the longest waiting time.
  </summary>
</histogram>

<histogram name="Arc.AppsInstalledAtStartup" units="App Count">
  <owner>elijahtaylor@google.com</owner>
  <owner>shihuis@google.com</owner>
  <summary>
    Total number of ARC apps installed on a device measured at startup. Note:
    This includes launchable apps that are installed by default, such as Play
    Store and Settings, as well as any vendor specific apps.
  </summary>
</histogram>

<histogram name="Arc.boot_progress" units="ms">
  <owner>elijahtaylor@google.com</owner>
  <owner>shihuis@google.com</owner>
  <summary>
    The relative time of a boot progress event since the ARC starts.
  </summary>
</histogram>

<histogram name="Arc.BootContinueCodeInstallationResult"
    enum="ArcBootContinueCodeInstallationResult">
  <owner>elijahtaylor@google.com</owner>
  <owner>xzhou@google.com</owner>
  <summary>Code installation result for ARC boot continue.</summary>
</histogram>

<histogram name="Arc.CodeIntegrityCheckingTotalTime" units="ms">
  <owner>elijahtaylor@google.com</owner>
  <owner>xzhou@google.com</owner>
  <summary>
    Total time needed to check the integrity of host generated code. If
    signature checking fails, it also includes the time to regenerate and sign
    the code.
  </summary>
</histogram>

<histogram name="Arc.CodeRelocationResult" enum="ArcCodeRelocationResult">
  <owner>elijahtaylor@google.com</owner>
  <owner>xzhou@google.com</owner>
  <summary>Host code relocation result.</summary>
</histogram>

<histogram name="Arc.CodeRelocationTime" units="ms">
  <owner>elijahtaylor@google.com</owner>
  <owner>xzhou@google.com</owner>
  <summary>Time needed to relocate boot*.art files.</summary>
</histogram>

<histogram name="Arc.CodeSigningTime" units="ms">
  <owner>elijahtaylor@google.com</owner>
  <owner>xzhou@google.com</owner>
  <summary>Time needed to sign boot*.art files.</summary>
</histogram>

<histogram name="Arc.CodeVerificationResult" enum="ArcCodeVerificationResult">
  <owner>elijahtaylor@google.com</owner>
  <owner>xzhou@google.com</owner>
  <summary>
    Code verification result for host generated code for boot for login screen.
  </summary>
</histogram>

<histogram name="Arc.CodeVerificationTime" units="ms">
  <owner>elijahtaylor@google.com</owner>
  <owner>xzhou@google.com</owner>
  <summary>Time needed to verify host generated code.</summary>
</histogram>

<histogram name="Arc.ComplianceReportSinceUpdateNotificationTime" units="ms">
  <owner>alexchau@google.com</owner>
  <owner>emaxx@google.com</owner>
  <summary>
    Elapsed time from the policy update notification sent to ARC to the
    corresponding successfully obtained compliance report from CloudDPS.
  </summary>
</histogram>

<histogram name="Arc.ContainerLifetimeEvent" enum="ArcContainerLifetimeEvent">
  <owner>elijahtaylor@google.com</owner>
  <owner>yusukes@google.com</owner>
  <summary>
    The number of ARC container lifetime events. One START event and up to one
    non-START event are recorded per ARC session, which ends when the user opts
    out from ARC or signs out.
  </summary>
</histogram>

<histogram name="Arc.ContainerRestartAfterCrashCount">
  <owner>elijahtaylor@google.com</owner>
  <owner>yusukes@google.com</owner>
  <summary>
    The number of times ARC container crashes and automatically restarts in one
    ARC session, which ends when the user opts out from ARC or signs out.
  </summary>
</histogram>

<histogram name="Arc.CumulativeUseTime" units="seconds">
  <owner>elijahtaylor@google.com</owner>
  <owner>shihuis@google.com</owner>
  <summary>
    ARC use time. The use time is incremented in regular intervals while android
    container is active. Reported at most once a day, at which point accumulated
    time is reset (which means that sum of reported times for a OS version would
    give an estimate of ARC usage time per OS version).
  </summary>
</histogram>

<histogram name="Arc.FirstAppLaunchDelay.TimeDelta" units="ms">
  <owner>yusukes@google.com</owner>
  <owner>khmel@google.com</owner>
  <summary>
    How long the user sees the spinning icon waiting for ARC container boot.
    Zero when the container has already been up and running when the user
    launches the ARC app.
  </summary>
</histogram>

<histogram name="Arc.FirstAppLaunchRequest.TimeDelta" units="ms">
  <owner>yusukes@google.com</owner>
  <owner>khmel@google.com</owner>
  <summary>
    Elapsed time from the when UI is shown after login to when the user
    activates first ARC app.
  </summary>
</histogram>

<histogram name="Arc.FirstComplianceReportTime.SinceSignIn" units="ms">
  <owner>alexchau@google.com</owner>
  <owner>emaxx@google.com</owner>
  <summary>
    Elapsed time from the signing in process start to a successfully obtained
    compliance report from CloudDPS.
  </summary>
</histogram>

<histogram name="Arc.FirstComplianceReportTime.SinceStartup" units="ms">
  <owner>alexchau@google.com</owner>
  <owner>emaxx@google.com</owner>
  <summary>
    Elapsed time from ARC startup to a successfully obtained compliance report
    from CloudDPS. This value is not reported during the first startup when
    signing in happens.
  </summary>
</histogram>

<histogram name="Arc.IntentHandlerAction" enum="ArcIntentHandlerAction">
  <obsolete>
    Deprecated April 2018 and replaced by ChromeOS.Apps.IntentPickerAction.
  </obsolete>
  <owner>elijahtaylor@google.com</owner>
  <owner>shihuis@google.com</owner>
  <summary>ARC intent handler action taken by user.</summary>
</histogram>

<histogram name="Arc.IntentHandlerDestinationPlatform"
    enum="ArcIntentHandlerDestinationPlatform">
  <obsolete>
    Deprecated April 2018 and replaced by
    ChromeOS.Apps.IntentPickerDestinationPlatform.
  </obsolete>
  <owner>elijahtaylor@google.com</owner>
  <owner>shihuis@google.com</owner>
  <summary>
    ARC intent handler destination platform. The destination may be specified
    due to the user explicit selection or a previously stored preference.
  </summary>
</histogram>

<histogram name="Arc.LowMemoryKiller.Count">
  <owner>elijahtaylor@google.com</owner>
  <owner>shihuis@google.com</owner>
  <summary>Cumulative count of low memory kills in one user session.</summary>
</histogram>

<histogram name="Arc.LowMemoryKiller.FirstKillLatency" units="ms">
  <owner>cywang@google.com</owner>
  <owner>elijahtaylor@google.com</owner>
  <owner>shihuis@google.com</owner>
  <summary>
    When Chrome OS is in low memory state, TabManager kills some victims to free
    memory. This value is the elapsed time between TabManager receiving the low
    memory notification and the first kill.
  </summary>
</histogram>

<histogram name="Arc.LowMemoryKiller.FreedSize" units="KB">
  <owner>elijahtaylor@google.com</owner>
  <owner>shihuis@google.com</owner>
  <summary>The memory size freed by each low memory kill event.</summary>
</histogram>

<histogram name="Arc.LowMemoryKiller.TimeDelta" units="ms">
  <owner>elijahtaylor@google.com</owner>
  <owner>shihuis@google.com</owner>
  <summary>The elapsed time to last low memory kill event.</summary>
</histogram>

<histogram name="Arc.NativeBridge" enum="ArcNativeBridgeType">
  <owner>elijahtaylor@google.com</owner>
  <owner>levarum@google.com</owner>
  <summary>
    Native bridge used for ARC. Can be unknown and none. This is collected along
    with Arc.State during every metrics recording interval, so it is in every
    record uploaded to the server. This is required because this value is used
    to categorize all other data in the dashboard as collected with specific
    native bridge in use.
  </summary>
</histogram>

<histogram name="Arc.OOMKills.Count" units="kills">
  <owner>elijahtaylor@google.com</owner>
  <owner>shihuis@google.com</owner>
  <summary>Cumulative count of OOM kills in one user session.</summary>
</histogram>

<histogram name="Arc.OOMKills.Score" units="badness score">
  <owner>elijahtaylor@google.com</owner>
  <owner>shihuis@google.com</owner>
  <summary>
    The oom_badness score of a OOM killed process as reported by kernel.
  </summary>
</histogram>

<histogram name="Arc.OOMKills.TimeDelta" units="ms">
  <owner>elijahtaylor@google.com</owner>
  <owner>shihuis@google.com</owner>
  <summary>The elapsed time since last OOM kill event.</summary>
</histogram>

<histogram name="Arc.OptInAction" enum="ArcOptInAction">
  <owner>elijahtaylor@google.com</owner>
  <owner>shihuis@google.com</owner>
  <summary>Arc OptIn action taken by user.</summary>
</histogram>

<histogram name="Arc.OptInCancel" enum="ArcOptInCancel">
  <owner>elijahtaylor@google.com</owner>
  <owner>shihuis@google.com</owner>
  <summary>Arc OptIn cancelation reason.</summary>
</histogram>

<histogram name="Arc.OptInResult" enum="ArcOptInResult">
  <owner>elijahtaylor@google.com</owner>
  <owner>khmel@google.com</owner>
  <summary>Arc OptIn flow result.</summary>
</histogram>

<histogram name="Arc.OptInSilentAuthCode" enum="ArcOptInSilentAuthCode">
  <owner>elijahtaylor@google.com</owner>
  <summary>
    Arc Silent Auth Code status. This status is set during the ARC OptIn flow.
  </summary>
</histogram>

<histogram name="Arc.OptInSilentAuthCode.Reauthorization"
    enum="ArcOptInSilentAuthCode">
  <owner>khmel@google.com</owner>
  <summary>
    Arc Silent Auth Code status. This status is set during the ARC
    reauthorization flow.
  </summary>
</histogram>

<histogram name="Arc.PlayStoreSearch.QueryTime" units="ms">
  <owner>hejq@chromium.org</owner>
  <summary>
    Time between sending an Play Store app discovery request and the storing
    returned results.
  </summary>
</histogram>

<histogram name="Arc.PlayStoreSearch.ReturnedAppsTotal" units="apps">
  <owner>hejq@chromium.org</owner>
  <summary>
    The total number of returned apps of a Play Store app discovery query.
  </summary>
</histogram>

<histogram name="Arc.PlayStoreSearch.ReturnedInstantApps" units="apps">
  <owner>hejq@chromium.org</owner>
  <summary>
    The number of returned instant apps of a Play Store app discovery query.
  </summary>
</histogram>

<histogram name="Arc.PlayStoreSearch.ReturnedUninstalledApps" units="apps">
  <owner>hejq@chromium.org</owner>
  <summary>
    The number of returned uninstalled apps of a Play Store app discovery query.
  </summary>
</histogram>

<histogram name="Arc.PlayStoreShown.TimeDelta" units="ms">
<!-- Name completed by histogram_suffixes name="ArcUserTypes" -->

  <owner>yusukes@google.com</owner>
  <owner>khmel@google.com</owner>
  <summary>
    Elapsed time from the when the user agrees ToS to when the Play Store window
    is shown to the user.
  </summary>
</histogram>

<histogram base="true" name="Arc.Provisioning.Result"
    enum="ArcProvisioningResult">
<!-- Name completed by histogram_suffixes name="ArcUserTypes" -->

  <owner>alexchau@google.com</owner>
  <owner>phweiss@google.com</owner>
  <summary>
    The result (success or the type of failure) of ARC provisioning. The base
    value has been deprecated on 2016-09-15 in favour of per user type values.
  </summary>
</histogram>

<histogram name="Arc.Provisioning.TimeDelta.Failure" units="ms">
<!-- Name completed by histogram_suffixes name="ArcUserTypes" -->

  <owner>alexchau@google.com</owner>
  <owner>phweiss@google.com</owner>
  <summary>
    Elapsed time from the signing in process start to call to onSignInFailed.
  </summary>
</histogram>

<histogram name="Arc.Provisioning.TimeDelta.Success" units="ms">
<!-- Name completed by histogram_suffixes name="ArcUserTypes" -->

  <owner>alexchau@google.com</owner>
  <owner>phweiss@google.com</owner>
  <summary>
    Elapsed time from the signing in process start to successful call to
    onSignInComplete.
  </summary>
</histogram>

<histogram name="Arc.Reauthorization.Result" enum="ArcProvisioningResult">
<!-- Name completed by histogram_suffixes name="ArcUserTypes" -->

  <owner>khmel@google.com</owner>
  <summary>
    The result (success or the type of failure) of ARC reauthorization.
  </summary>
</histogram>

<histogram name="Arc.ShutdownTime" units="ms">
  <owner>elijahtaylor@google.com</owner>
  <summary>
    The time it takes for ARC to shut down. This value is recorded on ARC
    shutdown as the time is takes for the init process to exit after setting
    'sys.powerctl shutdown'. It is reported on the next ARC startup to avoid
    sending data during shutdown.
  </summary>
</histogram>

<histogram name="Arc.State" enum="BooleanEnabled">
  <owner>elijahtaylor@google.com</owner>
  <owner>shihuis@google.com</owner>
  <summary>
    Whether ARC is enabled or not.  Before M56 this was collected only on login
    and when ARC was enabled or disabled.  From M56 forward this is collected
    during every metrics recording interval, so it is in every record uploaded
    to the server.  This is required because this value is used to categorize
    all other data in the dashboard as collected with ARC enabled or not. This
    is true even for users who are running on ecryptfs and skipped Ext4
    migration; even though ARC Apps do not run until migration is complete on N
    or later systems.
  </summary>
</histogram>

<histogram name="Arc.StateByUserType" enum="ArcEnableState">
<!-- Name completed by histogram_suffixes name="ArcUserTypes" -->

  <owner>elijahtaylor@google.com</owner>
  <owner>shihuis@google.com</owner>
  <owner>khmel@google.com</owner>
  <summary>
    Similar to &quot;Arc.State&quot; metric but has separation by user type.
  </summary>
</histogram>

<histogram name="Arc.Supervision.Transition.Result"
    enum="ArcSupervisionTransitionResult" expires_after="M71">
  <owner>phongo@google.com</owner>
  <owner>brunokim@google.com</owner>
  <summary>
    The result (success or the type of failure) of ARC supervision transition
    events.
  </summary>
</histogram>

<histogram name="Arc.UserInteraction" enum="ArcUserInteraction">
  <owner>jhorwich@chromium.org</owner>
  <owner>elijahtaylor@chromium.org</owner>
  <owner>shihuis@google.com</owner>
  <owner>maajid@chromium.org</owner>
  <summary>
    Counts user interactions with ARC by type, such as ARC app launches via the
    shelf or launcher.
  </summary>
</histogram>

<histogram name="ArcAuth.AccountCheckStatus" enum="ArcAuthAccountCheckStatus">
  <owner>elijahtaylor@google.com</owner>
  <summary>The status of account check before GMS Sign-in.</summary>
</histogram>

<histogram name="ArcAuth.AccountCheckTime" units="ms">
  <owner>elijahtaylor@chromium.org</owner>
  <summary>
    Elapsed time waiting for the account status check to be completed. This is
    not recorded in case of account status check failure.
  </summary>
</histogram>

<histogram name="ArcAuth.CheckinAttempts" units="attempts">
  <owner>elijahtaylor@chromium.org</owner>
  <summary>
    Number of attempts done while waiting for the check-in task to be completed.
    0 means that device was already checked-in. This is recorded in case
    check-in task is completed successfully.
  </summary>
</histogram>

<histogram name="ArcAuth.CheckinTime" units="ms">
  <owner>elijahtaylor@chromium.org</owner>
  <summary>
    Elapsed time waiting for the check-in task to be completed. This is recorded
    in case check-in task is completed successfully.
  </summary>
</histogram>

<histogram name="ArcAuth.NetworkWaitTime" units="ms">
  <owner>elijahtaylor@chromium.org</owner>
  <summary>
    Elapsed time waiting for network connection before starting other
    authorization operations.
  </summary>
</histogram>

<histogram name="ArcAuth.SignInTime" units="ms">
  <owner>elijahtaylor@chromium.org</owner>
  <summary>Elapsed time waiting for GMS sign-in to complete.</summary>
</histogram>

<histogram name="ArcRuntime.LowMemoryKiller.FreedSize" units="KB">
  <obsolete>
    Renamed to Arc.LowMemoryKiller.FreedSize on 2016/03/24.
  </obsolete>
  <owner>elijahtaylor@google.com</owner>
  <summary>The memory size freed by each low memory kill event.</summary>
</histogram>

<histogram name="ArcRuntime.LowMemoryKiller.TimeDelta" units="ms">
  <obsolete>
    Renamed to Arc.LowMemoryKiller.TimeDelta on 2016/03/24.
  </obsolete>
  <owner>elijahtaylor@google.com</owner>
  <summary>The elapsed time to last low memory kill event.</summary>
</histogram>

<histogram name="Ash.Accelerators.Deprecated.LockScreen"
    enum="DeprecatedAcceleratorUsage">
  <owner>afakhry@chromium.org</owner>
  <summary>
    The lock screen action has two accelerators:   - Ctrl+Shift+L which is
    deprecated.   - Search+L which is new. This histogram shows the number of
    times each accelerator (deprecated and new) is used.
  </summary>
</histogram>

<histogram name="Ash.Accelerators.Deprecated.NextIME"
    enum="DeprecatedAcceleratorUsage">
  <obsolete>
    Deprecated 01/2017 for Issue 672905.
  </obsolete>
  <owner>afakhry@chromium.org</owner>
  <summary>
    The switch to the next IME action has two accelerators: - Shift+Alt which is
    deprecated.   - Ctrl+Shift+Space which is new. This histogram shows the
    number of times each accelerator (deprecated and new) is used.
  </summary>
</histogram>

<histogram name="Ash.Accelerators.Deprecated.ShowImeMenuBubble"
    enum="DeprecatedAcceleratorUsage">
  <owner>afakhry@chromium.org</owner>
  <summary>
    Showing the IME menu bubble has two accelerators:   - Alt+Shift+K which is
    deprecated.   - Search+Shift+K which is new. This histogram shows the number
    of times each accelerator (deprecated and new) is used.
  </summary>
</histogram>

<histogram name="Ash.Accelerators.Deprecated.ShowTaskManager"
    enum="DeprecatedAcceleratorUsage">
  <owner>afakhry@chromium.org</owner>
  <summary>
    Opening the task manager has two accelerators:   - Shift+Esc which is
    deprecated.   - Search+Esc which is new. This histogram shows the number of
    times each accelerator (deprecated and new) is used.
  </summary>
</histogram>

<histogram name="Ash.Accelerators.Deprecated.ToggleHighContrast"
    enum="DeprecatedAcceleratorUsage">
  <owner>afakhry@chromium.org</owner>
  <summary>
    Toggling the high contrast display mode has two accelerators: -
    Search+Shift+H which is deprecated.   - Ctrl+Search+H which is new. This
    histogram shows the number of times each accelerator (deprecated and new) is
    used.
  </summary>
</histogram>

<histogram name="Ash.ActiveTouchPoints">
  <obsolete>
    Deprecated 02/2017 due to lack of usage.
  </obsolete>
  <owner>kuscher@google.com</owner>
  <owner>rbyers@chromium.org</owner>
  <summary>
    Number of active touch-points when a new touch-point is added.
  </summary>
</histogram>

<histogram name="Ash.ActiveWindowShowTypeOverTime" enum="ActiveWindowShowType">
  <owner>kuscher@google.com</owner>
  <summary>
    The show type of the active window tracked over time by logging on a regular
    basis (30 minutes).
  </summary>
</histogram>

<histogram name="Ash.AppList.TimeBetweenTaskSwitches" units="seconds">
  <obsolete>
    Deprecated 10/2016 for Issue 616581.
  </obsolete>
  <owner>bruthig@chromium.org</owner>
  <owner>tdanderson@chromium.org</owner>
  <summary>
    The amount of time between selecting an item from the Ash app list. Not
    recorded on the first time an item is selected from the app list after
    startup.
  </summary>
</histogram>

<histogram name="Ash.Desktop.TimeBetweenNavigateToTaskSwitches" units="seconds">
  <owner>bruthig@chromium.org</owner>
  <owner>tdanderson@chromium.org</owner>
  <summary>
    The number of seconds between task window activations triggered by users
    clicking or tapping on a window, as recorded by the Desktop_SwitchTask user
    action. Recorded on Chrome OS only. Task switches from other sources are
    ignored and do not affect this metric. In other words, if a user performs
    the following steps (1) click on task window 'A' (2) Alt+Tab to task 'Z'(3)
    click on task window 'B', then this will result in a sample recorded for the
    time delta between activating task window 'A'and 'B'.
  </summary>
</histogram>

<histogram name="Ash.DisplayColorManager.HasColorCorrectionMatrix"
    enum="Boolean">
  <owner>mcasas@chromium.org</owner>
  <owner>dcastagna@chromium.org</owner>
  <summary>
    Whether a display has a &quot;CTM&quot; matrix properties that can be used
    to set a color transform matrix. Recorded every time there is a display
    configuration update.
  </summary>
</histogram>

<histogram name="Ash.DisplayColorManager.IccFileDownloaded"
    enum="BooleanDownloaded">
  <owner>mcasas@chromium.org</owner>
  <owner>dcastagna@chromium.org</owner>
  <summary>
    This boolean keeps track if an ICC file was downloaded correctly (if true)
    or a local file was reused instead.
  </summary>
</histogram>

<histogram name="Ash.DisplayColorManager.IccFileFound" enum="Boolean">
  <obsolete>
    Deprecated 10/2017, replaced by Ash.DisplayColorManager.IccFileDownloaded
  </obsolete>
  <owner>mcasas@chromium.org</owner>
  <owner>dcastagna@chromium.org</owner>
  <summary>
    This boolean keeps track if a request for an ICC for a specific product id
    has been successful or not.
  </summary>
</histogram>

<histogram name="Ash.DisplayColorManager.ValidDisplayColorSpace" enum="Boolean">
  <owner>mcasas@chromium.org</owner>
  <owner>dcastagna@chromium.org</owner>
  <summary>
    This boolean keeps track if a Display update (i.e. when connecting a new
    one) carried valid ColorSpace information.
  </summary>
</histogram>

<histogram name="Ash.DisplayColorManager.ValidProductId" enum="Boolean">
  <owner>mcasas@chromium.org</owner>
  <owner>dcastagna@chromium.org</owner>
  <summary>
    Whether we could parse a valid product id from a display EDID. Recorded
    every time there is a display configuration update.
  </summary>
</histogram>

<histogram name="Ash.Dock.Action" enum="DockedAction">
  <owner>kuscher@google.com</owner>
  <owner>varkha@chromium.org</owner>
  <summary>
    User-initiated action taken that affects docked windows such as docking,
    undocking, minimizing, restoring, closing or just dragging a docked window.
  </summary>
</histogram>

<histogram name="Ash.Dock.ActionSource" enum="DockedActionSource">
  <owner>kuscher@google.com</owner>
  <owner>varkha@chromium.org</owner>
  <summary>
    Source (mouse, touch, keyboard or unknown) of the user-initiated action for
    docked windows.
  </summary>
</histogram>

<histogram name="Ash.Dock.ItemsAll">
  <owner>kuscher@google.com</owner>
  <owner>varkha@chromium.org</owner>
  <summary>
    Number of all docked windows or panels including hidden or minimized.
    Recorded on every user action that interacts with docked windows.
  </summary>
</histogram>

<histogram name="Ash.Dock.ItemsLarge">
  <owner>kuscher@google.com</owner>
  <owner>varkha@chromium.org</owner>
  <summary>
    Number of large (wider than dock maximum width) windows that had to be
    shrunk to get docked among the visible docked windows. Recorded on every
    user action that interacts with docked windows.
  </summary>
</histogram>

<histogram name="Ash.Dock.ItemsPanels">
  <owner>kuscher@google.com</owner>
  <owner>varkha@chromium.org</owner>
  <summary>
    Number of docked visible panels. Recorded on every user action that
    interacts with docked windows.
  </summary>
</histogram>

<histogram name="Ash.Dock.ItemsVisible">
  <owner>kuscher@google.com</owner>
  <owner>varkha@chromium.org</owner>
  <summary>
    Number of visible docked windows or panels. Recorded on every user action
    that interacts with docked windows.
  </summary>
</histogram>

<histogram name="Ash.Dock.TimeBetweenUse" units="seconds">
  <owner>kuscher@google.com</owner>
  <owner>varkha@chromium.org</owner>
  <summary>
    Time elapsed between instances of docking, undocking or any other action
    affecting docked state of a window.
  </summary>
</histogram>

<histogram name="Ash.Dock.Width" units="pixels">
  <owner>kuscher@google.com</owner>
  <owner>varkha@chromium.org</owner>
  <summary>
    Width of the docked area in pixels. Recorded every time it changes after a
    user window resize operation is completed.
  </summary>
</histogram>

<histogram name="Ash.GestureCreated" enum="UIEventType">
  <obsolete>
    Deprecated 08/2014 in Issue 352654, and replaced by Event.GestureCreated.
  </obsolete>
  <owner>kuscher@google.com</owner>
  <owner>rbyers@chromium.org</owner>
  <summary>
    The gesture-events recognized and dispatched by the browser gesture
    recognizer.
  </summary>
</histogram>

<histogram name="Ash.GestureTarget" enum="AshGestureActionType">
  <owner>kuscher@google.com</owner>
  <owner>rbyers@chromium.org</owner>
  <summary>
    The gesture-events recognized and dispatched for UI components owned by Ash.
    For browser gestures, see Event.Touch.GestureType.
  </summary>
</histogram>

<histogram name="Ash.ImmersiveFullscreen.WindowType" enum="WindowType">
  <owner>kuscher@google.com</owner>
  <summary>
    The type of the window which is put into immersive fullscreen. Immersive
    fullscreen is entered via the F4 key.
  </summary>
</histogram>

<histogram name="Ash.Login.Lock.AuthMethod.Switched"
    enum="AuthMethodSwitchType">
  <owner>xiaoyinh@google.com</owner>
  <summary>
    The count of auth method switching actions in ChromeOS lock screen.
  </summary>
</histogram>

<histogram name="Ash.Login.Lock.AuthMethod.Used.ClamShellMode"
    enum="AuthMethod">
  <owner>xiaoyinh@google.com</owner>
  <summary>
    The usage of different auth methods (PIN / Password / Smartlock) in ChromeOS
    lock screen clamshell mode.
  </summary>
</histogram>

<histogram name="Ash.Login.Lock.AuthMethod.Used.TabletMode" enum="AuthMethod">
  <owner>xiaoyinh@google.com</owner>
  <summary>
    The usage of different auth methods (PIN / Password / Smartlock) in ChromeOS
    lock screen tablet mode.
  </summary>
</histogram>

<histogram name="Ash.Login.Lock.NumPasswordAttempts.UntilFailure" units="count">
  <owner>xiaoyinh@google.com</owner>
  <summary>
    The number of incorrect password entered in ChromeOS lock screen until the
    user gives up (switch pods or user sign out the current session or shutdown
    the device).
  </summary>
</histogram>

<histogram name="Ash.Login.Lock.NumPasswordAttempts.UntilSuccess" units="count">
  <owner>xiaoyinh@google.com</owner>
  <summary>
    The number of incorrect password entered in ChromeOS lock screen until a
    successful attempt.
  </summary>
</histogram>

<histogram name="Ash.Login.Lock.UserClicks" enum="LockScreenUserClickTarget">
  <owner>xiaoyinh@google.com</owner>
  <summary>
    The numbers of times that users click on the shelf buttons, trays and lock
    screen note on the ChromeOS lock screen.
  </summary>
</histogram>

<histogram name="Ash.Login.Login.UserClicks" enum="LoginScreenUserClickTarget">
  <owner>agawronska@google.com</owner>
  <summary>
    The numbers of times that users click on the shelf buttons and trays on the
    ChromeOS login screen.
  </summary>
</histogram>

<histogram name="Ash.NightLight.DisplayCrtcCtmSupport"
    enum="AshNightLightDisplayCrtcCtmSupportType">
  <owner>afakhry@chromium.org</owner>
  <summary>
    The type of CRTC color transorm matrix support for the currently connected
    displays. Emitted when cursor compositing status is refreshed, but only when
    Night Light is on. The cursor compositing status is refreshed whenever there
    is a change in Night Light status or color temperature.
  </summary>
</histogram>

<histogram name="Ash.NightLight.ScheduleType" enum="AshNightLightScheduleType">
  <owner>afakhry@chromium.org</owner>
  <summary>
    The selected Night Light schedule type. Emitted when the user changes the
    Night Light schedule type from the Display System Settings.
  </summary>
</histogram>

<histogram name="Ash.NightLight.Temperature"
    enum="AshNightLightTemperatureRanges">
  <owner>afakhry@chromium.org</owner>
  <summary>
    The ranges in which the selected values of the Night Light color temperature
    reside. Emitted when the user drags the Night Light color temperature slider
    to change its value from the Display System Settings.
  </summary>
</histogram>

<histogram name="Ash.NumberOfVisibleWindowsInPrimaryDisplay" units="Windows">
  <owner>tdanderson@google.com</owner>
  <owner>bruthig@google.com</owner>
  <summary>
    An upper bound on the number of windows visible to the user on the primary
    display. Determined by processing the windows in increasing z-order and
    counting all non-minimized windows until a maximized or fullscreen window is
    processed. This metric is logged periodically every 30 minutes.
  </summary>
</histogram>

<histogram name="Ash.PersistentWindow.NumOfWindowsRestored">
  <owner>warx@chromium.org</owner>
  <summary>
    The number of windows restored in multi-display scenario, such as due to
    disconnecting and reconnecting display, enabling and disabling mirror mode,
    entering and leaving dock mode. Zero is not recorded.
  </summary>
</histogram>

<histogram name="Ash.PowerButtonScreenshot.DelayBetweenAccelKeyPressed"
    units="ms">
  <owner>warx@chromium.org</owner>
  <summary>
    Record the delay when power button and volume down key are both pressed,
    which indicates user might want to use accelerator to take screenshot. This
    will help us determine the best chord delay among metrics.
  </summary>
</histogram>

<histogram name="Ash.ProcessCreationToFirstPresent" units="ms">
  <owner>sky@chromium.org</owner>
  <summary>
    The delta between when chrome main starts to when the Chrome OS system UI
    (ash) is visible to the user (specifically the first time pixels are lit up
    on the primary display showing the Chrome OS system UI).
  </summary>
</histogram>

<histogram name="Ash.Rotation.AnimationSmoothness" units="%">
  <owner>wutao@chromium.org</owner>
  <summary>
    Relative smoothness of animations when rotating screen. 100% represents
    ideally smooth 60 frames per second. 50% represents only 30 frames per
    second is achieved during the animations. 0% should not happen. This metric
    is recorded exactly once when the user rotates the screen.
  </summary>
</histogram>

<histogram name="Ash.Shelf.Menu.NumItemsEnabledUponSelection" units="Count">
  <owner>bruthig@google.com</owner>
  <owner>tdanderson@google.com</owner>
  <summary>
    Tracks the number of menu items that are enabled in a shelf item's secondary
    menu. This metric is only recorded when a menu item is selected.
  </summary>
</histogram>

<histogram name="Ash.Shelf.Menu.SelectedMenuItemIndex" units="Index">
  <owner>bruthig@google.com</owner>
  <owner>tdanderson@google.com</owner>
  <summary>
    Tracks the index of the selected menu item in a shelf item's secondary menu.
    This metric is only recorded when a menu item is selected.
  </summary>
</histogram>

<histogram name="Ash.Shelf.NumberOfItems" units="Icons">
  <owner>bruthig@google.com</owner>
  <owner>tdanderson@google.com</owner>
  <summary>
    The number of icons in the shelf, not including the App Launcher icon. This
    metric is recorded every 30 minutes.
  </summary>
</histogram>

<histogram name="Ash.Shelf.NumberOfPinnedItems" units="Icons">
  <owner>bruthig@google.com</owner>
  <owner>tdanderson@google.com</owner>
  <summary>
    The number of pinned icons in the shelf, not including the App Launcher
    icon. This metric is recorded every 30 minutes.
  </summary>
</histogram>

<histogram name="Ash.Shelf.NumberOfUnpinnedItems" units="Icons">
  <owner>bruthig@google.com</owner>
  <owner>tdanderson@google.com</owner>
  <summary>
    The number of unpinned icons in the shelf. This metric is recorded every 30
    minutes.
  </summary>
</histogram>

<histogram name="Ash.Shelf.Palette.Assistant.CircledPercentage" units="%">
  <owner>kaznacheev@chromium.org</owner>
  <summary>
    The percentage of the screen area circled by the Assistant pen. Recorded
    when the &quot;closed shape&quot; gesture is recognized.
  </summary>
</histogram>

<histogram name="Ash.Shelf.Palette.Assistant.GestureDuration" units="ms">
  <owner>kaznacheev@chromium.org</owner>
  <summary>
    The duration of an Assistant pen gesture. Recorded at the end of every
    gesture.
  </summary>
</histogram>

<histogram name="Ash.Shelf.Palette.Assistant.GestureInterval" units="ms">
  <owner>kaznacheev@chromium.org</owner>
  <summary>
    The interval between subsequent Assistant pen gestures within a session.
    Session is defined as the period while the Assistant tool is enabled.
    Recorded at the end of each gesture except for the first one in the session.
    The interval is computed excluding the gesture duration.
  </summary>
</histogram>

<histogram name="Ash.Shelf.Palette.Assistant.GesturesPerSession">
  <owner>kaznacheev@chromium.org</owner>
  <summary>
    The number of Assistant pen gestures per session. Session is defined as the
    period while the Assistant tool is enabled. Recorded at the end of the
    session.
  </summary>
</histogram>

<histogram name="Ash.Shelf.Palette.Assistant.GesturesPerSession.Recognized">
  <owner>kaznacheev@chromium.org</owner>
  <summary>
    The number of recognized Assistant pen gestures per session. Session is
    defined as the period while the Assistant tool is enabled. Recorded at the
    end of the session.
  </summary>
</histogram>

<histogram name="Ash.Shelf.Palette.Assistant.GestureType"
    enum="AssistantGestureType">
  <owner>kaznacheev@chromium.org</owner>
  <summary>
    The type of the Assistant pen gesture. Recorded at the end of each gesture.
  </summary>
</histogram>

<histogram name="Ash.Shelf.Palette.Assistant.HighlighterLength" units="dp">
  <owner>kaznacheev@chromium.org</owner>
  <summary>
    The length of a recognized &quot;horizontal stroke&quot; Assistant pen
    gesture. Recorded at the and of the gesture.
  </summary>
</histogram>

<histogram name="Ash.Shelf.Palette.InAssistantMode" units="ms">
  <owner>kaznacheev@chromium.org</owner>
  <summary>
    The amount of time spent in Palette Assistant mode. Recorded when the
    Assistant mode is exited.
  </summary>
</histogram>

<histogram name="Ash.Shelf.Palette.InLaserPointerMode" units="ms">
  <owner>xiaoyinh@chromium.org</owner>
  <summary>
    The amount of time spend in Palette Laser pointer mode. Recorded when the
    Laser pointer mode is exited.
  </summary>
</histogram>

<histogram name="Ash.Shelf.Palette.InMagnifyMode" units="ms">
  <owner>xiaoyinh@chromium.org</owner>
  <summary>
    The amount of time spend in Palette Magnify mode. Recorded when the Magnify
    mode is exited.
  </summary>
</histogram>

<histogram name="Ash.Shelf.Palette.ModeCancellation"
    enum="PaletteModeCancelType">
  <owner>xiaoyinh@chromium.org</owner>
  <summary>
    Tracks the number of times a palette mode is explicitly cancelled or
    switched out of.
  </summary>
</histogram>

<histogram name="Ash.Shelf.Palette.Usage" enum="PaletteTrayOptions">
  <owner>xiaoyinh@chromium.org</owner>
  <summary>
    Recorded every time that the palette option has been selected from the
    palette that has been opened manually (not via a stylus eject event).
  </summary>
</histogram>

<histogram name="Ash.Shelf.Palette.Usage.AutoOpened" enum="PaletteTrayOptions">
  <owner>xiaoyinh@chromium.org</owner>
  <summary>
    Recorded every time that the palette option has been selected from the
    palette that has been opened automatically (by a stylus eject event).
  </summary>
</histogram>

<histogram name="Ash.Shelf.Palette.Usage.Shortcut" enum="PaletteTrayOptions">
  <owner>kaznacheev@chromium.org</owner>
  <summary>
    Recorded every time that the palette option has been selected by means other
    that the palette menu (e.g. stylus barrel button or a keyboard accelerator).
  </summary>
</histogram>

<histogram name="Ash.Shelf.TimeBetweenNavigateToTaskSwitches" units="seconds">
  <owner>bruthig@google.com</owner>
  <owner>tdanderson@google.com</owner>
  <summary>
    The number of seconds between contiguous task switch user actions triggered
    by the Shelf buttons where the user activates a different user-predictable
    task. Task switches from other sources are ignored and do not affect this
    metric. In other words, if a user performs the following steps (1) launch
    task 'A' from the Shelf (2) Alt+Tab to task 'Z' (3) launch task 'B' from the
    Shelf, then this will result in a sample recorded for the time delta between
    launching tasks 'A' and 'B'.
  </summary>
</histogram>

<histogram name="Ash.Shelf.TimeBetweenWindowMinimizedAndActivatedActions"
    units="ms">
  <owner>bruthig@google.com</owner>
  <owner>tdanderson@google.com</owner>
  <summary>
    Tracks the amount of time between a window being minimized by the shelf and
    subsequently activated. In other words this metric is only recorded if a
    shelf button pressed action causes a window to be minimized and the very
    next shelf button pressed action causes the same window to be activated.
  </summary>
</histogram>

<histogram name="Ash.ShelfAlignmentOverTime" enum="ShelfAlignmentValue">
  <owner>kuscher@google.com</owner>
  <summary>
    The current state of the shelf (alignment) tracked over time by logging on a
    regular basis (30 minutes), this is used instead of log in or shelf usage to
    track users that do not lock/unlock or log in frequently and use a small
    number of browser instances or otherwise infrequently interact with the
    shelf launcher.
  </summary>
</histogram>

<histogram name="Ash.ShelfAlignmentUsage" enum="ShelfAlignmentValue">
  <owner>kuscher@google.com</owner>
  <summary>
    The current state of the shelf (alignment) when the shelf launcher is used
    to launch an app/window/etc, this is used instead of log in to give data on
    users that do not lock/unlock or log in frequently.
  </summary>
</histogram>

<histogram name="Ash.SplitView.TimeInSplitView" units="ms">
  <owner>xdai@chromium.org</owner>
  <summary>
    The amount of time that the user spent in split view mode. The time is
    measured from the moment a window is snapped to one side of the screen to
    when split view mode is ended.
  </summary>
</histogram>

<histogram name="Ash.StationaryTouchDuration" units="seconds">
  <obsolete>
    Deprecated 02/2017 due to lack of usage.
  </obsolete>
  <owner>kuscher@google.com</owner>
  <owner>rbyers@chromium.org</owner>
  <summary>The duration of mostly stationary long-duration touches.</summary>
</histogram>

<histogram name="Ash.SystemMenu.DefaultView.VisibleRows"
    enum="SystemMenuDefaultViewRows">
  <owner>bruthig@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    The visible rows displayed in the system menu's default view. Recorded each
    time the menu is opened.
  </summary>
</histogram>

<histogram name="Ash.SystemMenu.PercentageOfWorkAreaHeightCoveredByMenu"
    units="%">
  <owner>tdanderson@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    The height of the system menu divided by the height of the Ash desktop work
    area; a value over 100% indicates that a portion of the system menu is not
    visible to the user. Recorded each time the menu is opened.
  </summary>
</histogram>

<histogram name="Ash.SystemMenu.Rows" units="rows">
  <owner>tdanderson@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    The number of user-visible rows in the system menu's default view. Recorded
    each time the menu is opened.
  </summary>
</histogram>

<histogram name="Ash.Tab.TimeBetweenSwitchToExistingTabUserActions"
    units="seconds">
  <obsolete>
    Deprecated 10/2016 for Issue 616581.
  </obsolete>
  <owner>bruthig@chromium.org</owner>
  <owner>tdanderson@chromium.org</owner>
  <summary>
    The number of seconds between tab switches triggered by a user gesture (e.g.
    Ctrl+T, Ctrl+1, tapping or clicking the tab strip, etc).
  </summary>
</histogram>

<histogram name="Ash.TimeBetweenTaskSwitches" units="seconds">
  <owner>bruthig@google.com</owner>
  <owner>tdanderson@google.com</owner>
  <summary>
    The number of seconds between contiguous task switch user actions triggered
    by any of the other task switch actions that are tracked. (e.g.,
    Ash.Shelf.TimeBetweenNavigateToTaskSwitches,
    Ash.Tab.TimeBetweenSwitchToExistingTabUserActions,
    Ash.WindowCycleController.TimeBetweenTaskSwitches,
    Ash.AppList.TimeBetweenTaskSwitches,
    Ash.WindowSelector.TimeBetweenActiveWindowChanges, etc). Note the
    Ash.AppList.TimeBetweenTaskSwitches and
    Ash.Tab.TimeBetweenSwitchToExistingTabUserActions histograms were deprecated
    and removed in 10/2016.
  </summary>
</histogram>

<histogram name="Ash.TouchDuration" units="ms">
  <obsolete>
    Deprecated 12/2013 in r239809, and replaced by Ash.TouchDuration2.
  </obsolete>
  <owner>kuscher@google.com</owner>
  <summary>The duration of a touch-sequence.</summary>
</histogram>

<histogram name="Ash.TouchDuration2" units="ms">
  <obsolete>
    Deprecated 08/2014 in Issue 352654, and replaced by Event.TouchDuration.
  </obsolete>
  <owner>kuscher@google.com</owner>
  <owner>rbyers@chromium.org</owner>
  <summary>The duration of a touch-sequence.</summary>
</histogram>

<histogram name="Ash.TouchMaxDistance" units="pixels">
  <obsolete>
    Deprecated 08/2014 in Issue 352654, and replaced by Event.TouchMaxDistance.
  </obsolete>
  <owner>kuscher@google.com</owner>
  <owner>rbyers@chromium.org</owner>
  <summary>
    The maximum euclidean distance in dips which a touch point has travelled
    away from its starting point. Only measured for single finger gestures.
  </summary>
</histogram>

<histogram name="Ash.TouchMoveInterval" units="ms">
  <obsolete>
    Deprecated 02/2017 due to lack of usage.
  </obsolete>
  <owner>kuscher@google.com</owner>
  <owner>rbyers@chromium.org</owner>
  <summary>The interval between touch-move events.</summary>
</histogram>

<histogram name="Ash.TouchMoveSteps" units="pixels">
  <owner>kuscher@google.com</owner>
  <owner>rbyers@chromium.org</owner>
  <summary>The distance between touch-move events.</summary>
</histogram>

<histogram name="Ash.TouchPositionX" units="pixels">
  <obsolete>
    Deprecated 07/2018 due to lack of usage.
  </obsolete>
  <owner>tdanderson@chromium.org</owner>
  <owner>kuscher@google.com</owner>
  <summary>The position of the touch-events along the X axis.</summary>
</histogram>

<histogram name="Ash.TouchPositionY" units="pixels">
  <obsolete>
    Deprecated 07/2018 due to lack of usage.
  </obsolete>
  <owner>tdanderson@chromium.org</owner>
  <owner>kuscher@google.com</owner>
  <summary>The position of the touch-events along the Y axis.</summary>
</histogram>

<histogram name="Ash.TouchRadius" units="pixels">
  <obsolete>
    Deprecated 07/2018 due to lack of usage.
  </obsolete>
  <owner>tdanderson@chromium.org</owner>
  <owner>kuscher@google.com</owner>
  <summary>The radius of a touch event.</summary>
</histogram>

<histogram name="Ash.TouchStartAfterEnd" units="ms">
  <owner>tdanderson@chromium.org</owner>
  <owner>kuscher@google.com</owner>
  <summary>
    The interval between the end of a touch-sequence and the start of the next
    touch-sequence.
  </summary>
</histogram>

<histogram name="Ash.TouchStartBurst">
  <obsolete>
    Deprecated 02/2017 due to lack of usage.
  </obsolete>
  <owner>kuscher@google.com</owner>
  <owner>rbyers@chromium.org</owner>
  <summary>
    The number of rapid touch-starts that happened within a short interval.
    Logged once for each such burst group.
  </summary>
</histogram>

<histogram name="Ash.TouchView.LidAngle" units="degrees">
  <owner>derat@chromium.org</owner>
  <summary>
    Chrome OS only. The computed angle between the lid and the keyboard panel.
    These values are imprecise and may be tens of degrees off from reality.
    Reported once per hour that the system is awake, and not reported if the
    system doesn't have two accelerometers.
  </summary>
</histogram>

<histogram name="Ash.TouchView.TouchViewActive" units="ms">
  <owner>girard@chromium.org</owner>
  <summary>
    The length of time that TouchView is active, for each activation.
  </summary>
</histogram>

<histogram name="Ash.TouchView.TouchViewActivePercentage" units="%">
  <owner>girard@chromium.org</owner>
  <summary>The proportion of time spent in TouchView during a session.</summary>
</histogram>

<histogram name="Ash.TouchView.TouchViewActiveTotal" units="seconds">
  <owner>girard@chromium.org</owner>
  <summary>The total time that TouchView is active during a session.</summary>
</histogram>

<histogram name="Ash.TouchView.TouchViewInactive" units="ms">
  <owner>girard@chromium.org</owner>
  <summary>The length of time between TouchView activations.</summary>
</histogram>

<histogram name="Ash.TouchView.TouchViewInactiveTotal" units="seconds">
  <owner>girard@chromium.org</owner>
  <summary>
    The total time that TouchView is not active during a session.
  </summary>
</histogram>

<histogram name="Ash.Wallpaper.Apps" enum="WallpaperApps">
  <obsolete>
    Deprecated as of 2/2018. Currently there is only one type of Wallpaper App.
  </obsolete>
  <owner>xdai@chromium.org</owner>
  <summary>
    The Wallpaper App that the user is using right now on Chrome OS. It's the
    app that is used when the user right clicks on desktop and selects &quot;Set
    wallpaper&quot; or when the user selects &quot;Set wallpaper&quot; from
    chrome://settings page. This is recorded at user login.
  </summary>
</histogram>

<histogram name="Ash.Wallpaper.ColorExtraction.Durations" units="ms">
  <owner>bruthig@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    The time taken to extract colors from wallpapers. Recorded each time the
    wallpaper image changes. It may contain multiple colors extracted.
  </summary>
</histogram>

<histogram name="Ash.Wallpaper.ColorExtraction.UserDelay" units="ms">
  <owner>bruthig@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    The time taken to extract colors from 'expensive' wallpapers. Recorded each
    time the wallpaper image changes and the color extraction is expected to be
    expensive, e.g. image size &gt; 100 pixels. This includes time spent
    switching threads. It may contain multiple colors extracted.
  </summary>
</histogram>

<histogram name="Ash.Wallpaper.ColorExtractionResult" enum="BooleanSuccess">
  <obsolete>
    Deprecated as of 6/2017.
  </obsolete>
  <owner>bruthig@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    Tracks the success rate for wallpaper color extraction. Recorded each time
    the wallpaper image changes.
  </summary>
</histogram>

<histogram name="Ash.Wallpaper.ColorExtractionResult2"
    enum="WallpaperColorExtractionResult">
  <owner>warx@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    Tracks the success rate for wallpaper color extraction. Recorded each time
    the wallpaper image changes for each extracted wallpaper prominent color.
  </summary>
</histogram>

<histogram name="Ash.Wallpaper.CustomLayout" enum="WallpaperLayout">
  <owner>xdai@chromium.org</owner>
  <summary>
    The custom wallpaper layout type. Recorded when the user sets a new custom
    wallpaper or changes the existing custom wallpaper's layout.
  </summary>
</histogram>

<histogram name="Ash.Wallpaper.DefaultIndex">
  <obsolete>
    Deprecated as of 11/2012. Use of indices has been removed.
  </obsolete>
  <owner>kuscher@google.com</owner>
  <summary>
    The wallpaper index if one of the default wallpapers has been selected.
    Recorded at user login. Currently only for the old wallpaper picker UI.
  </summary>
</histogram>

<histogram name="Ash.Wallpaper.Source" enum="WallpaperType">
  <owner>xdai@chromium.org</owner>
  <summary>
    Recorded when a new wallpaper is set, either by the built-in Wallpaper
    Picker App, or by a third party App. Note the wallpaper change triggered by
    Sync file system event doesn't count.
  </summary>
</histogram>

<histogram name="Ash.Wallpaper.TimeSpentExtractingColors" units="ms">
  <obsolete>
    Deprecated as of 04/2017 in favor of Ash.Wallpaper.ColorExtraction.Durations
    and Ash.Wallpaper.ColorExtraction.UserDelay.
  </obsolete>
  <owner>bruthig@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    The time taken to extract colors from wallpapers. Recorded each time the
    wallpaper image changes. NOTE, this measure also included the time spent
    jumping between threads, thus it was deprecated in favor of
    Ash.Wallpaper.ColorExtraction.Durations.
  </summary>
</histogram>

<histogram name="Ash.Wallpaper.TimeSpentResizing" units="ms">
  <owner>bruthig@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    The time taken to resize wallpapers. Recorded once each time the wallpaper
    changes (e.g. initial wallpaper loading at boot, switching user avatar at
    login screen, switching between logged in users, user selects new wallpaper,
    etc).
  </summary>
</histogram>

<histogram name="Ash.Wallpaper.Type" enum="WallpaperType">
  <owner>kuscher@google.com</owner>
  <summary>The wallpaper type. Recorded at user login.</summary>
</histogram>

<histogram name="Ash.Window.AnimationSmoothness.CrossFade" units="%">
  <owner>wutao@chromium.org</owner>
  <summary>
    Relative smoothness of cross fade animation when setting window bounds. 100%
    represents ideally smooth 60 frames per second. 50% represents when only 30
    frames per second is achieved during the animations. 0% should not happen.
    This metric is recorded exactly once when SetBoundsDirectCrossFade is
    called, such as when window is maximized.
  </summary>
</histogram>

<histogram name="Ash.Window.AnimationSmoothness.Hide" units="%">
  <owner>wutao@chromium.org</owner>
  <summary>
    Relative smoothness of hiding window animation. 100% represents ideally
    smooth 60 frames per second. 50% represents when only 30 frames per second
    is achieved during the animations. 0% should not happen. This metric is
    recorded exactly once when AnimateHideWindowCommon is called, such as when
    window is closed.
  </summary>
</histogram>

<histogram name="Ash.WindowCycleController.CycleTime" units="ms">
  <owner>varkha@chromium.org</owner>
  <owner>tbuckley@google.com</owner>
  <summary>
    The amount of time the Alt key is held after pressing Alt+Tab to begin
    cycling through windows.
  </summary>
</histogram>

<histogram name="Ash.WindowCycleController.Items" units="items">
  <owner>varkha@chromium.org</owner>
  <owner>tbuckley@google.com</owner>
  <summary>
    The number of windows in the Alt+Tab selector. Only recorded once when
    cycling starts, not every time when Tab is pressed without releasing Alt.
  </summary>
</histogram>

<histogram name="Ash.WindowCycleController.SelectionDepth" units="items">
  <owner>varkha@chromium.org</owner>
  <owner>tbuckley@google.com</owner>
  <summary>
    When a window is selected after pressing Alt+Tab, records that window's
    position in the global MRU ordering. 1 represents the most-recently used
    window, 2 represents the next most-recently used window, and so on. Recorded
    when Alt+Tab cycling stops, i.e., when Alt key is released.
  </summary>
</histogram>

<histogram name="Ash.WindowCycleController.TimeBetweenTaskSwitches"
    units="seconds">
  <owner>varkha@chromium.org</owner>
  <owner>tbuckley@google.com</owner>
  <summary>
    The number of seconds between task switches triggered by the next window and
    previous window accelerator keys (ie Alt+Tab, Alt+Shift+Tab).
  </summary>
</histogram>

<histogram name="Ash.WindowManager.Lock.Success" units="ms">
  <owner>jdufault@chromium.org</owner>
  <summary>
    How long it took for the screen lock process to complete. This does not
    include timeouts.
  </summary>
</histogram>

<histogram name="Ash.WindowManager.Lock.Timeout" units="ms">
  <owner>jdufault@chromium.org</owner>
  <summary>
    How long it took for the screen lock process to complete, for timeouts only.
  </summary>
</histogram>

<histogram name="Ash.WindowSelector.AnimationSmoothness.Close" units="%">
  <owner>varkha@chromium.org</owner>
  <owner>tdanderson@chromium.org</owner>
  <summary>
    Relative smoothness of animations when closing a window in overview mode.
    100% represents ideally smooth 60 frames per second.
  </summary>
</histogram>

<histogram name="Ash.WindowSelector.AnimationSmoothness.Enter" units="%">
  <owner>varkha@chromium.org</owner>
  <owner>tdanderson@chromium.org</owner>
  <summary>
    Relative smoothness of animations when entering overview mode. 100%
    represents ideally smooth 60 frames per second.
  </summary>
</histogram>

<histogram name="Ash.WindowSelector.AnimationSmoothness.Exit" units="%">
  <owner>varkha@chromium.org</owner>
  <owner>tdanderson@chromium.org</owner>
  <summary>
    Relative smoothness of animations when exiting overview mode. 100%
    represents ideally smooth 60 frames per second.
  </summary>
</histogram>

<histogram name="Ash.WindowSelector.ArrowKeyPresses">
  <owner>flackr@chromium.org</owner>
  <owner>tdanderson@chromium.org</owner>
  <summary>
    The number of times the arrow keys are pressed in overview mode per session,
    i.e. between bringing up overview mode and ending it. This is only measured
    for the sessions that end by selecting a window with the enter key.
  </summary>
</histogram>

<histogram name="Ash.WindowSelector.CycleTime" units="ms">
  <obsolete>
    Deprecated as of 06/2014. No longer relevant since alt-tab switching was
    separated from WindowSelector.
  </obsolete>
  <owner>flackr@chromium.org</owner>
  <owner>kuscher@google.com</owner>
  <summary>
    The amount of time the Alt key is held after pressing Alt+Tab to begin
    cycling through windows.
  </summary>
</histogram>

<histogram name="Ash.WindowSelector.Items">
  <owner>flackr@chromium.org</owner>
  <owner>kuscher@google.com</owner>
  <summary>
    The number of items (single windows or groups of windows such as panels) in
    the overview mode, present at the start of each session.
  </summary>
</histogram>

<histogram name="Ash.WindowSelector.ItemsWhenTextFilteringUsed" units="items">
  <owner>tdanderson@chromium.org</owner>
  <owner>flackr@chromium.org</owner>
  <summary>
    The number of items showing in overview mode at the moment when an item is
    selected or when selection is canceled. Only recorded if the text filtering
    textfield contains a non-empty string.
  </summary>
</histogram>

<histogram name="Ash.WindowSelector.KeyPressesOverItemsRatio" units="%">
  <owner>flackr@chromium.org</owner>
  <owner>tdanderson@chromium.org</owner>
  <summary>
    The ratio between the arrow key presses and the number of overview items,
    expressed as a percentage for a single session.
  </summary>
</histogram>

<histogram name="Ash.WindowSelector.OverviewClosedItems">
  <owner>flackr@chromium.org</owner>
  <owner>tdanderson@chromium.org</owner>
  <summary>
    The number of items closed from the window overview for a single session.
  </summary>
</histogram>

<histogram name="Ash.WindowSelector.SelectionDepth" units="items">
  <owner>varkha@chromium.org</owner>
  <owner>tdanderson@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    When a window is selected in overview mode, records that window's position
    in the global MRU ordering. 1 represents the most-recently used window, 2
    represents the next most-recently used window, and so on.
  </summary>
</histogram>

<histogram name="Ash.WindowSelector.TextFilteringStringLength"
    units="characters">
  <owner>tdanderson@chromium.org</owner>
  <owner>flackr@chromium.org</owner>
  <summary>
    The length of the string entered into the text filtering textfield at the
    moment when an item is selected or when selection is canceled.
  </summary>
</histogram>

<histogram name="Ash.WindowSelector.TextFilteringTextfieldCleared">
  <owner>tdanderson@chromium.org</owner>
  <owner>flackr@chromium.org</owner>
  <summary>
    The number of times the text filtering textfield has had all of its text
    removed within a single overview mode session. Measured from the time
    overview mode is invoked to when an item is selected or when selection is
    canceled.
  </summary>
</histogram>

<histogram name="Ash.WindowSelector.TimeBetweenActiveWindowChanges"
    units="seconds">
  <owner>bruthig@chromium.org</owner>
  <owner>tdanderson@chromium.org</owner>
  <summary>
    The amount of time between endings of overview mode sessions which were
    caused by the user selecting a window which was not previously active. Only
    recorded on the second and later times after startup that the user selected
    a window which was not previously active.
  </summary>
</histogram>

<histogram name="Ash.WindowSelector.TimeBetweenUse" units="ms">
  <owner>flackr@chromium.org</owner>
  <owner>kuscher@google.com</owner>
  <summary>
    The amount of time between uses of overview mode, recorded when overview
    mode is entered. Only recorded on the second and later times after startup
    that the user entered overview mode.
  </summary>
</histogram>

<histogram name="Ash.WindowSelector.TimeInOverview" units="ms">
  <owner>flackr@chromium.org</owner>
  <owner>kuscher@google.com</owner>
  <summary>
    The amount of time spent in overview mode. Overview mode is engaged by
    pressing the overview button. The time is measured from the moment the
    windows begin animating to a thumbnail size preview to when a window is
    selected or selection is canceled.
  </summary>
</histogram>

<histogram name="Ash.WindowSelector.TimeInOverviewWithTextFiltering" units="ms">
  <owner>tdanderson@chromium.org</owner>
  <owner>flackr@chromium.org</owner>
  <summary>
    The amount of time spent in overview mode when text filtering is used. The
    time is measured from the moment the windows begin animating to a thumbnail
    size preview to when a window is selected or selection is canceled. Only
    recorded if the text filtering textfield contains a non-empty string.
  </summary>
</histogram>

<histogram name="AsyncDNS.AttemptCountFail">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Count of DnsAttempts before DnsTransaction completes with failure.
  </summary>
</histogram>

<histogram name="AsyncDNS.AttemptCountSuccess">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Count of DnsAttempts before DnsTransaction completes successfully.
  </summary>
</histogram>

<histogram name="AsyncDNS.ConfigChange" enum="BooleanSuccess">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Whether DnsConfigService::OnConfigChange actually corresponded to a change
    in DnsConfig.
  </summary>
</histogram>

<histogram name="AsyncDNS.ConfigNotifyInterval" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time between calls to DnsConfigService::InvalidateConfig.
  </summary>
</histogram>

<histogram name="AsyncDNS.ConfigParseDuration" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>Duration of time spent parsing DnsConfig.</summary>
</histogram>

<histogram name="AsyncDNS.ConfigParsePosix" enum="AsyncDNSConfigParsePosix">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Counts of results of parsing DnsConfig in DnsConfigServicePosix.
  </summary>
</histogram>

<histogram name="AsyncDNS.ConfigParseResult" enum="BooleanSuccess">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>Whether DnsConfig was parsed successfully.</summary>
</histogram>

<histogram name="AsyncDNS.ConfigParseWin" enum="AsyncDNSConfigParseWin">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Counts of results of parsing DnsConfig in DnsConfigServiceWin.
  </summary>
</histogram>

<histogram name="AsyncDNS.DNSChangerDetected" enum="BooleanSuccess">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Whether the first valid DnsConfig included a rogue nameserver.
  </summary>
</histogram>

<histogram name="AsyncDNS.DnsClientDisabledReason" enum="NetErrorCodes">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Counts of specific error codes returned by DnsTask if a subsequent ProcTask
    succeeded, at the end of a streak of failures after which the DnsClient was
    disabled.
  </summary>
</histogram>

<histogram name="AsyncDNS.DnsClientEnabled" enum="BooleanSuccess">
  <owner>mgersh@chromium.org</owner>
  <summary>
    TRUE counts the events when a valid DnsConfig is received and used to enable
    DnsClient, while FALSE counts the events when DnsClient is disabled after a
    series of successful fallbacks from DnsTask to ProcTask.
  </summary>
</histogram>

<histogram name="AsyncDNS.FallbackFail" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time spent by ProcTask in failing fallback resolutions.
  </summary>
</histogram>

<histogram name="AsyncDNS.FallbackSuccess" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time spent by ProcTask in successful fallback resolutions.
  </summary>
</histogram>

<histogram name="AsyncDNS.HaveDnsConfig" enum="BooleanSuccess">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Whether there was a valid DNS configuration at the start of a job which
    eventually completed successfully.
  </summary>
</histogram>

<histogram name="AsyncDNS.HostParseResult" enum="BooleanSuccess">
  <owner>mgersh@chromium.org</owner>
  <summary>Whether DnsHosts were parsed successfully.</summary>
</histogram>

<histogram name="AsyncDNS.HostsChange" enum="BooleanSuccess">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Whether DnsConfigService::OnHostsChange actually corresponded to a change in
    DnsHosts.
  </summary>
</histogram>

<histogram name="AsyncDNS.HostsNotifyInterval" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time between calls to DnsConfigService::InvalidateHosts.
  </summary>
</histogram>

<histogram name="AsyncDNS.HostsParseDuration" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>Duration of time spent parsing DnsHosts.</summary>
</histogram>

<histogram name="AsyncDNS.HostsParseWin" enum="AsyncDNSHostsParseWin">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Counts of results of parsing DnsHosts in DnsConfigServiceWin.
  </summary>
</histogram>

<histogram name="AsyncDNS.HostsSize" units="bytes">
  <owner>mgersh@chromium.org</owner>
  <summary>
    The size of the HOSTS file observed before each attempt to parse it.
  </summary>
</histogram>

<histogram name="AsyncDNS.JobQueueTime" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the time the HostResolverImpl::Job was created and the
    time the Job was started (using DnsClient).
  </summary>
</histogram>

<histogram name="AsyncDNS.JobQueueTime_HIGHEST" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the time the HostResolverImpl::Job was created and the
    time the Job was started (using DnsClient). Includes only Jobs which had
    priority HIGHEST when started.
  </summary>
</histogram>

<histogram name="AsyncDNS.JobQueueTime_IDLE" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the time the HostResolverImpl::Job was created and the
    time the Job was started (using DnsClient). Includes only Jobs which had
    priority IDLE when started.
  </summary>
</histogram>

<histogram name="AsyncDNS.JobQueueTime_LOW" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the time the HostResolverImpl::Job was created and the
    time the Job was started (using DnsClient). Includes only Jobs which had
    priority LOW when started.
  </summary>
</histogram>

<histogram name="AsyncDNS.JobQueueTime_LOWEST" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the time the HostResolverImpl::Job was created and the
    time the Job was started (using DnsClient). Includes only Jobs which had
    priority LOWEST when started.
  </summary>
</histogram>

<histogram name="AsyncDNS.JobQueueTime_MEDIUM" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the time the HostResolverImpl::Job was created and the
    time the Job was started (using DnsClient). Includes only Jobs which had
    priority MEDIUM when started.
  </summary>
</histogram>

<histogram name="AsyncDNS.JobQueueTimeAfterChange" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the last time the priority of a HostResolverImpl::Job
    changed (when a Request was attached or detached) and the time the Job was
    started (using DnsClient).
  </summary>
</histogram>

<histogram name="AsyncDNS.JobQueueTimeAfterChange_HIGHEST" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the last time the priority of a HostResolverImpl::Job
    changed (when a Request was attached or detached) and the time the Job was
    started (using DnsClient). Includes only Jobs which had priority HIGHEST
    when started.
  </summary>
</histogram>

<histogram name="AsyncDNS.JobQueueTimeAfterChange_IDLE" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the last time the priority of a HostResolverImpl::Job
    changed (when a Request was attached or detached) and the time the Job was
    started (using DnsClient). Includes only Jobs which had priority IDLE when
    started.
  </summary>
</histogram>

<histogram name="AsyncDNS.JobQueueTimeAfterChange_LOW" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the last time the priority of a HostResolverImpl::Job
    changed (when a Request was attached or detached) and the time the Job was
    started (using DnsClient). Includes only Jobs which had priority LOW when
    started.
  </summary>
</histogram>

<histogram name="AsyncDNS.JobQueueTimeAfterChange_LOWEST" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the last time the priority of a HostResolverImpl::Job
    changed (when a Request was attached or detached) and the time the Job was
    started (using DnsClient). Includes only Jobs which had priority LOWEST when
    started.
  </summary>
</histogram>

<histogram name="AsyncDNS.JobQueueTimeAfterChange_MEDIUM" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the last time the priority of a HostResolverImpl::Job
    changed (when a Request was attached or detached) and the time the Job was
    started (using DnsClient). Includes only Jobs which had priority MEDIUM when
    started.
  </summary>
</histogram>

<histogram name="AsyncDNS.NameServersType" enum="AsyncDNSNameServersType">
  <obsolete>
    Deprecated as of 4/2016.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Type of nameservers in the DNS config, recorded each time the config is read
    by the DNSConfigService.
  </summary>
</histogram>

<histogram name="AsyncDNS.ParseToAddressList" enum="AsyncDNSParseResult">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Counts of results of parsing addresses out of DNS responses in successful
    DnsTransactions.
  </summary>
</histogram>

<histogram name="AsyncDNS.PrefDefaultSource" enum="AsyncDNSPrefDefaultSource">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    The source of the async DNS preference's default. Logged at startup, when
    the IO thread is created.
  </summary>
</histogram>

<histogram name="AsyncDNS.PrefSource" enum="AsyncDNSPrefSource">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    The source of the async DNS preference's value. Logged at startup, when the
    IO thread is created.
  </summary>
</histogram>

<histogram name="AsyncDNS.ResolveError" enum="NetErrorCodes">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.DnsTaskError.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Counts of specific error codes returned by DnsTask if a subsequent ProcTask
    succeeded.
  </summary>
</histogram>

<histogram name="AsyncDNS.ResolveFail" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.DnsTaskFail.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time taken by DnsTask in resolutions that failed. Excludes time
    spent in the subsequent fallback.
  </summary>
</histogram>

<histogram name="AsyncDNS.ResolveStatus" enum="AsyncDNSResolveStatus">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Counts of the overall results of using asynchronous DNS in HostResolverImpl.
    This only includes jobs started with valid DNS configuration and excludes
    synchronous resolutions (as IP literals, from cache, and from HOSTS).
  </summary>
</histogram>

<histogram name="AsyncDNS.ResolveSuccess" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.DnsTaskSuccess.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time taken by DnsTask in resolutions that succeeded.
  </summary>
</histogram>

<histogram name="AsyncDNS.ResolveSuccess_FAMILY_IPV4" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.DnsTaskSuccess.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Same as AsyncDNS.ResolveSuccess, but limited to pure IPv4 lookups.
  </summary>
</histogram>

<histogram name="AsyncDNS.ResolveSuccess_FAMILY_IPV6" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.DnsTaskSuccess.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Same as AsyncDNS.ResolveSuccess, but limited to pure IPv6 lookups.
  </summary>
</histogram>

<histogram name="AsyncDNS.ResolveSuccess_FAMILY_UNSPEC" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.DnsTaskSuccess.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Same as AsyncDNS.ResolveSuccess, but limited to IPv4/IPv6 lookups.
  </summary>
</histogram>

<histogram name="AsyncDNS.ServerCount">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Count of servers in DnsConfig. Recorded on every new DnsSession, which is
    created on DNS change.
  </summary>
</histogram>

<histogram name="AsyncDNS.ServerFailureIndex">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Index in DnsConfig of the failing server, recorded at the time of failure.
  </summary>
</histogram>

<histogram name="AsyncDNS.ServerFailuresAfterNetworkChange">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Count of server failures after network change before first success in the
    DnsSession. Recorded at the time of first success.
  </summary>
</histogram>

<histogram name="AsyncDNS.ServerFailuresAfterSuccess">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Count of server failures after success until the end of the session. Server
    has reported success at some point during the session. Recorded at the end
    of the DnsSession.
  </summary>
</histogram>

<histogram name="AsyncDNS.ServerFailuresBeforeSuccess">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Count of server failures before success. This is NOT the first success in
    the DnsSession. Recorded at the time of success.
  </summary>
</histogram>

<histogram name="AsyncDNS.ServerFailuresWithoutSuccess">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Count of server failures without success until the end of the session.
    Server has never reported success during the DnsSession. Recorded at the end
    of the DnsSession.
  </summary>
</histogram>

<histogram name="AsyncDNS.ServerIsGood" enum="BooleanSuccess">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    The current server is &quot;good&quot; and does not have to be skipped.
  </summary>
</histogram>

<histogram name="AsyncDNS.SortFailure" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time taken in failing calls to AddressSorter in dual-stack
    resolutions using DnsTask.
  </summary>
</histogram>

<histogram name="AsyncDNS.SortSuccess" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time taken in successful calls to AddressSorter in dual-stack
    resolutions using DnsTask.
  </summary>
</histogram>

<histogram name="AsyncDNS.SuffixSearchDone">
  <owner>mgersh@chromium.org</owner>
  <summary>
    The number of names from the search name list consumed during a successful
    transaction (QTYPE A only).
  </summary>
</histogram>

<histogram name="AsyncDNS.SuffixSearchRemain">
  <owner>mgersh@chromium.org</owner>
  <summary>
    The number of names left on the search name list at the end of a successful
    transaction (QTYPE A only).
  </summary>
</histogram>

<histogram name="AsyncDNS.SuffixSearchStart">
  <owner>mgersh@chromium.org</owner>
  <summary>
    The number of names on the search name list at the start of a transaction
    (QTYPE A only).
  </summary>
</histogram>

<histogram name="AsyncDNS.TCPAttemptFail" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time taken by DnsTCPAttempt in failed attempts. Excludes
    timeouts.
  </summary>
</histogram>

<histogram name="AsyncDNS.TCPAttemptSuccess" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time taken by DnsTCPAttempt in successful attempts.
  </summary>
</histogram>

<histogram name="AsyncDNS.TimeoutErrorHistogram" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Difference between RTT and timeout calculated using Histogram algorithm.
  </summary>
</histogram>

<histogram name="AsyncDNS.TimeoutErrorHistogramUnder" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Difference between timeout calculated using Histogram algorithm and RTT.
  </summary>
</histogram>

<histogram name="AsyncDNS.TimeoutErrorJacobson" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Difference between RTT and timeout calculated using Jacobson algorithm.
  </summary>
</histogram>

<histogram name="AsyncDNS.TimeoutErrorJacobsonUnder" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Difference between timeout calculated using Jacobson algorithm and RTT.
  </summary>
</histogram>

<histogram name="AsyncDNS.TimeoutSpentHistogram" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time that would be spent waiting for lost request using
    Histogram algorithm.
  </summary>
</histogram>

<histogram name="AsyncDNS.TimeoutSpentJacobson" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time that would be spent waiting for lost request using Jacobson
    algorithm.
  </summary>
</histogram>

<histogram name="AsyncDNS.TotalTime" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.TotalTime.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time since a HostResolverImpl::Resolve request to the time a
    result is posted. Excludes canceled, evicted, and aborted requests. Includes
    cache hits (recorded as 0). Excludes speculative requests.
  </summary>
</histogram>

<histogram name="AsyncDNS.TotalTime_speculative" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.TotalTime_speculative.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time since a HostResolverImpl::Resolve request to the time a
    result is posted. Excludes canceled, evicted, and aborted requests. Includes
    cache hits (recorded as 0). Speculative requests only.
  </summary>
</histogram>

<histogram name="AsyncDNS.TransactionFailure" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time taken in failing DnsTransactions. This includes server
    failures, timeouts and NXDOMAIN results.
  </summary>
</histogram>

<histogram name="AsyncDNS.TransactionSuccess" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time taken in successful DnsTransactions. This includes all
    NOERROR answers, even if they indicate the name has no addresses or they
    cannot be parsed.
  </summary>
</histogram>

<histogram name="AsyncDNS.TransactionSuccess_A" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Same as AsyncDNS.TransactionSuccess but limited to A query type.
  </summary>
</histogram>

<histogram name="AsyncDNS.TransactionSuccess_AAAA" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Same as AsyncDNS.TransactionSuccess but limited to AAAA query type.
  </summary>
</histogram>

<histogram name="AsyncDNS.TTL" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    TTL of the resolved addresses, as in the response received from the server.
    For results served from local cache, the TTL is from the original response.
  </summary>
</histogram>

<histogram name="AsyncDNS.UDPAttemptFail" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time taken by DnsUDPAttempt in failed attempts. Excludes
    timeouts.
  </summary>
</histogram>

<histogram name="AsyncDNS.UDPAttemptSuccess" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time taken by DnsUDPAttempt in successful attempts. Includes
    responses arriving after timeout, if multiple attempts are allowed.
  </summary>
</histogram>

<histogram name="AsyncDNS.UnchangedConfigInterval" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time since the last empty config result to the time a non-change
    OnConfigChange is received.
  </summary>
</histogram>

<histogram name="AsyncDNS.UnchangedHostsInterval" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time since the last empty config result to the time a non-change
    OnHostsChange is received.
  </summary>
</histogram>

<histogram name="AsyncDNS.WatchStatus" enum="AsyncDNSWatchStatus">
  <owner>mgersh@chromium.org</owner>
  <summary>
    The result of DnsConfigService watch. Counts STARTED on every initialization
    and FAILED_* on any failure.
  </summary>
</histogram>

<histogram name="Aura.CreatedGpuBrowserCompositor" enum="CompositorType">
  <owner>jbauman@chromium.org</owner>
  <summary>
    Whether the browser compositor uses GPU or the software renderer.
  </summary>
</histogram>

<histogram name="AuthPolicy.ErrorTypeOfAuthenticateUser"
    enum="AuthPolicyErrorType">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Result from an attempt to authenticate a user to an Active Directory domain.
  </summary>
</histogram>

<histogram name="AuthPolicy.ErrorTypeOfAutoMachinePasswordChange"
    enum="AuthPolicyErrorType">
  <owner>ljusten@chromium.org</owner>
  <summary>Result from automatic background machine password renewal.</summary>
</histogram>

<histogram name="AuthPolicy.ErrorTypeOfAutoTgtRenewal"
    enum="AuthPolicyErrorType">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Result from automatic background ticket-granting-ticket renewal.
  </summary>
</histogram>

<histogram name="AuthPolicy.ErrorTypeOfGetUserKerberosFiles"
    enum="AuthPolicyErrorType">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Result of an attempt to get an Active Directory user's Kerberos
    ticket-granting-ticket and configuration data.
  </summary>
</histogram>

<histogram name="AuthPolicy.ErrorTypeOfGetUserStatus"
    enum="AuthPolicyErrorType">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Result of an attempt to get the status of an Active Directory user's
    Kerberos ticket, password and account.
  </summary>
</histogram>

<histogram name="AuthPolicy.ErrorTypeOfJoinADDomain" enum="AuthPolicyErrorType">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Result from an attempt to join a machine to an Active Directory domain.
  </summary>
</histogram>

<histogram name="AuthPolicy.ErrorTypeOfRefreshDevicePolicy"
    enum="AuthPolicyErrorType">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Result from an attempt to fetch device policy from an Active Directory
    domain and store it on disk.
  </summary>
</histogram>

<histogram name="AuthPolicy.ErrorTypeOfRefreshUserPolicy"
    enum="AuthPolicyErrorType">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Result from an attempt to fetch user policy from an Active Directory domain
    and store it on disk.
  </summary>
</histogram>

<histogram name="AuthPolicy.FailedTriesOfKinit">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Number of times 'kinit' failed until the next try succeeded or the method
    gave up because a maximum number of tries was exceeded. 'kinit' is run for
    Active Directory enrolled devices during user authentication and device
    policy fetch.
  </summary>
</histogram>

<histogram name="AuthPolicy.FailedTriesOfSmbClient">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Number of times 'smbclient' failed until it the next try succeeded or the
    method gave up because a maximum number of tries was exceeded. 'smbclient'
    is run for Active Directory enrolled devices during policy fetch.
  </summary>
</histogram>

<histogram name="AuthPolicy.NumGposToDownload">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Number of group policy objects attached to a specific user or machine on an
    Active Directory domain. This value is recorded when user or device policy
    is fetched from an Active Directory server.
  </summary>
</histogram>

<histogram name="AuthPolicy.TimeToAuthenticateUser" units="ms">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Time in milliseconds to authenticate a user to an Active Directory domain.
    The value is recorded no matter if the operation was successful or not.
  </summary>
</histogram>

<histogram name="AuthPolicy.TimeToGetUserKerberosFiles" units="ms">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Time in milliseconds to get the Kerberos ticket-granting-ticket and
    configuration data of an Active Directory user. The value is recorded no
    matter if the operation was successful or not.
  </summary>
</histogram>

<histogram name="AuthPolicy.TimeToGetUserStatus" units="ms">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Time in milliseconds to get status information of an Active Directory user.
    The value is recorded no matter if the operation was successful or not.
  </summary>
</histogram>

<histogram name="AuthPolicy.TimeToJoinADDomain" units="ms">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Time in milliseconds to join a machine to an Active Directory domain. Domain
    join is part of the Active Directory enrollment process. The value is
    recorded no matter if the operation was successful or not.
  </summary>
</histogram>

<histogram name="AuthPolicy.TimeToRefreshDevicePolicy" units="ms">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Time in milliseconds to fetch device policy from an Active Directory domain
    and store it on disk. The value is recorded no matter if the operation was
    successful or not.
  </summary>
</histogram>

<histogram name="AuthPolicy.TimeToRefreshUserPolicy" units="ms">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Time in milliseconds to fetch user policy from an Active Directory domain
    and store it on disk. The value is recorded no matter if the operation was
    successful or not.
  </summary>
</histogram>

<histogram name="AuthPolicy.TimeToRunKinit" units="ms">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Time in milliseconds to call 'kinit' (request Kerberos ticket-granting-
    ticket). TGTs are requested regularly for accessing services on Active
    Directory domains. The value is recorded no matter if the operation was
    successful or not.
  </summary>
</histogram>

<histogram name="AuthPolicy.TimeToRunKlist" units="ms">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Time in milliseconds to call 'klist' (print Kerberos ticket-granting-ticket
    information). The command reveals a TGT's lifetime, which is used to
    determine TGT status in GetUserStatus() called periodically by Chrome. The
    value is recorded no matter if the operation was successful or not.
  </summary>
</histogram>

<histogram name="AuthPolicy.TimeToRunKpasswd" units="ms">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Time in milliseconds to call 'kpasswd' (change Active Directory password).
    The command is used to change the machine account password. By default, it
    is run every 30 days by the AuthPolicy daemon. The value is recorded no
    matter if the operation was successful or not.
  </summary>
</histogram>

<histogram name="AuthPolicy.TimeToRunNetAdsGpo" units="ms">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Time in milliseconds to call 'net ads gpo list' (list Active Directory group
    policy objects). The value is recorded no matter if the operation was
    successful or not.
  </summary>
</histogram>

<histogram name="AuthPolicy.TimeToRunNetAdsInfo" units="ms">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Time in milliseconds to call 'net ads info' (query Active Directory
    information). The value is recorded no matter if the operation was
    successful or not.
  </summary>
</histogram>

<histogram name="AuthPolicy.TimeToRunNetAdsJoin" units="ms">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Time in milliseconds to call 'net ads join' (join machine to an Active
    Directory domain). The value is recorded no matter if the operation was
    successful or not.
  </summary>
</histogram>

<histogram name="AuthPolicy.TimeToRunNetAdsSearch" units="ms">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Time in milliseconds to call 'net ads search' (query information about an
    Active Directory account). The value is recorded no matter if the operation
    was successful or not.
  </summary>
</histogram>

<histogram name="AuthPolicy.TimeToRunNetAdsWorkgroup" units="ms">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Time in milliseconds to call 'net ads workgroup' (query Active Directory
    workgroup). The value is recorded no matter if the operation was successful
    or not.
  </summary>
</histogram>

<histogram name="AuthPolicy.TimeToRunSmbclient" units="ms">
  <owner>ljusten@chromium.org</owner>
  <summary>
    Time in milliseconds to call 'smbclient' (download policy from an Active
    Directory domain). The value is recorded no matter if the operation was
    successful or not.
  </summary>
</histogram>

<histogram name="Autocheckout.Bubble" enum="AutocheckoutBubble">
  <obsolete>
    Deprecated as of 8/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures the frequency of user interactions with the Autocheckout bubble,
    which prompts users to invoke Autocheckout on supported websites.
  </summary>
</histogram>

<histogram name="Autocheckout.BuyFlow" enum="AutocheckoutBuyFlow">
  <obsolete>
    Deprecated as of 8/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures the frequency of final states reached in Autocheckout buy flow.
  </summary>
</histogram>

<histogram name="Autocheckout.DismissalState"
    enum="AutofillDialogDismissalState">
  <obsolete>
    Deprecated as of 8/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The state of the Autocheckout dialog when it was dismissed.</summary>
</histogram>

<histogram name="Autocheckout.FlowDuration" units="ms">
  <obsolete>
    Deprecated as of 8/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures the time elapsed between when the user submitted the Autocheckout
    dialog and when the Autocheckout flow, or filling process, concluded.
  </summary>
</histogram>

<histogram name="Autocheckout.FlowDuration.Failed" units="ms">
  <obsolete>
    Deprecated as of 8/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures the time elapsed between when the user submitted the Autocheckout
    dialog and when the Autocheckout flow concluded, in cases where the flow
    failed.
  </summary>
</histogram>

<histogram name="Autocheckout.FlowDuration.Succeeded" units="ms">
  <obsolete>
    Deprecated as of 8/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures the time elapsed between when the user submitted the Autocheckout
    dialog and when the Autocheckout flow concluded, in cases where the flow
    succeeded.
  </summary>
</histogram>

<histogram name="Autocheckout.InitialUserState"
    enum="AutofillDialogInitialUserState">
  <obsolete>
    Deprecated as of 8/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The initial state of a user that's interacting with a freshly shown
    Autocheckout dialog.
  </summary>
</histogram>

<histogram name="Autocheckout.PopupInDialog" enum="AutofillDialogPopupEvent">
  <obsolete>
    Deprecated as of 8/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    User interactions with the Autofill popup shown while filling an
    Autocheckout dialog.
  </summary>
</histogram>

<histogram name="Autocheckout.Security" enum="AutofillDialogSecurity">
  <obsolete>
    Deprecated as of 8/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures the frequency of security warnings and errors in the Autocheckout
    dialog.
  </summary>
</histogram>

<histogram name="Autocheckout.UiDuration" units="ms">
  <obsolete>
    Deprecated as of 8/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures the duration for which an Autocheckout dialog was shown.
  </summary>
</histogram>

<histogram name="Autocheckout.UiDuration.Cancel" units="ms">
  <obsolete>
    Deprecated as of 8/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures the duration for which an Autocheckout dialog was shown, in cases
    where the user ended up canceling out of the dialog.
  </summary>
</histogram>

<histogram name="Autocheckout.UiDuration.Submit" units="ms">
  <obsolete>
    Deprecated as of 8/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures the duration for which an Autocheckout dialog was shown, in cases
    where the user ended up accepting the dialog.
  </summary>
</histogram>

<histogram name="Autocheckout.UiEvents" enum="AutofillDialogUiEvents">
  <obsolete>
    Deprecated as of 8/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures how users are interacting with the Autocheckout dialog UI.
  </summary>
</histogram>

<histogram name="Autocheckout.UiLatencyToShow" units="ms">
  <obsolete>
    Deprecated as of 8/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures the duration of time it takes for the Autocheckout UI to be
    actionable by the user after it is shown.
  </summary>
</histogram>

<histogram name="Autocheckout.WalletErrors" enum="WalletErrors">
  <obsolete>
    Deprecated as of 8/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures the frequency of errors in communicating with the Google Online
    Wallet server.
  </summary>
</histogram>

<histogram name="Autocheckout.WalletRequiredActions"
    enum="WalletRequiredActions">
  <obsolete>
    Deprecated as of 8/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures the frequency of required user actions returned by the Google
    Online Wallet server.
  </summary>
</histogram>

<histogram name="Autocheckout.WhitelistDownloadDuration" units="ms">
  <obsolete>
    Deprecated as of 8/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures time taken to download the Autocheckout whitelist file.
  </summary>
</histogram>

<histogram name="Autocheckout.WhitelistDownloadDuration.Failed" units="ms">
  <obsolete>
    Deprecated as of 8/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures time taken to download the Autocheckout whitelist file in case the
    download was failed.
  </summary>
</histogram>

<histogram name="Autocheckout.WhitelistDownloadDuration.Succeeded" units="ms">
  <obsolete>
    Deprecated as of 8/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures time taken to download the Autocheckout whitelist file in case the
    download was succeeded.
  </summary>
</histogram>

<histogram name="AutodetectEncoding.Attempted" enum="BooleanAttempted">
  <obsolete>
    Deprecated as of 2/2016.
  </obsolete>
  <owner>jinsukkim@chromium.org</owner>
  <summary>
    Whether the text encoding auto detection logic was attempted for a web page.
    The logic is triggered when the parser fails to find the encoding method
    from other signals such as http header, meta tag, BOM, etc.

    If the logic successfully detects a new encoding method which is different
    from the default one, the result is reported through
    AutodetectEncoding.Detected with the encoding method (see below). Otherwise
    - i.e. detection logic somehow fails to work for the page or the detected
    one is same as the default - no result is reported.
  </summary>
</histogram>

<histogram name="AutodetectEncoding.Detected" enum="EncodingMethod"
    units="pages">
  <obsolete>
    Deprecated as of 2/2016.
  </obsolete>
  <owner>jinsukkim@chromium.org</owner>
  <summary>
    The number of web pages whose encoding method is found by the auto detection
    logic. Grouped by the encoding methods defined in EncodingMethod.
  </summary>
</histogram>

<histogram name="Autofill.AddressBook.AccessSkipped" enum="BooleanSkipped">
  <obsolete>
    Deprecated as of 8/2015.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    Whether an attempt to access the Mac AddressBook was skipped because doing
    so would incorrectly cause the appearance of the permissions dialog. This
    happens when Chrome auto-update changes the binary on disk before the first
    AddressBook access attempt.
  </summary>
</histogram>

<histogram name="Autofill.AddressBookAvailable" enum="BooleanAvailable">
  <obsolete>
    Deprecated as of 8/2015.
  </obsolete>
  <owner>isherman@chromium.org</owner>
  <summary>
    Whether the Mac AddressBook was available on an attempt to read data from
    it.
  </summary>
</histogram>

<histogram name="Autofill.AddressBookAvailableOnFirstAttempt"
    enum="BooleanAvailable">
  <obsolete>
    Deprecated as of 8/2015.
  </obsolete>
  <owner>isherman@chromium.org</owner>
  <summary>
    Whether the Mac AddressBook was available on the *first* attempt to read
    data from it.  This is only recorded once per Chrome profile.
  </summary>
</histogram>

<histogram name="Autofill.AddressesDeletedForDisuse" units="addresses">
  <owner>wuandy@chromium.org</owner>
  <summary>
    The number of unverified autofill addresses deleted because they have not
    been used for a long time, and are not used as billing addresses of valid
    credit cards. Note the deletion only happens once per major version upgrade.
  </summary>
</histogram>

<histogram name="Autofill.AddressesSuppressedForDisuse" units="addresses">
  <owner>rogerm@chromium.org</owner>
  <summary>
    The number of address suggestions not shown in the Autofill popup because
    they have not been used recently enough. Note that suppression only applies
    when the user has not typed any text into the field. If any text is in the
    field, all matching addresses are displayed, regardless of how recently they
    have been used.
  </summary>
</histogram>

<histogram name="Autofill.AddressSuggestionsCount">
  <owner>isherman@chromium.org</owner>
  <summary>
    The number of address suggestions shown in the Autofill popup.
  </summary>
</histogram>

<histogram name="Autofill.AutomaticProfileCreation" enum="BooleanCreated">
  <obsolete>
    Deprecated as of 6/2015, replaced by Autofill.ProfileActionOnFormSubmitted.
  </obsolete>
  <owner>sebsg@chromium.org</owner>
  <summary>
    Whether a new Autofill profile was created automatically. In the
    &quot;false&quot; case, an existing profile was used (and possibly updated).
  </summary>
</histogram>

<histogram name="Autofill.CardUploadDecision" enum="AutofillCardUploadDecision">
  <obsolete>
    Deprecated as of 2/2016, replaced by Autofill.CardUploadDecisionMetric.
  </obsolete>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    Whether upload was offered upon detecting a form submission with credit card
    data and a reason if it wasn't.
  </summary>
</histogram>

<histogram name="Autofill.CardUploadDecisionExpanded"
    enum="AutofillCardUploadDecisionExpanded">
  <obsolete>
    Deprecated as of 5/2017, replaced by Autofill.CardUploadDecisionMetric.
  </obsolete>
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    Whether upload was offered upon detecting a form submission with credit card
    data and a detailed reason if it wasn't.
  </summary>
</histogram>

<histogram name="Autofill.CardUploadDecisionMetric"
    enum="AutofillCardUploadDecisionMetric">
  <owner>csashi@google.com</owner>
  <owner>jsaul@google.com</owner>
  <owner>sebsg@chromium.org</owner>
  <summary>
    Whether upload was offered upon detecting a form submission with credit card
    data, a detailed reason if upload was offered even with some missing fields
    and detailed reasons if it wasn't.
  </summary>
</histogram>

<histogram name="AutoFill.CCInfoBarAccepted">
  <obsolete>
    Deprecated as of 3/2011, replaced by Autofill.CreditCardInfoBar.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The Autofill credit card info bar was accepted.</summary>
</histogram>

<histogram name="AutoFill.CCInfoBarDenied">
  <obsolete>
    Deprecated as of 3/2011, replaced by Autofill.CreditCardInfoBar.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The Autofill credit card info bar was denied.</summary>
</histogram>

<histogram name="Autofill.CreditCardFillingInfoBar"
    enum="AutofillCreditCardInfoBar">
  <owner>mathp@chromium.org</owner>
  <summary>
    The relative frequency with which users accept, deny, or ignore the Autofill
    credit card assisted filling infobar prompt.
  </summary>
</histogram>

<histogram base="true" name="Autofill.CreditCardInfoBar"
    enum="AutofillCreditCardInfoBar">
  <owner>isherman@chromium.org</owner>
  <summary>
    The relative frequency with which users accept, deny, or ignore the Autofill
    credit card info bar prompt.
  </summary>
</histogram>

<histogram name="Autofill.CreditCardsDeletedForDisuse">
  <owner>wuandy@chromium.org</owner>
  <summary>
    The number of credit card deleted during a major version upgrade because
    they have not been used recently enough and are expired.
  </summary>
</histogram>

<histogram name="Autofill.CreditCardsSuppressedForDisuse">
  <owner>wuandy@chromium.org</owner>
  <summary>
    The number of credit card suggestions not shown in the Autofill popup
    because they have not been used recently enough and are expired. Note that
    suppression only applies when the user has not typed any text into the
    field. If any text is in the field, all matching cards are displayed,
    regardless of how recently they have been used and their expiration status.
  </summary>
</histogram>

<histogram name="Autofill.CreditCardUploadDisallowedForNetwork"
    enum="CreditCardUploadDisallowedNetwork">
  <owner>jsaul@google.com</owner>
  <summary>
    When a credit card is not allowed to be offered upload save due to its
    network, logs what the card network was.
  </summary>
</histogram>

<histogram name="Autofill.DaysSinceLastUse.CreditCard" units="days">
  <owner>sebsg@chromium.org</owner>
  <summary>
    Logs the number of days that have passed since the credit card was last
    used.
  </summary>
</histogram>

<histogram name="Autofill.DaysSinceLastUse.Profile" units="days">
  <owner>sebsg@chromium.org</owner>
  <summary>
    Logged at the time of autofill address use, this histogram captures the
    number of days that have passed since the address was last used. I.e., the
    distribution of time between uses of an &quot;active&quot; autofill address.
  </summary>
</histogram>

<histogram name="Autofill.DaysSinceLastUse.StoredCreditCard" units="days">
  <owner>rogerm@chromium.org</owner>
<!-- Name completed by histogram_suffixes name="AutofillCreditCardType" -->

  <summary>
    Logs the number of days that have passed since each credit card belonging to
    a given Chrome Profile was last used. This is logged for each Autofill
    credit card once per Chrome User Profile load.
  </summary>
</histogram>

<histogram name="Autofill.DaysSinceLastUse.StoredProfile" units="days">
  <owner>rogerm@chromium.org</owner>
  <summary>
    This histogram captures the number of days that have passed since each
    stored address profile belonging to a given Chrome Profile was last used.
    This is logged for each Autofill address profile once per Chrome User
    Profile load.
  </summary>
</histogram>

<histogram name="Autofill.DaysSincePreviousUseAtSubmission.Profile"
    units="days">
  <owner>csashi@google.com</owner>
  <owner>jsaul@google.com</owner>
  <owner>sebsg@chromium.org</owner>
  <summary>
    Logs the number of days between most recent use without modification and the
    penultimate use of the profile when submitting a credit card form.
  </summary>
</histogram>

<histogram name="Autofill.DeveloperEngagement"
    enum="AutofillDeveloperEngagement">
  <owner>isherman@chromium.org</owner>
  <summary>
    Measures the adoption of the HTML autocomplete type hint specification (see
    http://is.gd/whatwg_autocomplete for more details).  For each fillable form
    detected, logs whether that form includes author-specified type hints.
  </summary>
</histogram>

<histogram name="Autofill.FieldCount" units="form fields">
  <owner>kolos@chromium.org</owner>
  <owner>rogerm@chromium.org</owner>
  <summary>Number of fields in a form that Autofill encounters.</summary>
</histogram>

<histogram name="Autofill.FieldPrediction">
<!-- Name completed by histogram_suffixes
     name="AutofillFieldPredictionSource" -->

  <owner>rogerm@chromium.org</owner>
  <summary>
    Predicted and actual form field type. This is a computed sparse histogram
    where the value is ((predicted &lt;&lt; 16)| actual). Predicted and actual
    are taken from the autofill::ServerFieldType enumeration.
  </summary>
</histogram>

<histogram name="Autofill.FieldPredictionQuality.Aggregate"
    enum="AutofillFieldPredictionQuality">
<!-- Name completed by histogram_suffixes
     name="AutofillFieldPredictionSource" -->

  <owner>rogerm@chromium.org</owner>
  <summary>
    Aggregate Autofill field-type prediction outcomes. See
    https://en.wikipedia.org/wiki/Confusion_matrix for an explanation of the
    values.
  </summary>
</histogram>

<histogram name="Autofill.FieldPredictionQuality.ByFieldType"
    enum="AutofillFieldPredictionQualityByFieldType">
<!-- Name completed by histogram_suffixes
     name="AutofillFieldPredictionSource" -->

  <owner>rogerm@chromium.org</owner>
  <summary>
    Autofill field-type prediction outcomes, broken down by field type. See
    https://en.wikipedia.org/wiki/Confusion_matrix for an explanation of the
    values.
  </summary>
</histogram>

<histogram name="Autofill.FillDuration.FromInteraction.WithAutofill">
  <owner>isherman@chromium.org</owner>
  <summary>
    Time elapsed between the user's first interaction with a form and the form's
    submission, for an autofilled form.
  </summary>
</histogram>

<histogram name="Autofill.FillDuration.FromInteraction.WithoutAutofill">
  <owner>isherman@chromium.org</owner>
  <summary>
    Time elapsed between the user's first interaction with a form and the form's
    submission, for a non-autofilled form.
  </summary>
</histogram>

<histogram name="Autofill.FillDuration.FromLoad.WithAutofill">
  <owner>isherman@chromium.org</owner>
  <summary>
    Time elapsed between form load and form submission, for an autofilled form.
  </summary>
</histogram>

<histogram name="Autofill.FillDuration.FromLoad.WithoutAutofill">
  <owner>isherman@chromium.org</owner>
  <summary>
    Time elapsed between form load and form submission, for a non-autofilled
    form.
  </summary>
</histogram>

<histogram name="Autofill.FormEvents.Address" enum="AutofillFormEvent">
  <owner>waltercacau@chromium.org</owner>
  <summary>
    Autofill form events for address forms. These are recorded when the user
    interacts with a form requesting an address.
  </summary>
  <details>
    Important caveat about submission metrics: - Submission using autofill data
    is determined by simply evaluating if there was a fill operation in this
    page. So, if the user filled with local data, completed erased or modified
    the data after and then submitted, we would only emit one &quot;Submitted
    with server suggestion filled (once)&quot;; - The submission segmentation
    works by checking what kind of data was last filled for this type of form in
    the page load. So, if a user initially filled with local data and after that
    filled with server, we will only emit &quot;Submitted with server suggestion
    filled (once)&quot;.
  </details>
</histogram>

<histogram name="Autofill.FormEvents.CreditCard" enum="AutofillFormEvent">
  <owner>waltercacau@chromium.org</owner>
  <summary>
    Autofill form events for credit card forms. These are recorded when the user
    interacts with a form requesting a credit card.
  </summary>
  <details>
    Important caveat about submission metrics: - Submission using autofill data
    is determined by simply evaluating if there was a fill operation in this
    page. So, if the user filled with local data, completed erased or modified
    the data after and then submitted, we would only emit one &quot;Submitted
    with server suggestion filled (once)&quot;; - The submission segmentation
    works by checking what kind of data was last filled for this type of form in
    the page load. So, if a user initially filled with local data and after that
    filled with server, we will only emit &quot;Submitted with server suggestion
    filled (once)&quot;.
  </details>
</histogram>

<histogram name="Autofill.FormEvents.CreditCard.BankNameDisplayed"
    enum="BankNameDisplayedFormEvent">
  <owner>szhangcs@google.com</owner>
  <summary>
    Autofill form events for credit card forms. These are recorded when the user
    interacts with a form requesting a credit card, a dropdown of suggestions is
    shown and at least one of the suggestions has a bank name. Form events are
    logged at most once per page load.
  </summary>
  <details>
    These metrics are used to measure the impact of the bank name experiment.
    They are used to calculate the CTR of the autofill UI with bank names
    available. Not all credit cards will have bank names even if we launch the
    experiment. With these metrics we can run the experiment on 2 groups. For
    one group, we will show bank names if available. For the other, we won't
    shown.
  </details>
</histogram>

<histogram name="Autofill.FormEvents.CreditCard.OnNonsecurePage"
    enum="AutofillFormEvent">
  <owner>estark@chromium.org</owner>
  <summary>
    Autofill form events for credit card forms on nonsecure pages. These are
    recorded when the user interacts with a form requesting a credit card.
  </summary>
  <details>
    Important caveat about submission metrics: - Submission using autofill data
    is determined by simply evaluating if there was a fill operation in this
    page. So, if the user filled with local data, completed erased or modified
    the data after and then submitted, we would only emit one &quot;Submitted
    with server suggestion filled (once)&quot;; - The submission segmentation
    works by checking what kind of data was last filled for this type of form in
    the page load. So, if a user initially filled with local data and after that
    filled with server, we will only emit &quot;Submitted with server suggestion
    filled (once)&quot;.
  </details>
</histogram>

<histogram name="Autofill.FormSubmittedState" enum="AutofillFormSubmittedState">
  <owner>sebsg@chromium.org</owner>
  <summary>The autofill state related to a submitted form.</summary>
</histogram>

<histogram name="Autofill.HasModifiedProfile.CreditCardFormSubmission"
    enum="Boolean">
  <owner>csashi@google.com</owner>
  <owner>jsaul@google.com</owner>
  <owner>sebsg@chromium.org</owner>
  <summary>
    Whether user modified an address profile shortly before submitting a credit
    card form.
  </summary>
</histogram>

<histogram name="Autofill.HiddenOrPresentationalSelectFieldsFilled"
    enum="BooleanHiddenPresentationalAutofilled">
  <owner>parastoog@chromium.org</owner>
  <summary>
    Logs when a hidden or presentational field is autofilled. The hidden or
    presentational fields are only autofilled for 'select' fields to support
    synthetic fields.
  </summary>
</histogram>

<histogram name="Autofill.IcuCollatorCreationSuccess" enum="BooleanSuccess">
  <owner>mathp@chromium.org</owner>
  <summary>
    Tracks whether Autofill was able to create the ICU collator successfully.
  </summary>
</histogram>

<histogram name="Autofill.InvalidProfileData.UsedForMetrics" enum="Boolean">
  <owner>rogerm@chromium.org</owner>
  <summary>
    Tracks whether or not autofill suppressed sending votes or calculating
    quality metrics because the profile data was marked as invalid. Logged
    during field-type validation if/when a field marked as invalid is found to
    match the submitted data.
  </summary>
</histogram>

<histogram name="Autofill.InvalidProfileData.UsedForSuggestion" enum="Boolean">
  <owner>rogerm@chromium.org</owner>
  <summary>
    Tracks whether or not autofill suppressed offering an autofill suggestion
    because the profile data was marked as invalid. Logged during autofill
    suggestion generation when a suggestion is about to generated based on a
    field marked as invalid.
  </summary>
</histogram>

<histogram name="Autofill.IsEnabled.PageLoad" enum="BooleanEnabled">
  <owner>isherman@chromium.org</owner>
  <summary>
    Tracks whether Autofill is enabled on page load for a page containing forms.
  </summary>
</histogram>

<histogram name="Autofill.IsEnabled.Startup" enum="BooleanEnabled">
  <owner>isherman@chromium.org</owner>
  <summary>Tracks whether Autofill is enabled when Chrome launches.</summary>
</histogram>

<histogram name="Autofill.KeyboardAccessoryButtonsIOS_ScreenReaderOff"
    enum="AutofillKeyboardAccessoryButtonsIOS">
  <owner>mahmadi@chromium.org</owner>
  <summary>
    [iOS] Measures the frequency of button presses on the iOS Autofill keyboard
    accessory view when VoiceOver is off.
  </summary>
</histogram>

<histogram name="Autofill.KeyboardAccessoryButtonsIOS_ScreenReaderOn"
    enum="AutofillKeyboardAccessoryButtonsIOS">
  <owner>mahmadi@chromium.org</owner>
  <summary>
    [iOS] Measures the frequency of button presses on the iOS Autofill keyboard
    accessory view when VoiceOver is on.
  </summary>
</histogram>

<histogram name="Autofill.LocalCardMigrationBubbleOffer"
    enum="AutofillLocalCardMigrationBubbleOffer">
  <owner>siyua@chromium.org</owner>
  <summary>
    Record events related to bubble showing. Logged when bubble is requested or
    is actually shown to users.
  </summary>
</histogram>

<histogram name="Autofill.LocalCardMigrationBubbleUserInteraction"
    enum="AutofillLocalCardMigrationBubbleUserInteraction">
  <owner>siyua@chromium.org</owner>
  <summary>Record how bubble is closed by different user interactions.</summary>
</histogram>

<histogram name="Autofill.MacAddressBook" enum="AutofillMacAddressBook">
  <obsolete>
    Deprecated as of 8/2015.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    When Chrome tries to access the user's Address Book, OSX presents a blocking
    dialog which disrupts the user experience. A new Chrome feature has been
    introduced wherein Chrome only shows this blocking dialog if the user
    explicitly asked Chrome to access the user's Address Book. If a form's field
    looks like it might support Autofill suggestions from the user's Address
    Book and there are no other suggestions, Chrome shows an Autofill entry that
    prompts the user to give Chrome access to the user's Address Book. This
    histogram tracks the frequency that this Autofill entry is presented, and
    the frequency that this Autofill entry is selected.
  </summary>
</histogram>

<histogram name="Autofill.MacAddressBook.AcceptedSuggestionIsFromAddressBook"
    enum="BooleanFromAddressBook">
  <obsolete>
    Deprecated as of 8/2015.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    This metric is emitted each time the user accepts an Autofill suggestion. It
    records whether the result is from the Address Book.
  </summary>
</histogram>

<histogram name="Autofill.MacAddressBook.AccessTime" units="ms">
  <obsolete>
    Deprecated as of 8/2015.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    The amount of time spent accessing the OSX Address Book the first time after
    Chrome was launched. If this time is larger than ~100ms, this it is likely
    that the user was shown a blocking, modal dialog.
  </summary>
</histogram>

<histogram name="Autofill.MacAddressBook.ContainedMeCard"
    enum="BooleanContainedMeCard">
  <obsolete>
    Deprecated as of 8/2015.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    After a Chrome is given access to the Mac Address Book, whether the Address
    Book contained a Me card.
  </summary>
</histogram>

<histogram name="Autofill.MacAddressBook.MeCard.HadAddress"
    enum="BooleanHadAddress">
  <obsolete>
    Deprecated as of 8/2015.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    When Chrome is given access to the Me Card of the Address Book, whether the
    card has an address that contained a street number and either a city or zip
    code.
  </summary>
</histogram>

<histogram name="Autofill.MacAddressBook.MeCard.HadEmail"
    enum="BooleanHadEmail">
  <obsolete>
    Deprecated as of 8/2015.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    When Chrome is given access to the Me Card of the Address Book, whether the
    card has an email.
  </summary>
</histogram>

<histogram name="Autofill.MacAddressBook.MeCard.HadName" enum="BooleanHadName">
  <obsolete>
    Deprecated as of 8/2015.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    When Chrome is given access to the Me Card of the Address Book, whether the
    card has a name.
  </summary>
</histogram>

<histogram name="Autofill.MacAddressBook.MeCard.HadPhoneNumber"
    enum="BooleanHadPhoneNumber">
  <obsolete>
    Deprecated as of 8/2015.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    When Chrome is given access to the Me Card of the Address Book, whether the
    card has a phone number.
  </summary>
</histogram>

<histogram name="Autofill.MacAddressBook.NumShowsBeforeSelected">
  <obsolete>
    Deprecated as of 8/2015.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    The number of times that the access Address Book prompt has been shown when
    the user selects the prompt.
  </summary>
</histogram>

<histogram name="Autofill.NumberOfEditedAutofilledFieldsAtSubmission"
    units="fields">
  <owner>mathp@chromium.org</owner>
  <summary>
    The number of autofilled fields that were subsequently edited prior to the
    form being submitted.
  </summary>
</histogram>

<histogram name="Autofill.NumberOfProfilesConsideredForDedupe" units="profiles">
  <owner>mathp@chromium.org</owner>
  <summary>
    The number of Autofill profiles that have been considered for deduplication.
  </summary>
</histogram>

<histogram name="Autofill.NumberOfProfilesRemovedDuringDedupe" units="profiles">
  <owner>mathp@chromium.org</owner>
  <summary>
    The number of Autofill profiles that have been removed during deduplication.
  </summary>
</histogram>

<histogram name="Autofill.NumElementsMatchesNumFields" enum="Boolean">
  <owner>rogerm@chromium.org</owner>
  <summary>
    Records whether the number of fillable form elements matches the number of
    fields in the form's description. Instances where this is recorded as False,
    denote cases where autofill failed to preview/fill an autofill suggestion.
    This can happen when a fields is filtered out of a formless form.
  </summary>
</histogram>

<histogram name="Autofill.PasswordFormQueryVolume"
    enum="PasswordFormQueryVolume">
  <obsolete>
    Deprecated 10/2015.
  </obsolete>
  <owner>dvadym@chromium.org</owner>
  <owner>gcasto@chromium.org</owner>
  <summary>
    Tracks the increased load on the Autofill server if the restriction on
    querying for password forms with fewer than 3 fields were omitted.
  </summary>
</histogram>

<histogram name="Autofill.PayloadCompressionRatio" units="%">
  <obsolete>
    Deprecated as of 1/2016, autofill payload compression was removed.
  </obsolete>
  <owner>mathp@chromium.org</owner>
  <summary>
    Compression ratio of the query and upload payload that are sent to the
    Autofill server. The payload is compressed using gzip.
  </summary>
</histogram>

<histogram name="Autofill.ProfileActionOnFormSubmitted"
    enum="AutofillProfileAction">
  <owner>sebsg@chromium.org</owner>
  <summary>
    The profile action that took place when a form was submitted.
  </summary>
</histogram>

<histogram name="AutoFill.ProfileCount">
  <obsolete>
    Deprecated as of 3/2011, replaced by Autofill.StoredProfileCount.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The number of Autofill address profiles a user has.</summary>
</histogram>

<histogram name="AutoFill.Quality" enum="AutofillQuality">
  <obsolete>
    Deprecated as of 3/2011, replaced by Autofill.Quality.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The quality of the AutoFill implementation.</summary>
</histogram>

<histogram name="Autofill.Quality" enum="AutofillQuality">
  <obsolete>
    Deprecated as of 2/2014 (M35), replaced by Autofill.UserHappiness.
  </obsolete>
  <owner>isherman@chromium.org</owner>
  <summary>The quality of the Autofill implementation.</summary>
</histogram>

<histogram name="Autofill.Quality.HeuristicType" enum="AutofillTypeQuality">
  <obsolete>
    Deprecated as of 6/2017, replaced by
    Autofill.FieldPredictionQuality.Aggregate.Heuristic.
  </obsolete>
  <owner>isherman@chromium.org</owner>
  <summary>The quality of Autofill's heuristic field type detection.</summary>
</histogram>

<histogram name="Autofill.Quality.HeuristicType.ByFieldType"
    enum="AutofillTypeQualityByFieldType">
  <obsolete>
    Deprecated as of 6/2017, replaced by
    Autofill.FieldPredictionQuality.ByFieldType.Heuristic.
  </obsolete>
  <owner>isherman@chromium.org</owner>
  <summary>
    The quality of Autofill's heuristic field type detection, broken down by the
    specific field type.  Fields with multiple possible types (based on the
    stored Autofill data) are logged as having ambiguous type.
  </summary>
</histogram>

<histogram name="Autofill.Quality.PredictedType" enum="AutofillTypeQuality">
  <obsolete>
    Deprecated as of 6/2017, replaced by
    Autofill.FieldPredictionQuality.Aggregate.Overall.
  </obsolete>
  <owner>isherman@chromium.org</owner>
  <summary>The overall quality of the Autofill field type predictions.</summary>
</histogram>

<histogram name="Autofill.Quality.PredictedType.ByFieldType"
    enum="AutofillTypeQualityByFieldType">
  <obsolete>
    Deprecated as of 6/2017, replaced by
    Autofill.FieldPredictionQuality.ByFieldType.Overall.
  </obsolete>
  <owner>isherman@chromium.org</owner>
  <summary>
    The overall quality of the Autofill field type predictions, broken down by
    the specific field type.  Fields with multiple possible types (based on the
    stored Autofill data) are logged as having ambiguous type.
  </summary>
</histogram>

<histogram name="Autofill.Quality.ServerType" enum="AutofillTypeQuality">
  <obsolete>
    Deprecated as of 6/2017, replaced by
    Autofill.FieldPredictionQuality.Aggregate.Server.
  </obsolete>
  <owner>isherman@chromium.org</owner>
  <summary>The quality of the Autofill server's field type detection.</summary>
</histogram>

<histogram name="Autofill.Quality.ServerType.ByFieldType"
    enum="AutofillTypeQualityByFieldType">
  <obsolete>
    Deprecated as of 6/2017, replaced by
    Autofill.FieldPredictionQuality.ByFieldType.Server.
  </obsolete>
  <owner>isherman@chromium.org</owner>
  <summary>
    The quality of the Autofill server's field type detection, broken down by
    the specific field type.  Fields with multiple possible types (based on the
    stored Autofill data) are logged as having ambiguous type.
  </summary>
</histogram>

<histogram name="Autofill.QueriedCreditCardFormIsSecure" enum="BooleanSecure">
  <owner>mathp@chromium.org</owner>
  <summary>
    For credit card forms that are queried for Autofill, a ratio of how many are
    within secure contexts (which includes mixed passive content).
  </summary>
</histogram>

<histogram name="Autofill.Query.FailingPayloadSize" units="bytes">
  <owner>rogerm@chromium.org</owner>
  <summary>
    The number of bytes that were sent in a query that subsequently failed. This
    is to help determine the appropriate threshold at which autofill queries
    should switch from GET to POST, and if there are certain sizes of queries
    which are prone to failure.
  </summary>
</histogram>

<histogram name="Autofill.Query.HttpResponseCode" enum="HttpResponseCode">
  <owner>rogerm@chromium.org</owner>
  <summary>The HTTP response code returned on a query.</summary>
</histogram>

<histogram name="Autofill.Query.Method" enum="AutofillQueryMethod">
  <owner>rogerm@chromium.org</owner>
  <summary>The HTTP method used to query the autofill server.</summary>
</histogram>

<histogram name="Autofill.Query.WasInCache" enum="BooleanCacheHit">
  <owner>rogerm@chromium.org</owner>
  <summary>
    Was the autofill query response retrieved from the HTTP cache.
  </summary>
</histogram>

<histogram name="Autofill.RationalizationQuality.PhoneNumber"
    enum="AutofillRationalizationQualityMetric">
  <owner>wuandy@chromium.org</owner>
  <summary>
    The quality of fields rationalization, putting rationalization result into
    good/ok/bad categories.
  </summary>
</histogram>

<histogram name="Autofill.ResetFullServerCards.NumberOfCardsReset"
    units="Cards">
  <owner>sebsg@chromium.org</owner>
  <summary>The number of full server cards that were reset.</summary>
</histogram>

<histogram name="Autofill.ResetFullServerCards.NumberOfCardsReset.DryRun"
    units="Cards">
  <owner>sebsg@chromium.org</owner>
  <summary>The number of full server cards that would have been reset.</summary>
</histogram>

<histogram
    name="Autofill.ResetFullServerCards.SyncServiceNotActiveOnInitialized"
    enum="Boolean">
  <owner>sebsg@chromium.org</owner>
  <summary>
    Records whether a sync service in a not active state is passed to Autofill
    OnSyncServiceInitialized.
  </summary>
</histogram>

<histogram name="Autofill.ResetFullServerCards.SyncServiceNullOnInitialized"
    enum="Boolean">
  <owner>sebsg@chromium.org</owner>
  <summary>
    Records whether a null sync service is passed to Autofill
    OnSyncServiceInitialized.
  </summary>
</histogram>

<histogram name="Autofill.ResetFullServerCards.SyncServiceStatusOnStateChanged"
    enum="SyncUploadState">
  <owner>sebsg@chromium.org</owner>
  <summary>
    Records the sync service state when OnStateChanged is called.
  </summary>
</histogram>

<histogram name="Autofill.SaveCardCardholderNamePrefilled" enum="Boolean">
  <owner>jsaul@google.com</owner>
  <summary>
    If the cardholder name fix flow is shown when credit card upload is offered,
    records if the cardholder name textfield was prefilled with the name from
    the user's Google Account.
  </summary>
</histogram>

<histogram name="Autofill.SaveCardCardholderNameWasEdited" enum="Boolean">
  <owner>jsaul@google.com</owner>
  <summary>
    If the cardholder name fix flow is shown during credit card upload and the
    user accepts upload, logs whether the final cardholder name was changed from
    its prefilled value or not.
  </summary>
</histogram>

<histogram name="Autofill.SaveCardWithFirstAndLastNameComplete" enum="Boolean">
  <owner>sebsg@chromium.org</owner>
<!-- Name completed by histogram_suffixes name="AutofillCreditCardType" -->

  <summary>
    Records if a card was saved from a form that had split name fields.
  </summary>
</histogram>

<histogram name="Autofill.SaveCardWithFirstAndLastNameOffered" enum="Boolean">
  <owner>sebsg@chromium.org</owner>
<!-- Name completed by histogram_suffixes name="AutofillCreditCardType" -->

  <summary>
    Records if a card was offered to be saved from a form that had split name
    fields.
  </summary>
</histogram>

<histogram name="Autofill.SaveCreditCardPrompt"
    enum="AutofillSaveCreditCardPrompt">
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    The relative frequency with which users accept or deny the Autofill save
    credit card prompt.
  </summary>
</histogram>

<histogram name="Autofill.ScanCreditCard.Completed" enum="BooleanCompleted">
  <owner>rouslan@chromium.org</owner>
  <summary>Whether a credit card scan was completed or cancelled.</summary>
</histogram>

<histogram name="Autofill.ScanCreditCard.Duration" units="ms">
  <owner>rouslan@chromium.org</owner>
  <summary>How long a credit card took to scan.</summary>
</histogram>

<histogram name="Autofill.ScanCreditCardPrompt"
    enum="AutofillScanCreditCardPrompt">
  <owner>estade@chromium.org</owner>
  <summary>Usage of the &quot;Scan card&quot; control item.</summary>
</histogram>

<histogram name="Autofill.ServerExperimentId" enum="AutofillExperimentId">
  <obsolete>
    Deprecated as of 6/2011, replaced by Autofill.ServerExperimentId.Query.
  </obsolete>
  <owner>isherman@chromium.org</owner>
  <summary>
    The experiment ID received in response to an Autofill server query.
  </summary>
</histogram>

<histogram name="Autofill.ServerExperimentId.Query" enum="AutofillExperimentId">
  <obsolete>
    Deprecated as of 2/2014 (M35).
  </obsolete>
  <owner>isherman@chromium.org</owner>
  <summary>
    The experiment ID received in response to an Autofill server query.
  </summary>
</histogram>

<histogram name="Autofill.ServerExperimentId.Upload"
    enum="AutofillExperimentId">
  <obsolete>
    Deprecated as of 2/2014 (M35).
  </obsolete>
  <owner>isherman@chromium.org</owner>
  <summary>
    The experiment ID received at the time of an Autofill upload.
  </summary>
</histogram>

<histogram name="AutoFill.ServerQueryResponse" enum="AutofillQueryResult">
  <obsolete>
    Deprecated as of 3/2011, replaced by Autofill.ServerQueryResponse.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The usefulness of AutoFill server information.</summary>
</histogram>

<histogram name="Autofill.ServerQueryResponse" enum="AutofillQueryResult">
  <owner>isherman@chromium.org</owner>
  <summary>The usefulness of Autofill server information.</summary>
</histogram>

<histogram name="Autofill.ServerResponseHasDataForForm"
    enum="BooleanHadPredictions">
  <owner>mathp@chromium.org</owner>
  <summary>
    Tracks whether Autofill server had at least some prediction data for a given
    form at query response time.
  </summary>
</histogram>

<histogram name="Autofill.StoredCreditCardCount" units="cards">
  <owner>rogerm@chromium.org</owner>
<!-- Name completed by histogram_suffixes name="AutofillCreditCardType" -->

  <summary>
    The number of credit cards a user has stored, measured at Chrome profile
    launch time.
  </summary>
</histogram>

<histogram name="Autofill.StoredCreditCardDisusedCount" units="cards">
  <owner>rogerm@chromium.org</owner>
<!-- Name completed by histogram_suffixes name="AutofillCreditCardType" -->

  <summary>
    The number of disused credit cards a user has stored, measured at Chrome
    profile launch time. This is only reported for users who have at least one
    stored credit card.
  </summary>
</histogram>

<histogram name="Autofill.StoredLocalCreditCardCount" units="cards">
  <owner>mathp@chromium.org</owner>
  <summary>
    The number of local credit cards a user has stored, measured at Chrome
    profile launch time.
  </summary>
</histogram>

<histogram name="Autofill.StoredProfileCount">
  <owner>isherman@chromium.org</owner>
  <summary>
    The number of Autofill addresses a user has stored, measured at launch time.
  </summary>
</histogram>

<histogram name="Autofill.StoredProfileCountAtAutofillableFormSubmission">
  <owner>mathp@chromium.org</owner>
  <summary>
    The number of Autofill addresses a user has stored, measured when an
    autofillable form is submitted.
  </summary>
</histogram>

<histogram name="Autofill.StoredProfileDisusedCount">
  <owner>rogerm@chromium.org</owner>
  <summary>
    The number of stored Autofill address profiles which have not been used in a
    sufficiently long time for autofill to consider them disused. Measured once
    per Chrome user profile launch.
  </summary>
</histogram>

<histogram name="Autofill.StoredServerCreditCardCount" units="cards">
  <owner>mathp@chromium.org</owner>
  <summary>
    The number of server credit cards a user has stored, measured at Chrome
    profile launch time.
  </summary>
</histogram>

<histogram name="Autofill.SubmittedCardState" enum="AutofillSubmittedCardState">
  <owner>dlkumar@google.com</owner>
  <summary>
    Metric to measure credit card state when form is submitted, specifically if
    it had a valid card number and/or expiration date.
  </summary>
</histogram>

<histogram name="Autofill.SubmittedServerCardExpirationStatus"
    enum="AutofillSubmittedServerCardExpirationStatus">
  <owner>jsaul@google.com</owner>
  <summary>
    Metric to measure if a submitted card's expiration date matches the same
    server card's expiration date (unmasked or not).  Cards are considered to be
    the same if they have the same card number (if unmasked) or if they have the
    same network and last four digits (if masked).
  </summary>
</histogram>

<histogram name="Autofill.SuggestionAcceptedIndex" units="position">
  <owner>mathp@chromium.org</owner>
  <summary>The index of the accepted Autofill suggestion in the popup.</summary>
</histogram>

<histogram name="Autofill.SuggestionAcceptedIndex.Autocomplete"
    units="position">
  <owner>mathp@chromium.org</owner>
  <summary>
    The index of the accepted Autocomplete suggestion in the popup.
  </summary>
</histogram>

<histogram name="Autofill.Timing.DetermineHeuristicTypes" units="ms">
  <owner>kenjitoyama@chromium.org</owner>
  <summary>
    Number of milliseconds passed between the start and end of
    FormStructure::DetermineHeuristicTypes().
  </summary>
</histogram>

<histogram name="Autofill.Timing.ParseForm" units="ms">
  <owner>kenjitoyama@chromium.org</owner>
  <summary>
    Number of milliseconds passed between the start and end of parsing a single
    form.
  </summary>
</histogram>

<histogram name="Autofill.Unknown.FailingPayloadSize" units="bytes">
  <owner>rogerm@chromium.org</owner>
  <summary>
    The number of bytes that were sent in a request for which the download
    manager seems to have lost the request type. This should never be logged.
  </summary>
</histogram>

<histogram name="Autofill.Unknown.HttpResponseCode" enum="HttpResponseCode">
  <owner>rogerm@chromium.org</owner>
  <summary>
    The HTTP response code returned on a request for which the download manager
    seems to have lost the request type. This should never be logged.
  </summary>
</histogram>

<histogram name="Autofill.UnmaskPrompt.Duration" units="ms">
  <owner>waltercacau@chromium.org</owner>
  <summary>
    Duration of the interaction with the UnmaskPrompt since it was shown until
    it was closed. This prompt is triggered when a user selects a masked card in
    an autofill dropdown.
  </summary>
</histogram>

<histogram name="Autofill.UnmaskPrompt.Events" enum="AutofillUnmaskPromptEvent">
  <owner>waltercacau@chromium.org</owner>
  <summary>
    Events tracking the usage of the unmasking prompt. This prompt is triggered
    when a user selects a masked card in a autofill dropdown.
  </summary>
</histogram>

<histogram name="Autofill.UnmaskPrompt.GetRealPanDuration" units="ms">
  <owner>waltercacau@chromium.org</owner>
  <summary>
    Duration of the GetRealPan API call. This API call is triggered by the
    unmasking prompt when the user types information to verify their ownership
    of the card being fetched.
  </summary>
</histogram>

<histogram name="Autofill.UnmaskPrompt.GetRealPanResult"
    enum="AutofillGetRealPanResult">
  <owner>waltercacau@chromium.org</owner>
  <summary>
    Tracks the result of the GetRealPan API call. This API call is triggered by
    the unmasking prompt when the user types information to verify their
    ownership of the card being fetched.
  </summary>
</histogram>

<histogram name="Autofill.UnmaskPrompt.TimeBeforeAbandonUnmasking" units="ms">
  <owner>waltercacau@chromium.org</owner>
  <summary>
    Time the user waited before abandoning an unmasking operation. In such a
    scenario, the user is cancelling a pending unmasking operation (possibly
    because it is taking too long).  The time measured here corresponds to the
    time between the user clicking the &quot;Verify&quot; button and then
    clicking &quot;Cancel&quot;.
  </summary>
</histogram>

<histogram name="Autofill.UnmaskPrompt.UnmaskingDuration" units="ms">
  <owner>waltercacau@chromium.org</owner>
  <summary>
    Duration between the user clicking the Verify button within the unmasking
    prompt until we get a response back from the server. This prompt is
    triggered when a user selects a masked card in an autofill dropdown.
  </summary>
</histogram>

<histogram name="Autofill.UnownedFieldsWereFiltered" enum="Boolean">
  <owner>rogerm@chromium.org</owner>
  <summary>
    Records incidents where an implicit (formless) form has elements filtered
    out of it. This happens to unowned fields (directly embedded in the page
    with no enclosing &lt;form&gt; tag) without autocomplete attributes if
    formless forms are restricted to &quot;checkout&quot; pages. Logged when
    parsing forms/fields.
  </summary>
</histogram>

<histogram name="Autofill.Upload.FailingPayloadSize" units="bytes">
  <owner>rogerm@chromium.org</owner>
  <summary>
    The number of bytes that were sent in an upload that subsequently failed.
    This is to help determine if there are certain upload sizes which are prone
    to failure.
  </summary>
</histogram>

<histogram name="Autofill.Upload.HttpResponseCode" enum="HttpResponseCode">
  <owner>rogerm@chromium.org</owner>
  <summary>The HTTP response code returned on an upload.</summary>
</histogram>

<histogram name="Autofill.UploadAcceptedCardOrigin"
    enum="UploadAcceptedCardOrigin">
  <owner>jsaul@google.com</owner>
  <summary>
    Measures if a card for which upload was accepted is already stored as a
    local card on the device or if it has not yet been seen.
  </summary>
</histogram>

<histogram name="Autofill.UploadOfferedCardOrigin"
    enum="UploadOfferedCardOrigin">
  <owner>jsaul@google.com</owner>
  <summary>
    Measures if a card for which upload was offered is already stored as a local
    on the device or if it has not yet been seen.
  </summary>
</histogram>

<histogram name="Autofill.UserHappiness" enum="AutofillUserHappiness">
  <owner>isherman@chromium.org</owner>
  <summary>
    Measures the frequency of various events in the Autofill user interaction
    flow.  By comparing frequencies, we can compute several interesting
    &quot;user happiness&quot; metrics.
  </summary>
</histogram>

<histogram name="Autofill.WalletAddressConversionType"
    enum="AutofillWalletAddressConversionType">
  <owner>sebsg@chromium.org</owner>
  <summary>
    Tracks how the different wallet addresses are converted to local autofill
    profiles.
  </summary>
</histogram>

<histogram name="Autofill.WalletAddressesAdded" units="addresses">
  <owner>sebsg@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <summary>
    The number of Wallet addresses that were added to Chrome via Sync. Recorded
    when receiving an AUTOFILL_WALLET_DATA update from the Sync server.
  </summary>
  <details>
    Can probably be removed around Q1 2019, after project Dice has rolled out.
  </details>
</histogram>

<histogram name="Autofill.WalletAddressesAddedOrRemoved" units="addresses">
  <owner>sebsg@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <summary>
    The total number of Wallet addresses that were added to or removed from
    Chrome via Sync. Recorded when receiving an AUTOFILL_WALLET_DATA update from
    the Sync server.
  </summary>
  <details>
    Can probably be removed around Q1 2019, after project Dice has rolled out.
  </details>
</histogram>

<histogram name="Autofill.WalletAddressesRemoved" units="addresses">
  <owner>sebsg@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <summary>
    The number of Wallet addresses that were removed from Chrome via Sync.
    Recorded when receiving an AUTOFILL_WALLET_DATA update from the Sync server.
  </summary>
  <details>
    Can probably be removed around Q1 2019, after project Dice has rolled out.
  </details>
</histogram>

<histogram name="Autofill.WalletCardsAdded" units="credit cards">
  <owner>sebsg@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <summary>
    The number of Wallet credit cards that were added to Chrome via Sync.
    Recorded when receiving an AUTOFILL_WALLET_DATA update from the Sync server.
  </summary>
  <details>
    Can probably be removed around Q1 2019, after project Dice has rolled out.
  </details>
</histogram>

<histogram name="Autofill.WalletCardsAddedOrRemoved" units="credit cards">
  <owner>sebsg@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <summary>
    The total number of Wallet credit cards that were added to or removed from
    Chrome via Sync. Recorded when receiving an AUTOFILL_WALLET_DATA update from
    the Sync server.
  </summary>
  <details>
    Can probably be removed around Q1 2019, after project Dice has rolled out.
  </details>
</histogram>

<histogram name="Autofill.WalletCardsRemoved" units="credit cards">
  <owner>sebsg@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <summary>
    The number of Wallet credit cards that were removed from Chrome via Sync.
    Recorded when receiving an AUTOFILL_WALLET_DATA update from the Sync server.
  </summary>
  <details>
    Can probably be removed around Q1 2019, after project Dice has rolled out.
  </details>
</histogram>

<histogram name="Autofill.WebView.AutofillSession" enum="AutofillSessionStates">
  <owner>michaelbai@chromium.org</owner>
  <summary>Records the state of an autofill session.</summary>
</histogram>

<histogram name="Autofill.WebView.CreatedByActivityContext"
    enum="BooleanEnabled">
  <owner>michaelbai@chromium.org</owner>
  <summary>Whether the autofill is created by activity context.</summary>
</histogram>

<histogram name="Autofill.WebView.Enabled" enum="BooleanEnabled">
  <owner>michaelbai@chromium.org</owner>
  <summary>
    Whether the autofill service is enabled in Android platform.
  </summary>
</histogram>

<histogram name="Autofill.WebView.SubmissionSource"
    enum="AutofillSubmissionSource">
  <owner>michaelbai@chromium.org</owner>
  <summary>Records the source of form submission.</summary>
</histogram>

<histogram name="Autofill.WebView.SuggestionTime" units="ms">
  <owner>michaelbai@chromium.org</owner>
  <summary>The time taken to display suggestion.</summary>
</histogram>

<histogram name="Autofill.WebView.UserChangedAutofilledField"
    enum="BooleanEnabled">
  <owner>michaelbai@chromium.org</owner>
  <summary>Whether the user changed autofilled field.</summary>
</histogram>

<histogram base="true" name="BackgroundFetch.EventDispatchFailure.Dispatch"
    enum="ServiceWorkerStatusCode">
<!-- Name completed by histogram_suffixes name="BackgroundFetchEvents" -->

  <owner>peter@chromium.org</owner>
  <summary>
    Records the Service Worker status code that caused a Background Fetch API
    event to fail dispatching whilst trying to dispatch an event on the active
    Service Worker.
  </summary>
</histogram>

<histogram base="true" name="BackgroundFetch.EventDispatchFailure.FindWorker"
    enum="ServiceWorkerStatusCode">
<!-- Name completed by histogram_suffixes name="BackgroundFetchEvents" -->

  <owner>peter@chromium.org</owner>
  <summary>
    Records the Service Worker status code that caused a Background Fetch API
    event to fail dispatching whilst trying to find the Service Worker.
  </summary>
</histogram>

<histogram base="true" name="BackgroundFetch.EventDispatchFailure.StartWorker"
    enum="ServiceWorkerStatusCode">
<!-- Name completed by histogram_suffixes name="BackgroundFetchEvents" -->

  <owner>peter@chromium.org</owner>
  <summary>
    Records the Service Worker status code that caused a Background Fetch API
    event to fail dispatching whilst trying to start the active Service Worker.
  </summary>
</histogram>

<histogram base="true" name="BackgroundFetch.EventDispatchResult"
    enum="BackgroundFetchEventDispatchResult">
<!-- Name completed by histogram_suffixes name="BackgroundFetchEvents" -->

  <owner>peter@chromium.org</owner>
  <summary>
    Records the result of dispatching one of the Background Fetch API events to
    the Service Worker associated with the event.
  </summary>
</histogram>

<histogram name="BackgroundFetch.RegistrationCreatedError"
    enum="BackgroundFetchError">
  <owner>peter@chromium.org</owner>
  <owner>rayankans@chromium.org</owner>
  <summary>
    Records the error after the Background Fetch Data Manager creates a
    registration.
  </summary>
</histogram>

<histogram name="BackgroundFetch.RegistrationDeletedError"
    enum="BackgroundFetchError">
  <owner>peter@chromium.org</owner>
  <owner>rayankans@chromium.org</owner>
  <summary>
    Records the error after the Background Fetch Data Manager deletes a
    registration.
  </summary>
</histogram>

<histogram name="BackgroundFetch.SchedulerFinishedError"
    enum="BackgroundFetchError">
  <owner>peter@chromium.org</owner>
  <owner>rayankans@chromium.org</owner>
  <summary>
    Records the error after the Background Fetch Data Manager marks a
    registration for deletion. This is called when the Scheduler Controller is
    finished.
  </summary>
</histogram>

<histogram name="BackgroundMode.BackgroundApplicationsCount">
  <owner>atwilson@chromium.org</owner>
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>
    The number of background applications (extensions) for a profile that were
    loaded after the profile was registered with the BackgroundModeManager.
  </summary>
</histogram>

<histogram name="BackgroundMode.BackgroundModeEnabledPrefChanged"
    enum="BooleanEnabled">
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>
    Logged if BackgroundModeManager is running and listening for pref changes,
    and the pref does indeed change. The new value is logged.
  </summary>
</histogram>

<histogram name="BackgroundMode.MenuItemClick" enum="BackgroundModeMenuItem">
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>
    Logged when an item in the system tray icon menu is clicked.
  </summary>
</histogram>

<histogram name="BackgroundMode.OnStartup.AutoLaunchState"
    enum="AutoLaunchState" expires_after="2018-08-30">
  <owner>gab@chromium.org</owner>
  <summary>
    Logged during BackgroundModeManager's initialization. Indicates the
    AutoLaunchState the current browser process was launched in.
  </summary>
</histogram>

<histogram name="BackgroundMode.OnStartup.IsBackgroundModePrefEnabled"
    enum="BooleanEnabled" expires_after="2018-08-30">
  <owner>gab@chromium.org</owner>
  <summary>
    Logged during BackgroundModeManager's initialization. Indicates the state of
    the kBackgroundModeEnabled pref on startup.
  </summary>
</histogram>

<histogram name="BackgroundMode.TimeBeforeOptimizedRestart" units="ms">
  <owner>dgn@chromium.org</owner>
  <summary>
    The duration of a session before the browser got restarted in the background
    by the BackgroundOptimizer to purge the memory.
  </summary>
</histogram>

<histogram name="BackgroundSync.Event.BatchSize">
  <owner>iclelland@chromium.org</owner>
  <summary>
    Records the number of sync events which were fired in a batch. A batch is
    defined as the set of sync events dispatched at the same time by the
    BackgroundSyncManager. One-shots usually run individually (a batch of one),
    unless the device was offline and multiple are waiting for the device to go
    back online.
  </summary>
</histogram>

<histogram name="BackgroundSync.Event.OneShotResult" enum="BooleanSuccess">
  <obsolete>
    As of 10/2015 this has been replaced by
    BackgroundSync.Event.OneShotResultPattern.
  </obsolete>
  <owner>iclelland@chromium.org</owner>
  <summary>Records whether a one-shot sync event succeeded or failed.</summary>
</histogram>

<histogram name="BackgroundSync.Event.OneShotResultPattern"
    enum="BackgroundSyncResultPattern">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Records whether a periodic sync event succeeded or failed and whether the
    sync event finished in the foreground or background.
  </summary>
  <details>
    A sync event finished in the foreground if the associated Service Worker
    Registration has a client at the time that the event finished.
  </details>
</histogram>

<histogram name="BackgroundSync.Event.OneShotStartedInForeground"
    enum="BooleanInForeground">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Records whether a one-shot sync started firing in the foreground or
    background. Called shortly before the event is fired.
  </summary>
</histogram>

<histogram name="BackgroundSync.Event.PeriodicResult" enum="BooleanSuccess">
  <obsolete>
    As of 10/2015 this has been replaced by
    BackgroundSync.Event.PeriodicResultPattern.
  </obsolete>
  <owner>iclelland@chromium.org</owner>
  <summary>Records whether a periodic sync event succeeded or failed.</summary>
</histogram>

<histogram name="BackgroundSync.Event.PeriodicResultPattern"
    enum="BackgroundSyncResultPattern">
  <obsolete>
    Stopped recording as of 1/2016.
  </obsolete>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Records whether a one-shot sync event succeeded or failed and whether the
    sync event finished in the foreground or background.
  </summary>
  <details>
    A sync event finished in the foreground if the associated Service Worker
    Registration has a client at the time that the event finished.
  </details>
</histogram>

<histogram name="BackgroundSync.Event.PeriodicStartedInForeground"
    enum="BooleanInForeground">
  <obsolete>
    Stopped recording as of 1/2016.
  </obsolete>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Records whether a periodic sync event started firing in the foreground or
    background. Called shortly before the event is fired.
  </summary>
</histogram>

<histogram name="BackgroundSync.Event.Time" units="ms">
  <owner>iclelland@chromium.org</owner>
  <summary>
    Time taken to execute a batch of sync events. A batch is defined as the set
    of sync events dispatched at the same time by the BackgroundSyncManager.
    Periodic syncs often run in a batch. One-shots usually run individually (a
    batch of one), unless the device was offline and multiple are waiting for
    the device to go back online.
  </summary>
</histogram>

<histogram name="BackgroundSync.LaunchTask.CancelSuccess" enum="BooleanSuccess">
  <owner>iclelland@chromium.org</owner>
  <summary>
    Records the result of attempting to cancel a future browser launch using the
    GCM Network Manager on Android.
  </summary>
</histogram>

<histogram name="BackgroundSync.LaunchTask.PlayServicesAvailable"
    enum="Boolean">
  <owner>iclelland@chromium.org</owner>
  <summary>
    Records whether Google Play Services is available to the Background Sync
    system on Android, for scheduling future sync events when the browser is not
    running. This will be logged at most once per run.
  </summary>
</histogram>

<histogram name="BackgroundSync.LaunchTask.ScheduleSuccess"
    enum="BooleanSuccess">
  <owner>iclelland@chromium.org</owner>
  <summary>
    Records the result of attempting to schedule a future browser launch using
    the GCM Network Manager on Android.
  </summary>
</histogram>

<histogram name="BackgroundSync.NetworkObserver.HasPermission" enum="Boolean">
  <owner>iclelland@chromium.org</owner>
  <summary>
    Records whether the browser has sufficient permissions to create a
    BackgroundSyncNetworkObserver object on Android, at the point when it tries
    to create it. This should never be false, but is being tracked in order to
    help resolve crbug.com/545473.
  </summary>
</histogram>

<histogram name="BackgroundSync.Registration.OneShot"
    enum="BackgroundSyncStatus">
  <owner>iclelland@chromium.org</owner>
  <summary>
    Records the result of attempting to register a one-shot sync.
  </summary>
</histogram>

<histogram name="BackgroundSync.Registration.OneShot.CouldFire"
    enum="BooleanCouldFireImmediately">
  <owner>iclelland@chromium.org</owner>
  <summary>
    Records the result of attempting to register a one-shot sync in a situation
    where the sync could fire immediately.
  </summary>
</histogram>

<histogram name="BackgroundSync.Registration.OneShot.IsDuplicate"
    enum="BooleanRegistrationIsDuplicate">
  <owner>iclelland@chromium.org</owner>
  <summary>
    Records whether a one-shot sync registration exactly duplicates an existing
    registered sync.
  </summary>
</histogram>

<histogram name="BackgroundSync.Registration.Periodic"
    enum="BackgroundSyncStatus">
  <obsolete>
    Stopped recording as of 1/2016.
  </obsolete>
  <owner>iclelland@chromium.org</owner>
  <summary>
    Records the result of attempting to register a periodic sync.
  </summary>
</histogram>

<histogram name="BackgroundSync.Registration.Periodic.IsDuplicate"
    enum="BooleanRegistrationIsDuplicate">
  <obsolete>
    Stopped recording as of 1/2016.
  </obsolete>
  <owner>iclelland@chromium.org</owner>
  <summary>
    Records whether a periodic sync registration exactly duplicates an existing
    registered sync.
  </summary>
</histogram>

<histogram name="BackgroundSync.Unregistration.OneShot"
    enum="BackgroundSyncStatus">
  <obsolete>
    Stopped recording as of 2/2016.
  </obsolete>
  <owner>iclelland@chromium.org</owner>
  <summary>
    Records the result of attempting to unregister a one-shot sync.
  </summary>
</histogram>

<histogram name="BackgroundSync.Unregistration.Periodic"
    enum="BackgroundSyncStatus">
  <obsolete>
    Stopped recording as of 1/2016.
  </obsolete>
  <owner>iclelland@chromium.org</owner>
  <summary>
    Records the result of attempting to unregister a periodic sync.
  </summary>
</histogram>

<histogram name="BatteryStatus.NumberBatteriesLinux"
    enum="BatteryStatusNumberBatteries">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Number of batteries reported by the UPower service on Linux at the start of
    the Battery Status API.
  </summary>
</histogram>

<histogram name="BatteryStatus.NumberBatteriesMac"
    enum="BatteryStatusNumberBatteries">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Number of internal batteries reported by MacOS at the start of the Battery
    Status API.
  </summary>
</histogram>

<histogram name="BatteryStatus.NumberBatteriesWin"
    enum="BatteryStatusNumberBatteriesWin">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Number of batteries reported by Windows at the start of the Battery Status
    API.
  </summary>
</histogram>

<histogram name="BatteryStatus.StartAndroid" enum="BooleanSuccess">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Whether the Battery Status API was successfully started up on Android.
  </summary>
</histogram>

<histogram name="Blacklist.Blocked" enum="DllHash">
  <owner>csharp@chromium.org</owner>
  <summary>
    Records the name hashes of all the dlls that are blocked from the browser
    process.
  </summary>
</histogram>

<histogram name="Blacklist.PatchedInRenderer" enum="BooleanHit">
  <obsolete>
    Removed at 2015 July.
  </obsolete>
  <owner>csharp@chromium.org</owner>
  <summary>
    Counts the number of times a renderer process is started with the browser
    blacklist patch. This should never be hit.
  </summary>
</histogram>

<histogram name="Blacklist.RetryAttempts.Success">
  <owner>csharp@chromium.org</owner>
  <owner>krstnmnlsn@chromium.org</owner>
  <summary>
    Records the number of attempts needed before the blacklist is properly set
    up. This is logged immediately after a successful setup.
  </summary>
</histogram>

<histogram name="Blacklist.Setup" enum="BlacklistSetup">
  <owner>csharp@chromium.org</owner>
  <summary>
    Records the successes and failures when running the browser blacklist setup
    code. Used to determine if the blacklist is working as intended during
    startup (since the blacklist runs before crash reporting is set up). This
    only occurs on Windows.
  </summary>
</histogram>

<histogram name="Blimp.Compositor.CommitSizeKb" units="KB">
  <owner>shaktisahu@chromium.org</owner>
  <summary>
    Records the size of the uncompressed commit messages received by Blimp
    compositor.
  </summary>
</histogram>

<histogram name="Blimp.Connected" enum="BooleanConnected">
  <owner>shaktisahu@chromium.org</owner>
  <summary>
    Records whether connection attempt to the Blimp engine was successful.
  </summary>
</histogram>

<histogram name="Blimp.Supported" enum="BooleanSupported">
  <owner>shaktisahu@chromium.org</owner>
  <summary>Records whether Blimp is supported.</summary>
</histogram>

<histogram name="Blimp.Tab.Visible" enum="BooleanVisible">
  <owner>shaktisahu@chromium.org</owner>
  <summary>Records whenever a Blimp tab toggles visibility.</summary>
</histogram>

<histogram name="Blink.Binding.CreateV8ContextForMainFrame"
    units="microseconds">
  <owner>peria@chromium.org</owner>
  <summary>
    Time spent to create a v8::Context instance during a page loading in the
    main-frame window.

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

<histogram name="Blink.Binding.CreateV8ContextForNonMainFrame"
    units="microseconds">
  <owner>peria@chromium.org</owner>
  <summary>
    Time spent to create a v8::Context instance during a page loading in a
    non-main-frame window, e.g. iframe.

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

<histogram name="Blink.Binding.InitializeMainLocalWindowProxy"
    units="microseconds">
  <owner>peria@chromium.org</owner>
  <summary>
    Time spent initializing LocalWindowProxy during a page loading in main
    windows.

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

<histogram name="Blink.Binding.InitializeMainRemoteWindowProxy"
    units="microseconds">
  <owner>peria@chromium.org</owner>
  <summary>
    Time spent initializing RemoteWindowProxy during a page loading in main
    frame of OOPIF.

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

<histogram name="Blink.Binding.InitializeMainWindowProxy" units="microseconds">
  <obsolete>
    Deprecated as of 03/2017. This metric was split into two metrics depending
    if it figures time for local window proxies or remote ones.
  </obsolete>
  <owner>peria@chromium.org</owner>
  <summary>
    Time spent initializing WindowProxy during a page loading in main windows.
  </summary>
</histogram>

<histogram name="Blink.Binding.InitializeNonMainLocalWindowProxy"
    units="microseconds">
  <owner>peria@chromium.org</owner>
  <summary>
    Time spent initializing LocalWindowProxy during a page loading in non-main
    windows, e.g. iframe.

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

<histogram name="Blink.Binding.InitializeNonMainRemoteWindowProxy"
    units="microseconds">
  <owner>peria@chromium.org</owner>
  <summary>
    Time spent initializing RemoteWindowProxy during a page loading in OOPIF.

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

<histogram name="Blink.Binding.InitializeNonMainWindowProxy"
    units="microseconds">
  <obsolete>
    Deprecated as of 03/2017. This metric was split into two metrics depending
    if it figures time for local window proxies or remote ones.
  </obsolete>
  <owner>peria@chromium.org</owner>
  <summary>
    Time spent initializing WindowProxy during a page loading in non-main
    windows, e.g. iframe.
  </summary>
</histogram>

<histogram name="Blink.Binding.InitializeWindowProxy" units="microseconds">
  <obsolete>
    Deprecated as of 10/2016.  This metric was split into two metrics depending
    if it figures time for main windows.
  </obsolete>
  <owner>peria@chromium.org</owner>
  <summary>Time spent initializing WindowProxy during a page loading.</summary>
</histogram>

<histogram name="Blink.BudgetAPI.QueryBudget" units="budget">
  <owner>peter@chromium.org</owner>
  <summary>
    Whenever the Budget API framework receives a query for the current budget,
    this records the total budget available to the origin, which is an internal
    Chrome value for the amount of background processing an origin can do
    without visibly alerting the user. Scale for the budget is 0 to 100. Care
    should be taken when drawing conclusions from this metric, as budget is
    based on both engagement and usage, so could vary significantly based on
    user behaviour and origin.
  </summary>
</histogram>

<histogram name="Blink.BudgetAPI.Reserve" enum="BooleanSuccess">
  <owner>peter@chromium.org</owner>
  <summary>
    Whenever the Budget API framework receives a request to reserve budget for a
    future background operation, this records whether the reserve request
    succeeded or not.
  </summary>
</histogram>

<histogram name="Blink.Canvas.DrawImage" units="microseconds">
  <owner>junov@chromium.org</owner>
  <summary>
    Time spent on 2D canvas drawImage API call.

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

<histogram name="Blink.Canvas.GetImageData" units="microseconds">
  <owner>junov@chromium.org</owner>
  <summary>
    Time spent on 2D canvas getImageData API call.

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

<histogram name="Blink.Canvas.OffscreenCommitTimer" units="microseconds">
  <owner>junov@chromium.org</owner>
  <owner>xidachen@chromium.org</owner>
  <summary>
    Wall clock durations of OffscreenCanvas.commit() calls.

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

<histogram name="Blink.Canvas.PutImageData" units="microseconds">
  <owner>junov@chromium.org</owner>
  <summary>
    Time spent on 2D canvas putImageData API call.

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

<histogram name="Blink.Canvas.ToBlob.CompleteEncodingDelay"
    units="microseconds">
  <owner>junov@chromium.org</owner>
  <owner>xlai@chromium.org</owner>
  <summary>
    This metric measures the total time spent on completing encoding all the
    rows of an image (jpeg or png), as part of a canvas.toBlob API call.
    Encoding occurs during one or more idle periods on the main thread and the
    waiting time of the next idle period is included in the measurement. If the
    code has swtiched to force encoding path, we will not measure the delay in
    this metric.

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

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

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

<histogram name="Blink.Canvas.ToBlob.IdleEncodeDuration" units="microseconds">
  <obsolete>
    Replaced with Blink.Canvas.ToBlob.CompleteEncodingDelay in 2017/12.
  </obsolete>
  <owner>junov@chromium.org</owner>
  <owner>xlai@chromium.org</owner>
  <summary>
    This metric measures the total time spent on encoding all the rows of an
    image (jpeg or png), excluding the waiting time of next idle periods. This
    is part of a canvas.toBlob API call. Encoding occurs during one or more idle
    periods on the main thread.
  </summary>
</histogram>

<histogram name="Blink.Canvas.ToBlob.IdleTaskStatus" enum="IdleTaskStatus">
  <owner>junov@chromium.org</owner>
  <owner>xlai@chromium.org</owner>
  <summary>
    Records the status of the idle task when finishing a toBlob call.

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

<histogram name="Blink.Canvas.ToBlob.InitiateEncodingDelay"
    units="microseconds">
  <owner>junov@chromium.org</owner>
  <owner>xlai@chromium.org</owner>
  <summary>
    This metric measures the time spent from initiating image encoding (jpeg or
    png) on idle task to the actual execution time of initiation, as part of a
    canvas.toBlob API call.

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

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

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

<histogram name="Blink.Canvas.ToBlobDuration" units="microseconds">
  <owner>junov@chromium.org</owner>
  <owner>xlai@chromium.org</owner>
  <summary>
    Time spent on 2D canvas toBlob API call.

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

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

<histogram name="Blink.Canvas.ToDataURL" units="microseconds">
  <owner>junov@chromium.org</owner>
  <summary>
    Time spent on 2D canvas toDataURL API call.

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

<histogram name="Blink.CheckerableImageCount" enum="CheckerableImageType">
  <obsolete>
    Deprecated on 2018-05-04.
  </obsolete>
  <owner>khushalsagar@chromium.org</owner>
  <summary>
    The number of images which could have been checkered (async decoded) for a
    performance gain, split by the DOM element type on which they were used.
    This is recorded each time an image for an element created by the page is
    loaded, either from the network or the local cache. The browser heuristics
    define an image to be checkerable if it is expected to have a long decode
    duration. Since these images may be on the rendering critical path, decoding
    them asychronously from painting other content can provide better
    performance be reducing overall content checkerboarding.
  </summary>
</histogram>

<histogram name="Blink.ColorGamut.Destination" enum="Gamut">
  <owner>hubbe@chromium.org</owner>
  <summary>Gamut properties of destination color space.</summary>
</histogram>

<histogram name="Blink.ColorGamut.Source" enum="Gamut">
  <owner>hubbe@chromium.org</owner>
  <summary>Gamut properties of image color space.</summary>
</histogram>

<histogram name="Blink.ColorSpace.Destination" enum="Gamma">
  <owner>msarett@chromium.org</owner>
  <summary>Gamma properties of destination color space.</summary>
</histogram>

<histogram name="Blink.ColorSpace.Destination.ExtractedRawData"
    enum="ColorSpaceExtractedRawDataResult">
  <obsolete>
    Merged into Blink.ColorSpace.Destination.ICCResult on 2017-02-28.
  </obsolete>
  <owner>ccameron@chromium.org</owner>
  <summary>
    Whether or not the output color space ICC profile was able to produce raw
    transfer function tables.
  </summary>
</histogram>

<histogram name="Blink.ColorSpace.Destination.ICCResult"
    enum="ICCProfileAnalyzeResult">
  <owner>ccameron@chromium.org</owner>
  <summary>
    The result of analyzing the destiation color space's ICC profile.
  </summary>
</histogram>

<histogram name="Blink.ColorSpace.Destination.LinearFitError">
  <obsolete>
    Linear fit found to be always inaccurate on 2017-02-28.
  </obsolete>
  <owner>ccameron@chromium.org</owner>
  <summary>
    The L-infinity error (in 8-bit values) of the numerical approximation of
    table-based ICC profile transfer functions, when falling back to a linear
    approximation.
  </summary>
</histogram>

<histogram name="Blink.ColorSpace.Destination.Matrix"
    enum="ColorSpaceMatrixResult">
  <obsolete>
    Merged into Blink.ColorSpace.Destination.ICCResult on 2017-02-28.
  </obsolete>
  <owner>ccameron@chromium.org</owner>
  <summary>
    Whether or not to-XYZD50 matrix was extracted from the output color space
    ICC profile.
  </summary>
</histogram>

<histogram name="Blink.ColorSpace.Destination.NonlinearFitConverged"
    enum="ColorSpaceNonlinearFitConverged">
  <obsolete>
    Nonlinear fit code moved to skcms on 2018-04-25.
  </obsolete>
  <owner>ccameron@chromium.org</owner>
  <summary>
    Whether or not the nonlinear least squares fit of the table-based ICC
    profile transfer function for a single channel converged.
  </summary>
</histogram>

<histogram name="Blink.ColorSpace.Destination.NonlinearFitError">
  <obsolete>
    Nonlinear fit code moved to skcms on 2018-04-25.
  </obsolete>
  <owner>ccameron@chromium.org</owner>
  <summary>
    The L-infinity error (in 8-bit values) of the numerical approximation of
    table-based ICC profile transfer functions for a single channel, when the
    nonlinear approximation converged.
  </summary>
</histogram>

<histogram name="Blink.ColorSpace.Destination.NonlinearFitErrorCombined">
  <owner>ccameron@chromium.org</owner>
  <summary>
    The L-infinity error (in 8-bit values) of the numerical approximation of
    table-based ICC profile transfer functions for all channels combined, when
    the nonlinear approximation converged.
  </summary>
</histogram>

<histogram name="Blink.ColorSpace.Destination.Numerical"
    enum="ColorSpaceNumericalResult">
  <obsolete>
    Merged into Blink.ColorSpace.Destination.ICCResult on 2017-02-28.
  </obsolete>
  <owner>ccameron@chromium.org</owner>
  <summary>
    Whether or not the output color space ICC profile has a numerical transfer
    function.
  </summary>
</histogram>

<histogram name="Blink.ColorSpace.Destination.OneMinusTMax">
  <obsolete>
    TMax found to almost always be 1 on 2017-02-28.
  </obsolete>
  <owner>ccameron@chromium.org</owner>
  <summary>
    One minus the maximum value of table-based ICC profile transfer functions as
    an 8-bit fixed-point value. This histogram is temporary, to see if we can
    bake in the assumption that it will almost always be 255.
  </summary>
</histogram>

<histogram name="Blink.ColorSpace.Destination.TMin">
  <obsolete>
    TMin found to almost always be 0 on 2017-02-28.
  </obsolete>
  <owner>ccameron@chromium.org</owner>
  <summary>
    The minimum value of table-based ICC profile transfer functions as an 8-bit
    fixed-point value. This histogram is temporary, to see if we can bake in the
    assumption that it will almost always be 0.
  </summary>
</histogram>

<histogram name="Blink.ColorSpace.Source" enum="Gamma">
  <owner>ccameron@chromium.org</owner>
  <summary>Gamma properties of image color space.</summary>
</histogram>

<histogram base="true" name="Blink.Compositing.LayerPromotionCount">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Number of composited layers based on various reasons. Recorded when a page
    finishes its layer updates.
  </summary>
</histogram>

<histogram name="Blink.Compositing.UpdateTime" units="microseconds">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Time spent updating compositing in the Blink document lifecycle.

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

<histogram name="Blink.CookieJar.SyncCookiesSetTime" units="microseconds">
  <owner>kinuko@chromium.org</owner>
  <owner>dcheng@chromium.org</owner>
  <summary>
    Microseconds per sync IPC call to set cookies.

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

<histogram name="Blink.CookieJar.SyncCookiesTime" units="microseconds">
  <owner>kinuko@chromium.org</owner>
  <owner>dcheng@chromium.org</owner>
  <summary>
    Microseconds per sync IPC call to fetch cookies.

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

<histogram name="Blink.DecodedImage.CanvasExpanded"
    enum="BooleanCanvasExpanded">
  <obsolete>
    Deprecated as of 11/29/2016.
  </obsolete>
  <owner>ryansturm@chromium.org</owner>
  <owner>bengr@google.com</owner>
  <summary>
    The original canvas dimensions were sufficient to determine image size. This
    is logged once per image header decode, which happens typically twice per
    image on the page.
  </summary>
</histogram>

<histogram name="Blink.DecodedImage.EffectiveDimensionsLocation" units="bytes">
  <obsolete>
    Deprecated as of 11/29/2016.
  </obsolete>
  <owner>ryansturm@chromium.org</owner>
  <owner>bengr@google.com</owner>
  <summary>
    How many bytes of the file were read before an image width and height were
    determined. This is logged once per image header decode, which happens
    typically twice per image on the page.
  </summary>
</histogram>

<histogram name="Blink.DecodedImage.Orientation" enum="DecodedImageOrientation">
  <owner>rob.buis@samsung.org</owner>
  <summary>Image orientation inferred during decode.</summary>
</histogram>

<histogram name="Blink.DecodedImage.XCanvasExpansion" units="pixels">
  <obsolete>
    Deprecated as of 11/29/2016.
  </obsolete>
  <owner>ryansturm@chromium.org</owner>
  <owner>bengr@google.com</owner>
  <summary>
    How much the canvas width needed to be expanded as a result of the first
    frame's width and x-offset being larger than the initial canvas width. This
    is logged once per image header decode, which happens typically twice per
    image on the page.
  </summary>
</histogram>

<histogram name="Blink.DecodedImage.YCanvasExpansion" units="pixels">
  <obsolete>
    Deprecated as of 11/29/2016.
  </obsolete>
  <owner>ryansturm@chromium.org</owner>
  <owner>bengr@google.com</owner>
  <summary>
    How much the canvas height needed to be expanded as a result of the first
    frame's height and y-offset being larger than the initial canvas height.
    This is logged once per image header decode, which happens typically twice
    per image on the page.
  </summary>
</histogram>

<histogram name="Blink.DecodedImageType" enum="DecodedImageType">
  <owner>urvang@chromium.org</owner>
  <summary>Image codec inferred during decode.</summary>
</histogram>

<histogram name="Blink.EventListenerDuration.Resize" units="microseconds">
  <obsolete>
    Deprecated 01/2018.
  </obsolete>
  <owner>bokan@chromium.org</owner>
  <summary>
    Time it takes to execute all the `resize` event listeners on a page when a
    resize event is fired. Tracked only for the main frame.
  </summary>
</histogram>

<histogram name="Blink.Fetch.RequestResourceTime" units="microseconds">
  <owner>csharrison@chromium.org</owner>
  <summary>
    The total microseconds spent in ResourceFetcher::requestResource.

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

<histogram name="Blink.Fonts.HarfBuzzFaceZeroCopyAccess" enum="BooleanSuccess">
  <owner>drott@chromium.org</owner>
  <summary>
    Counts success or failure of attempting to access font tables using the zero
    copy instantiation method in the HarfBuzz integration layer. This value is
    only recorded on non-Mac platforms. Reported each time a HarfBuzz face
    object is created.
  </summary>
</histogram>

<histogram name="Blink.Fonts.ShapeCache">
  <owner>eae@chromium.org</owner>
  <summary>
    Total number of entries in all Blink ShapeCache instances. The value is
    reported each time the FontCache::purge() method is called.
  </summary>
</histogram>

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

<histogram name="Blink.Gesture.Merged" enum="GestureMergeState">
  <owner>jyasskin@chromium.org</owner>
  <owner>domenic@google.com</owner>
  <summary>
    How many times two user gesture tokens were merged by UserGestureIndicator,
    and whether each token had an active gesture. One of the new token's
    gestures, if any, is moved to the old token.
  </summary>
</histogram>

<histogram name="Blink.IntersectionObservation.UpdateTime" units="microseconds">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Time spent computing IntersectionObserver observations in the Blink document
    lifecycle.

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

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

<histogram name="Blink.LazyLoad.CrossOriginFrames.InitialDeferralAction"
    enum="LazyLoad.FrameInitialDeferralAction">
  <owner>sclittle@chromium.org</owner>
  <summary>
    Records the initial lazy loading action taken for a cross-origin iframe.
  </summary>
</histogram>

<histogram
    name="Blink.LazyLoad.CrossOriginFrames.LoadStartedAfterBeingDeferred"
    enum="NQEEffectiveConnectionType">
  <owner>sclittle@chromium.org</owner>
  <summary>
    Records the effective connection type whenever a lazily-loaded iframe that
    wasn't initially hidden or near the viewport starts loading. The count for
    an effective connection type in this histogram can be subtracted from the
    'Deferred' bucket from the
    Blink.LazyLoad.CrossOriginFrames.InitialDeferralAction.* histogram for the
    corresponding effective connection type to determine the number of iframes
    that LazyLoad is avoiding to load altogether.
  </summary>
</histogram>

<histogram name="Blink.LazyLoad.CrossOriginFrames.VisibleAfterBeingDeferred"
    enum="NQEEffectiveConnectionType">
  <owner>sclittle@chromium.org</owner>
  <summary>
    Records the effective connection type whenever a lazily-loaded iframe that
    wasn't initially hidden or near the viewport becomes visible. The count for
    an effective connection type in this histogram can be subtracted from the
    corresponding count in
    Blink.LazyLoad.CrossOriginFrames.LoadStartedAfterBeingDeferred to determine
    how many iframes were loaded unnecessarily by LazyLoad.
  </summary>
</histogram>

<histogram name="Blink.MediaDocument.DownloadButton"
    enum="MediaDocumentDownloadButtonType">
  <obsolete>
    Deprecated 08/2017 as it is integrated into media controller.
  </obsolete>
  <owner>qinmin@chromium.org</owner>
  <summary>
    Records how the download button on the MediaDocument is used.
  </summary>
</histogram>

<histogram name="Blink.MediaElement.Autoplay" enum="MediaElementAutoPlay">
  <obsolete>
    Deprecated 11/2016 in Issue 666370 with the deprecation of Autoplay
    experiment.
  </obsolete>
  <owner>oysteine@chromium.org</owner>
  <summary>
    Records user observation and interaction with Media HTML elements that
    feature autoplay, either script-controlled or through the attribute.
  </summary>
</histogram>

<histogram name="Blink.MemoryCache.RevalidationPolicy"
    enum="RevalidationPolicy">
  <owner>hiroshige@chromium.org</owner>
  <summary>
    RevalidationPolicy used for non-preloading requests for each resource type.
    https://crbug.com/579496
  </summary>
</histogram>

<histogram name="Blink.MemoryCache.RevalidationPolicy.Dead"
    enum="RevalidationPolicy">
  <owner>hiroshige@chromium.org</owner>
  <summary>
    RevalidationPolicy used for requests that hit Resource only referenced from
    MemoryCache for each resource type. https://crbug.com/579496 Requests
    counted by this are also counted by Blink.MemoryCache.RevalidationPolicy or
    Blink.MemoryCache.RevalidationPolicy.Preload.
  </summary>
</histogram>

<histogram name="Blink.MemoryCache.RevalidationPolicy.Preload"
    enum="RevalidationPolicy">
  <owner>hiroshige@chromium.org</owner>
  <summary>
    RevalidationPolicy used for preloading requests for each resource type.
    https://crbug.com/579496
  </summary>
</histogram>

<histogram name="Blink.Paint.UpdateTime" units="microseconds">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Time spent updating paint in the Blink document lifecycle.

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

<histogram name="Blink.PaintInvalidation.UpdateTime" units="microseconds">
  <obsolete>
    SlimmingPaintInvalidation is enabled by default, so this histogram is no
    longer being logged.
  </obsolete>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Time spent updating paint invalidation in the Blink document lifecycle. Not
    available when SlimmingPaintInvalidation or SlimmingPaintV2 is enabled.
  </summary>
</histogram>

<histogram name="Blink.PrePaint.UpdateTime" units="microseconds">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Time spent updating paint properties and paint invalidation in the Blink
    document lifecycle. Available when SlimmingPaintInvalidation or
    SlimmingPaintV2 is enabled.

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

<histogram name="Blink.ResourceFetcher.StaleWhileRevalidate"
    enum="BooleanAttempted" expires_after="M71">
  <owner>dtapuska@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <summary>Count of resources attempted Stale Revalidation.</summary>
</histogram>

<histogram name="Blink.ResourceFetcher.StaleWhileRevalidateDuration" units="ms"
    expires_after="M71">
  <owner>dtapuska@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <summary>Duration of completed stale revalidation attempts.</summary>
</histogram>

<histogram base="true" name="Blink.ResourceLoadScheduler.DecodedBytes"
    units="bytes">
<!-- Name completed by histogram_suffixes name="ResourceLoadScheduler.FrameType" -->

  <owner>toyoshim@chromium.org</owner>
  <summary>Count received data size in bytes for each resource.</summary>
</histogram>

<histogram name="Blink.ResourceLoadScheduler.DecodedBytes.KBPerFrameStatus"
    enum="RendererSchedulerFrameType2">
  <owner>toyoshim@chromium.org</owner>
  <owner>altimin@chromium.org</owner>
  <summary>
    Total decoded size of resources associated with frames of a particular type.
    Recorded when a fetch has been completed.

    Each bucket of the histogram cointains the total size of all requests
    associated with frames with a particular frame status in kilobytes.
  </summary>
</histogram>

<histogram base="true" name="Blink.ResourceLoadScheduler.PeakRequests"
    units="requests">
<!-- Name completed by histogram_suffixes name="ResourceLoadScheduler.FrameType" -->

  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The largest number of outstanding resource requests issued by a frame until
    the network 2-quiet (no more than 2 active network requests for 1 seconds).
  </summary>
</histogram>

<histogram name="Blink.ResourceLoadScheduler.RequestCount"
    enum="ResourceLoadSchedulerCircumstance">
  <owner>toyoshim@chromium.org</owner>
  <summary>
    Count resource request circumstance, e.g. from the main frame vs sub-frames,
    or in throttled state vs in not-throttled state, on each resource load
    completion.
  </summary>
</histogram>

<histogram name="Blink.ResourceLoadScheduler.ThrottlingStateChangeCount"
    units="changes">
  <owner>toyoshim@chromium.org</owner>
  <summary>
    Count how many times the scheduler has changed throttling status from the
    frame creation until network activity quiets.
  </summary>
</histogram>

<histogram base="true" name="Blink.ResourceLoadScheduler.TotalDecodedBytes"
    units="bytes">
<!-- Name completed by histogram_suffixes name="ResourceLoadScheduler.FrameType" -->

  <owner>toyoshim@chromium.org</owner>
  <summary>
    Total received data size in bytes to load resources from the frame creation
    until network activity quiets.
  </summary>
</histogram>

<histogram base="true" name="Blink.ResourceLoadScheduler.TotalRequestCount"
    units="requests">
<!-- Name completed by histogram_suffixes name="ResourceLoadScheduler.FrameType" -->

  <owner>toyoshim@chromium.org</owner>
  <summary>
    Total number of resource requests completed from the frame creation until
    network activity quiets.
  </summary>
</histogram>

<histogram base="true" name="Blink.ResourceLoadScheduler.TotalTrafficBytes"
    units="bytes">
<!-- Name completed by histogram_suffixes name="ResourceLoadScheduler.FrameType" -->

  <owner>toyoshim@chromium.org</owner>
  <summary>
    Total traffic data in bytes transferred over networks to load resources from
    the frame creation until network activity quiets.
  </summary>
</histogram>

<histogram base="true" name="Blink.ResourceLoadScheduler.TrafficBytes"
    units="bytes">
<!-- Name completed by histogram_suffixes name="ResourceLoadScheduler.FrameType" -->

  <owner>toyoshim@chromium.org</owner>
  <summary>
    Count traffic data size in bytes transferred over networks to load each
    resource.
  </summary>
</histogram>

<histogram name="Blink.ResourceLoadScheduler.TrafficBytes.KBPerFrameStatus"
    enum="RendererSchedulerFrameType2">
  <owner>toyoshim@chromium.org</owner>
  <owner>altimin@chromium.org</owner>
  <summary>
    Total encoded size of resources associated with frames of a particular type.
    Recorded when a fetch has been completed.

    Each bucket of the histogram cointains the total size of all requests
    associated with frames with a particular frame status in kilobytes.
  </summary>
</histogram>

<histogram name="Blink.RestoredCachedStyleSheet"
    enum="RestoredCachedStyleSheet">
  <obsolete>
    Deprecated 01/2016 and replaced by Blink.RestoredCachedStyleSheet2
  </obsolete>
  <owner>kouhei@chromium.org</owner>
  <summary>
    On each link stylesheet tag resolve, record whether a Blink MemoryCached
    StyleSheetContents was reused.
  </summary>
</histogram>

<histogram name="Blink.RestoredCachedStyleSheet2" enum="StyleSheetCacheStatus">
  <obsolete>
    Deprecated 04/2017.
  </obsolete>
  <owner>kouhei@chromium.org</owner>
  <summary>
    On each link stylesheet tag resolve, record which cache Blink hit.
  </summary>
</histogram>

<histogram name="Blink.ScanPendingActivityDuration" units="ms">
  <owner>haraken@chromium.org</owner>
  <summary>
    Duration of time taken to scan pending activities of all V8 wrappers in a
    worker thread.
  </summary>
</histogram>

<histogram name="Blink.Script.SchedulingType" enum="ScriptSchedulingType"
    expires_after="2018-12-31">
  <owner>kouhei@chromium.org</owner>
  <owner>hiroshige@chromium.org</owner>
  <summary>
    Number of script elements for each scheduling type, recorded for each
    successful #prepare-a-script.
  </summary>
</histogram>

<histogram name="Blink.ScriptValueSerializer.DOMWrapperCount" units="objects">
  <obsolete>
    Used to justify distribution of serialized data in the wild, but unlikely to
    be useful to track long-term.
  </obsolete>
  <owner>platform-architecture-dev@chromium.org</owner>
  <summary>
    Number of DOM wrappers serialized as part of an object passed to
    postMessage, IndexedDB, or another API that serializes script values.
  </summary>
</histogram>

<histogram name="Blink.ScriptValueSerializer.JSObjectCount" units="objects">
  <obsolete>
    Used to justify distribution of serialized data in the wild, but unlikely to
    be useful to track long-term.
  </obsolete>
  <owner>platform-architecture-dev@chromium.org</owner>
  <summary>
    Number of JavaScript objects (other than DOM wrappers) serialized as part of
    an object passed to postMessage, IndexedDB, or another API that serializes
    script values.
  </summary>
</histogram>

<histogram name="Blink.ScriptValueSerializer.PrimitiveCount" units="values">
  <obsolete>
    Used to justify distribution of serialized data in the wild, but unlikely to
    be useful to track long-term.
  </obsolete>
  <owner>platform-architecture-dev@chromium.org</owner>
  <summary>
    Number of primitive values (numbers, strings, etc.) serialized as part of an
    object passed to postMessage, IndexedDB, or another API that serializes
    script values.
  </summary>
</histogram>

<histogram name="Blink.ScrollingCoordinator.UpdateTime" units="microseconds">
  <owner>pdr@chromium.org</owner>
  <summary>
    The time it took to update scrolling coordinator data (scroll gesture
    regions, touch event rects, and main thread scrolling reasons). These values
    are calculated during the main-thread blink lifecycle.

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

<histogram name="Blink.SharedBuffer.FailedLock" enum="ResourceType">
  <owner>hiroshige@chromium.org</owner>
  <summary>
    Number of failed SharedBuffer::lock() calls for each resource type.
    https://crbug.com/603791
  </summary>
</histogram>

<histogram name="Blink.SharedBuffer.SuccessfulLock" enum="ResourceType">
  <owner>hiroshige@chromium.org</owner>
  <summary>
    Number of successful SharedBuffer::lock() calls for each resource type.
    https://crbug.com/603791
  </summary>
</histogram>

<histogram name="Blink.SharedBuffer.Unlock" enum="ResourceType">
  <owner>hiroshige@chromium.org</owner>
  <summary>
    Number of SharedBuffer::unlock() calls for each resource type.
    https://crbug.com/603791
  </summary>
</histogram>

<histogram name="Blink.StyleAndLayout.UpdateTime" units="microseconds">
  <owner>layout-dev@chromium.org</owner>
  <summary>
    Time spent updating style and layout in the Blink document lifecycle.

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

<histogram name="Blink.UseCounter.AnimatedCSSProperties"
    enum="MappedCSSProperties">
  <owner>loonybear@chromium.org</owner>
  <summary>
    Records usage of animated CSS properties used on a page, either statically
    or dynamically, from the time the page is initialised to when it is closed
    or navigated away from. Each property is counted at most once per page per
    view via PageLoadMetricsObserver.
  </summary>
  <details>
    This histogram counts CSS properties only when they are animated by a CSS
    Animation. Refer to Blink.UseCounter.CSSProperties for more details.

    As of M69, Blink.UseCounter.AnimatedCSSProperties is moved from the blink
    side to the browser side.
  </details>
</histogram>

<histogram
    name="Blink.UseCounter.AnimatedCSSProperties_TestBrowserProcessLogging"
    enum="MappedCSSProperties">
  <obsolete>
    Renamed to Blink.UseCounter.AnimatedCSSProperties in 03/2018, M69. The old
    blink UseCounter is flawed in OOPIF, so moved to the browser side instead.
  </obsolete>
  <owner>loonybear@chromium.org</owner>
  <summary>
    Records usage of animated CSS properties used across all frames in a page,
    either statically or dynamically, from the time the page is initialised to
    when it is closed or navigated away from. Each property is counted at most
    once per page view except kTotalPagesMeasuredCSSSampleId which represents a
    page load (enum value of 1) and is counted exactly once per page view.
  </summary>
</histogram>

<histogram name="Blink.UseCounter.CSSProperties" enum="MappedCSSProperties">
  <owner>loonybear@chromium.org</owner>
  <summary>
    Records usage of CSS properties used on a page, either statically or
    dynamically, from the time the page is initialised to when it is closed or
    navigated away from. Each property is counted at most once per page per view
    via PageLoadMetricsObserver.
  </summary>
  <details>
    The first time a CSS property is parsed on a page, the histogram is updated
    to increment the counter.  Each histogram bucket corresponds to a CSS
    property (eg. width, border-radius). The exception is the 'Total pages
    measured' bucket - this counts the number of pages that CSS properties were
    counted on.  When a page navigation occurs the page count bucket is
    incremented and tracking of the set of which properties have been seen is
    reset.

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

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

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

    As of M69, Blink.UseCounter.AnimatedCSSProperties is moved from the blink
    side to the browser side.
  </details>
</histogram>

<histogram name="Blink.UseCounter.CSSProperties_TestBrowserProcessLogging"
    enum="MappedCSSProperties">
  <obsolete>
    Renamed to Blink.UseCounter.CSSProperties in 03/2018, M69. The old blink
    UseCounter is flawed in OOPIF, so moved to the browser side instead.
  </obsolete>
  <owner>loonybear@chromium.org</owner>
  <summary>
    Records usage of CSS properties used across all frames in a page, either
    statically or dynamically, from the time the page is initialised to when it
    is closed or navigated away from. Each property is counted at most once per
    page per view except kTotalPagesMeasuredCSSSampleId which represents a page
    load (enum value of 1) and is counted exactly once per page view.
  </summary>
</histogram>

<histogram name="Blink.UseCounter.Extensions.Features" enum="FeatureObserver">
  <owner>loonybear@chromium.org</owner>
  <summary>
    Count of how many page loads use various features for pages with a
    chrome-extension:// URL only. The PageVisits bucket is incremented for each
    page load, and the other buckets incremented at most once per PageVisit via
    the WebCore::UserCounter class.
  </summary>
  <details>
    Warning: This histogram represents pre-renderer metrics and so is flawed
    under OOPIF.
  </details>
</histogram>

<histogram name="Blink.UseCounter.Features" enum="FeatureObserver">
  <owner>loonybear@chromium.org</owner>
  <summary>
    Count of how many page loads use various features across all frames in a
    page. The PageVisits bucket is incremented for each page load, and the other
    buckets incremented at most once per PageVisit via blink::UseCounter and
    UseCounterPageLoadMetricsObserver.
  </summary>
  <details>
    Note that features used inside of SVG images are tracked separately in the
    Blink.UseCounter.SVGImage.Features histogram. Features used inside of
    extension pages are tracked separately in the
    Blink.UseCounter.Extensions.Features histogram.

    As of M67, Blink.UseCounter.Features is moved from the blink side to the
    browser side, the semantics have changed a little. The blink side histogram
    is renamed to &quot;Blink.UseCounter.Features_Legacy&quot;.
  </details>
</histogram>

<histogram name="Blink.UseCounter.Features_Legacy" enum="FeatureObserver">
  <owner>loonybear@chromium.org</owner>
  <summary>
    Count of how many page loads use various features. The PageVisits bucket is
    incremented for each page load, and the other buckets incremented at most
    once per PageVisit via the blink::UseCounter class.
  </summary>
  <details>
    As of M67 this has been replaced by browser-side UseCounter. This is the old
    blink-side counters which are flawed in OOPIF scenarios because they are
    pre-renderer-processes. This histogram will be removed.
  </details>
</histogram>

<histogram name="Blink.UseCounter.Features_TestBrowserProcessLogging"
    enum="FeatureObserver">
  <obsolete>
    Renamed to Blink.UseCounter.Features in 03/2018, M67. The old blink
    UseCounter is flawed in OOPIF, so moved to the browser side (this) instead.
  </obsolete>
  <owner>loonybear@chromium.org</owner>
  <summary>
    Count of how many page loads use various features across all frames in a
    page. The PageVisits bucket is incremented for each page load, and the other
    buckets incremented at most once per PageVisit via the WebCore::UseCounter
    class. This counter lives in browser process.
  </summary>
</histogram>

<histogram name="Blink.UseCounter.SVGImage.AnimatedCSSProperties"
    enum="MappedCSSProperties">
  <obsolete>
    Removed in 06/2018, M69 since the histogram is not really useful. See
    https://crbug.com/804645.
  </obsolete>
  <owner>loonybear@chromium.org</owner>
  <summary>
    Like Blink.UseCounter.AnimatedCSSProperties but specifically for the case of
    CSS properties used inside of an SVG image.
  </summary>
  <details>
    Warning: This histogram represents pre-renderer metrics and so is flawed
    under OOPIF.

    This histogram counts usage of animated CSS properties only. Refer to
    Blink.UseCounter.SVGImage.CSSProperties for details.
  </details>
</histogram>

<histogram name="Blink.UseCounter.SVGImage.CSSProperties"
    enum="MappedCSSProperties">
  <obsolete>
    Removed in 06/2018, M69 since the histogram is not really useful. See
    https://crbug.com/804645.
  </obsolete>
  <owner>loonybear@chromium.org</owner>
  <summary>
    Like Blink.UseCounter.CSSProperties but specifically for the case of CSS
    properties used inside of an SVG image.
  </summary>
  <details>
    Warning: This histogram represents pre-renderer metrics and so is flawed
    under OOPIF.

    The 'Total pages measured' bucket is incremented each time a new SVG image
    is created.  Note that the same SVG image can be used across multiple tabs
    in a single renderer but this counts as a single usage. See
    http://crbug.com/236262.
  </details>
</histogram>

<histogram name="Blink.UseCounter.SVGImage.Features" enum="FeatureObserver">
  <owner>loonybear@chromium.org</owner>
  <summary>
    Like Blink.UseCounter.Features except specifically for the case of SVG
    Images.
  </summary>
  <details>
    Warning: This histogram represents pre-renderer metrics and so is flawed
    under OOPIF.

    Count of how many SVG images use various features. The PageVisits bucket is
    incremented each time a new SVG image is created.  Note that the same SVG
    image can be used across multiple tabs in a single renderer but this counts
    as a single usage.  See http://crbug.com/236262.
  </details>
</histogram>

<histogram name="Blink.VisibleBeforeLoaded.LazyLoadEligibleFrames.BelowTheFold"
    enum="NQEEffectiveConnectionType">
  <owner>sclittle@chromium.org</owner>
  <summary>
    Records the effective connection type whenever a lazyload-eligible (i.e.
    cross-origin and non-hidden) iframe that was initially below the fold
    becomes visible before it finishes loading.
  </summary>
</histogram>

<histogram name="Blink.VisibleLoadTime.LazyLoadEligibleFrames.AboveTheFold"
    units="ms">
  <owner>sclittle@chromium.org</owner>
  <summary>
    Milliseconds spent waiting for an above the fold iframe to load. Only fires
    for iframes that would be eligible for lazy loading, i.e. cross-origin and
    non-hidden.
  </summary>
</histogram>

<histogram name="Blink.VisibleLoadTime.LazyLoadEligibleFrames.BelowTheFold"
    units="ms">
  <owner>sclittle@chromium.org</owner>
  <summary>
    Milliseconds spent waiting for a below the fold iframe to load. Only fires
    for iframes that would be eligible for lazy loading, i.e. cross-origin and
    non-hidden.
  </summary>
</histogram>

<histogram name="Blink.XHR.setRequestHeader.HeaderValueCategoryInRFC7230"
    enum="XMLHttpRequestHeaderValueCategoryInRFC7230">
  <obsolete>
    Deprecated 06/2017 in Issues 455099 and 681769 (M61).
  </obsolete>
  <owner>hiroshige@chromium.org</owner>
  <summary>
    The count of XMLHttpRequest.setRequestHeader() calls where header values are
    invalid/valid but affected by normalization/valid in RFC 7230.
    https://crbug.com/455099.
  </summary>
</histogram>

<histogram name="BlinkGC.AtomicPhaseMarking" units="ms">
  <owner>oilpan-reviews@chromium.org</owner>
  <summary>
    Duration of finishing marking the transitive closure of objects during the
    final Blink garbage collection pause. Recorded at the end of each garbage
    collection.
  </summary>
</histogram>

<histogram name="BlinkGC.CollectGarbage" units="ms">
  <obsolete>
    Deprecated 06/2018. The sample taken here was a mix of marking, sweeping and
    compaction. Replaced by BlinkGC.AtomicPhaseMarking for the marking phase and
    BlinkGC.TimeForTotalCollectGarbage for the overal time.
  </obsolete>
  <owner>haraken@chromium.org</owner>
  <summary>
    Duration of time taken to run Heap::collectGarbage(). Recorded at the end of
    each garbage collection.
  </summary>
</histogram>

<histogram name="BlinkGC.CollectionRate" units="%">
  <owner>haraken@chromium.org</owner>
  <summary>
    The percentage of objects that have been collected by a Blink GC. 0 is
    passed if there were no objects when a Blink GC started.
  </summary>
</histogram>

<histogram name="BlinkGC.CommittedSize" units="MB">
  <owner>haraken@chromium.org</owner>
  <summary>
    The committed memory size in Blink GC. The value is reported when we see the
    highest memory usage we've ever seen in the renderer process.
  </summary>
</histogram>

<histogram name="BlinkGC.CompleteSweep" units="ms">
  <owner>haraken@chromium.org</owner>
  <summary>Duration of time taken to run ThreadState::completeSweep().</summary>
</histogram>

<histogram name="BlinkGC.GCReason" enum="GCReason">
  <owner>haraken@chromium.org</owner>
  <summary>A type of Blink GC.</summary>
</histogram>

<histogram name="BlinkGC.LowMemoryPageNavigationGC.Reduction" units="MB">
  <owner>keishi@chromium.org</owner>
  <summary>
    Amount of memory reduced with the GC triggered on page navigation while the
    device is in a low memory state. Only implemented on low end Android devices
    at the moment. Memory usage is approximated by summing the memory usage of
    the following allocators: BlinkGC, PartitionAlloc, and V8 main thread
    isolate heap.
  </summary>
</histogram>

<histogram name="BlinkGC.ObjectSizeAfterGC" units="KB">
  <owner>haraken@chromium.org</owner>
  <summary>
    The size of allocated objects just after Blink GC is triggered.
  </summary>
</histogram>

<histogram name="BlinkGC.ObjectSizeBeforeGC" units="KB">
  <owner>haraken@chromium.org</owner>
  <summary>
    The size of allocated objects just before Blink GC is triggered.
  </summary>
</histogram>

<histogram name="BlinkGC.ObjectSizeFreedByHeapCompaction" units="KB">
  <owner>haraken@chromium.org</owner>
  <summary>
    The total size of objects freed by BlinkGC's heap compaction.   This is
    recorded once following each compaction.
  </summary>
</histogram>

<histogram name="BlinkGC.PerformPendingSweep" units="ms">
  <obsolete>
    Removed at 2014 Jan.
  </obsolete>
  <owner>haraken@chromium.org</owner>
  <summary>
    Duration of time taken to run ThreadState::performPendingSweep().
  </summary>
</histogram>

<histogram name="BlinkGC.TimeForCoalesce" units="ms">
  <owner>haraken@chromium.org</owner>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Duration of memory coalesce operation in the Blink GC.  Reported once per
    coalesce operation.
  </summary>
</histogram>

<histogram name="BlinkGC.TimeForGlobalWeakProcessing" units="ms">
  <owner>haraken@chromium.org</owner>
  <summary>
    Duration of time taken to run global weak processing of Blink GC.
  </summary>
</histogram>

<histogram name="BlinkGC.TimeForHeapCompaction" units="ms">
  <owner>haraken@chromium.org</owner>
  <summary>
    Duration of wall time taken to run BlinkGC's heap compaction.
  </summary>
</histogram>

<histogram name="BlinkGC.TimeForInvokingPreFinalizers" units="ms">
  <owner>haraken@chromium.org</owner>
  <summary>
    Duration of time taken to run ThreadState::invokePreFinalizers().
  </summary>
</histogram>

<histogram name="BlinkGC.TimeForStoppingThreads" units="ms">
  <obsolete>
    As of 02/2017, the code to stop Blink threads was removed.
  </obsolete>
  <owner>haraken@chromium.org</owner>
  <summary>
    Duration of time taken to stop all Blink threads before starting a GC.
  </summary>
</histogram>

<histogram name="BlinkGC.TimeForSweepingAllObjects" units="ms">
  <owner>haraken@chromium.org</owner>
  <summary>Accumulated time taken to sweep all objects.</summary>
</histogram>

<histogram name="BlinkGC.TimeForThreadLocalWeakProcessing" units="ms">
  <obsolete>
    As of 02/2017, the code for thread-local weak processing was removed.
  </obsolete>
  <owner>haraken@chromium.org</owner>
  <summary>Duration of time taken to run thread-local weak processing.</summary>
</histogram>

<histogram name="BlinkGC.TimeForTotalCollectGarbage" units="ms">
  <owner>haraken@chromium.org</owner>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Duration of total Blink garbage collection time when the garbage collector
    is invoked for finishing a garbage collection. This includes finishing up
    any already running garbage collection operation as well as potentially
    performing a follow-up collection synchronously. Recorded each time after
    invoking the Blink garbage collector.
  </summary>
</histogram>

<histogram name="BlinkGC.TotalAllocatedSpace" units="KB">
  <owner>haraken@chromium.org</owner>
  <summary>
    The total size of allocated space in OS when a Blink GC is triggered.
  </summary>
</histogram>

<histogram name="BlinkGC.TotalObjectSpace" units="KB">
  <owner>haraken@chromium.org</owner>
  <summary>
    The total size of object space in all threads when a Blink GC is triggered.
  </summary>
</histogram>

<histogram name="BloatedRenderer.HandlingInBrowser"
    enum="BloatedRendererHandlingInBrowser">
  <owner>ulan@chromium.org</owner>
  <summary>
    Records how a bloated renderer was handled in the browser process.
  </summary>
</histogram>

<histogram name="BloatedRenderer.HandlingInResourceCoordinator"
    enum="BloatedRendererHandlingInResourceCoordinator">
  <owner>ulan@chromium.org</owner>
  <summary>
    Records how a bloated renderer was handled in the resource coordinator
    service.
  </summary>
</histogram>

<histogram name="BloatedRenderer.V8.NearV8HeapLimitHandling"
    enum="NearV8HeapLimitHandling">
  <owner>ulan@chromium.org</owner>
  <summary>
    Records how a bloated V8 heap was handled in the renderer process. It is
    emitted the first time V8 heap reaches the heap limit and invokes the
    NearHeapLimitCallback. Subsequent invocations of the callback are ignored.
    Thus it is emitted once per renderer process run.
  </summary>
</histogram>

<histogram name="Bluetooth.Android.GATTConnection.Disconnected.Result"
    enum="AndroidGATTConnectionErrorCodes">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Disconnected GATT connection status codes. Used to better understand errors
    seen in Android.
  </summary>
</histogram>

<histogram name="Bluetooth.Android.GATTConnection.Failure.Result"
    enum="AndroidGATTConnectionErrorCodes">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Failed GATT connection error codes. Used to better understand errors seen in
    Android.
  </summary>
</histogram>

<histogram name="Bluetooth.Android.GATTConnection.Success.Result"
    enum="AndroidGATTConnectionErrorCodes">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Successful GATT connection result codes. Used to better understand Android
    results.
  </summary>
</histogram>

<histogram name="Bluetooth.ConnectedDeviceCount" units="devices">
  <owner>keybuk@chromium.org</owner>
  <summary>
    Counts the number of simulataneously connected Bluetooth devices. Used to
    direct testing efforts, and by our UI team to determine appropriate UI
    sizes.
  </summary>
</histogram>

<histogram name="Bluetooth.DiscoverySession.Start.Outcome"
    enum="BluetoothDiscoveryOutcomes">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the outcome of calls to BluetoothAdapter::StartDiscoverySession.
    Used to prioritize efforts to fix failures of this function.
  </summary>
</histogram>

<histogram name="Bluetooth.DiscoverySession.Stop.Outcome"
    enum="BluetoothDiscoveryOutcomes">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the outcome of calls to BluetoothDiscoverySession::Stop. Used to
    prioritize efforts to fix failures of this function.
  </summary>
</histogram>

<histogram name="Bluetooth.GATTErrors" enum="BluetoothGATTErrors">
  <obsolete>
    As of 08/2015 this has been replaced by
    Bluetooth.Web.Characteristic.ReadValue and
    Bluetooth.Web.Characteristic.WriteValue.
  </obsolete>
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records how many times each GATT Error has occured. The results will be used
    to determine how common this errors are and if we need to provide better
    error messages to the users.
  </summary>
</histogram>

<histogram base="true" name="Bluetooth.MacOS.Errors"
    enum="MacOSBluetoothOperationsResult">
<!-- Name completed by histogram_suffixes name="WebBluetoothMacOSAPIs" -->

  <owner>scheib@chromium.org</owner>
  <owner>device-dev@chromium.org</owner>
  <summary>
    Records how many times each macOS GATT error has occured. The results will
    be used to determine how commun this errors are and if we need to provide
    better error messages to the users.
  </summary>
</histogram>

<histogram name="Bluetooth.PairingMethod" enum="BluetoothPairingMethod">
  <owner>keybuk@chromium.org</owner>
  <summary>
    Records the method used to pair each Bluetooth Device. Used to direct our
    testing efforts.
  </summary>
</histogram>

<histogram name="Bluetooth.PairingResult" enum="BluetoothPairingResult">
  <owner>keybuk@chromium.org</owner>
  <summary>
    Records the result of pairing each Bluetooth Device. Used to understand
    whether we are having significant problems with Bluetooth pairing and seeing
    errors more commonly than we should.
  </summary>
</histogram>

<histogram name="Bluetooth.RequestDevice.Outcome"
    enum="WebBluetoothRequestDeviceOutcome">
  <obsolete>
    Deprecated 08/2015 and replaced by Bluetooth.Web.RequestDevice.Outcome.
  </obsolete>
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the result of a navigator.bluetooth.requestDevice() call. Used to
    understand what errors developers are getting so we can target efforts
    toward the most common ones. Multiple outcomes may result for a given
    RequestDevice, such as rescan multiple times and then select a device.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.Android" enum="AndroidGATTStatusResult">
<!-- Name completed by histogram_suffixes name="AndroidGATTEvents" -->

  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>'status' values returned by Android GATT event.</summary>
</histogram>

<histogram name="Bluetooth.Web.Blacklist.ParsedNonEmptyString"
    enum="BooleanSuccess">
  <obsolete>
    Deprecated as of 11/2016, replaced by
    Bluetooth.Web.Blocklist.ParsedNonEmptyString.
  </obsolete>
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the result of BluetoothBlacklist::Add parsing a non-empty string.
    These strings will be updated dynamically by a server, and this histogram
    provides feedback that parsing is functioning correctly on clients.

    False values are BAD, a blacklist is failing to be applied correctly.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.Blocklist.ParsedNonEmptyString"
    enum="BooleanSuccess">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the result of BluetoothBlocklist::Add parsing a non-empty string.
    These strings will be updated dynamically by a server, and this histogram
    provides feedback that parsing is functioning correctly on clients.

    False values are BAD, a blocklist is failing to be applied correctly.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.Characteristic.ReadValue.Outcome"
    enum="WebBluetoothGATTOperationOutcome">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the outcome of a call to characteristic.readValue(). Used to know
    what types of errors users are seeing. The results will be used to determine
    how common these errors are and if we need to provide better error messages
    to the users.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.Characteristic.StartNotifications.Outcome"
    enum="WebBluetoothGATTOperationOutcome">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the outcome of a call to characteristic.startNofications(). Used to
    know what types of errors users are seeing. The results will be used to
    determine how common these errors are and if we need to provide better error
    messages to the users.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.Characteristic.WriteValue.Outcome"
    enum="WebBluetoothGATTOperationOutcome">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the outcome of a call to characteristic.writeValue(). Used to know
    what types of errors users are seeing. The results will be used to determine
    how common these errors are and if we need to provide better error messages
    to the users.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.ChooserInteraction" enum="BooleanInvalid">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Counts how many times users interact with a regular chooser vs. an invalid
    chooser. (A chooser is invalid when it's event handler becomes null.)
  </summary>
</histogram>

<histogram name="Bluetooth.Web.ConnectGATT.Outcome"
    enum="WebBluetoothConnectGATTOutcome">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the result of a device.gatt.connect() call. Used to understand what
    errors developers are getting so we can target efforts toward the most
    common ones.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.ConnectGATT.TimeFailed" units="ms">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records how long it takes for a connection attempt to fail. Use to let
    developers know how to better wait for and handle connection errors.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.ConnectGATT.TimeSuccess" units="ms">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records how long it takes for a device to successfully connect. Use to let
    developers know how long it should take to connect to a BLE device.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.Descriptor.ReadValue.Outcome"
    enum="WebBluetoothGATTOperationOutcome">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the outcome of a call to descriptor.readValue(). Used to know what
    types of errors users are seeing. The results will be used to determine how
    common these errors are and if we need to provide better error messages to
    the users.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.Descriptor.WriteValue.Outcome"
    enum="WebBluetoothGATTOperationOutcome">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the outcome of a call to descriptor.writeValue(). Used to know what
    types of errors users are seeing. The results will be used to determine how
    common these errors are and if we need to provide better error messages to
    the users.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.FunctionCall.Count" enum="WebBluetoothFunction">
  <obsolete>
    Deprecated as of 3/2017. Replaced by using blink IDL annotation MeasureAs
    which appear in Blink.UseCounter.Features.
  </obsolete>
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Counts the number of times each call to a WebBluetooth function is done.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.GetCharacteristic.Characteristic"
    enum="GATTCharacteristicHash">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the UUIDs used when getting a characteristic. The recorded value is
    a 31-bit hash of the UUID. Used to know what types of characteristics to
    target when building libraries that use the Web Bluetooth API.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.GetCharacteristic.Outcome"
    enum="WebBluetoothGetCharacteristicOutcome">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the outcome of a call to getCharacteristic(). Used to understand
    what errors developers are getting so we can target efforts toward the most
    common ones.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.GetCharacteristics.Characteristic"
    enum="GATTCharacteristicHash">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the UUIDs used when getting characteristics. The recorded value is a
    31-bit hash of the UUID. Used to know what types of characteristics to
    target when building libraries that use the Web Bluetooth API.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.GetCharacteristics.Outcome"
    enum="WebBluetoothGetCharacteristicOutcome">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the outcome of a call to getCharacteristics(). Used to understand
    what errors developers are getting so we can target efforts toward the most
    common ones.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.GetDescriptor.Descriptor"
    enum="GATTDescriptorHash">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the UUIDs used when getting a descriptor. The recorded value is a
    31-bit hash of the UUID. Used to know what types of descriptors to target
    when building libraries that use the Web Bluetooth API.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.GetDescriptor.Outcome"
    enum="WebBluetoothGetDescriptorOutcome">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the outcome of a call to getDescriptor(). Used to understand what
    errors developers are getting so we can target efforts toward the most
    common ones.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.GetDescriptors.Descriptor"
    enum="GATTDescriptorHash">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the UUIDs used when getting descriptors. The recorded value is a
    31-bit hash of the UUID. Used to know what types of descriptors to target
    when building libraries that use the Web Bluetooth API.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.GetDescriptors.Outcome"
    enum="WebBluetoothGetDescriptorOutcome">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the outcome of a call to getDescriptors(). Used to understand what
    errors developers are getting so we can target efforts toward the most
    common ones.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.GetPrimaryService.Outcome"
    enum="WebBluetoothGetPrimaryServiceOutcome">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the result of a GATTServer.getPrimaryService() call. Used to
    understand what errors developers are getting so we can target efforts
    toward the most common ones.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.GetPrimaryService.Services"
    enum="GATTServiceHash">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records what GATT Services are used when connected. The record value is a
    31-bit hash of the Service UUID. This will help us know if we should build
    an API for specific services rather than a general Bluetooth API.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.GetPrimaryServices.Outcome"
    enum="WebBluetoothGetPrimaryServiceOutcome">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the result of a GATTServer.getPrimaryServices() call. Used to
    understand what errors developers are getting so we can target efforts
    toward the most common ones.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.GetPrimaryServices.Services"
    enum="GATTServiceHash">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records what GATT Services are used when connected. The record value is a
    31-bit hash of the Service UUID. This will help us know if we should build
    an API for specific services rather than a general Bluetooth API.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.RequestDevice.Filters.Count" units="filters">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records how many filters are used when scanning. These results will help us
    better understand the uses of the API and make changes according to
    developers' behavior.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.RequestDevice.Filters.Services"
    enum="GATTServiceHash">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records a 31-bit hash of the GATT Service UUIDs used when scanning. This
    will help us know if we should build an API for specific services rather
    than a general Bluetooth API.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.RequestDevice.FilterSize" units="services">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records how many services are used in a filter. These results will help us
    better understand the uses of the API and make changes according to
    developers' behavior.
  </summary>
</histogram>

<histogram
    name="Bluetooth.Web.RequestDevice.NumOfDevicesInChooserWhenNotAcceptingAllDevices"
    units="devices">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <owner>juncai@chromium.org</owner>
  <summary>
    In the case of not accepting all devices, records the number of devices that
    are in the chooser when a device is paired.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.RequestDevice.OptionalServices.Count"
    units="filters">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records how many optional services are used when scanning. These results
    will help us better understand the uses of the API and make changes
    according to developers' behavior.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.RequestDevice.OptionalServices.Services"
    enum="GATTServiceHash">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records what optional services are used. The recorded value is a 31-bit hash
    of the Service UUID. These results will help us better understand the uses
    of the API and make changes according to developers' behavior.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.RequestDevice.Options.AcceptAllDevices"
    enum="Boolean">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the value of 'acceptAllDevices' in RequestDeviceOptions. These
    results will help us better understand the uses of the API and make changes
    according to developers' behavior.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.RequestDevice.Outcome"
    enum="WebBluetoothRequestDeviceOutcome">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records the result of a navigator.bluetooth.requestDevice() call. Used to
    understand what errors developers are getting so we can target efforts
    toward the most common ones.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.RequestDevice.RSSISignalStrength" units="dBm">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <owner>juncai@chromium.org</owner>
  <summary>
    Raw RSSI values provided to chooser, before processing them for display in
    the Web Bluetooth chooser.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.RequestDevice.RSSISignalStrengthLevel"
    enum="WebBluetoothRSSISignalStrengthLevel">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <owner>juncai@chromium.org</owner>
  <summary>
    Displayed RSSI levels, after processing and as displayed to users in the Web
    Bluetooth chooser.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.RequestDevice.ScanningDuration" units="ms">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <owner>juncai@chromium.org</owner>
  <summary>
    Records the duration scanning for devices is run, terminated by events such
    as the chooser being closed with a selected device, cancelled, or the scan
    duration timing out.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.RequestDevice.UnionOfServices.Count"
    units="services">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records how many services are used when scanning. This results will help us
    better understand the uses of the API and make changes according to
    developers' behavior.
  </summary>
</histogram>

<histogram name="Bluetooth.Web.RequestDevice.UnionOfServices.Services"
    enum="GATTServiceHash">
  <owner>jyasskin@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <owner>scheib@chromium.org</owner>
  <summary>
    Records what services are used from either required or optional sets. The
    recorded value is a 31-bit hash of the Service UUID. These results will help
    us better understand the uses of the API and make changes according to
    developers' behavior.
  </summary>
</histogram>

<histogram name="BlueZ.AdapterLost" units="seconds">
  <owner>mcchou@chromium.org</owner>
  <summary>
    This is specific to Chrome OS. Records a duration of a Bluetooth adapter
    being lost. This helps us better understand the Bluetooth controller drop
    issue in the field.
  </summary>
</histogram>

<histogram name="BlueZ.ChipLost" units="seconds">
  <obsolete>
    Replaced 08/2018 by BlueZ.ChipLost2 for more suspend/resume filtering even
    when the Bluetooth adapter is turned off.
  </obsolete>
  <owner>sonnysasaka@chromium.org</owner>
  <summary>
    This is specific to Chrome OS. Records a duration of a Bluetooth adapter
    being lost caused by hardware disconnection. This helps us better understand
    the Bluetooth controller drop issue in the field.
  </summary>
</histogram>

<histogram name="BlueZ.ChipLost2" units="seconds">
  <owner>sonnysasaka@chromium.org</owner>
  <summary>
    This is specific to Chrome OS. Records a duration of a Bluetooth adapter
    being lost caused by hardware disconnection. This helps us better understand
    the Bluetooth controller drop issue in the field.
  </summary>
</histogram>

<histogram name="BlueZ.NumberOfExistingAdvertisements" units="advertisements">
  <owner>mcchou@chromium.org</owner>
  <summary>
    This is specific to Chrome OS. Records the number of existing advertisements
    when registering for a new advertisement. This helps us better understand
    the common amount of advertisments used and the registration failures due to
    the limited number of advertisement slots.
  </summary>
</histogram>

<histogram name="BlueZ.ReasonOfDisconnection" enum="BlueZReasonOfDisconnection">
  <owner>mcchou@chromium.org</owner>
  <summary>
    This is specific to Chrome OS. Records the reason of Bluetooth disconnection
    between the local device and the remote Bluetooth device. This helps us
    better understand the initiator of disconnection request.
  </summary>
</histogram>

<histogram name="BlueZ.ResultOfAdvertisementRegistration"
    enum="BlueZResultOfAdvertisementRegistration">
  <owner>mcchou@chromium.org</owner>
  <summary>
    This is specific to Chrome OS. Records the outcomes of advertisement
    registration. This helps us better understand the persentage of successful
    advertisements against failures and the causes of failures.
  </summary>
</histogram>

<histogram name="BlueZ.ResultOfConnection" enum="BlueZResultOfConnection">
  <owner>mcchou@chromium.org</owner>
  <summary>
    This is specific to Chrome OS. Records the outcomes of connection requests
    to remote devices. This helps us better understand the persentage of
    successful connections against failures and the causes of failures.
  </summary>
</histogram>

<histogram name="BlueZ.ResultOfPairing" enum="BlueZResultOfPairing">
  <owner>mcchou@chromium.org</owner>
  <summary>
    This is specific to Chrome OS. Records the outcomes of pairing with remote
    devices. This helps us better understand the persentage of successful
    pairing against failures and the causes of failures.
  </summary>
</histogram>

<histogram name="BlueZ.TimeLengthOfAdvertisement" units="seconds">
  <owner>mcchou@chromium.org</owner>
  <summary>
    This is specific to Chrome OS. Records the duration when the local device is
    performing Bluetooth advertisment and discoverable as a Bluetooth Low Energy
    device by other devices. This helps us better understand the amount of
    successful advertisment sessions and the duration.
  </summary>
</histogram>

<histogram name="BlueZ.TimeLengthOfDiscoverable" units="seconds">
  <owner>mcchou@chromium.org</owner>
  <summary>
    This is specific to Chrome OS. Records the duration when the local device is
    discoverable by other devices as a Bluetooth classic device. This helps us
    better understand the amount of requests to expose the local device as a
    Bluetooth classic device and the duration.
  </summary>
</histogram>

<histogram name="BlueZ.TimeLengthOfDiscovering" units="seconds">
  <owner>mcchou@chromium.org</owner>
  <summary>
    This is specific to Chrome OS. Records the duration for the local device to
    perform device discovery. This helps us better understand the amount of
    device discovery request and the duration for users to find the target
    device.
  </summary>
</histogram>

<histogram name="BlueZ.TimeLengthOfPairing" units="seconds">
  <owner>mcchou@chromium.org</owner>
  <summary>
    This is specific to Chrome OS. Records the duration taken to finish a
    successful pairing between the local device and a remote Bluetooth device.
    This helps us better understand the latency of completing Bluetooth pairing.
  </summary>
</histogram>

<histogram name="BlueZ.TimeLengthOfSetupConnection" units="seconds">
  <owner>mcchou@chromium.org</owner>
  <summary>
    This is specific to Chrome OS. Records the duration taken to finish a
    successful connection between the local device and a remote Bluetooth
    device. This helps us better understand the latency of connecting to a
    Bluetooth device.
  </summary>
</histogram>

<histogram name="BlueZ.TypeOfDiscovery" enum="BlueZTypeOfDiscovery">
  <owner>mcchou@chromium.org</owner>
  <summary>
    This is specific to Chrome OS. Records the types of device discovery
    performed by the local device. This helps us better understand the most
    common type of device discovery performed.
  </summary>
</histogram>

<histogram name="BlueZ.TypeOfFoundDevice" enum="BlueZTypeOfFoundDevice">
  <owner>mcchou@chromium.org</owner>
  <summary>
    This is specific to Chrome OS. Records the types of discovered devices in
    terms of Bluetooth classic, Bluetooth low energy and Dual-mode supports.
    This helps us better understand the persentage of Bluetooth devices in terms
    of type.
  </summary>
</histogram>

<histogram name="BookmarkManager.CommandExecuted" enum="BookmarkManagerCommand">
  <owner>calamity@chromium.org</owner>
  <summary>
    Logs when a user action triggers a command in the bookmark manager. Commands
    can be triggered by keyboard shortcuts, menu items or other buttons in the
    UI.
  </summary>
</histogram>

<histogram name="BookmarkManager.CommandExecutedFromKeyboard"
    enum="BookmarkManagerCommand">
  <owner>calamity@chromium.org</owner>
  <summary>
    Logs when a keyboard shortcut triggers a command in the bookmark manager.
  </summary>
</histogram>

<histogram name="BookmarkManager.CommandMenuOpened"
    enum="BookmarkManagerMenuSource">
  <owner>calamity@chromium.org</owner>
  <summary>
    Logs where the menu was opened from when a user action opens the command
    menu in the bookmark manager.
  </summary>
</histogram>

<histogram name="BookmarkManager.NumDragged" units="bookmarks">
  <owner>calamity@chromium.org</owner>
  <summary>
    Logs the number of bookmarks that were dragged simultaneously by a user.
  </summary>
</histogram>

<histogram name="BookmarkManager.ResultsRenderedTime" units="ms">
  <owner>calamity@chromium.org</owner>
  <summary>
    Records the time taken to load the bookmarks Web UI and render. This is
    roughly equivalent to 'time to first meaningful paint' for the bookmark
    manager.
  </summary>
</histogram>

<histogram name="Bookmarks.BookmarksInFolder" units="bookmarks">
  <owner>calamity@chromium.org</owner>
  <summary>
    Logs the number of bookmark items inside a folder every time a folder is
    opened inside the bookmark manager.
  </summary>
</histogram>

<histogram name="Bookmarks.EntryPoint" enum="BookmarksEntryPoint">
  <owner>ianwen@chromium.org</owner>
  <summary>How users add a new bookmark.</summary>
</histogram>

<histogram name="Bookmarks.FileSize" units="KB">
  <owner>mamir@chromium.org</owner>
  <summary>
    The size of the file used to persist bookmarks. It's recorded every time the
    file is loaded in memory.
  </summary>
</histogram>

<histogram name="Bookmarks.LaunchDepth">
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Logs the depth of the bookmark in the bookmark tree hierarchy every time a
    bookmark is launched. Depth indicates how many levels below a permanent
    bookmark folder the bookmark was found in (e.g. a bookmark immediately in
    the bookmark bar has depth 1).
  </summary>
</histogram>

<histogram name="Bookmarks.LaunchLocation" enum="BookmarkLaunchLocation">
  <owner>ianwen@chromium.org</owner>
  <summary>Logs a UI location from which a bookmark is launched.</summary>
</histogram>

<histogram name="Bookmarks.OnFaviconsChangedIconURL" enum="BooleanHit">
  <owner>pkotwicz@chromium.org</owner>
  <summary>
    Logs how frequently BookmarkModel::OnFaviconsChanged() is called with a
    non-empty |icon_url| to determine whether BookmarkNodes should be cached
    based on their favicon URLs (e.g. http://www.google.com/favicon.ico) in
    addition to their page URLs (e.g. http://www.google.com). OnFaviconChanged()
    is expected to be called less than 10 times per user per day with a
    non-empty |icon_url|.
  </summary>
</histogram>

<histogram name="Bookmarks.OpenAction" enum="BookmarksOpenAction">
  <obsolete>
    Deprecated as of 1/2016.
  </obsolete>
  <owner>kkimlabs@chromium.org</owner>
  <summary>
    Logs how user is opening a bookmark on Android. For example, user can long
    press and select &quot;Open in a new tab&quot; or &quot;Open in incognito
    tab&quot;.
  </summary>
</histogram>

<histogram name="Bookmarks.OpenBookmarkType" enum="BookmarkType">
  <owner>wychen@chromium.org</owner>
  <summary>
    Logs whether the bookmark entry is a user bookmark or a partner bookmark
    when it is opened.
  </summary>
</histogram>

<histogram name="BootTime.Total" units="ms">
  <obsolete>
    Replaced 08/2016 by BootTime.Total2 with larger range and more buckets.
  </obsolete>
  <owner>bccheng@chromium.org</owner>
  <owner>semenzato@chromium.org</owner>
  <summary>Time from power on to login panel ready (Chrome OS).</summary>
</histogram>

<histogram name="BootTime.Total2" units="ms">
  <owner>bccheng@chromium.org</owner>
  <owner>semenzato@chromium.org</owner>
  <summary>Time from power on to login panel ready (Chrome OS).</summary>
</histogram>

<histogram name="BrotliFilter.CompressionPercent" units="%">
  <owner>eustas@chromium.org</owner>
  <summary>Compressed/Decompressed size ratio.</summary>
</histogram>

<histogram name="BrotliFilter.ErrorCode" enum="BrotliFilterErrorCode">
  <owner>eustas@chromium.org</owner>
  <summary>More detailed failure reason.</summary>
</histogram>

<histogram name="BrotliFilter.GzipHeaderDetected" enum="BooleanPresent">
  <owner>eustas@chromium.org</owner>
  <summary>Indicates whether the gzip-like header was detected.</summary>
</histogram>

<histogram name="BrotliFilter.Status" enum="BrotliFilterDecodingStatus">
  <owner>eustas@chromium.org</owner>
  <summary>The final state of BrotliFilter.</summary>
</histogram>

<histogram name="BrotliFilter.UsedMemoryKB" units="KiB">
  <owner>eustas@chromium.org</owner>
  <summary>Maximal amount of memory allocated by decoder.</summary>
</histogram>

<histogram name="Browser.Tabs.SelectionToVisibilityRequestTime"
    units="microseconds">
  <owner>sadrul@chromium.org</owner>
  <owner>sky@chromium.org</owner>
  <summary>
    The time it takes for the browser to request a tab to be visible. Note that
    this only measures the time from the browser deciding to make the tab
    visible (after a click, or keyboard-shortcut to switch tabs), until the tab
    is requested to become visible. The time it takes to actually make the tab
    visible and show on screen is measured in a separate metric, in
    RWH_TabSwitchPaintDuration.
  </summary>
</histogram>

<histogram name="BrowserActions.NumTabCreatedInBackground" units="tabNum">
  <owner>ltian@chromium.org</owner>
  <summary>
    The number of tabs currently opened when users tap &quot;Open in new Chrome
    tab&quot; from Browser Actions context menu. This includes the new tab
    created from the tap.
  </summary>
</histogram>

<histogram name="BrowserActions.SelectedOption" enum="BrowserActionsMenuOption">
  <owner>ltian@chromium.org</owner>
  <summary>
    The option that the user selected from a Browser Actions context menu.
  </summary>
</histogram>

<histogram name="BrowserDialogs.ExternalProtocol.HandleState"
    enum="HandleStateType">
  <owner>ramyasharma@chromium.org</owner>
  <summary>
    Whether or not the user checked the option in the external protocol dialog
    to remember their choice of opening or not opening the specified app.
    Recorded each time the user interacts with the External Protocol Dialog,
    when making a decision.
  </summary>
</histogram>

<histogram name="BrowserDialogs.ExternalProtocol.RememberCheckbox"
    enum="BooleanChecked">
  <obsolete>
    Deprecated 09/2017. This histogram has been replaced with
    ExternalProtocol.HandleState.
  </obsolete>
  <owner>dominickn@chromium.org</owner>
  <summary>
    Whether or not the user checked the option in the external protocol dialog
    to remember their choice of opening or not opening the specified app.
    Recorded each time the user interacts with the External Protocol Dialog
    (either accepting or cancelling/dismissing).
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.ChildCrashes" enum="RendererType">
  <owner>wfh@chromium.org</owner>
  <summary>Count of renderer process crashes grouped by type.</summary>
</histogram>

<histogram name="BrowserRenderProcessHost.ChildKills" enum="RendererType">
  <owner>wfh@chromium.org</owner>
  <summary>Count of renderer process kills grouped by type.</summary>
</histogram>

<histogram name="BrowserRenderProcessHost.ChildKills.OOM" enum="RendererType">
  <owner>oshima@chromium.org</owner>
  <summary>
    Out of BrowserRenderProcessHost.ChildKills, numer of kills due to SIGKILL,
    which is a strong signal of out of memory on Chrome OS, grouped by renderer
    type.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.ChildLaunchFailureCodes"
    enum="LaunchErrorCodes">
  <owner>wfh@chromium.org</owner>
  <summary>
    The launch error codes for failed renderer process launches.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.ChildLaunchFailures"
    enum="RendererType">
  <owner>wfh@chromium.org</owner>
  <summary>Count of renderer process launch failures grouped by type.</summary>
</histogram>

<histogram name="BrowserRenderProcessHost.DisconnectedAlive"
    enum="RendererType">
  <owner>wfh@chromium.org</owner>
  <summary>
    Count of renderer process crashes that we miscounted because we took the
    exit code too early. Grouped by type.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.KeepAliveDuration" units="ms">
  <owner>horo@chromium.org</owner>
  <summary>
    How long a render process is kept alive by additional customers such as
    shared workers and service workers.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.KeepAliveDuration.Fetch" units="ms">
  <owner>panicker@chromium.org</owner>
  <summary>
    How long fetch is alive which in turn keeps the render process alive.
    TODO(panicker): Remove after investigation of crbug/823482, likely in M68.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.KeepAliveDuration.ServiceWorker"
    units="ms">
  <owner>panicker@chromium.org</owner>
  <summary>
    How long service worker is alive which in turn keeps the render process
    alive. TODO(panicker): Remove after investigation of crbug/823482, likely in
    M68.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.KeepAliveDuration.SharedWorker"
    units="ms">
  <owner>panicker@chromium.org</owner>
  <summary>
    How long shared worker is alive which in turn keeps the render process
    alive. TODO(panicker): Remove after investigation of crbug/823482, likely in
    M68.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.KeepAliveDuration.Unload" units="ms">
  <owner>alexmos@chromium.org</owner>
  <owner>panicker@chromium.org</owner>
  <summary>
    How long the renderer process is kept alive by a subframe unload handler.
    TODO(panicker): Remove after investigation of crbug/823482.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.OnChannelError" enum="BooleanHit">
  <owner>wfh@chromium.org</owner>
  <summary>
    Number of times BrowserRenderProcessHost::OnChannelError was called.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.SpareProcessMaybeTakeAction"
    enum="SpareProcessMaybeTakeAction">
  <owner>alexmos@chromium.org</owner>
  <owner>lukasza@chromium.org</owner>
  <summary>
    Records what happens when an attempt is made to use a spare
    RenderProcessHost - logs that either the attempt succeeded or why it failed.
  </summary>
</histogram>

<histogram name="BrowserServices.TwaOpenTime" units="ms">
  <owner>peconn@chromium.org</owner>
  <summary>
    Triggered when a TrustedWebActivity is paused, recording the time since it
    had been resumed.
  </summary>
</histogram>

<histogram name="BrowserServices.VerificationResult"
    enum="BrowserServicesVerificationResult">
  <owner>peconn@chromium.org</owner>
  <summary>
    The result of Digital Asset Link verification performed when starting a
    Trusted Web Activity.
  </summary>
</histogram>

<histogram name="BrowserWindow.Resize.Duration" units="ms">
  <owner>sadrul@chromium.org</owner>
  <owner>mustash-team@google.com</owner>
  <summary>
    Duration of an interactive resize from start to end. Measured only on
    Windows.
  </summary>
</histogram>

<histogram name="BrowserWindow.Resize.StepBoundsChange" units="pixels">
  <owner>sadrul@chromium.org</owner>
  <summary>
    Size changed between two consecutive steps during browser-window resize.
    Measured only on Windows.
  </summary>
</histogram>

<histogram name="BrowserWindow.Resize.StepCount" units="steps">
  <owner>sadrul@chromium.org</owner>
  <summary>
    Number of intermediate resize-steps taken to complete the resize from start
    to end. Measured only on Windows.
  </summary>
</histogram>

<histogram name="BrowserWindow.Resize.StepInterval" units="ms">
  <owner>sadrul@chromium.org</owner>
  <summary>
    Time-interval between two consecutive steps during browser-window resize. An
    interactive resize can have many number of small steps. This measures the
    interval between two steps. 'Duration' measures the interval between the
    first and last steps. Measured only on Windows.
  </summary>
</histogram>

<histogram name="Bubbles.Close.Accepted" enum="BubbleType">
  <owner>hcarmona@chromium.org</owner>
  <summary>An open bubble was closed because the user accepted it.</summary>
</histogram>

<histogram name="Bubbles.Close.Canceled" enum="BubbleType">
  <owner>hcarmona@chromium.org</owner>
  <summary>
    An open bubble was closed because the user didn't accept it.
  </summary>
</histogram>

<histogram name="Bubbles.Close.FocusLost" enum="BubbleType">
  <owner>hcarmona@chromium.org</owner>
  <summary>An open bubble was closed because of a focus change.</summary>
</histogram>

<histogram name="Bubbles.Close.Forced" enum="BubbleType">
  <owner>hcarmona@chromium.org</owner>
  <summary>An open bubble was forced to close.</summary>
</histogram>

<histogram name="Bubbles.Close.FrameDestroyed" enum="BubbleType">
  <owner>hcarmona@chromium.org</owner>
  <summary>An open bubble was dismissed because a frame was destroyed.</summary>
</histogram>

<histogram name="Bubbles.Close.FullscreenToggled" enum="BubbleType">
  <owner>hcarmona@chromium.org</owner>
  <summary>
    An open bubble was dismissed because fullscreen was toggled.
  </summary>
</histogram>

<histogram name="Bubbles.Close.Navigated" enum="BubbleType">
  <owner>hcarmona@chromium.org</owner>
  <summary>
    An open bubble was dismissed because the page was navigated.
  </summary>
</histogram>

<histogram name="Bubbles.Close.TabDetached" enum="BubbleType">
  <owner>hcarmona@chromium.org</owner>
  <summary>An open bubble was closed because a tab was detached.</summary>
</histogram>

<histogram name="Bubbles.Close.TabSwitched" enum="BubbleType">
  <owner>hcarmona@chromium.org</owner>
  <summary>An open bubble was closed because a tab was switched.</summary>
</histogram>

<histogram name="Bubbles.Close.UserDismissed" enum="BubbleType">
  <owner>hcarmona@chromium.org</owner>
  <summary>
    An open bubble was dismissed by the user without making a decission.
  </summary>
</histogram>

<histogram name="Bubbles.DisplayTime.All" units="ms">
  <owner>hcarmona@chromium.org</owner>
  <summary>
    Log the amount of time any bubble was visible. Only bubbles that are shown
    will have a visible time.
  </summary>
</histogram>

<histogram name="Bubbles.NeverShown" enum="BubbleType">
  <owner>hcarmona@chromium.org</owner>
  <summary>A bubble was given to the bubble manager but not shown.</summary>
</histogram>

<histogram name="Canvas.ContextType" enum="CanvasContextType">
  <owner>junov@chromium.org</owner>
  <owner>kbr@chromium.org</owner>
  <summary>
    Records the context type names used to create canvas rendering contexts.
  </summary>
</histogram>

<histogram name="Canvas.CreateImageBitmapSource"
    enum="CanvasCreateImageBitmapSource">
  <owner>junov@chromium.org</owner>
  <owner>zakerinasab@chromium.org</owner>
  <summary>
    The source from which an ImageBitmap is created by a createImageBitmap call.
  </summary>
</histogram>

<histogram name="Canvas.DisplayListFallbackReason"
    enum="CanvasDisplayListFallbackReason">
  <obsolete>
    Deprecated 11/2017 with removal of Display List Canvas 2D mode.
  </obsolete>
  <owner>junov@chromium.org</owner>
  <summary>
    The reasons why a canvas initially set to display list mode had to fall back
    to direct rasterization mode.
  </summary>
</histogram>

<histogram name="Canvas.GPUAccelerated2DCanvasDisableDeferralReason"
    enum="CanvasGPUAccelerated2DCanvasDisableDeferralReason">
  <owner>junov@chromium.org</owner>
  <summary>
    The reasons why a GPU accelerated canvas stopped deferring its rendering
    operations.
  </summary>
</histogram>

<histogram name="Canvas.HibernationEvents" enum="CanvasHibernationEvent">
  <owner>junov@chromium.org</owner>
  <summary>
    Records the occurrence of events related to 2D canvas GPU resource
    hibernation.
  </summary>
</histogram>

<histogram name="Canvas.Offscreen.CommitType" enum="OffscreenCanvasCommitType">
  <owner>xidachen@chromium.org</owner>
  <owner>junov@chromium.org</owner>
  <summary>
    The type of code path that OffscreenCanvas's commit API goes through.
  </summary>
</histogram>

<histogram name="Canvas.RequestedImageMimeTypes" enum="RequestedImageMimeType">
  <owner>xlai@chromium.org</owner>
  <summary>
    Records the occurence of image file formats passed into toDataURL and toBlob
    functions in canvas.
  </summary>
</histogram>

<histogram name="CAPSUpdater.Step" enum="CAPSUpdaterStep">
  <obsolete>
    Deprecated 08/2016 with removal of Chrome Crash Service component.
  </obsolete>
  <owner>scottmg@chromium.org</owner>
  <summary>
    Tracks the component updater steps for the Chrome Crash Service.
  </summary>
</histogram>

<histogram name="CaptivePortal.DetectionResultSincePortal"
    enum="BooleanPresent">
  <owner>warx@chromium.org</owner>
  <summary>
    Within one minute of the default network reporting a portal network, if we
    see an offline detection result, it is likely the client got blacklisted.
    Record the boolean rate that Chrome observes offline vs non-offline
    detection results. See go/bad-portal for client blacklisting problem.
  </summary>
</histogram>

<histogram name="CaptivePortal.DetectResult" enum="CaptivePortalDetectResult">
  <owner>meacer@chromium.org</owner>
  <summary>Records the result of a captive portal probe.</summary>
</histogram>

<histogram name="CaptivePortal.Notification.Status"
    enum="CaptivePortalNotificationStatus">
  <owner>alemate@chromium.org</owner>
  <summary>
    Count of displayed and not displayed due to errors notifications about
    captive portal.
  </summary>
</histogram>

<histogram name="CaptivePortal.Notification.UserAction"
    enum="CaptivePortalNotificationUserAction">
  <owner>alemate@chromium.org</owner>
  <summary>
    Count of clicked, closed and ignored captive portal notifications.
  </summary>
</histogram>

<histogram name="CaptivePortal.OOBE.DetectionDuration" units="ms">
  <owner>alemate@chromium.org</owner>
  <summary>
    Duration of the captive portal detection process for a particular network at
    OOBE. Detection duration is recorded each time portal detection is completed
    for an active network.
  </summary>
</histogram>

<histogram name="CaptivePortal.OOBE.DetectionResult" enum="CaptivePortalStatus">
  <owner>alemate@chromium.org</owner>
  <summary>
    The result of captive portal detection attempts performed at OOBE. Detection
    result is recorded when portal detection is completed for an active network
    and when it differs from the previous result for the same network.
  </summary>
</histogram>

<histogram name="CaptivePortal.OOBE.DiscrepancyWithShill"
    enum="CaptivePortalStatus">
  <owner>alemate@chromium.org</owner>
  <summary>
    The result of captive portal detection attempts at OOBE if it diverges from
    network manager results. Detection result is recorded each time portal
    detection is completed for an active network.
  </summary>
</histogram>

<histogram name="CaptivePortal.OOBE.PortalToOnlineTransition" units="ms">
  <owner>alemate@chromium.org</owner>
  <summary>
    Number of milliseconds passed between consecutive reports for the same
    network about portal and online states.
  </summary>
</histogram>

<histogram name="CaptivePortal.RedirectTime" units="ms">
  <owner>alemate@chromium.org</owner>
  <summary>
    Number of milliseconds between start of request to gstatic.com/generate_204
    and receipt of response with redirect to captive portal login page.
  </summary>
</histogram>

<histogram name="CaptivePortal.Session.DetectionDuration" units="ms">
  <owner>alemate@chromium.org</owner>
  <summary>
    Duration of the captive portal detection process for a particular network in
    user session. Detection duration is recorded each time portal detection is
    completed for an active network.
  </summary>
</histogram>

<histogram name="CaptivePortal.Session.DetectionResult"
    enum="CaptivePortalStatus">
  <owner>alemate@chromium.org</owner>
  <summary>
    The result of captive portal detection attempts performed in user session.
    Detection result is recorded when portal detection is completed for an
    active network and when it differs from the previous result for the same
    network.
  </summary>
</histogram>

<histogram name="CaptivePortal.Session.DiscrepancyWithShill"
    enum="CaptivePortalStatus">
  <owner>alemate@chromium.org</owner>
  <summary>
    The result of captive portal detection attempts in session if it diverges
    from network manager results. Detection result is recorded each time portal
    detection is completed for an active network.
  </summary>
</histogram>

<histogram name="CaptivePortal.Session.PortalToOnlineTransition" units="ms">
  <owner>alemate@chromium.org</owner>
  <summary>
    Number of milliseconds passed between consecutive reports for the same
    network about portal and online states.
  </summary>
</histogram>

<histogram name="CaptivePortal.Session.SecureConnectionFailed"
    enum="CaptivePortalStatus">
  <owner>michaeldo@chromium.org</owner>
  <summary>
    The result of captive portal detection attempts performed in user session.
    Detection result is recorded when portal detection is completed for a failed
    secure connection.
  </summary>
</histogram>

<histogram name="CaptivePortal.Session.TimeoutDetectionResult"
    enum="CaptivePortalStatus">
  <owner>michaeldo@chromium.org</owner>
  <summary>
    The result of captive portal detection attempts performed in user session.
    Detection result is recorded when portal detection is completed for a
    request which timed out or hadn't yet replied within eight seconds.
  </summary>
</histogram>

<histogram name="Cast.Channel.Certificate" enum="CastCertificateStatus">
  <owner>ryanchung@google.com</owner>
  <summary>
    Records the result of the Cast certificate verification on the Cast sender.
  </summary>
</histogram>

<histogram name="Cast.Channel.Nonce" enum="CastNonceStatus">
  <owner>ryanchung@google.com</owner>
  <summary>
    Records whether the correct nonce challenge was in the Cast receiver's
    response.
  </summary>
</histogram>

<histogram name="Cast.Channel.Signature" enum="CastSignatureStatus">
  <owner>ryanchung@google.com</owner>
  <summary>
    Records whether the signature returned by the Cast receiver is verifiable
    with the challenge and device certificate.
  </summary>
</histogram>

<histogram name="Cast.Network.Down.Duration.In.Seconds" units="seconds">
  <owner>cast-analytics@google.com</owner>
  <summary>
    Records the time the network has been down on a Cast device.  Recorded when
    network goes up.
  </summary>
</histogram>

<histogram name="Cast.Network.Up.Duration.In.Minutes" units="minutes">
  <owner>cast-analytics@google.com</owner>
  <summary>
    Records the time the network has been up on a Cast device.  Recorded when
    network goes down.
  </summary>
</histogram>

<histogram name="Cast.Sender.CastButtonShown" enum="BooleanEnabled">
  <owner>mfoltz@chromium.org</owner>
  <summary>
    Records the number of times the cast button was shown to the user. The value
    will be true if the button is enabled, and false if the button is disabled.
    Note that depending on the current UX, it's possible that we hide the button
    entirely if it's disabled, so it's possible for the false values to be 0.
  </summary>
</histogram>

<histogram name="Cast.Sender.CastButtonShownInitialFullscreen"
    enum="BooleanEnabled">
  <owner>mfoltz@chromium.org</owner>
  <summary>
    Records the number of times the cast button was shown to the user when the
    video is fullscreened. The value will only be recorded on entering
    fullscreen. The value will be true if the button is enabled, and false if
    the button is disabled. Note that depending on the current UX,it's possible
    that we hide the button entirely if it's disabled, so it's possible for the
    false values to be 0.
  </summary>
</histogram>

<histogram name="Cast.Sender.CastMediaType" enum="MediaContainers">
  <owner>miguelg@chromium.org</owner>
  <summary>Records the media type of every video being cast.</summary>
</histogram>

<histogram name="Cast.Sender.CastPlayerResult" enum="CastPlayBackState">
  <owner>maybelle@chromium.org</owner>
  <owner>miguelg@chromium.org</owner>
  <summary>
    Records the result of a request to play remotely on a per player app basis
    within Chrome for Android.
  </summary>
</histogram>

<histogram name="Cast.Sender.CastPlaySuccess" enum="BooleanSuccess">
  <obsolete>
    Deprecated 04/2014, and replaced by Cast.Sender.CastPlayerResult.
  </obsolete>
  <owner>maybelle@chromium.org</owner>
  <owner>miguelg@chromium.org</owner>
  <summary>
    Records the result of a request to play remotely. The value will be true if
    the playback succeeded, and false if there was an error.
  </summary>
</histogram>

<histogram name="Cast.Sender.CastTimeRemainingPercentage" units="%">
  <owner>mfoltz@chromium.org</owner>
  <summary>
    Records the percentage of the video left at the time the remote playback is
    stopped. This will be recorded when the playback is stopped by the user, or
    when it's stopped by the cast device.
  </summary>
</histogram>

<histogram name="Cast.Sender.DeviceType" enum="RemotePlaybackDeviceType">
  <owner>avayvod@google.com</owner>
  <summary>
    Records the type of the remote playback device selected by the user. This
    will be recorded when the user has chosen the device from the media route
    chooser dialog.
  </summary>
</histogram>

<histogram name="Cast.Sender.FullscreenControlsActionWithMediaElement"
    enum="MediaCommand">
  <owner>aberent@chromium.org</owner>
  <owner>avayvod@chromium.org</owner>
  <summary>
    Record each interaction with the fullscreen remote playback controls in
    cases when the corresponding media element on the page was present.
  </summary>
</histogram>

<histogram name="Cast.Sender.FullscreenControlsActionWithoutMediaElement"
    enum="MediaCommand">
  <owner>aberent@chromium.org</owner>
  <owner>avayvod@chromium.org</owner>
  <summary>
    Record each interaction with the fullscreen remote playback controls in
    cases when the corresponding media element on the page was not present.
  </summary>
</histogram>

<histogram name="Cast.Sender.MediaElementPresentWhenShowFullscreenControls"
    enum="BooleanPresent">
  <owner>aberent@chromium.org</owner>
  <owner>avayvod@chromium.org</owner>
  <summary>
    Indicates whether the corresponding media element on the page was present
    when the fullscreen remote playback controls were shown.
  </summary>
</histogram>

<histogram name="Cast.Sender.Overlay" enum="CastOverlayEvents">
  <obsolete>
    Deprecated July 2017 in favor of Media.Controls.CTR.CastOverlayButton.
  </obsolete>
  <owner>avayvod@chromium.org</owner>
  <owner>mlamouri@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Records events and user interactions related to the Cast overlay shown on
    video elements.
  </summary>
</histogram>

<histogram name="Cast.Sender.SessionTimeWithoutMediaElementPercentage"
    units="%">
  <owner>aberent@chromium.org</owner>
  <owner>avayvod@chromium.org</owner>
  <summary>
    Records the ratio of the time the media element was detached from the remote
    playback session to the total duration of the session (as from when the
    element has been attached till when the session stopped or disconnected), in
    percents.
  </summary>
</histogram>

<histogram name="Cast.Sender.UrlResolveResult"
    enum="RemotePlaybackUrlResolveResult">
  <owner>aberent@google.com</owner>
  <summary>
    Records the result of resolving the video URL for cast, including checking
    its CORS header.
  </summary>
</histogram>

<histogram name="Cast.Sender.VideoEncodeAcceleratorInitializeSuccess"
    enum="BooleanSuccess">
  <owner>posciak@chromium.org</owner>
  <summary>
    Indicates whether initialization of a video encode accelerator for Cast
    sender was successful.
  </summary>
</histogram>

<histogram name="CastV2.Transport.Connect.Latency.Unknown" units="ms">
  <owner>cast-analytics@google.com</owner>
  <summary>
    The latency between when a Cast V2 connection is established and the first
    message is received on that connection. &quot;Unknown&quot; is the peer
    type, which is not known at this point in the CastV2 connection
    establishment.  Naming conforms to the CastV2 sender-side histogram naming
    convention &quot;CastV2.[action].[name].[peer_type]&quot;.
  </summary>
</histogram>

<histogram name="CastV2.Transport.SslHandshake.Error.Unknown"
    enum="NetErrorCodes">
  <owner>cast-analytics@google.com</owner>
  <summary>
    On accepting a Cast V2 transport socket connection, if an error is
    encountered, the error code is logged here. &quot;Unknown&quot; is the peer
    type, which is not known at this point in the CastV2 connection
    establishment.  &quot;SslHandshake.Error&quot; is the name of the action.
    Naming conforms to the CastV2 sender-side histogram naming convention
    &quot;CastV2.[action].[name].[peer_type]&quot;.
  </summary>
</histogram>

<histogram name="CastV2.Transport.SslHandshake.Unknown" units="ms">
  <owner>cast-analytics@google.com</owner>
  <summary>
    The time taken to do the handshake during Cast V2 transport socket creation.
    &quot;Unknown&quot; is the peer type, which is not known at this point in
    the CastV2 connection establishment.  Naming conforms to the CastV2
    sender-side histogram naming convention
    &quot;CastV2.[action].[name].[peer_type]&quot;.
  </summary>
</histogram>

<histogram name="Cellular.ActivationFailure">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The count of cellular device activation failures (Chrome OS).
  </summary>
</histogram>

<histogram name="Cellular.ActivationTry">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The count of cellular device activation tries (Chrome OS).</summary>
</histogram>

<histogram name="Cellular.ConnectionFailed">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The count of cellular reconnect failures during activation (Chrome OS).
  </summary>
</histogram>

<histogram name="Cellular.ConnectionRetry">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The count of cellular device reconnect tries during activation (Chrome OS).
  </summary>
</histogram>

<histogram name="Cellular.MobileSetupFailed">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The count of successful cellular plan established (Chrome OS).
  </summary>
</histogram>

<histogram name="Cellular.MobileSetupStart">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The count of initiated cellular device setup starts (Chrome OS).
  </summary>
</histogram>

<histogram name="Cellular.MobileSetupSucceeded">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The count of failed cellular plan setup tries (Chrome OS).</summary>
</histogram>

<histogram name="Cellular.PaymentFailed">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The count of failed cellular plan purchases (Chrome OS).</summary>
</histogram>

<histogram name="Cellular.PaymentReceived">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The count of successfully completed cellular plan purchases (Chrome OS).
  </summary>
</histogram>

<histogram name="CertificateType">
  <obsolete>
    Deprecated as of 8/2013. This histogram only considered the leaf certificate
    expiry date as a proxy for whether a certificate was in-scope for the BRs,
    but did not consider the issuance date. As some CAs have issued long-lived
    certs prior to the BRs, this disproportionately reported those certs as
    being subject to the BRs, but non-compliant, when in reality they're not
    subject.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Information about the certificate algorithms and sizes in use on the web, to
    examine compliance with the CA/Browser Forum requirements and security best
    practice.
  </summary>
</histogram>

<histogram name="CertificateType2">
  <owner>rsleevi@chromium.org</owner>
  <summary>
    Information about the certificate algorithms and sizes in use on the web, to
    examine compliance with the CA/Browser Forum requirements and security best
    practice. This histogram considers the notBefore as the issuance date, for
    purposes of what requirements apply.
  </summary>
</histogram>

<histogram name="ChildAccountReconcilor.ForcedUserExitOnReconcileError"
    enum="BooleanHit">
  <owner>sinhak@chromium.org</owner>
  <owner>escordeiro@chromium.org</owner>
  <summary>
    Number of forced logouts for child accounts on an account reconciliation
    error. Check |ChromeOSChildAccountReconcilorDelegate|.
  </summary>
</histogram>

<histogram name="ChildProcess.BadMessgeTerminated" enum="ProcessType2">
  <owner>jam@chromium.org</owner>
  <summary>
    Count of child processes killed because they sent an IPC that couldn't be
    deserialized.
  </summary>
</histogram>

<histogram name="ChildProcess.Crashed" enum="ProcessType">
  <obsolete>
    Deprecated 3/2013. Renamed to ChildProcess.Crashed2.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Count of child process crashes grouped by process type.</summary>
</histogram>

<histogram name="ChildProcess.Crashed.UtilityProcessHash"
    enum="UtilityProcessNameHash">
  <owner>wfh@chromium.org</owner>
  <summary>
    Count of child utility process crashes, bucketed by the hash of their
    process name. The process name is typically the service name of the mojo
    service.
  </summary>
</histogram>

<histogram name="ChildProcess.Crashed2" enum="ProcessType2">
  <owner>wfh@chromium.org</owner>
  <summary>Count of child process crashes grouped by process type.</summary>
</histogram>

<histogram name="ChildProcess.CrashedWasAlive" enum="ProcessType">
  <obsolete>
    Deprecated as of 10/2015.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Count of child process crashes that we miscounted because we took the exit
    code too early. Grouped by process type.
  </summary>
</histogram>

<histogram name="ChildProcess.Crashes" enum="ProcessType">
  <obsolete>
    Deprecated 10/2011. Renamed to ChildProcess.Crashed.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Count of child process crashes grouped by process type.</summary>
</histogram>

<histogram name="ChildProcess.CrashesWasAlive" enum="ProcessType">
  <obsolete>
    Deprecated 10/2011. Renamed to ChildProcess.CrashedWasAlive.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Count of child process crashes that we miscounted because we took the exit
    code too early. Grouped by process type.
  </summary>
</histogram>

<histogram name="ChildProcess.DefaultCase" enum="ProcessType">
  <obsolete>
    Deprecated as of 10/2015.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Count of child process crashes for which we were not able to understand the
    exit code, grouped by process type.
  </summary>
</histogram>

<histogram name="ChildProcess.Disconnected" enum="ProcessType">
  <obsolete>
    Deprecated 3/2013. Renamed to ChildProcess.Disconnected2.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Count of child process abnormal channel disconnects grouped by process type.
  </summary>
</histogram>

<histogram name="ChildProcess.Disconnected2" enum="ProcessType2">
  <owner>wfh@chromium.org</owner>
  <summary>
    Count of child process abnormal channel disconnects grouped by process type.
  </summary>
</histogram>

<histogram name="ChildProcess.DisconnectedAlive" enum="ProcessType">
  <obsolete>
    Deprecated 3/2013. Renamed to ChildProcess.DisconnectedAlive2.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Count of child process abnormal channel disconnects that are not classified
    and reported because we took the exit code too early. Grouped by process
    type.
  </summary>
</histogram>

<histogram name="ChildProcess.DisconnectedAlive2" enum="ProcessType2">
  <owner>wfh@chromium.org</owner>
  <summary>
    Count of child process abnormal channel disconnects that are not classified
    and reported because we took the exit code too early. Grouped by process
    type.
  </summary>
</histogram>

<histogram name="ChildProcess.HangRendererType" enum="RendererUnresponsiveType">
  <obsolete>
    Deprecated 3/2017.
  </obsolete>
  <owner>clamy@chromium.org</owner>
  <summary>
    What the browser was waiting for from the renderer when it was reported as
    hung.
  </summary>
</histogram>

<histogram name="ChildProcess.InvalidSandboxStateCrash.NoStartupWindow"
    enum="BooleanPresent">
  <owner>wfh@chromium.org</owner>
  <summary>
    Whether the browser command line had the switch --no-startup-window when a
    child process crashed due to invalid sandbox state. Recorded when a child
    process crashes if the exit code from the child process is
    RESULT_CODE_INVALID_SANDBOX_STATE.
  </summary>
</histogram>

<histogram name="ChildProcess.Killed" enum="ProcessType">
  <obsolete>
    Deprecated 3/2013. Renamed to ChildProcess.Killed2.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Count of child process kills grouped by process type.</summary>
</histogram>

<histogram name="ChildProcess.Killed2" enum="ProcessType2">
  <owner>wfh@chromium.org</owner>
  <summary>Count of child process kills grouped by process type.</summary>
</histogram>

<histogram name="ChildProcess.Killed2.OOM" enum="ProcessType2">
  <owner>oshima@chromium.org</owner>
  <summary>
    Out of ChildProcess.Killled, number of kills due to SIGKILL, which is a
    strong signal of out of memory on Chrome OS, grouped by process type.
  </summary>
</histogram>

<histogram name="ChildProcess.KilledByExtensionAPI">
  <owner>nasko@chromium.org</owner>
  <summary>
    Count of child processes killed by the extension API (processes.terminate).
  </summary>
</histogram>

<histogram name="ChildProcess.KilledWasAlive" enum="ProcessType">
  <obsolete>
    Deprecated as of 10/2015.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Count of child process kills that we miscounted because we took the exit
    code too early. Grouped by process type.
  </summary>
</histogram>

<histogram name="ChildProcess.Kills" enum="ProcessType">
  <obsolete>
    Deprecated 10/2011. Renamed to ChildProcess.Killed.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Count of child process kills grouped by process type.</summary>
</histogram>

<histogram name="ChildProcess.KillsWasAlive" enum="ProcessType">
  <obsolete>
    Deprecated 10/2011. Renamed to ChildProcess.KilledWasAlive.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Count of child process kills that we miscounted because we took the exit
    code too early. Grouped by process type.
  </summary>
</histogram>

<histogram name="ChildProcess.Launched.UtilityProcessHash"
    enum="UtilityProcessNameHash">
  <owner>wfh@chromium.org</owner>
  <summary>
    Count of child utility process launches, bucketed by the hash of their
    process name. The process name is typically the service name of the mojo
    service.
  </summary>
</histogram>

<histogram name="Chrome.Android.Activity.CrashCounts" enum="AndroidActivityId">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Indicates how many times each particular type of Activity was in the
    foreground when a UMA session was terminated abnormally. UMA sessions last
    as long as Chrome remains in the foreground.
  </summary>
</histogram>

<histogram name="Chrome.Android.Activity.LaunchCounts" enum="AndroidActivityId">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Indicates how many times each particular type of Activity was brought to the
    foreground when a UMA session was active (i.e. launched at some point). UMA
    sessions last as long as Chrome remains in the foreground.
  </summary>
</histogram>

<histogram name="Chrome.Browser.CrashedExecutionPhase" enum="ExecutionPhase">
  <owner>manzagop@chromium.org</owner>
  <summary>
    Indicates the execution phase the browser was in when the browser crashed.
  </summary>
</histogram>

<histogram name="Chrome.Browser.ExecutionPhase" enum="ExecutionPhase">
  <obsolete>
    Deprecated as of 11/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Indicates the execution phase the browser was in when browser didn't exit
    cleanly.
  </summary>
</histogram>

<histogram name="Chrome.BrowserCrashDumpAttempts">
  <obsolete>
    Deprecated as of 04/2015.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The total number of times the browser process has attempted to generate a
    crash dump. This should be the sum of Chrome.BrowserDumpsWithCrash and
    Chrome.BrowserDumpsWithNoCrash.
  </summary>
</histogram>

<histogram name="Chrome.BrowserDumpsWithCrash">
  <obsolete>
    Deprecated as of 04/2015.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of times the browser process has attempted to generate a crash
    dump because of an actual browser crash.
  </summary>
</histogram>

<histogram name="Chrome.BrowserDumpsWithNoCrash">
  <obsolete>
    Deprecated as of 04/2015.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of times the browser process has attempted to generate a crash
    dump in a non-crashing (i.e., reporting only) context.
  </summary>
</histogram>

<histogram name="Chrome.MessageLoopProblem" enum="MessageLoopProblems">
  <owner>gab@chromium.org</owner>
  <summary>
    Track set of Windows errors inside the meessage loop/pump system, where
    system calls fail, and we try to gracefully recover.  These errors should
    really never happen, so we should be sure to look closer if they do.
  </summary>
</histogram>

<histogram name="Chrome.ProcessSingleton.NotifyResult" enum="NotifyResult"
    expires_after="2018-08-30">
  <owner>gab@chromium.org</owner>
  <summary>
    The result of every rendez-vous reported once per browser process launch.
  </summary>
</histogram>

<histogram name="Chrome.ProcessSingleton.ProcessTerminateErrorCode.Windows"
    enum="WinGetLastError">
  <obsolete>
    Deprecated as of 12/2017.
  </obsolete>
  <owner>aseren@yandex-team.ru</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    The error code of remote process termination on Windows in case when remote
    process hung. This histogram has been replaced by
    Chrome.ProcessSingleton.TerminateProcessErrorCode.Windows histogram.
  </summary>
</histogram>

<histogram name="Chrome.ProcessSingleton.RemoteHungProcessTerminateReason"
    enum="RemoteHungProcessTerminateReason">
  <owner>aseren@yandex-team.ru</owner>
  <owner>gab@chromium.org</owner>
  <summary>The reason of remote hang processes termination.</summary>
</histogram>

<histogram name="Chrome.ProcessSingleton.RemoteProcessInteractionResult"
    enum="RemoteProcessInteractionResult">
  <owner>aseren@yandex-team.ru</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Used to send the result of interaction with remote process as histograms in
    case when remote process influences on start.
  </summary>
</histogram>

<histogram name="Chrome.ProcessSingleton.TerminateProcessErrorCode.Posix"
    enum="PopularOSErrno">
  <owner>aseren@yandex-team.ru</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    The error code of remote process termination on Posix in case when remote
    process hung.
  </summary>
</histogram>

<histogram name="Chrome.ProcessSingleton.TerminateProcessErrorCode.Windows"
    enum="WinGetLastError">
  <owner>aseren@yandex-team.ru</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    The error code of remote process termination on Windows in case when remote
    process hung.
  </summary>
</histogram>

<histogram name="Chrome.ProcessSingleton.TerminateProcessTime" units="ms">
  <owner>aseren@yandex-team.ru</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Time it takes from TerminateProcess call to the moment when we stop waiting
    for remote process switches to signal state.
  </summary>
</histogram>

<histogram name="Chrome.ProcessSingleton.TerminationWaitErrorCode.Windows"
    enum="WinGetLastError">
  <owner>aseren@yandex-team.ru</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    The error code of wating for remote process termination on Windows.
  </summary>
</histogram>

<histogram name="Chrome.ProcessSingleton.TimeToCreate" units="ms"
    expires_after="2018-08-30">
  <owner>gab@chromium.org</owner>
  <summary>
    Time it takes to grab the process singleton. Reported once per successful
    attempt at obtaining the singleton.
  </summary>
</histogram>

<histogram name="Chrome.ProcessSingleton.TimeToFailure" units="ms"
    expires_after="2018-08-30">
  <owner>gab@chromium.org</owner>
  <summary>
    Time it takes to return an error from the process singleton algorithm (nor
    succeeding in obtaining it, nor in generating a rendez-vous). This does not
    include time spent in the fast notification path (chrome_exe_main_win.cc).
  </summary>
</histogram>

<histogram name="Chrome.ProcessSingleton.TimeToNotify" units="ms"
    expires_after="2018-08-30">
  <owner>gab@chromium.org</owner>
  <summary>
    Time it takes to find the process singleton owner and notify it. Reported
    once per successful rendez-vous. This does not include time spent in the
    fast notification path (chrome_exe_main_win.cc).
  </summary>
</histogram>

<histogram name="Chrome.SearchSelectExempt" enum="SearchEngine">
  <obsolete>
    Deprecated 8/2013. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The default search engine selected by a user not in the search engine dialog
    experiment.
  </summary>
</histogram>

<histogram name="Chrome.SearchSelectExperiment" enum="SearchEngine">
  <obsolete>
    Deprecated 8/2013. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The default search engine selected by a user in the search engine dialog
    experiment.
  </summary>
</histogram>

<histogram name="Chrome.SearchSelectExperimentSlot1" enum="SearchEngine">
  <obsolete>
    Deprecated 8/2013. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The default search engine selected by a user in slot 1 of a randomized
    search engine dialog.
  </summary>
</histogram>

<histogram name="Chrome.SearchSelectExperimentSlot2" enum="SearchEngine">
  <obsolete>
    Deprecated 8/2013. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The default search engine selected by a user in slot 2 of a randomized
    search engine dialog.
  </summary>
</histogram>

<histogram name="Chrome.SearchSelectExperimentSlot3" enum="SearchEngine">
  <obsolete>
    Deprecated 8/2013. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The default search engine selected by a user in slot 3 of a randomized
    search engine dialog.
  </summary>
</histogram>

<histogram name="Chrome.SearchSelectExperimentSlot4" enum="SearchEngine">
  <obsolete>
    Deprecated 8/2013. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The default search engine selected by a user in slot 4 of a randomized
    search engine dialog.
  </summary>
</histogram>

<histogram name="Chrome.UmaPageloadCounter" enum="BooleanHit">
  <obsolete>
    Deprecated 6/2017. No longer tracked.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Records when a page load happens, based on the same logic as the PageLoad
    user action.
  </summary>
</histogram>

<histogram name="ChromeGeneratedCustomTab.IntentToFirstCommitNavigationTime"
    units="ms">
  <obsolete>
    Deprecated 10/2016 in favor of .IntentToFirstCommitNavigationTime2.*.
  </obsolete>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Time between the intent arrival in a Chrome generated custom tab and the
    first navigation commit, if the navigation is successful. Similar in
    principle to Startup.FirstCommitNavigationTime.
  </summary>
</histogram>

<histogram name="ChromeGeneratedCustomTab.IntentToFirstCommitNavigationTime2"
    units="ms">
  <obsolete>
    Deprecated 2017-08 in favor of
    ChromeGeneratedCustomTab.IntentToFirstNavigationStartTime.
  </obsolete>
  <owner>lizeb@chromium.org</owner>
  <summary>
    In &quot;Herb&quot; mode shows the time between the intent arrival in a
    Chrome generated custom tab and the first navigation start (note: not the
    navigation commit, as the name suggests). Recorded when the page has
    finished loading.
  </summary>
</histogram>

<histogram name="ChromeGeneratedCustomTab.IntentToFirstNavigationStartTime"
    units="ms">
  <owner>lizeb@chromium.org</owner>
  <summary>
    For Custom Tabs generated by Chrome itself instead of external apps, this
    shows the time between the intent arrival in the CCT and the first
    navigation start. Recorded when the page has finished loading.
  </summary>
</histogram>

<histogram name="ChromeGeneratedCustomTab.IntentToPageLoadedTime" units="ms">
  <owner>lizeb@chromium.org</owner>
  <summary>
    For Custom Tabs generated by Chrome itself instead of external apps, this
    shows time between the intent arrival in the CCT and the first &quot;page
    loaded&quot; event, if the navigation is successful.
  </summary>
</histogram>

<histogram name="ChromeNotifierService.Actions"
    enum="ChromeNotifierServiceActionType">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The actions to enable or disable services sending synced notifications.
    Synced Notification Sending services can be individually disabled by the
    user in the Chrome Notification center settings dialog.
  </summary>
</histogram>

<histogram name="ChromeOS.Apps.IntentPickerAction"
    enum="ArcIntentHandlerAction">
  <owner>elijahtaylor@google.com</owner>
  <owner>dominickn@chromium.org</owner>
  <owner>shihuis@google.com</owner>
  <summary>
    Records the response when the intent picker is shown to the user on Chrome
    OS to allow them to open a URL in an app.
  </summary>
</histogram>

<histogram name="ChromeOS.Apps.IntentPickerDestinationPlatform"
    enum="ArcIntentHandlerDestinationPlatform">
  <owner>elijahtaylor@google.com</owner>
  <owner>dominickn@chromium.org</owner>
  <owner>shihuis@google.com</owner>
  <summary>
    Records the app platform chosen (or Chrome if the user did not choose an
    app) when the intent picker is shown to the user on Chrome OS. The
    destination may be specified due to the user explicit selection or a
    previously stored preference.
  </summary>
</histogram>

<histogram name="ChromeOS.DetachableBase.PairResult"
    enum="DetachableBasePairResult">
  <obsolete>
    Deprecated 10/2017 and replaced by Platform.DetachableBase.PairResult.
  </obsolete>
  <owner>kitching@google.com</owner>
  <summary>Result of a Chrome OS detachable base pair operation.</summary>
</histogram>

<histogram name="ChromeOS.DetachableBase.ROUpdateMetric"
    enum="DetachableBaseROUpdateResult">
  <obsolete>
    Deprecated 10/2017 and replaced by Platform.DetachableBase.ROUpdateMetric.
  </obsolete>
  <owner>kitching@google.com</owner>
  <summary>Result of a Chrome OS detachable base RO firmware update.</summary>
</histogram>

<histogram name="ChromeOS.DetachableBase.RWUpdateMetric"
    enum="DetachableBaseRWUpdateResult">
  <obsolete>
    Deprecated 10/2017 and replaced by Platform.DetachableBase.RWUpdateMetric.
  </obsolete>
  <owner>kitching@google.com</owner>
  <summary>Result of a Chrome OS detachable base RW firmware update.</summary>
</histogram>

<histogram name="ChromeOS.Display.ColorProfile" enum="ChromeOSColorProfile">
  <obsolete>
    Deprecated 8/2017.
  </obsolete>
  <owner>xiaowenx@chromium.org</owner>
  <owner>mukai@chromium.org</owner>
  <summary>
    The name of the current color calibration of the display on Chrome OS. This
    value is sent when the color calibration is changed by the user.
  </summary>
</histogram>

<histogram name="ChromeOS.GAIA.AuthenticatorContentWindowNull" enum="Boolean">
  <owner>wjmaclean@chromium.org</owner>
  <summary>
    Whether the GAIA Authenticator unexpectedly encountered a null contentWindow
    value while handling WebView's onContentLoad event. This metric is only
    enabled for AuthMode = DEFAULT, which indicates ChromeOS online login. This
    is the only mode where the issue has been observed. Other modes not captured
    here are OFFLINE (offline ChromeOS login) and DESKTOP (for online GAIA login
    on desktop Chrome).
  </summary>
</histogram>

<histogram name="ChromeOS.GAIA.WebViewFlow" enum="BooleanGAIAWebViewFlow">
  <owner>achuith@chromium.org</owner>
  <summary>
    Whether a user signed in using the new WebView-based GAIA flow. This value
    is sent after the GAIA screen has completed user authentication.
  </summary>
</histogram>

<histogram name="ChromeOS.MachineIdRegen.AgeSeconds" units="seconds">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The number of seconds of uptime since the last time the Chrome OS machine-id
    was regenerated. This is reported every time the machine-id is regenerated
    except for the first time since reboot.
  </summary>
</histogram>

<histogram name="ChromeOS.MachineIdRegen.Reason" enum="ChromeOSMachineIdReason">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The reason why the Chrome OS machine-id was regenerated. This is reported
    when the machine-id is re-generated.
  </summary>
</histogram>

<histogram name="ChromeOS.MemoryPressureLevel" enum="MemoryPressureLevel">
  <owner>xdai@chromium.org</owner>
  <summary>
    The memory pressure level in Chrome OS, which is recorded periodically (once
    per second). This is used to show the relative frequency of the system being
    in a critical vs relaxed memory pressure state.
  </summary>
</histogram>

<histogram name="ChromeOS.MessageCenter.ScrollActionReason"
    enum="ChromeOSMessageCenterScrollActionReason" expires_after="2018-11-30">
  <owner>yoshiki@chromium.org</owner>
  <owner>omrilio@chromium.org</owner>
  <summary>
    The cause of the scroll event by the user on the message center. Only the
    first event after the message center opens is recorded. For example, the
    user opens the message center and scrolls by mouse then by key, only the
    mouse event is recorded. If the user closes and reopens the message center
    before the second event, both events are recorded.
  </summary>
</histogram>

<histogram name="ChromeOS.PlatformVerification.Available"
    enum="BooleanAvailable">
  <owner>dkrahn@chromium.org</owner>
  <summary>
    Whether platform verification subsystem features are available at the time a
    platform verification request is made for content protection on Chrome OS.
  </summary>
</histogram>

<histogram name="ChromeOS.PlatformVerification.ExpiryStatus"
    enum="ChromeOSPlatformVerificationExpiryStatus">
  <owner>dkrahn@chromium.org</owner>
  <summary>
    The result of a certificate expiry check during a platform verification
    attempt for content protection on Chrome OS.
  </summary>
</histogram>

<histogram name="ChromeOS.PlatformVerification.Result"
    enum="ChromeOSPlatformVerificationResult">
  <owner>dkrahn@chromium.org</owner>
  <summary>
    The result of a platform verification attempt for content protection on
    Chrome OS.
  </summary>
</histogram>

<histogram name="ChromeOS.SAML.APIUsed" enum="BooleanUsage">
  <owner>bartfab@chromium.org</owner>
  <summary>
    Whether a Chrome OS login via SAML used the principals API. This is recorded
    during login on Chrome OS if SAML is being used for authentication.
  </summary>
</histogram>

<histogram name="ChromeOS.SAML.Scraping.PasswordCount">
  <owner>bartfab@chromium.org</owner>
  <summary>
    The number of passwords that were scraped during a Chrome OS login via SAML.
    This is set only when the principals API is not used.
  </summary>
</histogram>

<histogram name="ChromeOS.SAML.Scraping.VerificationResult"
    enum="BooleanSuccess">
  <owner>bartfab@chromium.org</owner>
  <summary>
    Whether one of the scraped passwords was successfully verified as the user's
    password. This is set only when the principals API is not used.
  </summary>
</histogram>

<histogram name="ChromeOS.SystemTray.Interaction"
    enum="CrosSystemTrayInteraction">
  <owner>tetsui@chromium.org</owner>
  <summary>
    An enum value how system tray bubble is interacted e.g. by tap (touch
    screen), or click (mouse, trackpad, etc.) Reported every time the region
    inside system tray bubble is tapped or clicked.
  </summary>
</histogram>

<histogram name="ChromeOS.SystemTray.TimeToClick" units="ms">
  <owner>tetsui@chromium.org</owner>
  <summary>
    The amount of time a user took from clicking on the button in status area,
    to clicking on an item in the system tray bubble.
  </summary>
</histogram>

<histogram name="ChromeOS.SystemTray.ToggleExpanded"
    enum="CrosSystemTrayToggleExpanded">
  <owner>tetsui@chromium.org</owner>
  <summary>
    An enum value how system tray bubble is expanded or collapsed. It can be
    toggled by the button and touch gesture.
  </summary>
</histogram>

<histogram name="ChromiumAndroidLinker.BrowserLoadTime" units="ms">
  <owner>rsesek@chromium.org</owner>
  <summary>
    The amount of time it took to load the native libraries in the browser
    process.
  </summary>
</histogram>

<histogram name="ChromiumAndroidLinker.BrowserStates"
    enum="ChromiumAndroidLinkerBrowserState">
  <owner>simonb@chromium.org</owner>
  <summary>
    Whether relro sharing was attempted for the browser process, and if
    attempted, whether it succeeded.
  </summary>
</histogram>

<histogram name="ChromiumAndroidLinker.IsLowMemoryDevice" enum="Boolean">
  <obsolete>
    Deprecated 10/2014 in Issue 419010, and replaced by
    ChromiumAndroidLinker.BrowserStates.
  </obsolete>
  <owner>simonb@chromium.org</owner>
  <summary>Is low memory device.</summary>
</histogram>

<histogram name="ChromiumAndroidLinker.LibraryLoadFromApkStatus"
    enum="LibraryLoadFromApkStatus">
  <owner>petrcermak@chromium.org</owner>
  <summary>
    Whether the device supports loading a library directly from the APK file.
    The functionality is checked and reported during every Chromium browser
    process start up.
  </summary>
</histogram>

<histogram name="ChromiumAndroidLinker.LoadedAtFixedAddressFailed"
    enum="Boolean">
  <obsolete>
    Deprecated 10/2014 in Issue 419010, and replaced by
    ChromiumAndroidLinker.RendererStates.
  </obsolete>
  <owner>simonb@chromium.org</owner>
  <summary>Load at fixed address failed.</summary>
</histogram>

<histogram name="ChromiumAndroidLinker.RelinkerFallbackCount"
    enum="BooleanIsUseRelinker">
  <owner>agrieve@chromium.org</owner>
  <owner>ranj@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    The total number of times Chrome uses relinker fallback to extract and load
    native libraries.
  </summary>
</histogram>

<histogram name="ChromiumAndroidLinker.RendererLoadTime" units="ms">
  <owner>rsesek@chromium.org</owner>
  <summary>
    The amount of time it took to load the native libraries in the renderer
    process.
  </summary>
</histogram>

<histogram name="ChromiumAndroidLinker.RendererStates"
    enum="ChromiumAndroidLinkerRendererState">
  <owner>simonb@chromium.org</owner>
  <summary>
    Whether relro sharing was attempted for a renderer process, and if
    attempted, whether it succeeded.
  </summary>
</histogram>

<histogram name="Chromoting.Connections" enum="State">
  <owner>anandc@chromium.org</owner>
  <owner>sergeyu@chromium.org</owner>
  <summary>
    Recorded every time a Chromoting connection enters a new state.
  </summary>
</histogram>

<histogram name="Chromoting.Connections.Durations.Closed" units="minutes">
  <owner>anandc@chromium.org</owner>
  <owner>sergeyu@chromium.org</owner>
  <summary>
    The duration of sessions that were closed, normally by a user-initiated
    action.
  </summary>
</histogram>

<histogram name="Chromoting.Connections.Durations.Failed" units="minutes">
  <owner>anandc@chromium.org</owner>
  <owner>sergeyu@chromium.org</owner>
  <summary>The duration of sessions that failed to connect.</summary>
</histogram>

<histogram name="Chromoting.Connections.Times.ToAuthenticate" units="ms">
  <owner>anandc@chromium.org</owner>
  <owner>sergeyu@chromium.org</owner>
  <summary>
    The time taken to authenticate as part of a Chromoting connection request.
  </summary>
</histogram>

<histogram name="Chromoting.Connections.Times.ToConnect" units="ms">
  <owner>anandc@chromium.org</owner>
  <owner>sergeyu@chromium.org</owner>
  <summary>
    The time taken to connect to a remote-host, after a request has been
    authenticated.
  </summary>
</histogram>

<histogram name="Chromoting.Input.EventLatency" units="microseconds">
  <owner>anandc@chromium.org</owner>
  <owner>sergeyu@chromium.org</owner>
  <summary>
    Input event delivery latency from the browser to the plugin.

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

<histogram name="Chromoting.Video.Bandwidth" units="Bytes/second">
  <owner>anandc@chromium.org</owner>
  <owner>sergeyu@chromium.org</owner>
  <summary>
    The bandwidth of non-empty packets in Chromoting remote sessions, updated
    every time a video packet is processed and logged every 1s.
  </summary>
</histogram>

<histogram name="Chromoting.Video.CaptureLatency" units="ms">
  <owner>anandc@chromium.org</owner>
  <owner>sergeyu@chromium.org</owner>
  <summary>
    The time to capture a video frame on the host, returned as part of a video
    packet.
  </summary>
</histogram>

<histogram name="Chromoting.Video.CaptureOverhead" units="ms">
  <owner>anandc@chromium.org</owner>
  <owner>sergeyu@chromium.org</owner>
  <summary>
    Amount of time wasted on IPC and threading overhead when capturing a video
    frame.
  </summary>
</histogram>

<histogram name="Chromoting.Video.CapturePendingLatency" units="ms">
  <owner>anandc@chromium.org</owner>
  <owner>sergeyu@chromium.org</owner>
  <summary>
    The time from when an input event is received to when the next frame is
    captured.
  </summary>
</histogram>

<histogram name="Chromoting.Video.DecodeLatency" units="ms">
  <owner>anandc@chromium.org</owner>
  <owner>sergeyu@chromium.org</owner>
  <summary>The time to decode a video packet on the client.</summary>
</histogram>

<histogram name="Chromoting.Video.EncodeLatency" units="ms">
  <owner>anandc@chromium.org</owner>
  <owner>sergeyu@chromium.org</owner>
  <summary>
    The time to encode a video packet on the host, returned as part of a video
    packet.
  </summary>
</histogram>

<histogram name="Chromoting.Video.EncodePendingLatency" units="ms">
  <owner>anandc@chromium.org</owner>
  <owner>sergeyu@chromium.org</owner>
  <summary>
    Delay before a newly captured frame is passed to the encoder.
  </summary>
</histogram>

<histogram name="Chromoting.Video.FrameRate" units="fps">
  <owner>anandc@chromium.org</owner>
  <owner>sergeyu@chromium.org</owner>
  <summary>
    The frame-rate of non-empty packets in Chromoting remote sessions, updated
    every time a video packet is processed and logged every 1s.
  </summary>
</histogram>

<histogram name="Chromoting.Video.NetworkLatency" units="ms">
  <owner>anandc@chromium.org</owner>
  <owner>sergeyu@chromium.org</owner>
  <summary>
    Estimated network roundtrip latency calculated by subtracting total
    processing time on host and client from the total roundtrip time.
  </summary>
</histogram>

<histogram name="Chromoting.Video.PacketRate" units="packets/second">
  <owner>anandc@chromium.org</owner>
  <owner>sergeyu@chromium.org</owner>
  <summary>
    The packets/sec, including empty packets, in Chromoting remote sessions,
    updated every time a video packet is processed and logged every 1s.
  </summary>
</histogram>

<histogram name="Chromoting.Video.PaintLatency" units="ms">
  <owner>anandc@chromium.org</owner>
  <owner>sergeyu@chromium.org</owner>
  <summary>The time to paint a decoded video packet on the client.</summary>
</histogram>

<histogram name="Chromoting.Video.RoundTripLatency" units="ms">
  <owner>anandc@chromium.org</owner>
  <owner>sergeyu@chromium.org</owner>
  <summary>
    The time from an input being sent from the client to a response being
    received by the client after it is processed by the host.
  </summary>
</histogram>

<histogram name="Chromoting.Video.SendPendingLatency" units="ms">
  <owner>anandc@chromium.org</owner>
  <owner>sergeyu@chromium.org</owner>
  <summary>
    Delay before an encoded video packet is written to the send buffer.
  </summary>
</histogram>

<histogram name="clickjacking.discard_download" units="ms"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The length of time between a dangerous download appearing on the downloads
    shelf, and the &quot;Discard&quot; button being clicked.
  </summary>
</histogram>

<histogram name="clickjacking.dismiss_download" units="ms">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The length of time between a dangerous download appearing on the downloads
    shelf, and the &quot;Dismiss&quot; button being clicked. Deprecated since
    M54.
  </summary>
</histogram>

<histogram name="clickjacking.launch_url" units="ms" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The length of time between the external protocol dialog being shown and the
    &quot;Launch Application&quot; button being clicked.
  </summary>
</histogram>

<histogram name="clickjacking.open_download" units="ms"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The length of time between a download appearing on the download shelf, and
    the user opening it by clicking the item or pressing return.
  </summary>
</histogram>

<histogram name="clickjacking.report_and_discard_download" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time between &quot;Report and Discard&quot; button being shown and it being
    clicked.
  </summary>
</histogram>

<histogram name="clickjacking.save_download" units="ms">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The length of time between a dangerous download appearing on the download
    shelf, and the &quot;Keep&quot; button being clicked.
  </summary>
</histogram>

<histogram name="ClientHints.CountRulesReceived" units="count">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Count of client hints that were received by the render process. Recorded
    approximately at the time of the renderer startup.
  </summary>
</histogram>

<histogram name="ClientHints.PersistDuration" units="ms">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Duration for which the origin requested the client hints to be persisted.
    Collected on the renderer side.
  </summary>
</histogram>

<histogram name="ClientHints.UpdateEventCount" units="count">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Count of events when the client hints needs to be persisted to the disk by
    the browser.
  </summary>
</histogram>

<histogram name="ClientHints.UpdateSize" units="count">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Count of client hints that need to be persisted to the disk. Recorded by the
    renderer.
  </summary>
</histogram>

<histogram name="Clipboard.ConstructedHasher" enum="BooleanSuccess">
  <obsolete>
    Launched briefly in M-59 dev, then refactoring made obsolete.
  </obsolete>
  <owner>mpearson@chromium.org</owner>
  <summary>
    Whether Android's Clipboard.java successfully constructed a hasher to hash
    clipboard entries.  Recorded on construction of the class, which happens
    only on startup.
  </summary>
</histogram>

<histogram name="Clipboard.IncognitoUseCase" enum="ClipboardAction">
  <obsolete>
    Deprecated as of 4/2013, experiment confirmed correctness of our patch.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Counts how often the user writes or reads from the clipboard and whether the
    write was from an incognito window or not.
  </summary>
</histogram>

<histogram name="Clipboard.X11StoreCopyPasteDuration" units="ms">
  <owner>pkotwicz@chromium.org</owner>
  <summary>
    The length of time that it takes to transfer ownership of Chrome's CLIPBOARD
    selection to the clipboard manager when Chrome exits.
  </summary>
</histogram>

<histogram name="CloudPrint.AuthEvent" enum="CloudPrintAuthEventType">
  <owner>vitalybuka@chromium.org</owner>
  <summary>Event counts in CloudPrintAuth.</summary>
</histogram>

<histogram name="CloudPrint.AvailablePrinters">
  <owner>vitalybuka@chromium.org</owner>
  <summary>The number of printers availible for registration.</summary>
</histogram>

<histogram name="CloudPrint.AvailablePrintersList">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    The number of printers availible for registration in Windows Service.
  </summary>
</histogram>

<histogram name="CloudPrint.CapsUpdateInterval" units="ms">
  <obsolete>
    Removed 02/2017. http://crbug.com/643570
  </obsolete>
  <owner>vitalybuka@chromium.org</owner>
  <summary>The amount of time between capabilities updates.</summary>
</histogram>

<histogram name="CloudPrint.JobHandlerEvent"
    enum="CloudPrintJobHandlerEventType">
  <owner>vitalybuka@chromium.org</owner>
  <summary>Event counts in PrinterJobHandler.</summary>
</histogram>

<histogram name="CloudPrint.JobsDonePerInterval">
  <owner>vitalybuka@chromium.org</owner>
  <summary>The number of jobs successfully completed per hour.</summary>
</histogram>

<histogram name="CloudPrint.JobsStartedPerInterval">
  <owner>vitalybuka@chromium.org</owner>
  <summary>The number of jobs started per hour.</summary>
</histogram>

<histogram name="CloudPrint.JobStatus" enum="CloudPrintJobStatusType">
  <owner>vitalybuka@chromium.org</owner>
  <summary>Then number of job completion statuses.</summary>
</histogram>

<histogram name="CloudPrint.NativeJobStatus"
    enum="CloudPrintNativeJobStatusType">
  <owner>vitalybuka@chromium.org</owner>
  <summary>Event counts in PrintSystem.</summary>
</histogram>

<histogram name="CloudPrint.PrepareTime" units="ms">
  <owner>vitalybuka@chromium.org</owner>
  <summary>The amount of time needed to prepare job for spooling.</summary>
</histogram>

<histogram name="CloudPrint.PrinterBlacklistSize">
  <owner>vitalybuka@chromium.org</owner>
  <summary>The number of printers user has blacklisted.</summary>
</histogram>

<histogram name="CloudPrint.PrinterWhitelistSize">
  <owner>vitalybuka@chromium.org</owner>
  <summary>The number of printers user has whitelisted.</summary>
</histogram>

<histogram name="CloudPrint.PrintingTime" units="ms">
  <owner>vitalybuka@chromium.org</owner>
  <summary>The amount of time needed to finish print job.</summary>
</histogram>

<histogram name="CloudPrint.ServiceEvents" enum="ServiceProcessEventType">
  <owner>vitalybuka@chromium.org</owner>
  <summary>Event counts in ServiceProcessControl.</summary>
</histogram>

<histogram name="CloudPrint.ServiceProcessSocketLength">
  <obsolete>
    Removed 12/2015. http://crbug.com/466644
  </obsolete>
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    Temporarily histogram with size of IPC sockets in default location.
  </summary>
</histogram>

<histogram name="CloudPrint.ServiceUtilityCapsFailTime" units="ms">
  <obsolete>
    Removed 02/2017. http://crbug.com/643570
  </obsolete>
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    The amount of time used to fail to collect printer capabilities.
  </summary>
</histogram>

<histogram name="CloudPrint.ServiceUtilityCapsTime" units="ms">
  <obsolete>
    Removed 02/2017. http://crbug.com/643570
  </obsolete>
  <owner>vitalybuka@chromium.org</owner>
  <summary>The amount of time used to collect printer capabilities.</summary>
</histogram>

<histogram name="CloudPrint.ServiceUtilityDisconnectTime" units="ms">
  <obsolete>
    Removed 02/2017. http://crbug.com/643570
  </obsolete>
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    The amount of time the utility process runs before disconnect.
  </summary>
</histogram>

<histogram name="CloudPrint.ServiceUtilityMetafileFailTime" units="ms">
  <obsolete>
    Removed 02/2017. http://crbug.com/643570
  </obsolete>
  <owner>vitalybuka@chromium.org</owner>
  <summary>The amount of time used to fail to generate metafile.</summary>
</histogram>

<histogram name="CloudPrint.ServiceUtilityMetafileTime" units="ms">
  <obsolete>
    Removed 02/2017. http://crbug.com/643570
  </obsolete>
  <owner>vitalybuka@chromium.org</owner>
  <summary>The amount of time used to generate metafile.</summary>
</histogram>

<histogram name="CloudPrint.ServiceUtilityProcessHostEvent"
    enum="ServiceUtilityProcessHostEventType">
  <owner>vitalybuka@chromium.org</owner>
  <summary>Event counts in ServiceUtilityProcessHost.</summary>
</histogram>

<histogram name="CloudPrint.ServiceUtilitySemanticCapsFailTime" units="ms">
  <obsolete>
    Removed 02/2017. http://crbug.com/643570
  </obsolete>
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    The amount of time used to fail to collect printer capabilities.
  </summary>
</histogram>

<histogram name="CloudPrint.ServiceUtilitySemanticCapsTime" units="ms">
  <obsolete>
    Removed 02/2017. http://crbug.com/643570
  </obsolete>
  <owner>vitalybuka@chromium.org</owner>
  <summary>The amount of time used to collect printer capabilities.</summary>
</histogram>

<histogram name="CloudPrint.SpoolingTime" units="ms">
  <owner>vitalybuka@chromium.org</owner>
  <summary>The amount of time needed to spool print job.</summary>
</histogram>

<histogram name="CloudPrint.UnregisterPrinters">
  <owner>vitalybuka@chromium.org</owner>
  <summary>The number of printers to unregister.</summary>
</histogram>

<histogram name="CloudPrint.UrlFetcherDownloadSize" units="KB">
  <owner>vitalybuka@chromium.org</owner>
  <summary>The amount of data downloaded on cloud print request.</summary>
</histogram>

<histogram name="CloudPrint.UrlFetcherRequestTime" units="ms">
  <owner>vitalybuka@chromium.org</owner>
  <summary>The amount of time needed for cloud print request.</summary>
</histogram>

<histogram name="CloudPrint.UrlFetcherRequestType"
    enum="CloudPrintUrlFetcherRequestType">
  <owner>vitalybuka@chromium.org</owner>
  <summary>Request counts to cloud print service.</summary>
</histogram>

<histogram name="CloudPrint.UrlFetcherRetries">
  <owner>vitalybuka@chromium.org</owner>
  <summary>The number of retries used to complete cloud print request.</summary>
</histogram>

<histogram name="CloudPrint.UrlFetcherUploadSize" units="KB">
  <owner>vitalybuka@chromium.org</owner>
  <summary>The amount of data uploaded with cloud print request.</summary>
</histogram>

<histogram name="CloudPrint.XmppPingTry">
  <owner>vitalybuka@chromium.org</owner>
  <summary>Number of tries before successful ping. 99 means giving up.</summary>
</histogram>

<histogram name="CloudPrint.XmppTimeout" units="ms">
  <obsolete>
    Removed 02/2017. http://crbug.com/643570
  </obsolete>
  <owner>vitalybuka@chromium.org</owner>
  <summary>Xmpp timeout option value provided by server.</summary>
</histogram>

<histogram name="ComponentUpdater.Calls" enum="ComponentUpdaterCalls">
  <owner>sorin@chromium.org</owner>
  <summary>
    The number of times the component updater called UpdateClient::Install or
    UpdateClient::Update. These correspond to the number of manual component
    update checks performed as a result of a user action, and the number of
    automated component update checks.
  </summary>
</histogram>

<histogram name="ComponentUpdater.ChromeOS.InstallResult"
    enum="CrosComponentManagerError">
  <owner>xiaochu@chromium.org</owner>
  <summary>
    Chrome OS only. Installation error code in CrosComponentManager.
  </summary>
</histogram>

<histogram name="ComponentUpdater.ChromeOS.MountTime" units="ms">
  <owner>xiaochu@chromium.org</owner>
  <summary>Chrome OS only. Time it takes to mount a component image.</summary>
</histogram>

<histogram name="ComponentUpdater.UpdateCompleteError"
    enum="UpdateClientErrors">
  <owner>sorin@chromium.org</owner>
  <summary>The result of an install or an update check.</summary>
</histogram>

<histogram name="ComponentUpdater.UpdateCompleteResult" enum="BooleanError">
  <owner>sorin@chromium.org</owner>
  <summary>The result of an install or an update check.</summary>
</histogram>

<histogram name="ComponentUpdater.UpdateCompleteTime" units="ms">
  <owner>sorin@chromium.org</owner>
  <summary>
    Time to complete an Install or an Update component update call.
  </summary>
</histogram>

<histogram name="CompositeDocToPdf.Status" enum="PdfCompositionStatus">
  <owner>weili@chromium.org</owner>
  <summary>
    Tracks the status of PDF document composition and generation conducted in
    PDF compositor service.
  </summary>
</histogram>

<histogram name="CompositePageToPdf.Status" enum="PdfCompositionStatus">
  <owner>weili@chromium.org</owner>
  <summary>
    Tracks the status of PDF page composition and generation conducted in PDF
    compositor service.
  </summary>
</histogram>

<histogram name="Compositing.Browser.CachedImagesCount" units="count">
  <owner>vmpstr@chromium.org</owner>
  <summary>
    The maximum number of images that were cached in the browser over the
    lifetime of the image decode cache. This is recorded at the image cache
    destruction. It is further split up by Software and Gpu rasterization.
  </summary>
</histogram>

<histogram name="Compositing.Browser.CompositorFrame.Quads" units="quads">
  <owner>ccameron@chromium.org</owner>
  <summary>
    The total number of quads in all render passes in a CompositorFrame. This is
    logged as the CompositorFrame is submitted to its surface.
  </summary>
</histogram>

<histogram
    name="Compositing.Browser.DisplayListRecordingSource.UpdateInvalidatedAreaPerMs"
    units="pixels/ms">
  <obsolete>
    Deprecated 05/2016. See Blink.Paint.UpdateTime as a related alternate
    metric.
  </obsolete>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Area of invalidated content, in pixels, divided by update (i.e. record), in
    milliseconds. Recorded when display list recording source is updated (in a
    browser process).
  </summary>
</histogram>

<histogram name="Compositing.Browser.DisplayListRecordingSource.UpdateUs"
    units="microseconds">
  <obsolete>
    Deprecated 05/2016. See Blink.Paint.UpdateTime as a related alternate
    metric.
  </obsolete>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Time spent updating (i.e. recording) a display list, in microseconds.
    Recorded when display list is updated (in a browser process).
  </summary>
</histogram>

<histogram name="Compositing.Browser.DrawResult" enum="DrawResult"
    expires_after="M72">
  <owner>kylechar@chromium.org</owner>
  <summary>
    How often the layer compositor successfully submitted content to the display
    compositor, or what caused an abort. This is reported fairly late in the
    pipeline, during the final stages of submitting content.
  </summary>
</histogram>

<histogram name="Compositing.Browser.GPUMemoryForTilingsInKb" units="Kb">
  <owner>yigu@chromium.org</owner>
  <summary>
    The GPU memory allocated for tilings (in a browser process), summed over all
    picture layers. Emitted once per drawing. Nothing is recorded if there are
    no picture layers.

    Tilings are used for decomposition of the layer's entire contents at a
    picture screenspace resolution to do threaded rasterization.

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

<histogram name="Compositing.Browser.HitTestTimeToFindClosestLayer"
    units="microseconds">
  <owner>yigu@chromium.org</owner>
  <summary>
    Time spent finding the closest matching layer to a given point whenever we
    do hit testing on LayerTreeImpl (in a browser process).

    Team: animations-dev@chromium.org.

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

<histogram name="Compositing.Browser.LayersUpdateTime" units="microseconds">
  <owner>animations-dev@chromium.org</owner>
  <summary>
    Time spent updating layers, in microseconds. Recorded when layers are
    updated (in a browser process).

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

<histogram name="Compositing.Browser.LayerTreeImpl.CalculateDrawPropertiesUs"
    units="microseconds">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Time spent updating layer draw properties, in microseconds. Recorded when a
    LayerTreeImpl's draw properties are updated (in a browser process).

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

<histogram name="Compositing.Browser.NumActiveLayers" units="layers">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    The number of layers in the active tree for each compositor frame. This is
    logged once per frame, before the frame is drawn (in a browser process).
  </summary>
</histogram>

<histogram name="Compositing.Browser.NumActivePictureLayers" units="layers">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    The number of PictureLayers in the active tree for each compositor frame.
    This is logged once per frame, before the frame is drawn (in a browser
    process).
  </summary>
</histogram>

<histogram name="Compositing.Browser.NumRenderSurfaces" units="surfaces">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    The number of render surfaces in the render surface layer list. Recorded
    each time the render surface layer list is constructed (in a browser
    process).
  </summary>
</histogram>

<histogram name="Compositing.Browser.PictureMemoryUsageKb" units="KB">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Total estimated memory used by SkPictures in the layer tree, in kilobytes.
    Recorded once per frame, before the frame is drawn (in a browser process).
  </summary>
</histogram>

<histogram name="Compositing.Browser.PicturePile.UpdateInvalidatedAreaPerMs"
    units="pixels/ms">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Area of invalidated content, in pixels, divided by update (i.e. record), in
    milliseconds. Recorded when picture pile is updated (in a browser process).
  </summary>
</histogram>

<histogram name="Compositing.Browser.PicturePile.UpdateUs" units="microseconds">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Time spent updating (i.e. recording) a picture pile, in microseconds.
    Recorded when picture pile is updated (in a browser process).

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

<histogram name="Compositing.Browser.RasterTask.RasterPixelsPerMs"
    units="pixels/ms">
  <obsolete>
    Deprecated 11/2016. Increased the max tracking range to accomendate GPU
    raster, and will require new baskets.
  </obsolete>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Rasterized area, in pixels, divided by rasterization time, in milliseconds,
    of a compositor rasterization task. Recorded after the task finishes (in a
    browser process).
  </summary>
</histogram>

<histogram name="Compositing.Browser.RasterTask.RasterPixelsPerMs2"
    units="pixels/ms">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Rasterized area, in pixels, divided by rasterization time, in milliseconds,
    of a compositor rasterization task. Recorded after the task finishes (in a
    browser process).
  </summary>
</histogram>

<histogram name="Compositing.Browser.RasterTask.RasterUs" units="microseconds">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Time spent completing a compositor rasterization task, in microseconds.
    Recorded after the task finishes (in a browser process).

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

<histogram
    name="Compositing.Browser.RenderPass.AppendQuadData.NumMissingTilesNoImageContent">
  <obsolete>
    Deprecated 02/2016. We'd learned as much as we could from this metric and it
    made no sense to keep it around.
  </obsolete>
  <owner>vollick@chromium.org</owner>
  <summary>
    Tracks the number of missing tiles that had some image content in the
    browser process.
  </summary>
</histogram>

<histogram
    name="Compositing.Browser.RenderPass.AppendQuadData.NumMissingTilesSomeImageContent">
  <obsolete>
    Deprecated 02/2016. We'd learned as much as we could from this metric and it
    made no sense to keep it around.
  </obsolete>
  <owner>vollick@chromium.org</owner>
  <summary>
    Tracks the number of missing tiles that did not have any image content in
    the browser process.
  </summary>
</histogram>

<histogram name="Compositing.CompositorFrameSinkSupport.SubmitResult"
    enum="CompositorFrameSinkSubmitResult">
  <owner>fsamuel@chromium.org</owner>
  <summary>
    The result of submitting a CompositorFrame to a CompositorFrameSink.
    ACCEPTED means the frame was accepted by the CompositorFrameSink.
    COPY_OUTPUT_REQUESTS_NOT_ALLOWED means an unprivileged client attempted to
    readback a texture. SURFACE_INVARIANTS_VIOLATION means size or device scale
    factor changed but a new viz::LocalSurfaceId was not allocated.
  </summary>
</histogram>

<histogram name="Compositing.CopyFromSurfaceTime" units="ms"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The turn around time taken for the async readback of pixels is measured
    here.
  </summary>
</histogram>

<histogram name="Compositing.CopyFromSurfaceTimeSynchronous" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time taken for the sync readback of pixels is measured here.
  </summary>
</histogram>

<histogram name="Compositing.DirectRenderer.GL.DrawFrameUs"
    units="microseconds">
  <owner>weiliangc@chromium.org</owner>
  <summary>
    Time spent drawing of composited layers by GLRenderer, in microseconds. This
    is logged once per frame, when a frame should be drawn.

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

<histogram name="Compositing.DirectRenderer.Software.DrawFrameUs"
    units="microseconds">
  <owner>weiliangc@chromium.org</owner>
  <summary>
    Time spent drawing of composited layers by SoftwareRenderer, in
    microseconds. This is logged once per frame, when a frame should be drawn.

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

<histogram name="Compositing.Display.Draw.Occlusion.Calculation.Time"
    units="microseconds">
  <owner>yiyix@chromium.org</owner>
  <summary>
    Time spent to remove invisible quads from the quad_list in CompositorFrame.

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

<histogram name="Compositing.Display.Draw.Occlusion.Drawing.Area.Saved"
    units="px">
  <obsolete>
    Deprecated 02/2018, replaced by similar metric
    Compositing.Display.Draw.Occlusion.Drawing.Area.Saved2.
  </obsolete>
  <owner>yiyix@chromium.org</owner>
  <summary>
    It records the total drawing area skipped to show on screen as a result of
    applying draw occlusion. This is logged once per frame, when the frame is
    drawn.
  </summary>
</histogram>

<histogram name="Compositing.Display.Draw.Occlusion.Drawing.Area.Saved2"
    units="px">
  <owner>yiyix@chromium.org</owner>
  <summary>
    It records the total drawing area skipped to show on screen as a result of
    applying draw occlusion. This is logged once per frame, when the frame is
    drawn.
  </summary>
</histogram>

<histogram name="Compositing.Display.Draw.Occlusion.Percentage.Saved" units="%">
  <owner>yiyix@chromium.org</owner>
  <summary>
    It records the percentage of total area drawing skipped by draw occlusion of
    the total area of damage rects in a compositor frame. This is logged once
    per frame, when the frame is drawn.
  </summary>
</histogram>

<histogram name="Compositing.Display.Draw.Quads" units="quads">
  <owner>ccameron@chromium.org</owner>
  <summary>
    This is logged once per frame, when the frame is drawn. The total number of
    quads in all render passes in the CompositorFrame that is produced by
    surface aggregation.
  </summary>
</histogram>

<histogram name="Compositing.Display.Draw.Quads.With.Complex.Transform.Area"
    units="px">
  <obsolete>
    Deprecated 03/2018. We'd learned enough from this metric and it made no
    sense to keep it around.
  </obsolete>
  <owner>yiyix@chromium.org</owner>
  <summary>
    This is logged once per frame, when the frame is drawn. Captures area of all
    draw quads that need to go through no scale and no translation transforms.
  </summary>
</histogram>

<histogram
    name="Compositing.DisplayListRecordingSource.UpdateInvalidatedAreaPerMs"
    units="pixels/ms">
  <obsolete>
    Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer
    and Compositing.Browser, depending on which process it occurs in.
  </obsolete>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Area of invalidated content, in pixels, divided by update (i.e. record), in
    milliseconds. Recorded when display list recording source is updated.
  </summary>
</histogram>

<histogram name="Compositing.DisplayListRecordingSource.UpdateUs"
    units="microseconds">
  <obsolete>
    Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer
    and Compositing.Browser, depending on which process it occurs in.
  </obsolete>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Time spent updating (i.e. recording) a display list, in microseconds.
    Recorded when display list is updated.
  </summary>
</histogram>

<histogram name="Compositing.LayerTreeImpl.FindClosestMatchingLayerUs"
    units="microseconds">
  <obsolete>
    Deprecated 05/2017 in Issue 710306. Histogram was used temporarily for
    tracking a potential performance regression.
  </obsolete>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Time spent finding the closest matching layer to a given point, in
    microseconds. Recorded each time we do hit testing on LayerTreeImpl.
  </summary>
</histogram>

<histogram name="Compositing.MainFrameSynchronization.Duration" units="ms">
  <owner>fsamuel@chromium.org</owner>
  <summary>
    The amount of time it took for a main frame with unresolved dependencies to
    activate. Note that some activations may be triggered due to a deadline
    hitting.
  </summary>
</histogram>

<histogram name="Compositing.NumActiveLayers">
  <obsolete>
    Deprecated 04/2016, replaced by similar metrics under Compositing.Renderer
    and Compositing.Browser, depending on which process it occurs in.
  </obsolete>
  <owner>dneto@chromium.org</owner>
  <summary>
    The number of layers in the active tree for each compositor frame. This is
    logged once per frame, before the frame is drawn.
  </summary>
</histogram>

<histogram name="Compositing.PictureMemoryUsageKb" units="KB">
  <obsolete>
    Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer
    and Compositing.Browser, depending on which process it occurs in.
  </obsolete>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Total estimated memory used by SkPictures in the layer tree, in kilobytes.
    Recorded once per frame, before the frame is drawn.
  </summary>
</histogram>

<histogram name="Compositing.PicturePile.UpdateInvalidatedAreaPerMs"
    units="pixels/ms">
  <obsolete>
    Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer
    and Compositing.Browser, depending on which process it occurs in.
  </obsolete>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Area of invalidated content, in pixels, divided by update (i.e. record), in
    milliseconds. Recorded when picture pile is updated.
  </summary>
</histogram>

<histogram name="Compositing.PicturePile.UpdateUs" units="microseconds">
  <obsolete>
    Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer
    and Compositing.Browser, depending on which process it occurs in.
  </obsolete>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Time spent updating (i.e. recording) a picture pile, in microseconds.
    Recorded when picture pile is updated.
  </summary>
</histogram>

<histogram name="Compositing.RasterTask.RasterPixelsPerMs" units="pixels/ms">
  <obsolete>
    Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer
    and Compositing.Browser, depending on which process it occurs in.
  </obsolete>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Rasterized area, in pixels, divided by rasterization time, in milliseconds,
    of a compositor rasterization task. Recorded after the task finishes.
  </summary>
</histogram>

<histogram name="Compositing.RasterTask.RasterUs" units="microseconds">
  <obsolete>
    Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer
    and Compositing.Browser, depending on which process it occurs in.
  </obsolete>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Time spent completing a compositor rasterization task, in microseconds.
    Recorded after the task finishes.
  </summary>
</histogram>

<histogram name="Compositing.Renderer.CachedImagesCount" units="count">
  <owner>vmpstr@chromium.org</owner>
  <summary>
    The maximum number of images that were cached in the renderer over the
    lifetime of the image decode cache. This is recorded at the image cache
    destruction. It is further split up by Software and Gpu rasterization.
  </summary>
</histogram>

<histogram name="Compositing.Renderer.CALayerResult" enum="CALayerResult">
  <owner>ccameron@chromium.org</owner>
  <summary>
    The outcome of attempting to replace all renderer tiles with CALayers.
    Either success, or the first reason why a DrawQuad couldn't be replaced by a
    CALayer.
  </summary>
</histogram>

<histogram name="Compositing.Renderer.CheckerImagingDecision"
    enum="CheckerImagingDecision">
  <owner>khushalsagar@chromium.org</owner>
  <summary>
    The outcome for whether an image could be sucessfully deferred for
    asynchronous decode in the renderer compositor. If not, the reason for using
    a synchronous decode. An image which is decoded asynchronously will be
    checkerboarded on the rasterized tiles until the decode is finished, as
    opposed to synchronous decodes where the tile rasterization is blocked on
    the image decode completing.
  </summary>
</histogram>

<histogram name="Compositing.Renderer.CompositorFrame.Quads" units="quads">
  <owner>ccameron@chromium.org</owner>
  <summary>
    The total number of quads in all render passes in a CompositorFrame. This is
    logged as the CompositorFrame is submitted to its surface.
  </summary>
</histogram>

<histogram
    name="Compositing.Renderer.DisplayListRecordingSource.UpdateInvalidatedAreaPerMs"
    units="pixels/ms">
  <obsolete>
    Deprecated 05/2016. See Blink.Paint.UpdateTime as a related alternate
    metric.
  </obsolete>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Area of invalidated content, in pixels, divided by update (i.e. record), in
    milliseconds. Recorded when display list recording source is updated (in a
    renderer process).
  </summary>
</histogram>

<histogram name="Compositing.Renderer.DisplayListRecordingSource.UpdateUs"
    units="microseconds">
  <obsolete>
    Deprecated 05/2016. See Blink.Paint.UpdateTime as a related alternate
    metric.
  </obsolete>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Time spent updating (i.e. recording) a display list, in microseconds.
    Recorded when display list is updated (in a renderer process).
  </summary>
</histogram>

<histogram name="Compositing.Renderer.DrawResult" enum="DrawResult"
    expires_after="M72">
  <owner>kylechar@chromium.org</owner>
  <summary>
    How often the layer compositor successfully submitted content to the display
    compositor, or what caused an abort. This is reported fairly late in the
    pipeline, during the final stages of submitting content.
  </summary>
</histogram>

<histogram name="Compositing.Renderer.GPUMemoryForTilingsInKb" units="Kb">
  <owner>yigu@chromium.org</owner>
  <summary>
    The GPU memory allocated for tilings (in a renderer process), summed over
    all picture layers. Emitted once per drawing. Nothing is recorded if there
    are no picture layers.

    Tilings are used for decomposition of the layer's entire contents at a
    picture screenspace resolution to do threaded rasterization.

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

<histogram name="Compositing.Renderer.HitTestTimeToFindClosestLayer"
    units="microseconds">
  <owner>yigu@chromium.org</owner>
  <summary>
    Time spent finding the closest matching layer to a given point whenever we
    do hit testing on LayerTreeImpl (in a renderer process).

    Team: animations-dev@chromium.org.

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

<histogram name="Compositing.Renderer.LayersUpdateTime" units="microseconds">
  <owner>animations-dev@chromium.org</owner>
  <summary>
    Time spent updating layers, in microseconds. Recorded when layers are
    updated (in a renderer process).

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

<histogram name="Compositing.Renderer.LayerTreeImpl.CalculateDrawPropertiesUs"
    units="microseconds">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Time spent updating layer draw properties, in microseconds. Recorded when a
    LayerTreeImpl's draw properties are updated (in a renderer process).

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

<histogram name="Compositing.Renderer.NumActiveLayers" units="layers">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    The number of layers in the active tree for each compositor frame. This is
    logged once per frame, before the frame is drawn (in a renderer process).
  </summary>
</histogram>

<histogram name="Compositing.Renderer.NumActivePictureLayers" units="layers">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    The number of PictureLayers in the active tree for each compositor frame.
    This is logged once per frame, before the frame is drawn (in a renderer
    process).
  </summary>
</histogram>

<histogram name="Compositing.Renderer.NumRenderSurfaces" units="surfaces">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    The number of render surfaces in the render surface layer list. Recorded
    each time the render surface layer list is constructed (in a renderer
    process).
  </summary>
</histogram>

<histogram name="Compositing.Renderer.PictureMemoryUsageKb" units="KB">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Total estimated memory used by SkPictures in the layer tree, in kilobytes.
    Recorded once per frame, before the frame is drawn (in a renderer process).
  </summary>
</histogram>

<histogram name="Compositing.Renderer.PicturePile.UpdateInvalidatedAreaPerMs"
    units="pixels/ms">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Area of invalidated content, in pixels, divided by update (i.e. record), in
    milliseconds. Recorded when picture pile is updated (in a renderer process).
  </summary>
</histogram>

<histogram name="Compositing.Renderer.PicturePile.UpdateUs"
    units="microseconds">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Time spent updating (i.e. recording) a picture pile, in microseconds.
    Recorded when picture pile is updated (in a renderer process).

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

<histogram name="Compositing.Renderer.RasterTask.RasterPixelsPerMs"
    units="pixels/ms">
  <obsolete>
    Deprecated 11/2016. Increased the max tracking range to accomendate GPU
    raster, and will require new baskets.
  </obsolete>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Rasterized area, in pixels, divided by rasterization time, in milliseconds,
    of a compositor rasterization task. Recorded after the task finishes (in a
    renderer process).
  </summary>
</histogram>

<histogram name="Compositing.Renderer.RasterTask.RasterPixelsPerMs2"
    units="pixels/ms">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Rasterized area, in pixels, divided by rasterization time, in milliseconds,
    of a compositor rasterization task. Recorded after the task finishes (in a
    renderer process).
  </summary>
</histogram>

<histogram name="Compositing.Renderer.RasterTask.RasterUs" units="microseconds">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Time spent completing a compositor rasterization task, in microseconds.
    Recorded after the task finishes (in a renderer process).

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

<histogram
    name="Compositing.Renderer.RenderPass.AppendQuadData.NumMissingTilesNoImageContent">
  <obsolete>
    Deprecated 02/2016. We'd learned as much as we could from this metric and it
    made no sense to keep it around.
  </obsolete>
  <owner>vollick@chromium.org</owner>
  <summary>
    Tracks the number of missing tiles that had some image content in the
    renderer process.
  </summary>
</histogram>

<histogram
    name="Compositing.Renderer.RenderPass.AppendQuadData.NumMissingTilesSomeImageContent">
  <obsolete>
    Deprecated 02/2016. We'd learned as much as we could from this metric and it
    made no sense to keep it around.
  </obsolete>
  <owner>vollick@chromium.org</owner>
  <summary>
    Tracks the number of missing tiles that did not have any image content in
    the renderer process.
  </summary>
</histogram>

<histogram
    name="Compositing.RenderPass.AppendQuadData.CheckerboardedNeedRasterContentArea"
    units="pixels/frame">
  <owner>weiliangc@chromium.org</owner>
  <summary>
    Checkerboarded area, in number of pixels, that has recording but does not
    have time to finish rastering yet. A sample is recorded everytime a frame is
    drawn while a scroll is in progress. Tracking bug 535732.
  </summary>
</histogram>

<histogram
    name="Compositing.RenderPass.AppendQuadData.CheckerboardedNoRecordingContentArea"
    units="pixels/frame">
  <owner>weiliangc@chromium.org</owner>
  <summary>
    Checkerboarded area, in number of pixels, that has no recording to raster
    from. A sample is recorded everytime a frame is drawn while a scroll is in
    progress. Tracking bug 535732.
  </summary>
</histogram>

<histogram name="Compositing.RenderPass.AppendQuadData.NumIncompleteTiles">
  <owner>weiliangc@chromium.org</owner>
  <summary>
    Keeps track of number of incomplete tiles in a drawn compositor frame while
    scrolling. This is a rough measurement of ugliness during user interaction.
    Incomplete tiles are non ideal scaled. A sample is recorded everytime a
    frame is drawn while a scroll is in progress. Tracking bug 381695.
  </summary>
</histogram>

<histogram name="Compositing.RenderPass.AppendQuadData.NumMissingTiles">
  <owner>weiliangc@chromium.org</owner>
  <summary>
    Keeps track of number of missing tiles in a drawn compositor frame while
    scrolling. This is a rough measurement of ugliness during user interaction.
    Incomplete tiles are checkerboard or solid color. A sample is recorded
    everytime a frame is drawn while a scroll is in progress. Tracking bug
    381695.
  </summary>
</histogram>

<histogram name="Compositing.SurfaceAggregator.AggregateUs"
    units="microseconds">
  <owner>weiliangc@chromium.org</owner>
  <summary>
    Time spent aggregating compositor frames from different surfaces in
    microseconds. This is logged once per frame.

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

<histogram name="Compositing.SurfaceAggregator.SurfaceDrawQuad.MissingSurface"
    units="quads">
  <owner>kylechar@chromium.org</owner>
  <summary>
    The number of SurfaceDrawQuads where the surface doesn't exist. This is
    logged for each call to Aggregate().
  </summary>
</histogram>

<histogram name="Compositing.SurfaceAggregator.SurfaceDrawQuad.NoActiveFrame"
    units="quads">
  <owner>kylechar@chromium.org</owner>
  <summary>
    The number of SurfaceDrawQuads where the surface exists but doesn't have an
    active CompositorFrame. This is logged for each call to Aggregate().
  </summary>
</histogram>

<histogram
    name="Compositing.SurfaceAggregator.SurfaceDrawQuad.UsingFallbackSurface"
    units="quads">
  <owner>fsamuel@chromium.org</owner>
  <summary>
    The number of SurfaceDrawQuads where the primary SurfaceId does not have a
    corresponding active CompositorFrame and so the fallback surface is used
    instead. This is logged for each call to Aggregate().
  </summary>
</histogram>

<histogram name="Compositing.SurfaceAggregator.SurfaceDrawQuad.ValidSurface"
    units="quads">
  <owner>kylechar@chromium.org</owner>
  <summary>
    The number of SurfaceDrawQuads where the surface exists and has an active
    CompositorFrame. This is logged for each call to Aggregate().
  </summary>
</histogram>

<histogram name="Compositing.SurfaceDependencyDeadline.DeadlineHit"
    units="Boolean">
  <owner>fsamuel@chromium.org</owner>
  <summary>
    Tracks whether an activation of a surface was due to due to a deadline or
    the resolution of dependencies.
  </summary>
</histogram>

<histogram name="Compositing.SurfaceDependencyDeadline.Duration" units="ms">
  <owner>fsamuel@chromium.org</owner>
  <summary>
    The amount of time it took for a Surface with unresolved dependencies to
    activate. Note that some activations may be triggered due to a deadline
    hitting. That is tracked in the DeadlineHit histogram.
  </summary>
</histogram>

<histogram name="Compositing.SurfaceInvariantsViolations" units="violations">
  <owner>fsamuel@chromium.org</owner>
  <summary>
    The number of times a renderer in this browser session has violated a
    surface synchronization invariant. This manifests as a skipped frame.
    Ideally this metric should always report 0, but realistically there are
    races in the system and this tracks the frequency that we hit these races.
  </summary>
</histogram>

<histogram name="Compositing.SurfaceManager.NumOldTemporaryReferences">
  <obsolete>
    Deprecated 2018/01/24.
  </obsolete>
  <owner>kylechar@chromium.org</owner>
  <summary>
    The number of temporary references that have existed for at least 10 seconds
    and are most likely orphaned. This is logged every 10 seconds.
  </summary>
</histogram>

<histogram name="Compositing.SurfaceManager.RemovedTemporaryReference"
    enum="TemporaryReferenceRemovedReason">
  <owner>kylechar@chromium.org</owner>
  <summary>Tracks the reason for removing a temporary reference.</summary>
</histogram>

<histogram name="Conflicts.ConfirmedBadModules" units="modules">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The number of confirmed bad modules found during module enumeration.
  </summary>
</histogram>

<histogram name="Conflicts.EnumerateLoadedModules" units="ms">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The length of time it takes to enumerate the loaded modules in the browser
    process.
  </summary>
</histogram>

<histogram name="Conflicts.EnumerateShellExtensions" units="ms">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The length of time it takes to enumerate the shell extensions.
  </summary>
</histogram>

<histogram name="Conflicts.EnumerateWinsockModules" units="ms">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The length of time it takes to enumerate the Winsock LSP modules.
  </summary>
</histogram>

<histogram name="Conflicts.EnumerationInspectionTime" units="ms">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The cumulative length of time it takes to inspect all modules on disk,
    extracting their certificates and version information. This work is actually
    spread out over a much longer period of time so as not to impact the user.
  </summary>
</histogram>

<histogram name="Conflicts.EnumerationTotalTime" units="ms">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The cumulative length of time it takes to enumerate and inspect all modules.
    This work is actually spread out over a much longer period of time so as not
    to impact the user.
  </summary>
</histogram>

<histogram name="Conflicts.SuspectedBadModules" units="modules">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The number of suspected bad modules found during module enumeration.
  </summary>
</histogram>

<histogram name="ConnectivityDiagnostics.ChromeOsSignalStrength" units="%">
  <owner>ebeach@google.com</owner>
  <summary>
    Connectivity Diagnostics App: WiFi signal strength recorded during
    NIC_SIGNAL_STRENGTH test.
  </summary>
  <details>
    The &quot;Strength&quot; property of a WiFi signal is a partially-reversible
    function that linearly maps the RSSI range -120dBm to -20dBm to Strength
    values from 0 to 100.
  </details>
</histogram>

<histogram name="ConnectivityDiagnostics.HTTP_LATENCY" units="ms">
  <owner>ebeach@google.com</owner>
  <summary>HTTP latency seen by the Connectivity Diagnostics.</summary>
  <details>
    HTTP latency is computed using the chrome.socket API to make an HTTP GET
    request to the /generate_204 page of three randomly generated Google
    hostnames (*-ccd-testing-v4.metric.gstatic.com). The time taken from issuing
    the HTTP request to receiving a response is clocked in JavaScript and the
    arithmetic mean of the three times is used as the HTTP latency.
  </details>
</histogram>

<histogram name="ConnectivityDiagnostics.RESOLVER_LATENCY" units="ms">
  <owner>ebeach@google.com</owner>
  <summary>Resolution latency seen by the Connectivity Diagnostics.</summary>
  <details>
    Resolver latency is computed by using the chrome.dns API to query three
    randomly generated Google hostnames (*-ccd-testing-v4.metric.gstatic.com).
    The random hostnames guarantees that there will be no caching of DNS
    hostnames. The time taken from issuing the DNS request to receiving a
    response is clocked in JavaScript and the arithmetic mean of the three times
    is used as the resolver latency.
  </details>
</histogram>

<histogram name="ConnectivityDiagnostics.TestVerdict"
    enum="ConnectivityDiagnosticsTestVerdict">
  <owner>ebeach@google.com</owner>
  <summary>
    Connectivity Diagnostics App: Outcome of the connectivity tests.
  </summary>
</histogram>

<histogram name="ConnectivityDiagnostics.TimeTaken" units="ms">
  <owner>ebeach@google.com</owner>
  <summary>
    Connectivity Diagnostics App: Amount of time taken to run each of the
    connectivity tests.
  </summary>
</histogram>

<histogram name="ContentSettings.DefaultAutoplaySetting" enum="ContentSetting">
  <owner>mlamouri@chromium.org</owner>
  <summary>The default autoplay setting at profile open.</summary>
</histogram>

<histogram name="ContentSettings.DefaultCookiesSetting" enum="ContentSetting">
  <owner>toyoshim@chromium.org</owner>
  <summary>The default cookies setting at profile open.</summary>
</histogram>

<histogram name="ContentSettings.DefaultHandlersSetting" enum="ContentSetting">
  <obsolete>
    Deprecated 07/2014 since it is not referenced anywhere in the code.
  </obsolete>
  <owner>toyoshim@chromium.org</owner>
  <summary>The default handler setting at profile open.</summary>
</histogram>

<histogram name="ContentSettings.DefaultImagesSetting" enum="ContentSetting">
  <owner>toyoshim@chromium.org</owner>
  <summary>The default image setting at profile open.</summary>
</histogram>

<histogram name="ContentSettings.DefaultJavaScriptSetting"
    enum="ContentSetting">
  <owner>toyoshim@chromium.org</owner>
  <summary>The default JavaScript setting at profile open.</summary>
</histogram>

<histogram name="ContentSettings.DefaultKeygenSetting" enum="ContentSetting">
  <obsolete>
    Support for keygen was removed.
  </obsolete>
  <owner>svaldez@chromium.org</owner>
  <summary>
    The default setting for using key generation in forms at profile open.
  </summary>
</histogram>

<histogram name="ContentSettings.DefaultLocationSetting" enum="ContentSetting">
  <owner>toyoshim@chromium.org</owner>
  <summary>The default location setting at profile open.</summary>
</histogram>

<histogram name="ContentSettings.DefaultMediaStreamCameraSetting"
    enum="ContentSetting">
  <owner>msramek@chromium.org</owner>
  <summary>The default camera setting at profile open.</summary>
</histogram>

<histogram name="ContentSettings.DefaultMediaStreamMicSetting"
    enum="ContentSetting">
  <owner>msramek@chromium.org</owner>
  <summary>The default microphone setting at profile open.</summary>
</histogram>

<histogram name="ContentSettings.DefaultMediaStreamSetting"
    enum="ContentSetting">
  <obsolete>
    This setting was deprecated in r322364 and replaced with separate settings
    for camera and microphone. See
    ContentSettings.DefaultMediaStreamCameraSetting and
    ContentSettings.DefaultMediaStreamMicSetting.
  </obsolete>
  <owner>toyoshim@chromium.org</owner>
  <owner>msramek@chromium.org</owner>
  <summary>The default MediaStream setting at profile open.</summary>
</histogram>

<histogram name="ContentSettings.DefaultMIDISysExSetting" enum="ContentSetting">
  <owner>toyoshim@chromium.org</owner>
  <summary>
    The default MIDI permission setting on sysex (system exclusive) messages at
    profile open.
  </summary>
</histogram>

<histogram name="ContentSettings.DefaultMouseCursorSetting"
    enum="ContentSetting">
  <owner>toyoshim@chromium.org</owner>
  <summary>The default mouse cursor setting at profile open.</summary>
</histogram>

<histogram name="ContentSettings.DefaultNotificationsSetting"
    enum="ContentSetting">
  <owner>toyoshim@chromium.org</owner>
  <summary>The default notification setting at profile open.</summary>
</histogram>

<histogram name="ContentSettings.DefaultPluginsSetting" enum="ContentSetting">
  <owner>toyoshim@chromium.org</owner>
  <summary>The default plugins setting at profile open.</summary>
</histogram>

<histogram name="ContentSettings.DefaultPopupsSetting" enum="ContentSetting">
  <owner>toyoshim@chromium.org</owner>
  <summary>The default popups setting at profile open.</summary>
</histogram>

<histogram name="ContentSettings.DefaultPushMessagingSetting"
    enum="ContentSetting">
  <owner>miguelg@chromium.org</owner>
  <summary>
    The default permission setting for push messages at profile open.
  </summary>
</histogram>

<histogram name="ContentSettings.DefaultSoundSetting" enum="ContentSetting">
  <owner>mlamouri@chromium.org</owner>
  <owner>steimel@chromium.org</owner>
  <summary>The default sound setting at profile open.</summary>
</histogram>

<histogram name="ContentSettings.DefaultSubresourceFilterSetting"
    enum="ContentSetting">
  <owner>csharrison@chromium.org</owner>
  <summary>The default subresource filter setting at profile open</summary>
</histogram>

<histogram name="ContentSettings.DefaultUsbGuardSetting" enum="ContentSetting">
  <owner>reillyg@chromium.org</owner>
  <summary>The default permission setting for WebUSB at profile open.</summary>
</histogram>

<histogram name="ContentSettings.DefaultWebBluetoothGuardSetting"
    enum="ContentSetting">
  <owner>jyasskin@chromium.org</owner>
  <summary>
    The default permission setting for Web Bluetooth at profile open.
  </summary>
</histogram>

<histogram name="ContentSettings.EphemeralFlashPermission"
    enum="ContentSettings.EphemeralFlashPermission" expires_after="M71">
  <owner>rhalavati@chromium.org</owner>
  <summary>
    Records the number of times Flash permission is granted for a host.
  </summary>
</histogram>

<histogram name="ContentSettings.Exceptions">
  <owner>lshang@chromium.org</owner>
  <summary>
    The number of user defined content setting exceptions at browser start.
    Suffixed with the name of content setting types.
  </summary>
</histogram>

<histogram name="ContentSettings.ExceptionScheme" enum="ContentSettingScheme">
  <owner>lshang@chromium.org</owner>
  <summary>
    Records the schemes of content setting exceptions at browser start. Each
    exception provides one sample.
  </summary>
</histogram>

<histogram name="ContentSettings.ExceptionSchemeFile.HasPath"
    enum="BooleanHasPath">
  <owner>alexmos@chromium.org</owner>
  <summary>
    Records how often a content settings exception for the file: scheme has a
    non-empty path. Recorded once per exception at browser start.
  </summary>
</histogram>

<histogram name="ContentSettings.ExceptionSchemeFile.Type.WithoutPath"
    enum="ContentType">
  <owner>alexmos@chromium.org</owner>
  <summary>
    Count of how often a specific content type has a content settings exception
    defined for a file: scheme with no path (i.e., wildcard path). Recorded once
    per exception at browser start.

    Note: The values of this metric collected for Chrome 49 (early 2016) are
    innacurate and should not be trusted. crbug.com/589255.
  </summary>
</histogram>

<histogram name="ContentSettings.ExceptionSchemeFile.Type.WithPath"
    enum="ContentType">
  <owner>alexmos@chromium.org</owner>
  <summary>
    Count of how often a specific content type has a content settings exception
    defined for a file: scheme with a valid, non-empty path. Recorded once per
    exception at browser start.

    Note: The values of this metric collected for Chrome 49 (early 2016) are
    innacurate and should not be trusted. crbug.com/589255.
  </summary>
</histogram>

<histogram name="ContentSettings.ImagePressed" enum="ContentSettingImageType">
  <owner>calamity@chromium.org</owner>
  <summary>
    Counts which content setting buttons are pressed by the user.
  </summary>
</histogram>

<histogram name="ContentSettings.LastSettingParsed" enum="LastSettingParsed">
  <obsolete>
    Deprecated 2015-10-05 in Issue 433475. Histogram was used temorarily for
    diagnosing crash causes.
  </obsolete>
  <owner>scheib@chromium.org</owner>
  <summary>
    Numer of results of parsing WebsiteSettingsHandler::last_setting_ success or
    failure in WebsiteSettingsHandler methods.
  </summary>
</histogram>

<histogram name="ContentSettings.MixedScript"
    enum="ContentSettingMixedScriptAction">
  <owner>estark@chromium.org</owner>
  <summary>
    Tracks whether the mixed content shield was shown, and how the user
    interacted with it.
  </summary>
</histogram>

<histogram name="ContentSettings.NumberOfAllowCookiesExceptions">
  <owner>battre@chromium.org</owner>
  <summary>
    The number of user defined cookies setting exceptions for allowing cookies
    at browser start.
  </summary>
</histogram>

<histogram name="ContentSettings.NumberOfBlockCookiesExceptions">
  <owner>battre@chromium.org</owner>
  <summary>
    The number of user defined cookies setting exceptions for blocking cookies
    at browser start.
  </summary>
</histogram>

<histogram name="ContentSettings.NumberOfExceptions">
  <owner>battre@chromium.org</owner>
  <summary>
    The number of user defined hostname patterns for content settings at browser
    start.
  </summary>
</histogram>

<histogram name="ContentSettings.NumberOfSessionOnlyCookiesExceptions">
  <owner>battre@chromium.org</owner>
  <summary>
    The number of user defined cookies setting exceptions for 'clearing cookies
    on browser exit' at browser start.
  </summary>
</histogram>

<histogram name="ContentSettings.PermissionActions" enum="PermissionAction">
  <obsolete>
    Removed 11/2015 in favor of Permissions.Action.*
  </obsolete>
  <owner>miguelg@chromium.org</owner>
  <summary>
    Tracks whether a permission was granted, rejected, etc. The suffix of the
    histogram indicates which particular permission.
  </summary>
</histogram>

<histogram name="ContentSettings.PermissionActionsInsecureOrigin"
    enum="PermissionAction">
  <obsolete>
    Removed 11/2015 in favor of Permissions.Action.InsecureOrigin.*
  </obsolete>
  <owner>miguelg@chromium.org</owner>
  <summary>
    Tracks whether a permission was granted, rejected, etc on an insecure
    origin. The suffix of the histogram indicates which particular permission.
  </summary>
</histogram>

<histogram name="ContentSettings.PermissionActionsSecureOrigin"
    enum="PermissionAction">
  <obsolete>
    Removed 11/2015 in favor of Permissions.Action.SecureOrigin.*
  </obsolete>
  <owner>miguelg@chromium.org</owner>
  <summary>
    Tracks whether a permission was granted, rejected, etc on a secure origin.
    The suffix of the histogram indicates which particular permission.
  </summary>
</histogram>

<histogram name="ContentSettings.PermissionRequested" enum="PermissionType">
  <owner>kcarattini@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <owner>miguelg@chromium.org</owner>
  <summary>
    Number of times a given permission was requested by a website and the user
    has the permission set to prompt (i.e. not blocked or allowed).

    Note this is probably not the metric you want - it does not correspond to
    the total number of times websites request a permission. Also, because
    specific permissions have code that can automatically block or grant
    permissions based on things like incognito, installed extensions etc., this
    does also not correspond to the number of times users are prompted to allow
    permissions.

    For a better metric to track how often users are prompted, either use
    ContentSettings.PermissionsActions*, or Permissions.Prompt.*.

    See https://crbug.com/638076 for more details.
  </summary>
</histogram>

<histogram name="ContentSettings.PermissionRequested_InsecureOrigin"
    enum="PermissionType">
  <owner>kcarattini@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <owner>miguelg@chromium.org</owner>
  <summary>
    Number of times a given permission was requested by an insecure origin and
    the user has the permission set to prompt (i.e. not blocked or allowed).

    Note this is probably not the metric you want - it does not correspond to
    the total number of times websites request a permission. Also, because
    specific permissions have code that can automatically block or grant
    permissions based on things like incognito, installed extensions etc., this
    does also not correspond to the number of times users are prompted to allow
    permissions.

    For a better metric to track how often users are prompted, use
    ContentSettings.PermissionsActions*.

    See https://crbug.com/638076 for more details.
  </summary>
</histogram>

<histogram name="ContentSettings.PermissionRequested_SecureOrigin"
    enum="PermissionType">
  <owner>kcarattini@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <owner>miguelg@chromium.org</owner>
  <summary>
    Number of times a given permission was requested by a secure origin and the
    user has the permission set to prompt (i.e. not blocked or allowed).

    Note this is probably not the metric you want - it does not correspond to
    the total number of times websites request a permission. Also, because
    specific permissions have code that can automatically block or grant
    permissions based on things like incognito, installed extensions etc., this
    does also not correspond to the number of times users are prompted to allow
    permissions.

    For a better metric to track how often users are prompted, use
    ContentSettings.PermissionsActions*.

    See https://crbug.com/638076 for more details.
  </summary>
</histogram>

<histogram name="ContentSettings.Plugins" enum="ContentSettingPluginsAction">
  <owner>tommycli@chromium.org</owner>
  <summary>
    Tracks whether the plugin content blocked puzzle piece was shown in the
    Omnibox, and how the user interacted with it.
  </summary>
</histogram>

<histogram name="ContentSettings.Popups" enum="ContentSettingPopupAction">
  <owner>charleszhao@chromium.org</owner>
  <summary>
    Tracks whether the popup content blocked puzzle piece was shown in the
    Omnibox, and how the user interacted with it.
  </summary>
</histogram>

<histogram name="ContentSettings.Popups.BlockerActions"
    enum="PopupBlockerAction">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Counts of various events related to the popup blocker. Including blocked
    popups and overridden (clicked through) popups. This is similar to the
    ContentSettings.Popups but is at the per-popup layer rather than at the UI
    layer.
  </summary>
</histogram>

<histogram name="ContentSettings.Popups.ClickThroughPosition"
    enum="ListItemPosition">
  <owner>csharrison@chromium.org</owner>
  <summary>
    The blocked popup list contains a list of links that Chrome has blocked via
    the popup blocker. If a user clicks on the link, the popup is opened. This
    metric records the position of the popup in the list that a user clicks
    through. Currently it should only be recorded on desktop platforms, because
    the mobile UI for popup blocking does not currently allow for specific
    exceptions.
  </summary>
</histogram>

<histogram name="ContentSettings.Popups.EngagementTime" units="ms">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the total duration a popup WebContents is visible / foregrounded,
    until it is closed.
  </summary>
</histogram>

<histogram name="ContentSettings.Popups.EngagementTime.GestureClose" units="ms">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the total duration a popup WebContents is visible / foregrounded,
    until it is closed via some user gesture (like Ctrl-W).
  </summary>
</histogram>

<histogram name="ContentSettings.Popups.FirstDocumentEngagementTime" units="ms">
  <obsolete>
    Deprecated in favor of ContentSettings.Popups.FirstDocumentEngagementTime2.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the total duration a popup WebContents is visible / foregrounded
    for the duration of its first document load. This time is measured from the
    first navigation commit to the time either the WebContents is destroyed or
    when a new navigation commits.
  </summary>
</histogram>

<histogram name="ContentSettings.Popups.FirstDocumentEngagementTime2"
    units="ms">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the total duration a popup WebContents is visible / foregrounded
    for the duration of its first document load. This time is measured from the
    first navigation commit to the time either the WebContents is destroyed or
    when a new navigation commits.
  </summary>
</histogram>

<histogram name="ContentSettings.Popups.StrongBlocker.NumBlocked"
    units="popups">
  <owner>csharrison@chromium.org</owner>
  <summary>
    The total number of popups blocked by the strong blocker for a given page
    load. Logged when the page is navigated away from, or the tab is closed.
    Only logged for pages which are triggered for strong popup blocking, aka
    abusive experience enforcement.
  </summary>
</histogram>

<histogram name="ContentSettings.Popups.StrongBlockerActions"
    enum="StrongPopupBlockerAction">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Counts of various events related to the strong popup blocker (aka abusive
    experience enforcement), that is triggered via safe browsing.
  </summary>
</histogram>

<histogram name="ContentSettings.Popups.StrongBlockerActivationPosition"
    enum="SafeBrowsingActivationPosition">
  <owner>csharrison@chromium.org</owner>
  <owner>ericrobinson@chromium.org</owner>
  <summary>
    For pages that trigger Safe Browsing triggered popup blocker (in warn or
    enforce modes), records the position in the redirect chain for the page the
    activation was triggered by.  If SubresourceFilterConsiderRedirects is
    disabled, then always returns &quot;Only navigation&quot;.
  </summary>
</histogram>

<histogram name="ContentSuggestions.Feed.NetworkRequestStatusCode"
    enum="CombinedHttpResponseAndNetErrorCode">
  <owner>pnoland@chromium.org</owner>
  <summary>
    Android: The integer status code of network requests made by the feed
    library's networking host. This code includes both protocol(1xx-5xx) and
    non-protocol(-xxx) errors. Recorded when a request completes.
  </summary>
</histogram>

<histogram name="ContentSuggestions.Feed.RequestSizeKB.Compressed" units="KB">
  <owner>pnoland@chromium.org</owner>
  <summary>
    Android: the size in kb of gzip-compressed requests sent by the Feed's
    networking host. Recorded when a request is sent.
  </summary>
</histogram>

<histogram name="ContentSuggestions.Feed.ResponseSizeKB" units="KB">
  <owner>pnoland@chromium.org</owner>
  <summary>
    Android: the uncompressed size in KB of responses received by the Feed's
    networking host. Recorded when a successful response is received.
  </summary>
</histogram>

<histogram name="ContentSuggestions.Feed.TokenFetchStatus"
    enum="GoogleServiceAuthError">
  <owner>pnoland@chromium.org</owner>
  <summary>
    Android: failure reason when attempting to fetch an OAuth token for the
    feed. Recorded when a token fetch completes.
  </summary>
</histogram>

<histogram name="ContentSuggestions.FetchPendingPlaceholder.VisibleDuration"
    units="ms">
  <obsolete>
    Deprecated in favor of
    ContentSuggestions.FetchPendingSpinner.VisibleDuration.
  </obsolete>
  <owner>dgn@chromium.org</owner>
  <owner>ntp-dev+metrics@chromium.org</owner>
  <summary>
    Android: How long the content suggestion placeholder is shown. This is
    tracked based on when the placeholder is enabled in the UI, not how long it
    is actually visible on screen. Depending on the screen size, the used value
    could be bigger.
  </summary>
</histogram>

<histogram name="ContentSuggestions.FetchPendingSpinner.VisibleDuration"
    units="ms">
  <owner>dgn@chromium.org</owner>
  <owner>ntp-dev+metrics@chromium.org</owner>
  <summary>
    Android: How long the content suggestion loading spinner is shown. This is
    tracked based on when the spinner is enabled in the UI, not how long it is
    actually visible on screen. Depending on the screen size, the used value
    could be bigger.
  </summary>
</histogram>

<histogram name="ContextMenu.CancelSystemTouches" enum="BooleanHit">
  <owner>michaeldo@chromium.org</owner>
  <summary>
    Logs true when the system touches are cancelled in order to show the Context
    Menu instead of performing a default system action. Only logged on iOS.
  </summary>
</histogram>

<histogram name="ContextMenu.DelayedElementDetails"
    enum="ContextMenuDelayedElementDetails">
  <owner>michaeldo@chromium.org</owner>
  <summary>
    Logged when DOM element details are not yet available when the user
    completes a long press. Also logs if the context menu was shown once the
    element details became available or if the display was cancelled. This
    ensures that all context menu gestures are eventually processed. Only logged
    on iOS.
  </summary>
</histogram>

<histogram name="ContextMenu.DOMElementFetchDuration" units="ms">
  <owner>michaeldo@chromium.org</owner>
  <summary>
    How long it takes to fetch the details of the DOM element the user is
    selecting for the context menu. On iOS, JavaScript must be run in order to
    get the details of the DOM element. If the element is not inside the main
    frame, latency could be added due to the communication between frames. Only
    logged on iOS.
  </summary>
</histogram>

<histogram name="ContextMenu.DOMElementFrame" enum="ContextMenuDOMElementFrame">
  <owner>michaeldo@chromium.org</owner>
  <summary>
    Logged when the Context Menu will be displayed. Also logs if the element for
    the last touch was found in the main frame or a iframe. Only logged on iOS.
  </summary>
</histogram>

<histogram name="ContextMenu.SaveLinkType" enum="ContextMenuSaveLinkType">
  <owner>qinmin@chromium.org</owner>
  <summary>
    Type of the url when user saves the content through the save link context
    menu.
  </summary>
</histogram>

<histogram name="ContextMenu.SelectedOption" enum="ContextMenuOption">
  <owner>newt@chromium.org</owner>
  <summary>The option that the user selected from a context menu.</summary>
</histogram>

<histogram name="ContextMenu.Shown" enum="BooleanPresent">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Recorded when a context menu is shown, sliced by whether a web contents was
    present.  (It generally should be; indeed, this code path should not be
    followed when it is absent.  For instance, invoking a context menu from the
    new tab page or from the sad tab page will not cause an emission to this
    histogram.)  Note that this refers to link context menus, not the
    cut-copy-paste context menus that can appear during long presses on text on
    a web page or long presses in the omnibox.  The value of this histogram for
    &quot;present&quot; could be usefully compared with the total count of
    ContextMenu.SelectedOption to determine the clickthrough rate for context
    menus.
  </summary>
</histogram>

<histogram name="ContextMenu.UnexpectedFindElementResultHandlerMessage"
    enum="BooleanHit">
  <owner>michaeldo@chromium.org</owner>
  <summary>
    Logged when an unexpected FindElementResultHandler message was received by
    the application. An unexpected message may be sent by a malicious frame.
    Only logged on iOS.
  </summary>
</histogram>

<histogram name="ContextMenu.WaitingForElementDetails" enum="BooleanHit">
  <owner>michaeldo@chromium.org</owner>
  <summary>
    Logs true when the context menu gesture recognizer fully recognizes a long
    press, but is still waiting on the DOM element details before the context
    menu can be shown. Only logged on iOS.
  </summary>
</histogram>

<histogram name="ContextualSuggestions.EnabledState" enum="BooleanEnabled">
  <owner>huayinz@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Android: Whether contextual suggestions are enabled. Recorded when the
    enabled state changes. Note that this may be recorded multiple times per
    session.
  </summary>
</histogram>

<histogram name="ContextualSuggestions.Events"
    enum="ContextualSuggestions.Event">
  <owner>donnd@chromium.org</owner>
  <owner>fgorski@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records each event handled by the Contextual Suggestions backend. Recorded
    when the event is sent to the backend, typically when a UI or network action
    is registered. Implemented for Android.
  </summary>
</histogram>

<histogram name="ContextualSuggestions.FetchErrorCode" enum="NetErrorCodes">
  <owner>pnoland@chromium.org</owner>
  <summary>
    Android: The net::Error status code of contextual suggestion fetches.
    Recorded when a fetch completes.
  </summary>
</histogram>

<histogram name="ContextualSuggestions.FetchLatencyMilliseconds" units="ms">
  <owner>pnoland@chromium.org</owner>
  <owner>fgorski@chromium.org</owner>
  <summary>
    Android: the amount of time taken elapsed between a contextual suggestion
    fetch starting and ending. Recorded when a fetch is completed.
  </summary>
</histogram>

<histogram name="ContextualSuggestions.FetchRequestProtoSizeKB" units="KB">
  <owner>pnoland@chromium.org</owner>
  <summary>
    Android: The size of the serialized and base64-encoded proto sent to the
    server when fetching contextual suggestions. Recorded when a fetch is
    initiated.
  </summary>
</histogram>

<histogram name="ContextualSuggestions.FetchResponseCode"
    enum="HttpResponseCode">
  <owner>pnoland@chromium.org</owner>
  <summary>
    Android: The http status code of contextual suggestion fetches. Recorded
    when a fetch completes.
  </summary>
</histogram>

<histogram name="ContextualSuggestions.FetchResponseNetworkBytes" units="bytes">
  <owner>pnoland@chromium.org</owner>
  <summary>
    Android: The number of bytes in the response received when a contextual
    suggestions fetch completes. Recorded when the response is received.
  </summary>
</histogram>

<histogram name="ContextualSuggestions.FetchResponseSizeKB" units="KB">
  <obsolete>
    Removed 2018-06-01 in favor of a histogram that measures bytes received over
    the network directly instead of the uncompressed KB.
  </obsolete>
  <owner>pnoland@chromium.org</owner>
  <summary>
    Android: The size of the response body received when a contextual
    suggestions fetch completes. Recorded when the response is received.
  </summary>
</histogram>

<histogram name="ContextualSuggestions.PageViewTime" units="ms">
  <owner>fgorski@chromium.org</owner>
  <summary>
    Android: The length of a visit on a page. Reported for HTTP and HTTPS pages
    provided there was something visible printed to the screen. Selecting a tab
    or loading a new URL in current tab starts timing a visit. Switching to a
    different tab, closing the tab or loading a new URL finishes timing and
    reports the time if the page did a visually non-empty paint or finished
    loading.
  </summary>
</histogram>

<histogram name="ContextualSuggestions.Preference.State" enum="BooleanEnabled">
  <owner>huayinz@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Android: Whether the user preference for contextual suggestions is enabled.
    Recorded on cold start and when the user has changed the preference state.
    Note that this may be recorded multiple times per session.
  </summary>
</histogram>

<histogram base="true" name="Cookie.AgeFor" units="days">
  <owner>mkwst@chromium.org</owner>
  <owner>tnagel@chromium.org</owner>
  <summary>
    Records the age (in days) of the oldest cookie delivered along with a
    request. Recorded when setting the `Cookie` header for a given request.
  </summary>
</histogram>

<histogram base="true" name="Cookie.AllAgesFor" units="days">
  <owner>mkwst@chromium.org</owner>
  <owner>tnagel@chromium.org</owner>
  <summary>
    Records the age (in days) of all cookies delivered along with a request.
    Recorded when setting the `Cookie` header for a given request.
  </summary>
</histogram>

<histogram name="Cookie.BackingStoreUpdateResults" enum="BackingStoreResults">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Whether or not updates to the backing store succeeded or failed, recorded
    every update.
  </summary>
</histogram>

<histogram name="Cookie.BetweenAccessIntervalMinutes" units="minutes">
  <obsolete>
    Deprecated 2015-08-17 as part of cookie histogram cleanup
    (https://crbug.com/521135).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Intervals between access time updates for each cookie.</summary>
</histogram>

<histogram name="Cookie.CommitProblem" enum="CookieCommitProblem">
  <owner>morlovich@chromium.org</owner>
  <summary>
    Recorded when a problem occurs trying to commit changes to the cookie store
    back to disk, in the SQLite store.
  </summary>
</histogram>

<histogram name="Cookie.CookieDeleteEquivalent" enum="CookieDeleteEquivalent">
  <owner>mkwst@chromium.org</owner>
  <summary>
    Record when at attempt is made to delete an equivalent cookie on a set
    cookie operation and when such a cookie is found and deleted. Also measure
    when strict secure cookie rules affect this outcome and prevent a cookie
    from being deleted.
  </summary>
</histogram>

<histogram name="Cookie.CookieLineCookieValueValidity" enum="BooleanValid">
  <obsolete>
    Removed 2017-07-14 as it demonstrated that making cookie parsing rules
    stricter was not feasible. See https://crbug.com/638117.
  </obsolete>
  <owner>ricea@chromium.org</owner>
  <summary>
    Indicates whether a cookie initialised from a Set-Cookie header value was
    valid or not. This is only logged after cookies containing control
    characters have already been rejected, so &quot;Invalid&quot; here means
    that the cookie contains quotes, commas, backslashes or top-bit-set
    characters.
  </summary>
</histogram>

<histogram name="Cookie.CookiePrefix" enum="CookiePrefix">
  <owner>estark@chromium.org</owner>
  <summary>
    Number of times a cookie was set with a name prefixed by
    &quot;__Secure-&quot; or &quot;__Host-&quot; (prefixes reserved by
    https://tools.ietf.org/html/draft-west-cookie-prefixes).
  </summary>
</histogram>

<histogram name="Cookie.CookiePrefixBlocked" enum="CookiePrefix">
  <owner>estark@chromium.org</owner>
  <summary>
    Number of times a cookie was set with a name prefixed by
    &quot;__Secure-&quot; or &quot;__Host-&quot; that violate cookie prefix
    rules. That is, a __Secure- cookie must be set over a secure connection with
    the Secure attribute, and a __Host- cookie must be set over a secure
    connection, with the Secure attribute, with no Domain attribute, and with a
    Path attribute of &quot;/&quot;. (As defined in
    https://tools.ietf.org/html/draft-west-cookie-prefixes.)
  </summary>
</histogram>

<histogram name="Cookie.CookieSourceScheme" enum="CookieSourceScheme">
  <owner>estark@chromium.org</owner>
  <summary>
    For each cookie added to the store, record whether its source URL has a
    cryptographic scheme, broken down by Secure and not Secure.
  </summary>
</histogram>

<histogram name="Cookie.CorruptMetaTable">
  <owner>tnagel@chromium.org</owner>
  <summary>
    Records the detection of a corrupted meta table. See http://crbug.com/111376
    .
  </summary>
</histogram>

<histogram name="Cookie.CorruptMetaTableRecoveryFailed">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Records a failure to recover a corrupted meta table. See
    http://crbug.com/111376 .
  </summary>
</histogram>

<histogram name="Cookie.Count">
  <owner>battre@chromium.org</owner>
  <summary>
    Number of cookies in the store (recorded every 10 minutes of active browsing
    time)
  </summary>
</histogram>

<histogram name="Cookie.DBSizeInKB" units="KB">
  <owner>dmikurube@chromium.org</owner>
  <summary>
    The size, on disk, of the cookie database as it is being loaded.
  </summary>
</histogram>

<histogram name="Cookie.DeletionCause" enum="CookieDeletionCause">
  <owner>nharper@chromium.org</owner>
  <summary>
    For each cookie removed from the store, the reason it was removed.
  </summary>
</histogram>

<histogram name="Cookie.DomainCount">
  <obsolete>
    Deprecated 2015-08-17 as part of cookie histogram cleanup
    (https://crbug.com/521135).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    For each domain, number of cookies in that domain (recorded every 10 minutes
    of active browsing time).
  </summary>
</histogram>

<histogram name="Cookie.DomainPerEtldp1Count">
  <obsolete>
    Deprecated 2015-08-17 as part of cookie histogram cleanup
    (https://crbug.com/521135).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    For every top level domain, number of subdomains in that top level domain
    (recorded every 10 minutes of active browsing time).
  </summary>
</histogram>

<histogram name="Cookie.Etldp1Count">
  <obsolete>
    Deprecated 2015-08-17 as part of cookie histogram cleanup
    (https://crbug.com/521135).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    For every top level domain, number of cookies in that domain (recorded every
    10 minutes of active browsing time).
  </summary>
</histogram>

<histogram name="Cookie.EvictedLastAccessMinutes" units="minutes">
  <owner>nharper@chromium.org</owner>
  <summary>
    For each evicted (not expired) cookie, the amount of time since it was last
    used
  </summary>
</histogram>

<histogram name="Cookie.ExpirationDurationMinutes" units="minutes">
  <owner>battre@chromium.org</owner>
  <summary>Number of minutes until cookie expires when set.</summary>
</histogram>

<histogram name="Cookie.GetCookieListCompletionTime" units="ms">
  <owner>rockot@chromium.org</owner>
  <summary>
    The length of time between when the network stack receives a request for a
    cookie list and when it actually responds to the request or abandons it (for
    e.g. a closed renderer).
  </summary>
</histogram>

<histogram name="Cookie.HeaderLength" units="bytes">
  <owner>mkwst@chromium.org</owner>
  <summary>
    The size of each outgoing request's 'Cookie' header field's value, in bytes.
  </summary>
</histogram>

<histogram name="Cookie.KillDatabaseResult" enum="BooleanSuccess"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Whether killing the database because it was corrupted beyond repair
    succeeded.
  </summary>
</histogram>

<histogram name="Cookie.LoadProblem" enum="CookieLoadProblem">
  <owner>morlovich@chromium.org</owner>
  <summary>
    Recorded when a problem is recorded when loading the persistent cookie
    store.
  </summary>
</histogram>

<histogram name="Cookie.NetworkSecurity" enum="CookieNetworkSecurity">
  <owner>tnagel@chromium.org</owner>
  <summary>
    Degree of protection against cookie theft. Recorded for each cookie when
    setting the `Cookie` header for a request.
  </summary>
</histogram>

<histogram name="Cookie.NumberOfLoadedCookies">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    This histogram records the total number of cookies loaded from disk,
    including any cookies that are discarded during loading (for whatever
    reason).
  </summary>
</histogram>

<histogram name="Cookie.ParsedCookieStatus" enum="ParsedCookieStatus">
  <obsolete>
    Deprecated as of 9/2013. Experiment to measure control characters in cookies
    is finished.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    When parsing a cookie, indicates if control characters were present in any
    of the cookie values and if any of the cookie values were invalid.
    Specifically, checks that all of the parsed values are valid according to
    the valid token definition in Section 2.2 of RFC2616 which specifies a token
    must have no separators (i.e. no characters from the following string,
    ignoring the starting and ending single quote: '()&lt;&gt;@,;:\&quot;/[]?={}
    \t') and no control characters.
  </summary>
</histogram>

<histogram name="Cookie.PriorityBlockingTime" units="ms">
  <owner>pwnall@chromium.org</owner>
  <summary>
    This histogram records the total duration of time during which at least one
    web request was blocked waiting for the cookie store to load. If no requests
    were affected, the value is 0. If two requests are simultaneously blocked
    for 1 second, the value is 1 second. If two requests are consecutively
    blocked for 1 second each, the value is two seconds.
  </summary>
</histogram>

<histogram name="Cookie.PriorityLoadCount">
  <owner>pwnall@chromium.org</owner>
  <summary>
    The number of distinct Effective Top-Level Domains Plus One (ETLD+1, i.e.,
    google.com, bbc.co.uk) for which a priority cookie load occurred.
  </summary>
</histogram>

<histogram name="Cookie.ReinstatedCookies" units="seconds">
  <obsolete>
    Deprecated as of 8/2015.
  </obsolete>
  <owner>huangs@chromium.org</owner>
  <summary>
    The duration in seconds between a cookie getting evicted (due to the number
    of cookies exceeding a domain limit), and subsequently reinstated.
  </summary>
</histogram>

<histogram name="Cookie.SetAttributePairCharsValidity" enum="BooleanValid">
  <obsolete>
    Deprecated as of 9/2013. Experiment to measure control characters in cookies
    is finished.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Indicates whether a cookie attribute pair was set with both a valid key and
    a valid attribute value or not. For the key, this implies that it was a
    valid token as defined in Section 2.2 of RFC2616 which specifies a token
    must have no separators (i.e. no characters from the following string,
    ignoring the starting and ending single quote: '()&lt;&gt;@,;:\&quot;/[]?={}
    \t') and no control characters. For the value, this implies that it
    contained no control characters and no semicolon.
  </summary>
</histogram>

<histogram name="Cookie.SetNameValidity" enum="BooleanValid">
  <obsolete>
    Deprecated as of 9/2013. Experiment to measure control characters in cookies
    is finished.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Indicates whether a cookie name was set with a valid token. A valid token is
    defined in Section 2.2 of RFC2616 which specifies a token must have no
    separators (i.e. no characters from the following string, ignoring the
    starting and ending single quote: '()&lt;&gt;@,;:\&quot;/[]?={} \t') and no
    control characters.
  </summary>
</histogram>

<histogram name="Cookie.SetValueCookieValueValidity" enum="BooleanValid">
  <obsolete>
    Deprecated as of 9/2013. Experiment to measure control characters in cookies
    is finished.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Indicates whether a cookie value was valid or invalid when there was an
    attempt to set it, where a valid value is defined in RFC 6265 as ASCII
    characters excluding controls, whitspace, comma, semicolon, and backslash.
  </summary>
</histogram>

<histogram name="Cookie.Shutdown.NumberOfCookiesDeleted">
  <obsolete>
    Deprecated as of 9/2015. The associated experiment was flawed.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    The number of session cookies deleted on shutdown. This metric is emitted
    even if no cookies are deleted.
  </summary>
</histogram>

<histogram name="Cookie.Shutdown.TimeSpentDeletingCookies" units="ms">
  <obsolete>
    Deprecated as of 9/2015. The associated experiment was flawed.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    The amount of time required to delete session cookies on shutdown. This
    metric is emitted even if no cookies are deleted.
  </summary>
</histogram>

<histogram name="Cookie.Startup.NumberOfCookiesDeleted">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The number of session cookies deleted on startup. This metric is emitted
    even if no cookies are deleted. This metric is not emitted if session
    cookies are restored, rather than deleted on startup.
  </summary>
</histogram>

<histogram name="Cookie.Startup.TimeSpentDeletingCookies" units="ms">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The amount of time required to delete session cookies on startup. This
    metric is emitted even if no cookies are deleted. This metric is not emitted
    if session cookies are restored, rather than deleted on startup.
  </summary>
</histogram>

<histogram name="Cookie.TimeBlockedOnLoad" units="ms">
  <owner>nharper@chromium.org</owner>
  <summary>
    The amount of time (ms) between the cookie store load starting and
    completing.
  </summary>
</histogram>

<histogram name="Cookie.TimeDatabaseMigrationToV10" units="ms">
  <owner>pwnall@chromium.org</owner>
  <summary>
    The amount of time (ms) to migrate a v9 cookie database to v10.
  </summary>
</histogram>

<histogram name="Cookie.TimeDatabaseMigrationToV5" units="ms">
  <obsolete>
    Deprecated as of 04/2015. The migration has finished for most users.
  </obsolete>
  <summary>The amount of time (ms) to migrate a v4 database to v5.</summary>
</histogram>

<histogram name="Cookie.TimeDatabaseMigrationToV6" units="ms">
  <obsolete>
    Deprecated as of 04/2015. The migration has finished for most users.
  </obsolete>
  <summary>The amount of time (ms) to migrate a v5 database to v6.</summary>
</histogram>

<histogram name="Cookie.TimeDatabaseMigrationToV7" units="ms">
  <obsolete>
    Deprecated as of 04/2015. The migration has finished for most users.
  </obsolete>
  <summary>The amount of time (ms) to migrate a v6 database to v7.</summary>
</histogram>

<histogram name="Cookie.TimeDatabaseMigrationToV8" units="ms">
  <obsolete>
    Deprecated as of 04/2015. The migration has finished for most users.
  </obsolete>
  <summary>The amount of time (ms) to migrate a v7 database to v8.</summary>
</histogram>

<histogram name="Cookie.TimeDatabaseMigrationToV9" units="ms"
    expires_after="2018-08-30">
  <owner>erikchen@chromium.org</owner>
  <summary>The amount of time (ms) to migrate a v8 database to v9.</summary>
</histogram>

<histogram name="Cookie.TimeGet" units="ms">
  <obsolete>
    Deprecated as of 11/2014.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The amount of time (ms) to get cookies for each URL request.
  </summary>
</histogram>

<histogram name="Cookie.TimeInitializeDB" units="ms">
  <owner>nyquist@chromium.org</owner>
  <summary>The amount of time (ms) to initialize the cookies database.</summary>
</histogram>

<histogram name="Cookie.TimeInitializeDomainMap" units="ms">
  <owner>nyquist@chromium.org</owner>
  <summary>
    The amount of time (ms) to read and parse the domain map from the cookies
    database.
  </summary>
</histogram>

<histogram name="Cookie.TimeKeyLoadDBQueueWait" units="ms">
  <owner>pwnall@chromium.org</owner>
  <summary>
    This histogram records the wall-clock delay between a priority load task
    being posted to the DB-thread and its execution.
  </summary>
</histogram>

<histogram name="Cookie.TimeKeyLoadTotalWait" units="ms">
  <owner>erikchen@chromium.org</owner>
  <summary>
    This histogram records the the total amount of time spent fetching the
    cookies associated with an eTLD+1 from disk, including time spent waiting in
    task queues.
  </summary>
</histogram>

<histogram name="Cookie.TimeLoad" units="ms">
  <owner>pwnall@chromium.org</owner>
  <summary>
    This histogram records the sum of the durations of all initial tasks loading
    cookies from the database.
  </summary>
</histogram>

<histogram name="Cookie.TimeLoadDBQueueWait" units="ms"
    expires_after="2018-08-30">
  <owner>erikchen@chromium.org</owner>
  <summary>
    This histogram records the wall-clock delay between the Load task being
    posted to the DB-thread and its execution.
  </summary>
</histogram>

<histogram name="Cookie.TimeLoadDomains" units="ms">
  <owner>nyquist@chromium.org</owner>
  <summary>
    The amount of time (ms) to read the domain map from the cookies database.
  </summary>
</histogram>

<histogram name="Cookie.TimeParseDomains" units="ms">
  <owner>nyquist@chromium.org</owner>
  <summary>
    The amount of time (ms) to parse the domains already loaded from the cookies
    database and put them in the domain map.
  </summary>
</histogram>

<histogram name="Cookie.Type" enum="CookieType">
  <owner>mkwst@chromium.org</owner>
  <summary>For each cookie added to the store, record it's type(s).</summary>
</histogram>

<histogram name="CopylessPaste.CacheHit" enum="CopylessCacheHit">
  <owner>wychen@chromium.org</owner>
  <summary>
    The cache hit status of metadata extraction for AppIndexing.
  </summary>
</histogram>

<histogram name="CopylessPaste.ExtractionFailedUs" units="microseconds">
  <owner>wychen@chromium.org</owner>
  <summary>
    The time spent on scanning the document in the main frame to extract the
    metadata. The metadata would be used to feed Icing for CopylessPaste feature
    on Android. This only counts pages with failed or empty JSON extraction.

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

<histogram name="CopylessPaste.ExtractionStatus" enum="ExtractionStatus">
  <owner>wychen@chromium.org</owner>
  <summary>The error status of metadata extraction for AppIndexing.</summary>
</histogram>

<histogram name="CopylessPaste.ExtractionUs" units="microseconds">
  <owner>wychen@chromium.org</owner>
  <summary>
    The time spent on scanning the document in the main frame to extract the
    metadata. The metadata would be used to feed Icing for CopylessPaste feature
    on Android. This only counts pages with successful JSON extraction.

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

<histogram name="Cras.StreamTimeoutMilliSeconds" units="ms">
  <owner>hychao@chromium.org</owner>
  <summary>
    The longest additional time CRAS(Chrome OS audio server) ever waits for a
    stream exceeding the timeout threshold. This value is recorded per stream
    when it gets removed and used to investigate the audio glitch/skip problem
    on Chrome OS.
  </summary>
</histogram>

<histogram name="CrashExitCodes.Extension" enum="CrashExitCodes">
  <owner>wfh@chromium.org</owner>
  <summary>
    The exit codes for crashed extension processes. Note: Due to
    https://crbug.com/805754, the enum labels are off by 1 for M56 and earlier.

    See also Stability.CrashedProcessAge.Extension that is usually logged at the
    same time.
  </summary>
</histogram>

<histogram name="CrashExitCodes.Renderer" enum="CrashExitCodes">
  <owner>wfh@chromium.org</owner>
  <summary>
    The exit codes for crashed renderer processes. Note: Due to
    https://crbug.com/805754, the enum labels are off by 1 for M56 and earlier.

    See also Stability.CrashedProcessAge.Renderer that is usually logged at the
    same time.
  </summary>
</histogram>

<histogram name="Crashpad.CrashReportPending" enum="CrashpadReportPending">
  <owner>crashpad-dev@chromium.org</owner>
  <summary>
    The reason that a crash report entered the upload pending state.
  </summary>
</histogram>

<histogram name="Crashpad.CrashReportSize" units="bytes">
  <owner>crashpad-dev@chromium.org</owner>
  <summary>The size of a crash report minidump on disk when captured.</summary>
</histogram>

<histogram name="Crashpad.CrashUpload.AttemptSuccessful"
    enum="CrashpadUploadAttemptStatus">
  <owner>crashpad-dev@chromium.org</owner>
  <summary>Logs whether a crash uploaded succeeded or failed.</summary>
</histogram>

<histogram name="Crashpad.CrashUpload.Skipped"
    enum="CrashpadUploadSkippedReason">
  <owner>crashpad-dev@chromium.org</owner>
  <summary>The reason that a crash report upload was skipped.</summary>
</histogram>

<histogram name="Crashpad.ExceptionCaptureResult"
    enum="CrashpadExceptionCaptureResult">
  <owner>crashpad-dev@chromium.org</owner>
  <summary>The outcome of execution of the Crashpad exception handler.</summary>
</histogram>

<histogram name="Crashpad.ExceptionCode.Mac" enum="CrashpadMacExceptionCodes">
  <owner>crashpad-dev@chromium.org</owner>
  <summary>The exception code encountered in a crash on Mac OS X.</summary>
</histogram>

<histogram name="Crashpad.ExceptionCode.Win" enum="CrashpadWinExceptionCodes">
  <owner>crashpad-dev@chromium.org</owner>
  <summary>The exception code encountered in a crash on Windows.</summary>
</histogram>

<histogram name="Crashpad.ExceptionEncountered"
    enum="CrashpadExceptionProcessingState">
  <owner>crashpad-dev@chromium.org</owner>
  <summary>
    A count of the number of exceptions handled by Crashpad with two buckets for
    starting and finishing.
  </summary>
</histogram>

<histogram name="Crashpad.HandlerCrash.ExceptionCode.Mac"
    enum="CrashpadMacExceptionCodes">
  <owner>crashpad-dev@chromium.org</owner>
  <summary>
    The exception code encountered for a crash of the crash handler process on
    Mac OS X.
  </summary>
</histogram>

<histogram name="Crashpad.HandlerCrash.ExceptionCode.Win"
    enum="CrashpadWinExceptionCodes">
  <owner>crashpad-dev@chromium.org</owner>
  <summary>
    The exception code encountered for a crash of the crash handler process on
    Windows.
  </summary>
</histogram>

<histogram name="Crashpad.HandlerLifetimeMilestone"
    enum="CrashpadLifetimeMilestone">
  <owner>crashpad-dev@chromium.org</owner>
  <summary>Handler start/crash/exit events.</summary>
</histogram>

<histogram name="CrashReport.BreakpadCrashDumpOutcome" enum="DumpOutcome">
  <obsolete>
    Deprecated as of 04/2016 as CrashPad does not implement this.
  </obsolete>
  <owner>siggi@chromium.org</owner>
  <summary>
    Reports the result of an attempt to report a crash dump via Breakpad.
    Success indicates only that the out-of-process crash reporter succesfully
    generated a dump. The success or failure of the eventual upload is not
    measured. This stability metric is logged from the first Chrome launch
    post-dump.
  </summary>
</histogram>

<histogram name="CrashReport.BreakpadDumpWithoutCrashOutcome"
    enum="DumpOutcome">
  <obsolete>
    Deprecated as of 04/2016 as CrashPad does not implement this.
  </obsolete>
  <owner>siggi@chromium.org</owner>
  <summary>
    Reports the result of an attempt to report a dump via Breakpad without
    crashing. Success indicates only that the out-of-process crash reporter
    succesfully generated a dump. The success or failure of the eventual upload
    is not measured. This stability metric is logged from the first Chrome
    launch post-dump.
  </summary>
</histogram>

<histogram name="CrashReport.CrashBackgroundUploadDelay" units="ms">
  <owner>olivierrobin@chromium.org</owner>
  <owner>pkl@chromium.org</owner>
  <summary>
    Time delta between when the crash took place and when the crash was uploaded
    by the app as a background task. Only logged on iOS.
  </summary>
</histogram>

<histogram name="CrashReport.PendingReportsOnBackgroundWakeUp">
  <owner>olivierrobin@chromium.org</owner>
  <owner>pkl@chromium.org</owner>
  <summary>
    The number of crash reports present when the app wakes up as a background
    task to upload crash reports. Only logged on iOS.
  </summary>
</histogram>

<histogram name="CrashReport.PermanentUploadFailure" enum="BooleanHit">
  <obsolete>
    Deprecated 01/2017 in Issue 680162 with the removal of Kasko.
  </obsolete>
  <owner>siggi@chromium.org</owner>
  <summary>
    Counts crash reports that the Kasko crash reporter fails to upload and hands
    off to Chrome. Kasko stores the failed reports in a location specified by
    Chrome. Chrome records this metric when it detects new minidump files in
    that location. Currently the reports are discarded, but they could
    eventually be uploaded via the Chrome network stack.
  </summary>
</histogram>

<histogram name="Cros.ClickOnShelf" enum="CrosShelfClickTarget">
  <obsolete>
    Deprecated as of 12/2013. Default pinned apps trial is finished.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Chrome OS shelf clicks.</summary>
</histogram>

<histogram name="CrosDisks.ArchiveType" enum="CrosDisksArchiveType">
  <owner>benchan@chromium.org</owner>
  <summary>
    The type of archive file that Chrome OS cros-disks daemon is requested to
    mount.
  </summary>
</histogram>

<histogram name="CrosDisks.DeviceMediaType" enum="CrosDisksDeviceMediaType">
  <owner>benchan@chromium.org</owner>
  <summary>
    The media type of removable device that Chrome OS cros-disks daemon is
    requested to mount.
  </summary>
</histogram>

<histogram name="CrosDisks.FilesystemType" enum="CrosDisksFilesystemType">
  <owner>benchan@chromium.org</owner>
  <summary>
    The type of file system that Chrome OS cros-disks daemon is requested to
    mount.
  </summary>
</histogram>

<histogram name="CrosFirstRun.DialogShown">
  <owner>alemate@chromium.org</owner>
  <summary>
    Records the number of times when first-run dialog was shown.
  </summary>
</histogram>

<histogram name="CrosFirstRun.FurthestStep">
  <owner>alemate@chromium.org</owner>
  <summary>
    Index of furthest step that was reached during tutorial. Since order of
    steps could change eventially and new steps could apear we use index here
    instead of step name.
  </summary>
</histogram>

<histogram name="CrosFirstRun.TimeSpent" units="ms">
  <owner>alemate@chromium.org</owner>
  <summary>The total time that user spent on first-run tutorial.</summary>
</histogram>

<histogram name="CrosFirstRun.TimeSpentOnStep" units="ms">
  <owner>alemate@chromium.org</owner>
  <summary>The time that user spent on some step of tutorial.</summary>
</histogram>

<histogram name="CrosFirstRun.TutorialCompletion"
    enum="CrosFirstRunTutorialCompletionType">
  <owner>alemate@chromium.org</owner>
  <summary>Tracks the way how user left tutorial.</summary>
</histogram>

<histogram name="CrosFirstRun.TutorialLaunched">
  <owner>alemate@chromium.org</owner>
  <summary>
    Records the number of times when first-run tutorial has been launched.
  </summary>
</histogram>

<histogram name="Crostini.AppLaunch" enum="CrostiniAppLaunchAppType">
  <owner>benwells@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    Recorded each time a Crostini app is launched, recording whether the app is
    the built in terminal, a registered app, or an unknown app.
  </summary>
</histogram>

<histogram name="Crostini.AppsInstalledAtLogin" units="apps">
  <owner>jopra@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    Records the number of Crostini apps that surface in the launcher at login
    time (not including the Terminal). This only logs if Crostini is enabled for
    the current user.
  </summary>
</histogram>

<histogram name="Crostini.SetupResult" enum="CrostiniSetupResult">
  <owner>benwells@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    Recorded each time the user completes the Crostini setup UI, recording the
    result of the setup.
  </summary>
</histogram>

<histogram name="Crostini.SetupSource" enum="CrostiniUISurface">
  <owner>benwells@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    Recorded each time the user initiates the Crostini setup UI, recording the
    UI surface that invoked the setup.
  </summary>
</histogram>

<histogram name="Crostini.TimeFromDeviceSetupToInstall" units="ms">
  <owner>benwells@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    The time from a user setting up their device, to the user enabling Crostini.
  </summary>
</histogram>

<histogram name="Crostini.UninstallResult" enum="CrostiniUninstallResult">
  <owner>benwells@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    Recorded each time the user completes the Crostini uninstall UI, recording
    the result of the uninstall.
  </summary>
</histogram>

<histogram name="Crostini.UninstallSource" enum="CrostiniUISurface">
  <owner>benwells@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    Recorded each time the user initiates the Crostini uninstall UI, recording
    the UI surface that initiated the uninstall.
  </summary>
</histogram>

<histogram name="CryptAuth.DeviceSyncSoftwareFeaturesResult"
    enum="BooleanSuccess">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Indicates that there was no issue retrieving supported and enabled software
    features, or that there were enabled features which were not in the
    supported feature set.
  </summary>
</histogram>

<histogram name="CryptAuth.Enrollment.Result" enum="BooleanSuccess">
  <owner>jhawkins@chromium.org</owner>
  <summary>
    The top-level result of the CryptAuth device enrollment process.
  </summary>
</histogram>

<histogram name="Cryptohome.ChecksumStatus" enum="CryptohomeChecksumStatus">
  <owner>dkrahn@chromium.org</owner>
  <summary>
    Checksum status of critical persistent data used by Cryptohome. This status
    is recorded every time the cryptohomed daemon reads a file.
  </summary>
</histogram>

<histogram name="Cryptohome.DeletedUserProfiles" units="profiles">
  <owner>loyso@chromium.org</owner>
  <summary>
    In low disk space scenarios, Cryptohome erases whole user profiles. This is
    a number of user profiles deleted during cleanup. Only reported when
    non-zero.
  </summary>
</histogram>

<histogram name="Cryptohome.DircryptoMigrationEndStatus"
    enum="DircryptoMigrationEndStatus">
  <owner>dspaid@chromium.org</owner>
  <summary>
    The status of the user home directory migration from ecryptfs to
    ext4-crypto.  This is logged once at the end of each migration.
  </summary>
</histogram>

<histogram name="Cryptohome.DircryptoMigrationFailedErrorCode"
    enum="PlatformFileError">
  <owner>kinaba@chromium.org</owner>
  <summary>
    The error code of file operation by which the user home directory migration
    from ecryptfs to ext4-crypto has failed. This is logged once the migration
    encounters a file I/O error.
  </summary>
</histogram>

<histogram name="Cryptohome.DircryptoMigrationFailedOperationType"
    enum="DircryptoMigrationFailedOperationType">
  <owner>kinaba@chromium.org</owner>
  <summary>
    The type of file operation at which the user home directory migration from
    ecryptfs to ext4-crypto has failed. This is logged once the migration
    encounters a file I/O error.
  </summary>
</histogram>

<histogram name="Cryptohome.DircryptoMigrationFailedPathType"
    enum="DircryptoMigrationFailedPathType">
  <owner>kinaba@chromium.org</owner>
  <summary>
    The category of the path where the user home directory migration from
    ecryptfs to ext4-crypto has failed. This is logged once the migration
    encounters a file I/O error.
  </summary>
</histogram>

<histogram name="Cryptohome.DircryptoMigrationInitialFreeSpaceInMb" units="MB">
  <owner>dspaid@chromium.org</owner>
  <summary>
    The total amount of free disk space on the system when the user started the
    migration from ecryptfs to ext4-crypto.  This is only logged when the user
    encounters an insufficient space error.
  </summary>
</histogram>

<histogram name="Cryptohome.DircryptoMigrationNoSpaceFailureFreeSpaceInMb"
    units="MB">
  <owner>dspaid@chromium.org</owner>
  <summary>
    The total amount of free disk space on the system when the user received an
    insufficient space error during the migration from ecryptfs to ext4-crypto.
    This is only logged when the user encounters an insufficient space error.
  </summary>
</histogram>

<histogram name="Cryptohome.DircryptoMigrationNoSpaceXattrSizeInBytes"
    units="bytes">
  <owner>dspaid@chromium.org</owner>
  <summary>
    The total number of bytes of xattr data that we are trying to store on a
    file when we receive an insufficient space error.  This includes both xattr
    data already present on the file as well as the new xattr we are trying to
    set.  This is only logged during ecryptfs to ext4-crypto migration if we
    receive an insufficient space error when setting a new extended attribute.
  </summary>
</histogram>

<histogram name="Cryptohome.DircryptoMigrationStartStatus"
    enum="DircryptoMigrationStartStatus">
  <owner>dspaid@chromium.org</owner>
  <summary>
    The status of the user home directory migration from ecryptfs to
    ext4-crypto.  This is logged once at the start of each migration.
  </summary>
</histogram>

<histogram name="Cryptohome.DircryptoMigrationTotalByteCountInMb" units="MB">
  <owner>hashimoto@chromium.org</owner>
  <summary>
    The total byte count (MB) of the data in a user's home directory which is
    being migrated from ecryptfs to ext4-crypto.  This is logged once when a new
    migration starts.
  </summary>
</histogram>

<histogram name="Cryptohome.DircryptoMigrationTotalFileCount">
  <owner>hashimoto@chromium.org</owner>
  <summary>
    The total file count in a user's home directory which is being migrated from
    ecryptfs to ext4-crypto.  This is logged once when a new migration starts.
  </summary>
</histogram>

<histogram name="Cryptohome.DircryptoMinimalMigrationEndStatus"
    enum="DircryptoMigrationEndStatus">
  <owner>dspaid@chromium.org</owner>
  <owner>pmarko@chromium.org</owner>
  <summary>
    The status of the user home directory minimal migration from ecryptfs to
    ext4-crypto. This is logged once at the end of each minimal migration.
  </summary>
</histogram>

<histogram name="Cryptohome.DircryptoMinimalMigrationStartStatus"
    enum="DircryptoMigrationStartStatus">
  <owner>dspaid@chromium.org</owner>
  <owner>pmarko@chromium.org</owner>
  <summary>
    The status of the user home directory minimal migration from ecryptfs to
    ext4-crypto. This is logged once at the start of each minimal migration.
  </summary>
</histogram>

<histogram name="Cryptohome.DiskCleanupProgress"
    enum="CryptohomeDiskCleanupProgress">
  <owner>loyso@chromium.org</owner>
  <summary>
    In low disk space scenarios, Cryptohome erases caches while target amount of
    free disk space is not reached. It starts from low priority categories. This
    histogram reports which topmost priority was reached to fulfill a cleanup
    request.
  </summary>
</histogram>

<histogram name="Cryptohome.Errors" enum="CryptohomeError">
  <owner>dkrahn@chromium.org</owner>
  <summary>Cryptohome errors.</summary>
</histogram>

<histogram name="Cryptohome.FreedGCacheDiskSpaceInMb" units="MB">
  <obsolete>
    Deprecated 05/2018 in favor of Cryptohome.GCache.FreedDiskSpaceInMb. Reports
    zero in 99% of hits.
  </obsolete>
  <owner>oka@chromium.org</owner>
  <summary>
    The amount of drive cache (MB) which was evicted by cryptohome due to
    shortage of remaining disk space.
  </summary>
</histogram>

<histogram name="Cryptohome.FreeDiskSpaceTotalTime" units="ms">
  <owner>loyso@chromium.org</owner>
  <summary>
    In low disk space scenarios, Cryptohome performs a lot of disk space
    operations to erase data. This is a number of milliseconds taken to perform
    a cleanup. Reported only if longer than 5 ms.
  </summary>
</histogram>

<histogram name="Cryptohome.GCache.FreedDiskSpaceInMb" units="MB">
  <owner>loyso@chromium.org</owner>
  <summary>
    This is an amount of Google Drive cache (MB) which was evicted by cryptohome
    due to shortage of remaining disk space. Reported only if something was
    deleted (greater than zero).
  </summary>
</histogram>

<histogram name="Cryptohome.HomedirEncryptionType" enum="HomedirEncryptionType">
  <owner>dspaid@chromium.org</owner>
  <summary>
    The encryption type used for a user's cryptohome directory.  This is logged
    each time the cryptohome is mounted.
  </summary>
</histogram>

<histogram name="Cryptohome.MigrationToGaiaId"
    enum="CryptohomeMigrationToGaiaId">
  <owner>alemate@chromium.org</owner>
  <summary>
    This is the status of cryptohome migration to GaiaId. Every time user logs
    in current migration status is recorded.
  </summary>
</histogram>

<histogram name="Cryptohome.MigrationUI.ConsumedBatteryPercent" units="%">
  <owner>fukino@chromium.org</owner>
  <summary>
    The amount of consumed battery level during cryptohome encryption migration.
    This is logged when the battery level decreases during migration, and the
    data is used to check if the minimum battery level required to start
    migration is appropriate.
  </summary>
</histogram>

<histogram name="Cryptohome.MigrationUI.FirstScreen"
    enum="MigrationUIFirstScreen">
  <owner>fukino@chromium.org</owner>
  <summary>
    The first screen in the encryption migration UI, which is shown when a user
    attempts to log in to the system and old encryption (eCryptfs) is detected.
  </summary>
</histogram>

<histogram name="Cryptohome.MigrationUI.MigrationResult"
    enum="MigrationUIMigrationResult">
  <owner>fukino@chromium.org</owner>
  <summary>
    The result of encryption migration from eCryptfs to Ext4 dircrypto. The
    recorded result is what the migration UI in Chrome side is notified from
    cryptohomed.
  </summary>
</histogram>

<histogram name="Cryptohome.MigrationUI.RemoveCryptohomeResult"
    enum="MigrationUIRemoveCryptohomeResult">
  <owner>fukino@chromium.org</owner>
  <summary>
    The result of the removal of user's cryptohome. When the migration UI is
    notified that the migration failed, the UI tries to remove the user's
    cryptohome to make sure that the user can create clean crytohome directory
    in the next sign-in.
  </summary>
</histogram>

<histogram name="Cryptohome.MigrationUI.UserChoice"
    enum="MigrationUIUserChoice">
  <owner>fukino@chromium.org</owner>
  <summary>
    User's choice when the system is ready to migrate encryption. The user can
    start migration or skip it. It is used to know how many users have skipped
    migration.
  </summary>
</histogram>

<histogram name="Cryptohome.MigrationUI.VisibleScreen" enum="MigrationUIScreen">
  <owner>fukino@chromium.org</owner>
  <summary>
    How many times each screen in migration UI is shown to the user. A screen is
    recorded as a visible screen when the screen is kept displayed at least for
    a second.
  </summary>
</histogram>

<histogram name="Cryptohome.TimeToCompleteDircryptoMigration" units="ms">
  <owner>dspaid@chromium.org</owner>
  <summary>
    The amount of time (ms) for the user's home directory to be migrated from
    ecryptfs to ext4-crypto.  If the migration is interrupted and subsequently
    resumed (such as due to power loss) then no value is recorded for either
    attempt.
  </summary>
</histogram>

<histogram name="Cryptohome.TimeToCompleteDircryptoMinimalMigration" units="ms">
  <owner>dspaid@chromium.org</owner>
  <summary>
    The amount of time (ms) for the user's home directory to be migrated from
    ecryptfs to ext4-crypto if the minimal migration method was used. If the
    minimal migration is interrupted and subsequently resumed (such as due to
    power loss) then no value is recorded for either attempt.
  </summary>
</histogram>

<histogram name="Cryptohome.TimeToInitPkcs11" units="ms">
  <owner>dkrahn@chromium.org</owner>
  <summary>
    The amount of time (ms) for Chrome OS cryptohome daemon to initialize the
    PKCS#11. Initializations under 1 second represent checks on a previously
    initialized PKCS#11, and should be discarded for analysis.
  </summary>
</histogram>

<histogram name="Cryptohome.TimeToMountAsync" units="ms">
  <owner>dkrahn@chromium.org</owner>
  <summary>
    The amount of time (ms) for Chrome OS cryptohome to mount the encrypted home
    directory asynchronously.
  </summary>
</histogram>

<histogram name="Cryptohome.TimeToMountGuestAsync" units="ms">
  <owner>dkrahn@chromium.org</owner>
  <summary>
    The amount of time (ms) for Chrome OS cryptohome to mount the encrypted
    guest home directory asynchronously.
  </summary>
</histogram>

<histogram name="Cryptohome.TimeToMountGuestSync" units="ms">
  <owner>dkrahn@chromium.org</owner>
  <summary>
    The amount of time (ms) for Chrome OS cryptohome to mount the encrypted
    guest home directory synchronously.
  </summary>
</histogram>

<histogram name="Cryptohome.TimeToMountSync" units="ms">
  <owner>dkrahn@chromium.org</owner>
  <summary>
    The amount of time (ms) for Chrome OS cryptohome to mount the encrypted home
    directory synchronously.
  </summary>
</histogram>

<histogram name="Cryptohome.TimeToTakeTpmOwnership" units="ms">
  <owner>dkrahn@chromium.org</owner>
  <summary>
    The amount of time (ms) for Chrome OS cryptohome daemon to take ownership of
    the TPM.
  </summary>
</histogram>

<histogram name="Cryptohome.TpmResults" enum="CryptohomeTpmResults">
  <owner>afakhry@chromium.org</owner>
  <summary>
    The errors resulting from interacting with the Trusted Platform Module (TPM)
    device.
  </summary>
</histogram>

<histogram base="true" name="CustomTab.SessionDuration" units="ms">
  <owner>ranj@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
<!-- Name completed by histogram_suffixes name="CustomTabOpenSource" -->

  <summary>
    Records the time duration in CustomTab Activity from onStart/onResume to
    onStop/onPause, if that activity is opened by Webapp/WebApk/Trusted Web
    Activity.
  </summary>
</histogram>

<histogram name="CustomTabs.ClientAppId" enum="ClientAppId">
  <owner>yusufo@chromium.org</owner>
  <summary>
    Android: AppId declared by the launching application in EXTRA_APPLICATION_ID
    in a custom tab. This histogram is used as a means to count the total
    instances of custom tabs created meanwhile binning them across launching
    apps that have identified themselves.
  </summary>
</histogram>

<histogram name="CustomTabs.ConnectionStatusOnReturn.GSA"
    enum="CustomTabsConnection">
  <owner>nyquist@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    Android: Recorded whenever user closes the custom tab by hitting the close
    button or back to return to the caller app. Keeps track of the connection
    status and whether the app was using a KeepAlive connection. Recorded only
    for AGSA.
  </summary>
</histogram>

<histogram name="CustomTabs.ConnectionStatusOnReturn.NonGSA"
    enum="CustomTabsConnection">
  <owner>nyquist@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    Android: Recorded whenever user closes the custom tab by hitting the close
    button or back to return to the caller app. Keeps track of the connection
    status and whether the app was using a KeepAlive connection. Recorded for
    all apps other than AGSA.
  </summary>
</histogram>

<histogram name="CustomTabs.DetachedResourceRequest.Duration" units="ms">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Time between the start of a detached resource request and its completion
    (failure or success). Android only.
  </summary>
</histogram>

<histogram name="CustomTabs.DetachedResourceRequest.FinalStatus"
    enum="NetErrorCodes">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Reports the final status of the detached request, including success.
    Recorded once per detached resource request. Android only.
  </summary>
</histogram>

<histogram name="CustomTabs.DetachedResourceRequest.RedirectsCount"
    units="redirects">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Number of redirects followed by a detached resource request until success or
    failure. Android only.
  </summary>
</histogram>

<histogram name="CustomTabs.DynamicModule.CreateActivityDelegateTime"
    units="ms">
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>
    Time to create an activity delegate for a custom tabs dynamic module.
    Android only.
  </summary>
</histogram>

<histogram name="CustomTabs.DynamicModule.CreatePackageContextTime" units="ms">
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>
    Time to create the package context for a custom tabs dynamic module. Android
    only.
  </summary>
</histogram>

<histogram name="CustomTabs.DynamicModule.EntryPointLoadClassTime" units="ms">
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>
    Time to load the entry point class for a custom tabs dynamic module. Android
    only.
  </summary>
</histogram>

<histogram name="CustomTabs.DynamicModule.EntryPointNewInstanceTime" units="ms">
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>
    Time to instantiate the entry point class for a custom tabs dynamic module.
    Android only.
  </summary>
</histogram>

<histogram name="CustomTabs.DynamicModule.LoadResult"
    enum="CustomTabsDynamicModuleLoadResult">
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>
    Possible results when loading a custom tabs dynamic module. Android only.
  </summary>
</histogram>

<histogram name="CustomTabs.IntentToFirstCommitNavigationTime" units="ms">
  <obsolete>
    Deprecated 10/2016 in favor of .IntentToFirstCommitNavigationTime2.*.
  </obsolete>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Time between the intent arrival in Chrome and the first navigation commit,
    if the navigation is successful. Similar in principle to
    Startup.FirstCommitNavigationTime.
  </summary>
</histogram>

<histogram name="CustomTabs.IntentToFirstCommitNavigationTime2" units="ms">
  <obsolete>
    Deprecated 2017-08 in favor of CustomTabs.IntentToFirstNavigationStartTime.
  </obsolete>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Time between the intent arrival to a Custom Tab and the navigation start
    (note: not the navigation commit, as the name suggests). Recorded when the
    page has finished loading. Non-&quot;Herb&quot; mode.
  </summary>
</histogram>

<histogram name="CustomTabs.IntentToFirstCommitNavigationTime3" units="ms">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Time between the intent arrival to a Custom Tab and the first navigation
    commit. Recorded for every custom tabs intent when the page has finished
    loading.
  </summary>
</histogram>

<histogram name="CustomTabs.IntentToFirstNavigationStartTime" units="ms">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Time between the intent arrival to a Custom Tab and the navigation start.
    Recorded when the page has finished loading. Non-&quot;Herb&quot; mode.
  </summary>
</histogram>

<histogram name="CustomTabs.IntentToPageLoadedTime" units="ms">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Time between the intent arrival in Chrome and the first &quot;page
    loaded&quot; event, if the navigation is successful. Non-&quot;Herb&quot;
    mode.
  </summary>
</histogram>

<histogram name="CustomTabs.MayLaunchUrlType" enum="MayLaunchUrlType">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Android only. Which flavors of mayLaunchUrl() were used before a tab launch.
    Can be low and/or high confidence. Recorded at the same time as
    CustomTabs.WarmupStateOnLaunch for the buckets &quot;Session, No Warmup,
    Warmup called from another UID&quot;, &quot;Session, No Warmup&quot; and
    &quot;Session, Warmup&quot;.
  </summary>
</histogram>

<histogram name="CustomTabs.NonDefaultSessionPrerenderMatched"
    enum="BooleanMatched">
  <obsolete>
    Deprecated 4/2018 when prerender was removed from Custom Tabs.
  </obsolete>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Android: When there is a prerender for a session with non-default
    parameters, whether the prerender was matched when navigating.
  </summary>
</histogram>

<histogram name="CustomTabs.ParallelRequestStatusOnStart"
    enum="CustomTabsParallelRequestStatusOnStart">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Recorded only on Android. Whether a parallel request was requested by the
    calling application, and if so its initial status. Recorded once per handled
    intent, when the request is initiated.
  </summary>
</histogram>

<histogram name="CustomTabs.PredictionStatus" enum="PredictionStatus">
  <owner>lizeb@chromium.org</owner>
  <summary>
    For Custom Tabs, records whether mayLaunchUrl() has been called, and if so,
    whether the call was later matched by a URL launch.
  </summary>
</histogram>

<histogram name="CustomTabs.PredictionToLaunch" units="ms">
  <owner>lizeb@chromium.org</owner>
  <summary>
    When a URL prediction succeeds, time in ms between the prediction and the
    actual launch.
  </summary>
</histogram>

<histogram name="CustomTabs.PrerenderSessionUsesDefaultParameters"
    enum="BooleanDefault">
  <obsolete>
    Deprecated 4/2018 when prerender was removed from Custom Tabs.
  </obsolete>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Android: When prerendering a URL for Custom Tabs, whether the client session
    uses the default parameters.
  </summary>
</histogram>

<histogram name="CustomTabs.SpareWebContents.Status"
    enum="SpareWebContentsStatus">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Android: When a spare WebContents is created from Custom Tabs, record
    creation, and whether it was used, killed or destroyed. Creation is recorded
    to get the &quot;abandoned&quot; case, that is when Chrome is killed before
    the renderer.
  </summary>
</histogram>

<histogram name="CustomTabs.SpareWebContents.TimeBeforeDeath" units="ms">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Android: When a spare WebContents is created from Custom Tabs, record how
    long is took before the render process was killed.
  </summary>
</histogram>

<histogram name="CustomTabs.SpeculationStatusOnStart"
    enum="CustomTabsSpeculationStatusOnStart">
  <owner>mattcary@chromium.org</owner>
  <summary>
    Recorded only for Android. How a speculation was started or why it was
    disallowed. This is recorded when a speculation of any kind is requested,
    with either a &quot;Speculation allowed&quot; value, or a reason why it was
    not allowed. If the speculation is allowed and is attempted to be started,
    the status on start will be counted in addition: one of
    &quot;Prefetch&quot;, &quot;Prerender&quot;, &quot;Background Tab&quot; or
    &quot;Prerender not started&quot;. The last case is when a prerender is
    abandoned during start.
  </summary>
</histogram>

<histogram name="CustomTabs.SpeculationStatusOnSwap"
    enum="CustomTabsSpeculationStatusOnSwap">
  <owner>mattcary@chromium.org</owner>
  <summary>
    Recorded only for Android. Recorded when a speculation is requesting to swap
    into a visible tab.
  </summary>
</histogram>

<histogram name="CustomTabs.Visible" enum="VisibleTab">
  <owner>yusufo@chromium.org</owner>
  <summary>
    Recorded only for Android. Records on every metrics upload whether the
    currently visible tab is a custom tab. The custom tab is launched by a
    client app with customized UI. Some metrics like page load time will behave
    differently for these tabs since it will be possible to warm up the browser
    process and prepare resources for specific urls ahead of time via a service
    connection. This histogram can be used to cluster these metric differently.
  </summary>
</histogram>

<histogram name="CustomTabs.WarmupStateOnLaunch" enum="WarmupStateOnLaunch">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Recorded only on Android. Reports whether warmup() has been called when a
    Custom Tabs Intent is received from an application, and if so, whether the
    call could be matched with a session.
  </summary>
</histogram>

<histogram name="CustomTabs.WebContentsStateOnLaunch" enum="WebContentsState">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Android: When a CustomTabActivity creates its Tab, whether we use a
    prerendered WebContents, a spare renderer or create a new WebContents.
  </summary>
</histogram>

<histogram name="DataReductionProxy.AutoLoFiAccuracy"
    enum="DataReductionProxyAutoLoFiAccuracy">
  <obsolete>
    Replaced by DataReductionProxy.LoFi.Accuracy.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Counts the accuracy of estimated network quality when using Lo-Fi. Counters
    are incremented when a main frame URL request is handled by Data Reduction
    Proxy and session was in Auto Lo-Fi enabled field trial.
  </summary>
</histogram>

<histogram name="DataReductionProxy.AutoLoFiRequestHeaderState"
    enum="DataReductionProxyAutoLoFiRequestHeaderState">
  <obsolete>
    Deprecated as of 8/2017, per server-directed preview decision.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Counts the changes in the state of Lo-Fi request header (q=low) being added
    to the Chrome proxy request header. Counters are incremented when a main
    frame URL request is handled by Data Reduction Proxy and session was in Auto
    Lo-Fi enabled field trial.
  </summary>
</histogram>

<histogram name="DataReductionProxy.BlockTypeFallback"
    enum="DataReductionProxyBypassType">
  <owner>bengr@chromium.org</owner>
  <owner>marq@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    Counts various events that trigger Chrome to block the fallback
    configuration of the data reduction proxy.
  </summary>
</histogram>

<histogram name="DataReductionProxy.BlockTypePrimary"
    enum="DataReductionProxyBypassType">
  <owner>bengr@chromium.org</owner>
  <owner>marq@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    Counts various events that trigger Chrome to block the primary configuration
    of the data reduction proxy.
  </summary>
</histogram>

<histogram name="DataReductionProxy.BypassedBytes" units="bytes">
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    Counts the response bytes that did not go through the data reduction proxy
    as the result of a bypass event.
  </summary>
</histogram>

<histogram name="DataReductionProxy.BypassedBytes.NotBypassed" units="bytes">
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    Counts the response bytes that went through the data reduction proxy and
    were not bypassed.
  </summary>
</histogram>

<histogram name="DataReductionProxy.BypassInfoFallback"
    enum="DataReductionProxyBypassEventType_Deprecated">
  <obsolete>
    Deprecated as of 6/2014, replaced by DataReductionProxy.BypassTypeFallback.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>marq@chromium.org</owner>
  <summary>
    Counts various events that trigger Chrome to bypass the fallback
    configuration of the data reduction proxy.
  </summary>
</histogram>

<histogram name="DataReductionProxy.BypassInfoPrimary"
    enum="DataReductionProxyBypassEventType_Deprecated">
  <obsolete>
    Deprecated as of 6/2014, replaced by DataReductionProxy.BypassTypePrimary.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>marq@chromium.org</owner>
  <summary>
    Counts various events that trigger Chrome to bypass the primary
    configuration of the data reduction proxy.
  </summary>
</histogram>

<histogram name="DataReductionProxy.BypassOnNetworkErrorFallback"
    enum="NetErrorCodes">
  <owner>bengr@chromium.org</owner>
  <summary>
    Positive net error code that caused the fallback data reduction proxy to be
    bypassed and put on the proxy retry list. Called after a failure to connect
    or resolve a host name.
  </summary>
</histogram>

<histogram name="DataReductionProxy.BypassOnNetworkErrorPrimary"
    enum="NetErrorCodes">
  <owner>bengr@chromium.org</owner>
  <summary>
    Positive net error code that caused the primary data reduction proxy to be
    bypassed and put on the proxy retry list. Called after a failure to connect
    or resolve a host name.
  </summary>
</histogram>

<histogram name="DataReductionProxy.BypassTypeFallback"
    enum="DataReductionProxyBypassType">
  <owner>bengr@chromium.org</owner>
  <owner>marq@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    Counts various events that trigger Chrome to bypass the fallback
    configuration of the data reduction proxy.
  </summary>
</histogram>

<histogram name="DataReductionProxy.BypassTypePrimary"
    enum="DataReductionProxyBypassType">
  <owner>bengr@chromium.org</owner>
  <owner>marq@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    Counts various events that trigger Chrome to bypass the primary
    configuration of the data reduction proxy.
  </summary>
</histogram>

<histogram name="DataReductionProxy.CaptivePortalDetected.Platform"
    enum="BooleanPresent">
  <obsolete>
    Deprecated 2018/04.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records if the platform detected that a captive portal is present on the
    current network. Recorded at the time of Chrome startup and on IP change
    event. Recorded only for users that have data saver enabled.
  </summary>
</histogram>

<histogram name="DataReductionProxy.ConfigFetchLostBytesCL">
  <obsolete>
    Removed in Feb. 2016
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <summary>
    Size of the response body. This is the actual number of bytes received,
    which usually agrees with but is not necessarily the same as the size
    specified by the Content-Length header. Only recorded if the request is sent
    while a simulated Data Reduction Proxy configuration fetch is taking place.
  </summary>
</histogram>

<histogram name="DataReductionProxy.ConfigFetchLostBytesDiff">
  <obsolete>
    Removed in Feb. 2016
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <summary>
    The difference between the size specified in the X-Original-Content-Length
    header and the size of the response body. Only recorded if the request is
    sent while a simulated Data Reduction Proxy configuration fetch is taking
    place. Only positive values are logged, so if X-Original-Content-Length is
    not specified or if it equals or exceeds the content length, it is not
    logged.
  </summary>
</histogram>

<histogram name="DataReductionProxy.ConfigFetchLostBytesOCL">
  <obsolete>
    Removed in Feb. 2016
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <summary>
    Size specified in the X-Original-Content-Length header. If this header is
    not present in the response, the size of the response body is used. Only
    recorded if the request is sent while a simulated Data Reduction Proxy
    configuration fetch is taking place.
  </summary>
</histogram>

<histogram name="DataReductionProxy.ConfigService.AuthExpired"
    enum="BooleanExpired">
  <owner>bengr@chromium.org</owner>
  <summary>
    Total number of authentication required responses received from the Data
    Reduction Proxy.

    An &quot;Unexpired&quot; value is recorded every time a new client config is
    fetched and parsed successfully. An &quot;Expired&quot; value is recorded
    every time Chrome receives an authentication failure from the data saver
    proxy.
  </summary>
</histogram>

<histogram name="DataReductionProxy.ConfigService.AuthExpiredSessionKey"
    enum="DataReductionProxyConfigServiceAuthExpiredSessionKey">
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    On receiving an authentication failure from the data reduction proxy,
    records whether the session key used in the request matches the current
    session key.

    Recorded every time Chrome receives an authentication failure from the data
    saver proxy.
  </summary>
</histogram>

<histogram name="DataReductionProxy.ConfigService.AuthFailure.LatencyPenalty"
    units="ms">
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Time from when the request starts to the time when the auth failure is
    received from the data saver proxy.

    Recorded every time an auth failure is received from the data saver proxy.
  </summary>
</histogram>

<histogram
    name="DataReductionProxy.ConfigService.FetchFailedAttemptsBeforeSuccess">
  <owner>bengr@chromium.org</owner>
  <summary>
    The number of failed attempts when retrieving the configuration from the
    Data Reduction Proxy API before a successful attempt took place.

    Recorded every time a new client config is fetched and parsed successfully.
    If the device has a valid connection type but no Internet connectivity, this
    count will keep increasing.
  </summary>
</histogram>

<histogram name="DataReductionProxy.ConfigService.FetchLatency" units="ms">
  <owner>bengr@chromium.org</owner>
  <summary>
    Time from when the Data Reduction Proxy configuration request starts until
    it completes.

    Recorded every time a new client config is fetched and parsed successfully.
  </summary>
</histogram>

<histogram name="DataReductionProxy.ConfigService.FetchResponseCode"
    enum="HttpResponseCode">
  <owner>bengr@chromium.org</owner>
  <summary>
    Count per HttpResponseCode when attempting to retrieve the Data Reduction
    Proxy configuration from the Data Reduction Proxy API.
  </summary>
</histogram>

<histogram name="DataReductionProxy.ConfigService.HTTPRequests"
    enum="DataReductionProxyConfigServiceHTTPRequests">
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Upper bound on the count of HTTP requests that did or did not go through the
    data saver proxy.

    An HTTP request may not go through data saver proxy if the config was
    unavailable, due to local bypass rules, or due to server side bypasses. If
    data saver is turned on, this metric is recorded every time proxy is
    resolved for an HTTP request.
  </summary>
</histogram>

<histogram name="DataReductionProxy.ConfigService.MainFrames"
    enum="DataReductionProxyConfigServiceMainFrames">
  <owner>bengr@chromium.org</owner>
  <owner>robertogden@chromium.org</owner>
  <summary>
    Upper bound on the count of main frame requests that did or did not go
    through the data saver proxy.

    A main frame request may not go through data saver proxy if the config was
    unavailable, due to local bypass rules, or due to server side bypasses. If
    data saver is turned on, this metric is recorded every time proxy is
    resolved for an HTTP request.
  </summary>
</histogram>

<histogram name="DataReductionProxy.ConfigService.PersistedConfigIsExpired"
    enum="BooleanExpired">
  <obsolete>
    Deprecated 2018/04.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records whether the persisted client config for data saver proxies read from
    the disk at the time of Chrome startup was expired or not. Recorded once at
    the time of Chrome startup.
  </summary>
</histogram>

<histogram name="DataReductionProxy.ConfigService.SentVariationHeaders"
    enum="BooleanSent">
  <owner>robertogden@chromium.org</owner>
  <summary>
    Records whether the client config client sent variation headers in the
    config request.
  </summary>
</histogram>

<histogram name="DataReductionProxy.DaysSinceEnabled" units="days">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the number of days since data reduction proxy was last enabled by
    the user. Recorded only if the data reduction proxy was last enabled since
    this metric was added to Chromium (M-56). Recorded at Chrome startup if data
    reduction proxy is already enabled, and when the user enables the data
    reduction proxy.
  </summary>
</histogram>

<histogram
    name="DataReductionProxy.DaysSinceSavingsCleared.NegativeSystemClock"
    units="days">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the number of days since the data reduction savings were cleared
    because the system clock moved back by more than 1 day. Recorded at Chrome
    startup if data reduction proxy is enabled, and if the data reduction proxy
    savings were cleared in some previous Chrome session.
  </summary>
</histogram>

<histogram name="DataReductionProxy.DeleteBrowsingHistory.NumBuckets">
  <owner>robertogden@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    When the data savings are cleared because the user deletes their browsing
    history, record how many buckets were deleted. See also
    DataReductionProxy.SavingsCleared.Reason/User action - cleared browsing
    history.
  </summary>
</histogram>

<histogram name="DataReductionProxy.EnabledState"
    enum="DataReductionProxyEnabledState">
  <owner>bengr@chromium.org</owner>
  <owner>rajendrant@chromium.org</owner>
  <summary>
    Samples of user interactions with the Data Saver settings menu across all
    platforms (android, IOS, desktop extension). Data is collected whenever user
    toggles the ON/OFF switch in the settings menu for reducing data usage.

    For desktop, Off-to-On/On-to-Off histogram count will increment when the
    data saver extension is installed/uninstalled respectively as well.
  </summary>
</histogram>

<histogram name="DataReductionProxy.HeaderTamperDetectionHTTP">
  <obsolete>
    Removed in June 2017
  </obsolete>
  <owner>xingx@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    For each carrier, the total number of HTTP responses that have been checked
    for tampering. This assumes the data reduction proxy injected fingerprints
    have not been tampered with. Only the data reduction proxy responses with
    200 OK response code are checked.
  </summary>
</histogram>

<histogram name="DataReductionProxy.HeaderTamperDetectionHTTPS">
  <obsolete>
    Removed in June 2017
  </obsolete>
  <owner>xingx@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    For each carrier, the total number of HTTPS responses that have been checked
    for tampering. This assumes the data reduction proxy injected fingerprints
    have not been tampered with. Only the data reduction proxy responses with
    200 OK response code are checked.
  </summary>
</histogram>

<histogram name="DataReductionProxy.HeaderTamperDetectionPassHTTP">
  <obsolete>
    Removed in June 2017
  </obsolete>
  <owner>xingx@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    For each carrier, the total number of HTTP responses that passed the tamper
    detection. This assumes the data reduction proxy injected fingerprints have
    not been tampered with. Only the data reduction proxy responses with 200 OK
    response code are checked.
  </summary>
</histogram>

<histogram name="DataReductionProxy.HeaderTamperDetectionPassHTTPS">
  <obsolete>
    Removed in June 2017
  </obsolete>
  <owner>xingx@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    For each carrier, the total number of HTTPs responses that passed the tamper
    detection. This assumes the data reduction proxy injected fingerprints have
    not been tampered with. Only the data reduction proxy responses with 200 OK
    response code are checked.
  </summary>
</histogram>

<histogram name="DataReductionProxy.HeaderTamperedHTTP">
  <obsolete>
    Removed in June 2017
  </obsolete>
  <owner>xingx@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The total number of HTTP responses that some part (specified by suffix name)
    have been tampered with. This assumes the data reduction proxy injected
    fingerprints have not been tampered with. Only the data reduction proxy
    responses with 200 OK response code are checked.
  </summary>
</histogram>

<histogram name="DataReductionProxy.HeaderTamperedHTTPS">
  <obsolete>
    Removed in June 2017
  </obsolete>
  <owner>xingx@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The total number of HTTPS responses that some part (specified by suffix
    name) have been tampered with. This assumes the data reduction proxy
    injected fingerprints have not been tampered with. Only the data reduction
    proxy responses with 200 OK response code are checked.
  </summary>
</histogram>

<histogram name="DataReductionProxy.HistoricalDataUsageLoadTime" units="ms">
  <owner>kundaji@chromium.org</owner>
  <summary>
    Time taken to load historical data usage from Level DB into memory. This UMA
    is reported each time the method to load historical data usage is called,
    which happens when user views data usage history.
  </summary>
</histogram>

<histogram name="DataReductionProxy.InvalidResponseHeadersReceived.NetError"
    enum="NetErrorCodes">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Net error codes observed when invalid response headers were received from
    data reduction proxy.
  </summary>
</histogram>

<histogram name="DataReductionProxy.LastWeekAggregateKB.Services"
    enum="DataUseServicesHash">
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the aggregate data use of services for the last week. Different
    conditions are added as suffixes to this histogram. Recorded when Chrome is
    started, so this does not include the current session. The aggregation
    happens when requests complete. The current week calculation is based on
    week starting from the Epoch day(Thursday, January 1, 1970), and every 7
    days is treated as a week.
  </summary>
</histogram>

<histogram
    name="DataReductionProxy.LastWeekAggregateKB.UserTraffic.Downstream.ContentType"
    enum="DataUseContentType">
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the aggregate data use for the last week. This is the downstream
    data use of all user-initiated traffic. Recorded when Chrome is started, so
    this does not include the current session. The aggregation happens when
    requests complete. The current week calculation is based on week starting
    from the Epoch day(Thursday, January 1, 1970), and every 7 days is treated
    as a week.
  </summary>
</histogram>

<histogram name="DataReductionProxy.LevelDBOpenStatus"
    enum="DataReductionProxyStoreStatus">
  <owner>kundaji@chromium.org</owner>
  <summary>Status of calling Open() on Data Reduction Proxy LevelDB.</summary>
</histogram>

<histogram name="DataReductionProxy.LevelDBSize" units="KB">
  <owner>kundaji@chromium.org</owner>
  <summary>Size of Data Reduction Proxy LevelDB measured at startup.</summary>
</histogram>

<histogram name="DataReductionProxy.LoFi.Accuracy"
    enum="DataReductionProxyAutoLoFiAccuracy">
  <obsolete>
    Deprecated as of 8/2017, per server-directed preview decision.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records the accuracy of estimated network quality when using Lo-Fi. Network
    quality predicted at the time of navigation start is compared with the
    network quality observed during the specified time interval following the
    start of the navigation. This metric is recorded only when the session is in
    Lo-Fi enabled field trial.
  </summary>
</histogram>

<histogram name="DataReductionProxy.LoFi.ImplicitOptOutAction"
    enum="DataReductionProxyLoFiImplicitOptOutAction">
  <obsolete>
    Obsolete as of October 2017.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    Counts of Lo-Fi implicit opt out actions. If the user chooses to &quot;Load
    image&quot; for k pages in a session, LoFi is disabled for the remainder of
    that session. If Lo-Fi is disabled for j consecutive sessions, Lo-Fi is
    disabled for that user until the next implicit opt out epoch, which may be
    in a later session, or never. k and j default to 3 and are assigned via the
    DataReductionProxyLoFi field trial.
  </summary>
</histogram>

<histogram name="DataReductionProxy.LoFi.SessionState"
    enum="DataReductionProxyLoFiSessionState">
  <obsolete>
    Deprecated as of October 2017 per transition to blacklist.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    Tracks Lo-Fi usage at the granularity of browser sessions. Counts for each
    session if Lo-Fi was used or not. In the case where Lo-Fi was not used,
    records if it was because the network quality was always good or because the
    user had implicitly opted out. The session where a user permanently opts out
    is counted in the Lo-Fi used bucket.
  </summary>
</histogram>

<histogram name="DataReductionProxy.LoFi.TransformationType"
    enum="DataReductionProxyLoFiTransformationType">
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    Counts of pageloads that received or requested, but did not receive, various
    Lo-Fi lite page transformations. Recorded when a lite page is requested or
    received through Data compression proxy.
  </summary>
</histogram>

<histogram name="DataReductionProxy.LoFi.UIAction"
    enum="DataReductionProxyLoFiUIAction">
  <obsolete>
    Deprecated as of 9/2016, replaced by Previews.ContextMenuAction.LoFi.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    User interactions with the Lo-Fi snackbar and context menu option. These
    include:

    Displays and clicks on the &quot;Load images&quot; snackbar. Displays and
    clicks on the &quot;Load image&quot; and &quot;Load images&quot;context menu
    options. Count of pages where the user has clicked &quot;Load image&quot; at
    least once.
  </summary>
</histogram>

<histogram name="DataReductionProxy.MissingViaHeader.Bytes" units="bytes">
  <obsolete>
    Removed 2018/04.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>sclittle@chromium.org</owner>
  <summary>
    Counts the response bytes of responses that Chrome expected to come through
    a data reduction proxy and have the data reduction proxy via header, but
    where the data reduction proxy via header was missing. Note that this does
    not include responses that were bypassed.
  </summary>
</histogram>

<histogram name="DataReductionProxy.MissingViaHeader.ResponseCode">
  <owner>bengr@chromium.org</owner>
  <owner>sclittle@chromium.org</owner>
  <summary>
    Counts the different HTTP response codes of responses that Chrome expected
    to come through a data reduction proxy and have the data reduction proxy via
    header, but where the data reduction proxy via header was missing.
  </summary>
</histogram>

<histogram name="DataReductionProxy.NetworkChangeEvents"
    enum="DataReductionProxyNetworkChangeEvent">
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    Counts the number of times various events occur when the data reduction
    proxy is enabled and the IP address of the client changes.
  </summary>
</histogram>

<histogram name="DataReductionProxy.NetworkProperties.CacheHit"
    units="BooleanCacheHit">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records if the network properties of a network were found in the cache or
    not. Recorded every time there is a change in the connection type.
  </summary>
</histogram>

<histogram name="DataReductionProxy.Pingback.Attempted" enum="BooleanAttempted">
  <owner>ryansturm@chromium.org</owner>
  <summary>
    Counts the number of times that pageload metrics were queued to be attempted
    or not queued based on the reporting fraction. Recorded once per pageload.
  </summary>
</histogram>

<histogram name="DataReductionProxy.Pingback.CrashAction"
    enum="DataReductionProxyPingbackCrashAction">
  <owner>ryansturm@chromium.org</owner>
  <summary>
    Counts various actions related to crash detection in the pingback client.
    This is recorded only when a renderer crash occurs on a Data Reduction Proxy
    page load.
  </summary>
</histogram>

<histogram name="DataReductionProxy.Pingback.Succeeded" enum="BooleanSuccess">
  <owner>ryansturm@chromium.org</owner>
  <summary>
    Counts the number of times that a batched pingback request succeeded or
    failed at being sent to the server. Recorded everytime a pingback request is
    attempted.
  </summary>
</histogram>

<histogram name="DataReductionProxy.ProbeURL"
    enum="DataReductionProxyProbeURLFetchResult">
  <owner>bengr@chromium.org</owner>
  <owner>marq@chromium.org</owner>
  <summary>
    Counts various outcomes of requesting the data reduction proxy's probe URL.
  </summary>
</histogram>

<histogram name="DataReductionProxy.ProbeURLNetError" enum="NetErrorCodes">
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    Reports the type of network error when the data reduction proxy probe fails
    due to a network error.
  </summary>
</histogram>

<histogram name="DataReductionProxy.PromoAction"
    enum="DataReductionProxyPromoAction">
  <obsolete>
    Deprecated as of 3/2015, replaced by DataReductionProxy.UIAction.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>marq@chromium.org</owner>
  <summary>
    Samples which method was used by the user to dismiss the proxy promo. This
    is sampled when the promo leaves view, with the sampled value depending on
    which of four possible controls the user used.
  </summary>
</histogram>

<histogram name="DataReductionProxy.Protocol.AcceptTransform"
    enum="DataReductionProxyProtocolAcceptTransformEvent">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Records the sending of accepted transform headers to the data reduction
    proxy and also receiving transforms and policies from the data reduction
    proxy. Recorded on a per page request basis and also on a per image resource
    request basis for empty-image transforms. Headers for both types of requests
    (pages and resources) are recorded here for convenience in viewing in a
    single histogram. In general, the separate groups of request/receive buckets
    for either page or resource types can be compared.
  </summary>
</histogram>

<histogram name="DataReductionProxy.Protocol.NotAcceptingTransform"
    enum="DataReductionProxyProtocolNotAcceptingTransformReason">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Records the reason that a page request is not accepting proxy server
    transforms. Recorded on a per page request basis.
  </summary>
</histogram>

<histogram name="DataReductionProxy.ProxyPrefMigrationResult"
    enum="DataReductionProxyProxyPrefMigrationResult">
  <owner>sclittle@chromium.org</owner>
  <summary>
    Records the result of migrating the Data Reduction Proxy away from being
    configured via a proxy preference, including cases when no migration action
    was taken.
  </summary>
</histogram>

<histogram name="DataReductionProxy.ProxySchemeUsed"
    enum="DataReductionProxyProxySchemeUsed">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the scheme of the data reduction proxy server. Recorded for every
    request that is fetched successfully through a data reduction proxy server.
  </summary>
</histogram>

<histogram name="DataReductionProxy.Quic.DefaultAlternativeProxy"
    enum="DataReductionProxyQuicDefaultAlternativeProxy">
  <obsolete>
    Deprecated in 5/2017, since the experiment to use default QUIC alternative
    proxy was deprecated.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Status of the availability of valid alternative data reduction proxy
    servers. This metric is recorded only when data reduction proxy delegate is
    queried for the value of the supported alternative proxy server.
  </summary>
</histogram>

<histogram name="DataReductionProxy.Quic.OnAlternativeProxyBroken"
    units="count">
  <obsolete>
    As of M66 this has been superceded by Net.AlternativeProxyFailed.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Number of times an alternative QUIC proxy was marked as broken.
  </summary>
</histogram>

<histogram name="DataReductionProxy.Quic.ProxyStatus"
    enum="DataReductionProxyQuicProxyStatus">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records the result of the attempt to use a data reduction proxy that
    supports QUIC. The metric is logged for every request for which the resolved
    proxy is a data reduction HTTPS proxy.
  </summary>
</histogram>

<histogram name="DataReductionProxy.RequestCompletionErrorCodes"
    enum="NetErrorCodes">
  <obsolete>
    Deprecated in 2/2016, since it didn't get recorded for many kinds of error
    codes when it should have been recorded, and
    Net.HttpRequestCompletionErrorCodes is a good enough replacement when
    filtering for clients with the Data Reduction Proxy enabled.
  </obsolete>
  <owner>sclittle@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Reports the different network errors that requests that try to use the data
    reduction proxy are completing with, including OK and ABORTED.
  </summary>
</histogram>

<histogram name="DataReductionProxy.RequestCompletionErrorCodes.MainFrame"
    enum="NetErrorCodes">
  <obsolete>
    Deprecated in 2/2016, since it didn't get recorded for many kinds of error
    codes when it should have been recorded, and
    Net.HttpRequestCompletionErrorCodes is a good enough replacement when
    filtering for clients with the Data Reduction Proxy enabled.
  </obsolete>
  <owner>sclittle@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Reports the different network errors that main frame resource requests that
    try to use the data reduction proxy are completing with, including OK and
    ABORTED.
  </summary>
</histogram>

<histogram name="DataReductionProxy.ResourceContentType"
    enum="DataReductionProxyResourceContentType">
  <obsolete>
    Deprecated 2018/04.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Content type of the resource determined by data reduction proxy. Used for
    determining the data reduction proxy that should be used for fetching the
    resource. Logged once per resource for only the resources that are eligible
    for fetching by data reduction proxies.
  </summary>
</histogram>

<histogram name="DataReductionProxy.ResponseProxyServerStatus"
    enum="DataReductionProxyResponseProxyServerStatus">
  <owner>sclittle@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Reports the state of the proxy server field in the response seen by the Data
    Reduction Proxy bypass logic.
  </summary>
</histogram>

<histogram name="DataReductionProxy.SavingsCleared.NegativeSystemClock"
    enum="BooleanCleared">
  <obsolete>
    Replaced by DataReductionProxy.SavingsCleared.Reason in M68.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records if the data reduction savings were cleared because the system clock
    moved back by more than 1 day. Recorded at Chrome startup if the data
    reduction proxy is enabled.
  </summary>
</histogram>

<histogram name="DataReductionProxy.SavingsCleared.Reason"
    enum="DataReductionProxySavingsClearedReason">
  <owner>robertogden@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records why the data reduction savings were cleared. See also
    DataReductionProxy.DeleteBrowsingHistory.NumBuckets.
  </summary>
</histogram>

<histogram name="DataReductionProxy.SecureProxyCheck.Latency" units="ms">
  <owner>bengr@chromium.org</owner>
  <summary>
    Time from when the Data Reduction Proxy secure proxy check starts until it
    completes.
  </summary>
</histogram>

<histogram name="DataReductionProxy.SettingsConversion"
    enum="DataReductionProxySettingsConversion">
  <obsolete>
    Deprecated as of 3/2015, replaced by DataReductionProxy.UIAction.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>marq@chromium.org</owner>
  <summary>
    Samples of user interactions with the ON/OFF switch in the settings menu for
    reducing data usage. Only the setting changes between entering the reducing
    data usage setting menu and leaving the menu will be sampled. So if a user
    enters the menu with OFF and leaves it with OFF, it is counted as one OFF to
    OFF conversion regardless of how many times they toggle the ON/OFF switch.
  </summary>
</histogram>

<histogram name="DataReductionProxy.SnackbarPromo.DataSavings" units="MB">
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    Logs the data savings in MB of the data reduction proxy snackbar promo that
    was shown. The snackbar promo shows the user the amount of data Chrome has
    saved them using Data Saver.
  </summary>
</histogram>

<histogram name="DataReductionProxy.StartupNegativeSavingsPercent" units="%">
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the negative data savings percentage at Chrome startup for data
    saver enabled users who have browsed a reasonable amount (at least 10MB
    since data saver was enabled).
  </summary>
</histogram>

<histogram name="DataReductionProxy.StartupSavingsPercent" units="%">
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the data savings percentage at Chrome startup for data saver enabled
    users who have browsed a reasonable amount (at least 10MB since data saver
    was enabled). Negative savings are not recorded.
  </summary>
</histogram>

<histogram name="DataReductionProxy.StartupState"
    enum="DataReductionProxyStartupState">
  <owner>bengr@chromium.org</owner>
  <owner>marq@chromium.org</owner>
  <summary>
    Samples of the state of the data reduction proxy on Chrome startup. The
    proxy will either be unavailable (the feature hasn't been rolled out to this
    user yet), not enabled (the feature is available but the user doesn't have
    it turned on), or enabled (the feature is enabled and turned on).
  </summary>
</histogram>

<histogram name="DataReductionProxy.SuccessfulRequestCompletionCounts"
    units="count">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Count of the number of requests that were successfully fetched via data
    reduction proxy. The bucket represents the index of the data reduction proxy
    in the data reduction proxy list.
  </summary>
</histogram>

<histogram
    name="DataReductionProxy.SuccessfulRequestCompletionCounts.MainFrame"
    units="count">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Count of the number of main frame requests that were successfully fetched
    via data reduction proxy. The bucket represents the index of the data
    reduction proxy in the data reduction proxy list.
  </summary>
</histogram>

<histogram name="DataReductionProxy.ThisWeekAggregateKB.Services"
    enum="DataUseServicesHash">
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the aggregate data use of services for the current week. Different
    conditions are added as suffixes to this histogram. Recorded when Chrome is
    started, so this does not include the current session. The aggregation
    happens when requests complete. The current week calculation is based on
    week starting from the Epoch day(Thursday, January 1, 1970), and every 7
    days is treated as a week.
  </summary>
</histogram>

<histogram
    name="DataReductionProxy.ThisWeekAggregateKB.UserTraffic.Downstream.ContentType"
    enum="DataUseContentType">
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the aggregate data use for the current week. This is the downstream
    data use of all user-initiated traffic. Recorded when Chrome is started, so
    this does not include the current session. The aggregation happens when
    requests complete. The current week calculation is based on week starting
    from the Epoch day(Thursday, January 1, 1970), and every 7 days is treated
    as a week.
  </summary>
</histogram>

<histogram name="DataReductionProxy.TimeToFirstDataSaverRequest" units="ms">
  <obsolete>
    Deprecated 2018/04.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the time duration between the data saver initialization and the
    first HTTP request that is resolved through the data saver proxy. On IP
    address changes, time duration between the IP address change event and the
    next subsequent HTTP request that resolves through the data saver proxy is
    recorded.
  </summary>
</histogram>

<histogram name="DataReductionProxy.UIAction" enum="DataReductionProxyUIAction">
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    Samples of user interactions with the Data Reduction Proxy promos, First Run
    Experience, main menu footer, and settings menu. All samples are mutually
    exclusive. These samples include:

    The user interactions with the First Run Experience. On Android when the
    user sees the FRE card, the Data Reduction Proxy defaults to ON. The user
    can disable the proxy via a switch on the card. The state of the proxy is
    sampled when the First Run Experience is completed and only reported if the
    Data Reduction Proxy card was shown.

    The user interactions with the second run promo. On Android, there are two
    actions that dismiss this promo (enable or dismiss). This is sampled when
    the promo leaves view.

    The user interactions with the Infobar promo. On Android, there are two
    actions that dismiss the promo (enable, dismiss). This is sampled when the
    promo leaves view.

    The user interactions with the Snackbar promo. The user can either ignore
    the promo or click the action to the settings menu. From the settings menu,
    the user may enable or disable the proxy.

    The user interactions with the main menu footer. The user can click the
    footer to enter the settings menu. From the settings menu, the user may
    enable or disable the proxy.

    Any other user interaction with the ON/OFF switch in the settings menu for
    reducing data usage. Only the setting changes between entering the reducing
    data usage setting menu and leaving the menu will be sampled regardless of
    how many times they toggle the ON/OFF switch. Other samples that report
    ON/OFF settings menu changes are not also reported here.

    The views of and user interactions with the site breakdown in the settings
    menu. The site breakdown can be sorted by data saved descending or data used
    descending, and expanded to view more sites. The Data Reduction statistics
    can also be reset.
  </summary>
</histogram>

<histogram name="DataReductionProxy.UserViewedOriginalSize" units="KB">
  <owner>tbansal@chromium.org</owner>
  <summary>
    The total original content size displayed to the user. Computed over the
    last 30 days. Recorded when the user views the data savings in the UI.
  </summary>
</histogram>

<histogram name="DataReductionProxy.UserViewedSavingsDifferenceWithBreakdown"
    units="%">
  <owner>robertogden@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The difference between the total data savings as displayed to the user and
    the sum of the data savings for all hosts in the data use breakdown.
    Calculated as a percentage of `abs(summedSavingsTotal -
    displayedSavingsTotal) / (summedSavingsTotal + displayedSavingsTotal)`.
    Recorded when the user views the data savings in the UI.
  </summary>
</histogram>

<histogram name="DataReductionProxy.UserViewedSavingsPercent" units="%">
  <owner>tbansal@chromium.org</owner>
  <summary>
    The percentage of data savings displayed to users. Computed over the last 30
    days. Recorded when the user views the data savings in the UI.
  </summary>
</histogram>

<histogram name="DataReductionProxy.UserViewedSavingsSize" units="KB">
  <obsolete>
    Deprecated March 2018. Percent no longer displayed.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <summary>
    The total data saved displayed to the user. Computed over the last 30 days.
    Recorded when the user views the data savings in the UI.
  </summary>
</histogram>

<histogram name="DataReductionProxy.UserViewedUsageDifferenceWithBreakdown"
    units="%">
  <owner>robertogden@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The difference between the total data usage as displayed to the user and the
    sum of the data usage for all hosts in the data use breakdown. Calculated as
    a percentage of `abs(summedUsageTotal - displayedUsageTotal) /
    (summedUsageTotal + displayedUsageTotal)`. Recorded when the user views the
    data savings in the UI.
  </summary>
</histogram>

<histogram name="DataReductionProxy.WarmupURL.FetchAttemptEvent"
    enum="DataReductionProxyWarmupURLFetchAttemptEvent">
  <owner>tbansal@chromium.org</owner>
  <summary>Records the result of an attempt to fetch the warmup URL.</summary>
</histogram>

<histogram name="DataReductionProxy.WarmupURL.FetchAttemptsBeforeSuccess"
    units="count">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records the total number of warmup URL (i.e., the probe URL) fetch attempts
    that were made before the warmup URL was successfully fetched.
  </summary>
</histogram>

<histogram name="DataReductionProxy.WarmupURL.FetchInitiated" units="count">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Number of times the data reduction proxy warm up URL was fetched.
  </summary>
</histogram>

<histogram name="DataReductionProxy.WarmupURL.FetchSuccessful"
    enum="BooleanSuccess">
  <owner>tbansal@chromium.org</owner>
  <summary>Whether the warm up URL was fetched succesfully.</summary>
</histogram>

<histogram name="DataReductionProxy.WarmupURL.HasViaHeader" enum="Boolean">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Whether the response headers of the warm up URL had Chrome Proxy via header.
    Recorded only when non-null response headers were available when the fetch
    of warm  up URL concludes.
  </summary>
</histogram>

<histogram name="DataReductionProxy.WarmupURL.HttpResponseCode"
    enum="HttpResponseCode">
  <owner>tbansal@chromium.org</owner>
  <summary>
    HTTP response code of the warm up URL. Set to 1 when HTTP response headers
    were unavailable.
  </summary>
</histogram>

<histogram name="DataReductionProxy.WarmupURL.NetError" enum="NetErrorCodes">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Net error codes observed when the fetch of the warm up URL concludes.
  </summary>
</histogram>

<histogram name="DataReductionProxy.WarmupURL.ProxySchemeUsed"
    enum="DataReductionProxyProxySchemeUsed">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Proxy scheme of the proxy server via which the warm up URL was fetched.
    Recorded only when non-null response headers were available when the fetch
    of warm  up URL concludes.
  </summary>
</histogram>

<histogram name="DataReductionProxy.WarmupURLFetcherCallback.SuccessfulFetch"
    enum="BooleanSuccess">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Whether the warmup (or probe) URL was successfully fetched over a data saver
    proxy.
  </summary>
</histogram>

<histogram name="DataUsage.MatchingRulesCount.Invalid" units="count">
  <obsolete>
    Deprecated 2018/07.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>rajendrant@chromium.org</owner>
  <summary>
    The number of invalid matching rules fetched from the platform external data
    use observer. A sample is recorded everytime fetch done callback is called.
  </summary>
</histogram>

<histogram name="DataUsage.MatchingRulesCount.Valid" units="count">
  <obsolete>
    Deprecated 2018/07.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>rajendrant@chromium.org</owner>
  <summary>
    The number of valid matching rules fetched from the platform external data
    use observer. A sample is recorded everytime fetch done callback is called.
  </summary>
</histogram>

<histogram name="DataUsage.PageLoadSequence" units="Count">
  <obsolete>
    Deprecated 2018/07.
  </obsolete>
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the sequence number of the page load within a data usage tracking
    session. Logged for each navigation in the tracking session.
  </summary>
</histogram>

<histogram name="DataUsage.Perf.MatchingRuleFirstFetchDuration" units="ms">
  <obsolete>
    Deprecated 2018/07.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>rajendrant@chromium.org</owner>
  <summary>
    The time taken in milliseconds to fetch the matching rules for the first
    time from the platform external data use observer. This measures the
    duration from the start time of Chromium to the time the rules are returned
    asynchronously. A sample is recorded when the first fetch done callback is
    called.
  </summary>
</histogram>

<histogram name="DataUsage.Perf.ReportSubmissionDuration" units="ms">
  <obsolete>
    Deprecated 2018/07.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>rajendrant@chromium.org</owner>
  <summary>
    The time taken in milliseconds to submit the data use reports to the
    platform external data use observer. This measures the duration from the
    time of report submission to the time report submission done asynchronous
    callback is received. A sample is recorded everytime report submission done
    callback is received.
  </summary>
</histogram>

<histogram name="DataUsage.Perf.URLRegexMatchDuration" units="ms">
  <obsolete>
    Deprecated 2018/07.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>rajendrant@chromium.org</owner>
  <summary>
    The time taken in milliseconds for a regular expression to parse an URL. A
    sample is recorded evertime regular expression parsing is done for an URL.
  </summary>
</histogram>

<histogram name="DataUsage.ReportSubmission.Bytes" units="bytes">
  <obsolete>
    Deprecated 2018/07.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Count of bytes in the data use reports that were intended to be submitted to
    the platform external data use observer.
  </summary>
</histogram>

<histogram name="DataUsage.ReportSubmissionResult"
    enum="DataUsageReportSubmissionResult">
  <obsolete>
    Deprecated 2018/07.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>Result of data usage report submission.</summary>
</histogram>

<histogram name="DataUsage.TabModel.ExpiredActiveTabEntryRemovalDuration"
    units="ms">
  <obsolete>
    Deprecated 2018/07.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>rajendrant@chromium.org</owner>
  <summary>
    The duration from the start time of a tab entry's latest data usage tracking
    session, till when the entry is expired and removed from the tab model. This
    is for tab entries that are still actively tracking data usage for a
    Chromium tab.

    Tab model maintains the tab entries, each pertaining to tracking sessions of
    a single Chromium tab. These entries are considered expired after some
    duration and can be removed from the tab model after that. The sample is
    taken when an expired tab entry still tracking data usage is removed from
    the tab model.
  </summary>
</histogram>

<histogram name="DataUsage.TabModel.ExpiredInactiveTabEntryRemovalDuration"
    units="ms">
  <obsolete>
    Deprecated 2018/07.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>rajendrant@chromium.org</owner>
  <summary>
    The duration from the end time of a tab entry's latest data usage tracking
    session, till when the entry is expired and removed from the tab model. This
    is for tab entries that are not actively tracking data usage for a Chromium
    tab.

    Tab model maintains the tab entries, each pertaining to tracking sessions of
    a single Chromium tab. These entries are considered expired after some
    duration and can be removed from the tab model after that. The sample is
    taken when an expired inactive tab entry is removed from the tab model.
  </summary>
</histogram>

<histogram name="DataUsage.TabModel.OldInactiveSessionRemovalDuration"
    units="ms">
  <obsolete>
    Deprecated 2018/07.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>rajendrant@chromium.org</owner>
  <summary>
    The duration from the end time of a data usage tracking session, till when
    the tracking session is removed from the tab model. This is for old tracking
    sessions that are not actively tracking data usage.

    Tab model maintains a limited number of tracking sessions per Chromium tab.
    When this limit is reached oldest inactive tracking sessions are removed.
    The sample is taken when an old inactive tracking session of a tab is
    removed from the tab model.
  </summary>
</histogram>

<histogram name="DataUsage.TabModel.TrackingSessionLifetime" units="ms">
  <obsolete>
    Deprecated 2018/07.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>rajendrant@chromium.org</owner>
  <summary>
    The lifetime of a data usage tracking session of a Chromium tab, maintained
    by the tab model. This is the duration between the time tracking started due
    to an entry event and ended with an exit event. The sample is taken when the
    data usage tracking session ends.
  </summary>
</histogram>

<histogram name="DataUsage.TabModel.UnexpiredTabEntryRemovalDuration"
    units="ms">
  <obsolete>
    Deprecated 2018/07.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>rajendrant@chromium.org</owner>
  <summary>
    The duration from the end time (start time, if still active) of a tab
    entry's latest data usage tracking session, till when the entry is removed
    from the tab model. This is for tab entries that are not expired yet, and
    removed from the tab model.

    Tab model maintains a limited number of entries, each pertaining to tracking
    sessions of a single Chromium tab. When this limit is reached even after
    removing expired tab entries, then oldest unexpired tab entries are removed.
    The sample is taken when an unexpired tab entry is removed from the tab
    model.
  </summary>
</histogram>

<histogram name="DataUsage.TrackingSessionEndReason"
    enum="DataUsageTrackingSessionEndReason">
  <obsolete>
    Deprecated 2018/07.
  </obsolete>
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The reason for ending the data usage tracking session. Logged when the
    tracking session ends.
  </summary>
</histogram>

<histogram name="DataUsage.TrackingSessionStartReason"
    enum="DataUsageTrackingSessionStartReason">
  <obsolete>
    Deprecated 2018/07.
  </obsolete>
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The reason for starting the data usage tracking session. Logged when the
    tracking session was started.
  </summary>
</histogram>

<histogram name="DataUsage.UIAction" enum="DataUsageUIAction">
  <obsolete>
    Deprecated 2018/07.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    Samples of user interactions with the Data Use snackbar and dialog. These
    samples include:

    Displays of the snackbar that indicates the start of data use tracking and
    clicks on its &quot;More&quot; button. Displays of snackbar that indicates
    the end of data use tracking and clicks on its &quot;More&quot; button.
    Displays of the dialog that indicates the end of data use tracking and the
    user interactions with it, which include: clicking &quot;Continue&quot;,
    clicking &quot;Cancel&quot;, clicking &quot;Learn more&quot;, and opting out
    of seeing the dialog. If the user opts out of seeing the dialog, they will
    see the snackbar that indicates the end of data use tracking from then on.
  </summary>
</histogram>

<histogram name="DataUse.AllServices.Background" enum="DataUseServices">
  <obsolete>
    Replaced by KB version in October, 2017.
  </obsolete>
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The total background data use of Chrome's services broken down by service
    name. It is logged only in Android when the URLRequest of a service
    completes.
  </summary>
</histogram>

<histogram name="DataUse.AllServices.BackgroundKB" enum="DataUseServices">
  <obsolete>
    Replaced by DataUse.AllServicesKB.* version in June, 2018.
  </obsolete>
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The total background data use of Chrome's services broken down by service
    name. It is logged only in Android when the URLRequest of a service
    completes.
  </summary>
</histogram>

<histogram name="DataUse.AllServicesKB" enum="DataUseServicesHash">
  <owner>bengr@chromium.org</owner>
  <owner>rajendrant@chromium.org</owner>
  <summary>
    The request and response size of the messages exchanged by all the services.
    Whenever a URLRequest of a service is completed, the number of exchanged
    bytes is logged in this histogram. The buckets in this histogram are
    services recorded by the corresponding network traffic annotation tag
    hashes, so it makes it possible to compare the use of different services in
    different conditions. Different conditions are added as suffixes to this
    histogram. If the OS is not Android all the requests are considered
    foreground.
  </summary>
</histogram>

<histogram name="DataUse.AppTabState" units="bytes">
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the data use of Chrome user traffic by the foregound vs. background
    state of the app and tab.
  </summary>
</histogram>

<histogram name="DataUse.BackgroundToDataRecievedPerByte" units="ms">
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The time since Chrome is in background when background data use happens.
    Recorded for each byte of background data use. The source of traffic whether
    from user browsing or chrome services is added as suffix to this histogram.
  </summary>
</histogram>

<histogram name="DataUse.BackgroundToFirstDownstream" units="ms">
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The time since Chrome is in background when first background data use
    happens. Recorded when first background downstream data use after Chrome is
    in background. The source of traffic whether from user browsing or chrome
    services is added as suffix to this histogram.
  </summary>
</histogram>

<histogram name="DataUse.BytesReceived" units="bytes">
  <owner>tbansal@chromium.org</owner>
  <summary>Count of total bytes received by the Chrome on the network.</summary>
</histogram>

<histogram name="DataUse.BytesSent" units="bytes">
  <owner>tbansal@chromium.org</owner>
  <summary>Count of total bytes sent by the Chrome on the network.</summary>
</histogram>

<histogram name="DataUse.ContentType.Services" enum="DataUseContentType">
  <obsolete>
    Deprecated 2018/05. Bytes are logged to DataUse.ContentType.ServicesKB.
  </obsolete>
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Data use of Chrome services traffic by different content types. Recorded
    when network bytes are received by Chrome.
  </summary>
</histogram>

<histogram name="DataUse.ContentType.ServicesKB" enum="DataUseContentType">
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Data use of Chrome services traffic by different content types. Recorded in
    KB when network bytes are received by Chrome.
  </summary>
</histogram>

<histogram name="DataUse.ContentType.UserTraffic" enum="DataUseContentType">
  <obsolete>
    Deprecated 2017/04. Bytes are logged to DataUse.ContentType.UserTrafficKB.
  </obsolete>
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Data use of user traffic by different content types. Recorded when network
    bytes are received by Chrome.
  </summary>
</histogram>

<histogram name="DataUse.ContentType.UserTrafficKB" enum="DataUseContentType">
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Data use of user traffic by different content types. Recorded in KB when
    network bytes are received by Chrome.
  </summary>
</histogram>

<histogram name="DataUse.FavIcon.Downstream" units="bytes">
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the downstream network data use of favicon requests. Logged when the
    request is completed or redirected. Zero bytes are recorded when the request
    is served from cache.
  </summary>
</histogram>

<histogram name="DataUse.FavIcon.Downstream.Non200Response" units="bytes">
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the downstream network data use of favicon requests with non 200
    response code. Logged when the request is completed or redirected.
  </summary>
</histogram>

<histogram name="DataUse.MessageSize" units="bytes">
  <obsolete>
    Deprecated 10/2017.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <summary>
    The request and response size of the messages exchanged by a service. It is
    logged when the URLRequest of a service is completed. The service name is
    added as a suffix to this histogram name.
  </summary>
</histogram>

<histogram name="DataUse.MessageSize.AllServices" enum="DataUseServices">
  <obsolete>
    Replaced by DataUse.AllServicesKB.* version in June, 2018.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <summary>
    The request and response size of the messages exchanged by all the services.
    Whenever a URLRequest of a service is completed, the number of exchanged
    bytes is logged in this histogram. The buckets in this histogram are
    services, so it makes it possible to compare the use of different services
    in different conditions. Different conditions are added as suffixes to this
    histogram. If the OS is not Android all the requests are considered
    foreground.
  </summary>
</histogram>

<histogram name="DataUse.PageTransition.UserTraffic"
    enum="DataUsePageTransition">
  <obsolete>
    Deprecated 2018/05. Bytes are logged to
    DataUse.PageTransition.UserTrafficKB.
  </obsolete>
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Data use of user traffic by different core page transition types. Recorded
    when the URL request finishes.
  </summary>
</histogram>

<histogram name="DataUse.PageTransition.UserTrafficKB"
    enum="DataUsePageTransition">
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Data use of user traffic by different core page transition types. Recorded
    in KB when the URL request finishes.
  </summary>
</histogram>

<histogram name="DataUse.Sync.Download.Bytes" enum="SyncModelTypes">
  <obsolete>
    Deprecated 10/2017.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <summary>
    Number of downloaded bytes of different data types in Sync service for
    received updates. It is updated when an update message is received from sync
    server.
  </summary>
</histogram>

<histogram name="DataUse.Sync.Download.Count" enum="SyncModelTypes">
  <obsolete>
    Deprecated 10/2017.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <summary>
    Number of downloaded entities of different data types in Sync service for
    received updates. It is updated when an update message is received from sync
    server.
  </summary>
</histogram>

<histogram name="DataUse.Sync.ProgressMarker.Bytes" enum="SyncModelTypes">
  <obsolete>
    Deprecated 10/2017.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <summary>
    Number of downloaded bytes of ProgressMarker of different data types in Sync
    service for received updates. It is updated when an update message is
    received from sync server.
  </summary>
</histogram>

<histogram name="DataUse.Sync.Upload.Bytes" enum="SyncModelTypes">
  <obsolete>
    Deprecated 10/2017.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <summary>
    Number of uploaded bytes of different data types in Sync service for sent
    commits. Updated when a commit message is sent to sync server.
  </summary>
</histogram>

<histogram name="DataUse.Sync.Upload.Count" enum="SyncModelTypes">
  <obsolete>
    Deprecated 10/2017.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <summary>
    Number of uploaded entities of different data types in Sync service for sent
    commits. Updated when a commit message is sent to sync server.
  </summary>
</histogram>

<histogram name="DataUse.TrafficSize.System" units="bytes">
  <owner>bengr@chromium.org</owner>
  <summary>
    The total data use of Chrome's services. There is no ResourceRequestInfo
    attached to these requests. If the OS is not Android all the requests are
    considered foreground.
  </summary>
</histogram>

<histogram name="DataUse.TrafficSize.User" units="bytes">
  <owner>bengr@chromium.org</owner>
  <summary>
    The total amount of data use of Chrome for user traffic. This traffic has
    content::ResourceRequestInfo attached to its request. If the OS is not
    Android all the requests are considered foreground.
  </summary>
</histogram>

<histogram name="DBus.AsyncMethodCallSuccess" enum="BooleanSuccess">
  <owner>satorux@chromium.org</owner>
  <summary>Whether an asynchronous D-Bus method call is successful.</summary>
</histogram>

<histogram name="DBus.AsyncMethodCallTime" units="microseconds">
  <owner>satorux@chromium.org</owner>
  <summary>The time spent for an asynchronous D-Bus method call.</summary>
</histogram>

<histogram name="DBus.ExportedMethodHandleSuccess" enum="BooleanSuccess">
  <owner>satorux@chromium.org</owner>
  <summary>
    Whether a call to a D-Bus exported method is handled successfully.
  </summary>
</histogram>

<histogram name="DBus.ExportedMethodHandleTime" units="microseconds">
  <owner>satorux@chromium.org</owner>
  <summary>
    The time spent for handling a call to a D-Bus exported method.
  </summary>
</histogram>

<histogram name="DBus.SignalHandleTime" units="microseconds">
  <owner>satorux@chromium.org</owner>
  <summary>The time spent for handling a D-Bus signal.</summary>
</histogram>

<histogram name="DBus.SignalSendTime" units="microseconds">
  <owner>satorux@chromium.org</owner>
  <summary>The time spent for sending a D-Bus signal.</summary>
</histogram>

<histogram name="DBus.SyncMethodCallSuccess" enum="BooleanSuccess">
  <owner>satorux@chromium.org</owner>
  <summary>Whether a synchronous D-Bus method call is successful.</summary>
</histogram>

<histogram name="DBus.SyncMethodCallTime" units="microseconds">
  <owner>satorux@chromium.org</owner>
  <summary>The time spent for a synchronous D-Bus method call.</summary>
</histogram>

<histogram name="DefaultBrowser.ActivateSettings.ErrorHresult" enum="Hresult">
  <owner>pmonette@chromium.org</owner>
  <owner>grt@chromium.org</owner>
  <summary>
    The HRESULT from ActivateApplication when opening the Win10+ settings page
    fails.
  </summary>
</histogram>

<histogram name="DefaultBrowser.AsyncSetAsDefault.Duration" units="ms">
  <obsolete>
    Deprecated 2015/11. Renamed to DefaultBrowser.SetDefaultAsyncDuration.
  </obsolete>
  <owner>pmonette@chromium.org</owner>
  <summary>
    How long it took to set Chrome as the default browser asynchronously in
    Windows 10+. The duration is recorded only on Success, Failure, Abandoned
    and Retry result codes.
  </summary>
</histogram>

<histogram name="DefaultBrowser.AsyncSetAsDefault.Result"
    enum="DefaultBrowserAsyncAttemptResult">
  <obsolete>
    Deprecated 2015/11. Renamed to DefaultBrowser.SetDefaultResult.
  </obsolete>
  <owner>pmonette@chromium.org</owner>
  <summary>
    The count of how many times users were successfully able to set Chrome as
    the default browser asynchronously in Windows 10+.
  </summary>
</histogram>

<histogram name="DefaultBrowser.InfoBar.UserInteraction"
    enum="DefaultBrowserInfoBarUserInteraction">
  <owner>pmonette@chromium.org</owner>
  <summary>
    Possible user interactions with the default browser info bar.
  </summary>
</histogram>

<histogram name="DefaultBrowser.InteractionResult"
    enum="MakeChromeDefaultResult">
  <owner>gab@chromium.org</owner>
  <summary>
    Results of interaction with set-as-default dialog in Win8+ first run flow.
  </summary>
</histogram>

<histogram name="DefaultBrowser.SetDefaultAsyncDuration" units="ms">
  <obsolete>
    Deprecated 2016/03. The async set-as-default experiments are finished.
  </obsolete>
  <owner>pmonette@chromium.org</owner>
  <summary>
    How long it took to set Chrome as the default browser asynchronously in
    Windows 10+. The duration is recorded only on Success, Failure, Abandoned,
    Retry and NoErrorsNotDefault result codes.
  </summary>
</histogram>

<histogram name="DefaultBrowser.SetDefaultResult"
    enum="SetDefaultAttemptResult">
  <obsolete>
    Deprecated 2016/03.
  </obsolete>
  <owner>pmonette@chromium.org</owner>
  <summary>
    The outcome of an attempt to set Chrome as the user's default browser.
  </summary>
</histogram>

<histogram name="DefaultBrowser.SetDefaultResult2" enum="DefaultWebClientState">
  <owner>pmonette@chromium.org</owner>
  <summary>
    The outcome of an attempt to set Chrome as the user's default browser.
  </summary>
</histogram>

<histogram name="DefaultBrowser.SettingsInteraction.ConcludeReason"
    enum="SettingsInteractionConcludeReason">
  <owner>pmonette@chromium.org</owner>
  <summary>
    The reason why the default browser settings interaction concluded on Windows
    10.
  </summary>
</histogram>

<histogram name="DefaultBrowser.SettingsInteraction.RegistryWatcherDuration"
    units="ms">
  <owner>pmonette@chromium.org</owner>
  <summary>
    The registry keys for the default browser protocols (http/https) are
    monitored to know when the user finished interacting with the system
    settings. This is how long it took for the last registry watcher to get
    signaled.
  </summary>
</histogram>

<histogram name="DefaultBrowser.State" enum="DefaultBrowserState">
  <owner>gab@chromium.org</owner>
  <summary>Whether Chrome was the default browser when it started up.</summary>
</histogram>

<histogram name="DefaultBrowser.Win10ChooserInvoked" enum="BooleanSuccess">
  <owner>pmonette@chromium.org</owner>
  <summary>
    When changing the default browser on Windows 10, records whether the browser
    chooser is successfully invoked when opening the settings page. This
    histogram is only recorded when the Win10AcceleratedDefaultBrowserFlow
    experiment is enabled.
  </summary>
</histogram>

<histogram name="DefaultBrowserWarning.DontSetAsDefault" enum="BooleanHit">
  <obsolete>
    Deprecated 2015/11. The same information is available as the value Failure
    in DefaultBrowser.SetDefaultResult.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    In the make-default infobar, the user explicitly declined to set Chrome as
    default. Or, on OSes requiring the SetAsDefaultUI, the user explicitly chose
    another browser as default from the interactive UI. TODO(gab): Split the
    interactive signal into a separate histogram.
  </summary>
</histogram>

<histogram name="DefaultBrowserWarning.Ignored" enum="BooleanHit">
  <obsolete>
    Deprecated 2015/11. Renamed to DefaultBrowser.InfoBar.UserInteraction.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    The user ignored the make-default infobar (it was eventually dismissed along
    with its associated web content without the user interacting with it).
  </summary>
</histogram>

<histogram name="DefaultBrowserWarning.SetAsDefault" enum="BooleanHit">
  <obsolete>
    Deprecated 2015/11. Renamed to DefaultBrowser.Infobar.UserInteraction. There
    is no longer a distinction between interactive or not.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    In the make-default infobar, the user clicked a button making Chrome the
    default.
  </summary>
</histogram>

<histogram name="DefaultBrowserWarning.SetAsDefaultUI" enum="BooleanHit">
  <obsolete>
    Deprecated 2015/11. Renamed to DefaultBrowser.Infobar.UserInteraction. There
    is no longer a distinction between interactive or not.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Same as SetAsDefault, but in Win8+ (resulting in interactive UI instead of
    automatic takeover). Successes == these reports minus reports for
    DefaultBrowserWarning.SetAsDefaultUIFailed and some
    DefaultBrowserWarning.DontSetAsDefault. TODO(gab): Improve reporting here.
  </summary>
</histogram>

<histogram name="DefaultBrowserWarning.SetAsDefaultUIFailed" enum="BooleanHit">
  <obsolete>
    Deprecated 2015/11. The same information is available as the value Failure
    in DefaultBrowser.SetDefaultResult.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    The user dismissed the interactive SetAsDefaultUI without making an explicit
    choice (or the UI failed to come up for another reason).
  </summary>
</histogram>

<histogram name="DefaultProtocolClient.SetDefaultResult"
    enum="SetDefaultAttemptResult">
  <obsolete>
    Deprecated 2016/03.
  </obsolete>
  <owner>pmonette@chromium.org</owner>
  <summary>
    The outcome of an attempt to set Chrome as the user's default client for a
    protocol.
  </summary>
</histogram>

<histogram name="DefaultProtocolClient.SetDefaultResult2"
    enum="DefaultWebClientState">
  <owner>pmonette@chromium.org</owner>
  <summary>
    The outcome of an attempt to set Chrome as the user's default client for a
    protocol.
  </summary>
</histogram>

<histogram name="DelayNavigationThrottle.Delay.Actual" units="ms">
  <obsolete>
    Deprecated March 2018
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    The actual delay added to main frame navigations by DelayNavigationThrottle.
  </summary>
</histogram>

<histogram name="DelayNavigationThrottle.Delay.Delta" units="ms">
  <obsolete>
    Deprecated March 2018
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    The absolute delta between the specified and actual delays added to main
    frame navigations by DelayNavigationThrottle.
  </summary>
</histogram>

<histogram name="DelayNavigationThrottle.Delay.Specified" units="ms">
  <obsolete>
    Deprecated March 2018
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    The specified delay added to main frame navigations by
    DelayNavigationThrottle.
  </summary>
</histogram>

<histogram name="DesktopIOSPromotion.DismissalReason"
    enum="DesktopIOSPromotionDismissalReason">
  <owner>mrefaat@chromium.org</owner>
  <summary>
    The dimissal reason of the desktop to iOS promotion entry point.
    DismissalReason will be prefixed by the entry point promotion name that the
    user interacted with.
  </summary>
</histogram>

<histogram name="DesktopIOSPromotion.ImpressionFromEntryPoint"
    enum="DesktopIOSPromotionEntryPoint">
  <owner>mrefaat@chromium.org</owner>
  <summary>
    The type of the desktop to iOS promotion that was shown to the user. This
    will be logged every time the user sees the desktop to iOS promotion.
  </summary>
</histogram>

<histogram name="DesktopIOSPromotion.IOSSigninReason"
    enum="DesktopIOSPromotionEntryPoint">
  <owner>mrefaat@chromium.org</owner>
  <summary>
    [IOS] For users who sign-in on Chrome for iOS, log the type of the desktop
    iOS promotions that was shown to the user. Only recorded if the user has
    seen at least one desktop iOS promotion in the last 7 days and is signing
    into chrome on iOS. The last promotion entry point that sent an SMS (if any)
    is logged as DesktopIOSPromotion.SMSSent.IOSSigninReason; all other
    promotions that the user has seen are logged as
    DesktopIOSPromotion.NoSMS.IOSSigninReason.
  </summary>
</histogram>

<histogram name="DesktopIOSPromotion.OAuthTokenCompletion"
    enum="BooleanSuccess">
  <owner>justincohen@chromium.org</owner>
  <summary>
    Whether getting the OAuth token was successful for a desktop to iOS
    promotion query.
  </summary>
</histogram>

<histogram name="DesktopIOSPromotion.OAuthTokenResponseCode"
    enum="CombinedHttpResponseAndNetErrorCode">
  <owner>justincohen@chromium.org</owner>
  <summary>
    HTTP Response code returned by the server when trying to fetch the OAuth
    token for a desktop ios promotion query.
  </summary>
</histogram>

<histogram name="DesktopIOSPromotion.QueryPhoneNumberSucceeded"
    enum="BooleanSuccess">
  <owner>mrefaat@chromium.org</owner>
  <summary>
    Whether the SMS service api called from the desktop to iOS promotion
    returned a phone number or failed. This phone number is presented to the
    user so they know that Chrome will send the SMS to this number.
  </summary>
</histogram>

<histogram name="DesktopIOSPromotion.SendSMSSucceeded" enum="BooleanSuccess">
  <owner>mrefaat@chromium.org</owner>
  <summary>
    Whether the SMS service api initiated SMS sending successfully from the
    desktop to iOS promotion.
  </summary>
</histogram>

<histogram name="DesktopIOSPromotion.SMSToSigninTime" units="hours">
  <owner>mrefaat@chromium.org</owner>
  <summary>
    [IOS] The difference between the client time of triggering the SMS action on
    a specific entry point promotion on desktop and client time of signing in
    Chrome iOS app. This will only be logged if at least one promotion was shown
    to the user on the last 7 days and if at least one SMS was sent. If multiple
    SMSs were sent (at any time), it uses the time from the most recently sent
    one. If the  is negative due to bad clock on one of the clients it will be
    logged as 0. SMSToSigninTime will be prefixed by the entry point promotion
    name that was responsible for the SMS sending.
  </summary>
</histogram>

<histogram base="true" name="DesktopIOSPromotion.VariationSigninReason">
  <owner>mrefaat@chromium.org</owner>
  <summary>
    [IOS] For users who sign-in on Chrome for iOS, log which variation of the
    desktop iOS promotions was shown to the user. The variation number is a
    unique identifier that is set for each group on the DesktopIOSPromotion
    study, and will be only recorded if the user has seen at least one desktop
    iOS promotion in the last 7 days and is signing into Chrome on iOS. The last
    variation that sent an SMS (if any) is logged as
    DesktopIOSPromotion.SMSSent.VariationSigninReason. If no SMS was sent, then
    the last variation the user has seen is logged as
    DesktopIOSPromotion.NoSMS.VariationSigninReason.
  </summary>
</histogram>

<histogram name="DevTools.ActionTaken" enum="DevToolsAction">
  <owner>alph@chromium.org</owner>
  <owner>pfeldman@chromium.org</owner>
  <summary>Specified DevTools action has been taken.</summary>
</histogram>

<histogram name="DevTools.InspectElement" units="ms">
  <owner>alph@chromium.org</owner>
  <owner>pfeldman@chromium.org</owner>
  <summary>
    Time to load Developer Tools when user clicks Inspect Element in the context
    menu.
  </summary>
</histogram>

<histogram name="DevTools.PanelShown" enum="DevToolsPanel">
  <owner>alph@chromium.org</owner>
  <owner>pfeldman@chromium.org</owner>
  <summary>Specified DevTools panel was shown.</summary>
</histogram>

<histogram name="DevTools.SettingChanged" enum="DevToolsSetting">
  <owner>alph@chromium.org</owner>
  <owner>pfeldman@chromium.org</owner>
  <summary>Specified DevTools setting was changed.</summary>
</histogram>

<histogram name="Diagnostics.Recovery.ConflictingDlls" enum="DiagnosticsResult">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    TBD - Not run automatically yet, so this is just a placeholder for future
    metrics collection.  Any samples collected here represent users running
    diagnostics manually.
  </summary>
</histogram>

<histogram name="Diagnostics.Recovery.DiskSpace" enum="DiagnosticsResult"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of the DiskSpace recovery step that runs
    on recovery startups.  The recovery step attempts to guarantee the DiskSpace
    test, which checks that the disk space in the volume where the user data
    directory normally lives is not dangerously low, would pass on the next
    startup.
  </summary>
</histogram>

<histogram name="Diagnostics.Recovery.InstallType" enum="DiagnosticsResult"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    TBD - Not run automatically yet, so this is just a placeholder for future
    metrics collection.  Any samples collected here represent users running
    diagnostics manually.
  </summary>
</histogram>

<histogram name="Diagnostics.Recovery.JSONBookmarks" enum="DiagnosticsResult"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of the JSONBookmarks recovery step that
    runs on recovery startups. The recovery step attempts to guarantee the
    JSONBookmarks test, which makes sure that the JSON-encoded Bookmarks file is
    properly formed, would pass on the next startup.
  </summary>
</histogram>

<histogram name="Diagnostics.Recovery.JSONLocalState" enum="DiagnosticsResult"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of the JSONLocalState recovery step that
    runs on recovery startups. The recovery step attempts to guarantee the
    JSONLocalState test, which makes sure that the JSON-encoded Local State file
    is properly formed, would pass on the next startup.
  </summary>
</histogram>

<histogram name="Diagnostics.Recovery.JSONPreferences" enum="DiagnosticsResult"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of the JSONPreferences recovery step
    that runs on recovery startups. The recovery step attempts to guarantee the
    JSONPreferences test, which makes sure that the JSON-encoded Preferences
    file is properly formed, would pass on the next startup.
  </summary>
</histogram>

<histogram name="Diagnostics.Recovery.OperatingSystem" enum="DiagnosticsResult">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    TBD - Not run automatically yet, so this is just a placeholder for future
    metrics collection.  Any samples collected here represent users running
    diagnostics manually.
  </summary>
</histogram>

<histogram name="Diagnostics.Recovery.PathDictionaries"
    enum="DiagnosticsResult" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of the PathDictionaries recovery step
    that runs on recovery startups. The recovery step attempts to guarantee the
    PathDictionaries test, which makes sure that the path to the Dictionaries
    directory exists and has the right permissions, would pass on the next
    startup.
  </summary>
</histogram>

<histogram name="Diagnostics.Recovery.PathLocalState" enum="DiagnosticsResult"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of the PathLocalState recovery step that
    runs on recovery startups. The recovery step attempts to guarantee the
    PathLocalState test, which makes sure that the path to the Local State file
    exists and has the right permissions, would pass on the next startup.
  </summary>
</histogram>

<histogram name="Diagnostics.Recovery.PathResources" enum="DiagnosticsResult"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of the PathResources recovery step that
    runs on recovery startups. The recovery step attempts to guarantee the
    PathResources test, which makes sure that the path to the Resources
    directory exists and has the right permissions, would pass on the next
    startup.
  </summary>
</histogram>

<histogram name="Diagnostics.Recovery.PathUserData" enum="DiagnosticsResult"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of the PathUserData recovery step that
    runs on recovery startups. The recovery step attempts to guarantee the
    PathUserData test, which makes sure that the path to the User Data directory
    exists and has the right permissions, would pass on the next startup.
  </summary>
</histogram>

<histogram name="Diagnostics.Recovery.SQLiteIntegrityAppCache"
    enum="DiagnosticsResult">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of the SQLiteIntegrityAppCache recovery
    step that runs on recovery startups.  The recovery step attempts to
    guarantee the SQLiteIntegrityAppCache test, which checks the integrity of
    the App Cache database, would pass on the next startup.
  </summary>
</histogram>

<histogram name="Diagnostics.Recovery.SQLiteIntegrityArchivedHistory"
    enum="DiagnosticsResult">
  <obsolete>
    Removed as of Jun 2014: we no longer have an archived database.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of the SQLiteIntegrityArchivedHistory
    recovery step that runs on recovery startups. The recovery step attempts to
    guarantee the SQLiteIntegrityArchivedHistory test, which checks the
    integrity of the Archived History database, would pass on the next startup.
  </summary>
</histogram>

<histogram name="Diagnostics.Recovery.SQLiteIntegrityCookie"
    enum="DiagnosticsResult">
  <owner>shess@chromium.org</owner>
  <summary>
    Shows the success and failure rates of the SQLiteIntegrityCookie recovery
    step that runs on recovery startups.  The recovery step attempts to
    guarantee the SQLiteIntegrityCookie test, which checks the integrity of the
    Cookie database, would pass on the next startup.
  </summary>
</histogram>

<histogram name="Diagnostics.Recovery.SQLiteIntegrityDatabaseTracker"
    enum="DiagnosticsResult">
  <owner>shess@chromium.org</owner>
  <summary>
    Shows the success and failure rates of the SQLiteIntegrityDatabaseTracker
    recovery step that runs on recovery startups.  The recovery step attempts to
    guarantee the SQLiteIntegrityDatabaseTracker test, which checks the
    integrity of the Database Tracker database, would pass on the next startup.
  </summary>
</histogram>

<histogram name="Diagnostics.Recovery.SQLiteIntegrityFavicons"
    enum="DiagnosticsResult">
  <owner>shess@chromium.org</owner>
  <summary>
    Shows the success and failure rates of the SQLiteIntegrityFavicons recovery
    step that runs on recovery startups.  The recovery step attempts to
    guarantee the SQLiteIntegrityFavicons test, which checks the integrity of
    the Favicons database, would pass on the next startup.
  </summary>
</histogram>

<histogram name="Diagnostics.Recovery.SQLiteIntegrityHistory"
    enum="DiagnosticsResult">
  <owner>shess@chromium.org</owner>
  <summary>
    Shows the success and failure rates of the SQLiteIntegrityHistory recovery
    step that runs on recovery startups.  The recovery step attempts to
    guarantee the SQLiteIntegrityHistory test, which checks the integrity of the
    History database, would pass on the next startup.
  </summary>
</histogram>

<histogram name="Diagnostics.Recovery.SQLiteIntegrityNSSCert"
    enum="DiagnosticsResult" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of the SQLiteIntegrityNSSCert recovery
    step that runs on recovery startups.  The recovery step attempts to
    guarantee the SQLiteIntegrityNSSCert test, which checks the integrity of the
    NSS Certificate database, would pass on the next startup.
  </summary>
</histogram>

<histogram name="Diagnostics.Recovery.SQLiteIntegrityNSSKey"
    enum="DiagnosticsResult" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of the SQLiteIntegrityNSSKey recovery
    step that runs on recovery startups.  The recovery step attempts to
    guarantee the SQLiteIntegrityNSSKey test, which checks the integrity of the
    NSS Key database, would pass on the next startup.
  </summary>
</histogram>

<histogram name="Diagnostics.Recovery.SQLiteIntegrityThumbnails"
    enum="DiagnosticsResult">
  <obsolete>
    Deprecated 05/2016 in Issue 617226; has not been valid for many years.
  </obsolete>
  <owner>shess@chromium.org</owner>
  <summary>
    Shows the success and failure rates of the SQLiteIntegrityThumbnails
    recovery step that runs on recovery startups.  The recovery step attempts to
    guarantee the SQLiteIntegrityThumbnails test, which checks the integrity of
    the Thumbnails database, would pass on the next startup.
  </summary>
</histogram>

<histogram name="Diagnostics.Recovery.SQLiteIntegrityTopSites"
    enum="DiagnosticsResult">
  <owner>shess@chromium.org</owner>
  <summary>
    Shows the success and failure rates of the SQLiteIntegrityTopSites recovery
    step that runs on recovery startups.  The recovery step attempts to
    guarantee the SQLiteIntegrityTopSites test, which checks the integrity of
    the TopSites database, would pass on the next startup.
  </summary>
</histogram>

<histogram name="Diagnostics.Recovery.SQLiteIntegrityWebData"
    enum="DiagnosticsResult">
  <owner>shess@chromium.org</owner>
  <summary>
    Shows the success and failure rates of the SQLiteIntegrityWebData recovery
    step that runs on recovery startups.  The recovery step attempts to
    guarantee the SQLiteIntegrityWebData test, which checks the integrity of the
    Web Data database, would pass on the next startup.
  </summary>
</histogram>

<histogram name="Diagnostics.Recovery.Version" enum="DiagnosticsResult"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    TBD - Not run automatically yet, so this is just a placeholder for future
    metrics collection.  Any samples collected here represent users running
    diagnostics manually.
  </summary>
</histogram>

<histogram name="Diagnostics.RecoveryRun" enum="DiagnosticsRecoveryRun">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Count of the number of times diagnostics recovery is invoked or not, and how
    it was invoked.  A sample is added to this histogram once for each startup
    of Chrome.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.ConflictingDlls" enum="DiagnosticsResult">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    TBD - Not run automatically yet, so this is just a placeholder for future
    metrics collection.  Any samples collected here represent users running
    diagnostics manually.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.DiskSpace" enum="DiagnosticsResult"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of diagnostics for the DiskSpace test
    that runs on recovery startups.  The DiskSpace test checks that the disk
    space in the volume where the user data directory normally lives is not
    dangerously low.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.InstallType" enum="DiagnosticsResult"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    TBD - Not run automatically yet, so this is just a placeholder for future
    metrics collection.  Any samples collected here represent users running
    diagnostics manually.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.JSONBookmarks" enum="DiagnosticsResult"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of diagnostics for the JSONBookmarks
    test that runs on recovery startups.  The JSONBookmarks test checks to make
    sure that the JSON encoded bookmarks file is properly formed.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.JSONLocalState" enum="DiagnosticsResult"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of diagnostics for the JSONLocalState
    test that runs on recovery startups.  The JSONLocalState test checks to make
    sure that the JSON encoded Local State file is properly formed.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.JSONPreferences" enum="DiagnosticsResult"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of diagnostics for the JSONPreferences
    test that runs on recovery startups.  The JSONPreferences test checks to
    make sure that the Preferences file is properly formed.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.OperatingSystem" enum="DiagnosticsResult">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    TBD - Not run automatically yet, so this is just a placeholder for future
    metrics collection.  Any samples collected here represent users running
    diagnostics manually.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.PathDictionaries" enum="DiagnosticsResult"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of diagnostics for the PathDictionaries
    test that runs on recovery startups.  The PathDictionaries test checks makes
    sure that the path to the Dictionaries folder exists and has the right
    permissions.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.PathLocalState" enum="DiagnosticsResult"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of diagnostics for the PathLocalState
    test that runs on recovery startups.   The PathLocalState test checks makes
    sure that the path to the Local State folder exists and has the right
    permissions.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.PathResources" enum="DiagnosticsResult"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of diagnostics for the PathResources
    test that runs on recovery startups.  The PathResources test checks makes
    sure that the path to the Resources folder exists and has the right
    permissions.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.PathUserData" enum="DiagnosticsResult"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of diagnostics for the PathUserData test
    that runs on recovery startups. The PathUserData test checks makes sure that
    the path to the User Data folder exists and has the right permissions.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.SQLiteIntegrityAppCache"
    enum="DiagnosticsResult">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of the SQLiteIntegrityAppCache test that
    runs on recovery startups.  The test checks the integrity of the App Cache
    database.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.SQLiteIntegrityArchivedHistory"
    enum="DiagnosticsResult">
  <obsolete>
    Removed as of Jun 2014: we no longer have an archived database.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of the SQLiteIntegrityArchivedHistory
    test that runs on recovery startups.  The test checks the integrity of the
    Archived History database.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.SQLiteIntegrityCookie"
    enum="DiagnosticsResult">
  <owner>shess@chromium.org</owner>
  <summary>
    Shows the success and failure rates of the SQLiteIntegrityCookie test that
    runs on recovery startups.  The test checks the integrity of the Cookie
    database.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.SQLiteIntegrityDatabaseTracker"
    enum="DiagnosticsResult">
  <owner>shess@chromium.org</owner>
  <summary>
    Shows the success and failure rates of the SQLiteIntegrityDatabaseTracker
    test that runs on recovery startups.  The test checks the integrity of the
    Database Tracker database.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.SQLiteIntegrityFavicons"
    enum="DiagnosticsResult">
  <owner>shess@chromium.org</owner>
  <summary>
    Shows the success and failure rates of the SQLiteIntegrityFavicons test that
    runs on recovery startups.  The test checks the integrity of the Favicons
    database.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.SQLiteIntegrityHistory"
    enum="DiagnosticsResult">
  <owner>shess@chromium.org</owner>
  <summary>
    Shows the success and failure rates of the SQLiteIntegrityHistory test that
    runs on recovery startups.  The test checks the integrity of the History
    database.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.SQLiteIntegrityNSSCert"
    enum="DiagnosticsResult" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of the SQLiteIntegrityNSSCert test that
    runs on recovery startups.  The test checks the integrity of the NSS
    Certificate database.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.SQLiteIntegrityNSSKey"
    enum="DiagnosticsResult" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Shows the success and failure rates of the SQLiteIntegrityNSSKey test that
    runs on recovery startups.  The test checks the integrity of the NSS Key
    database.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.SQLiteIntegrityThumbnails"
    enum="DiagnosticsResult">
  <obsolete>
    Deprecated 05/2016 in Issue 617226; has not been valid for many years.
  </obsolete>
  <owner>shess@chromium.org</owner>
  <summary>
    Shows the success and failure rates of the SQLiteIntegrityThumbnails test
    that runs on recovery startups.  The test checks the integrity of the
    Thumbnails database.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.SQLiteIntegrityTopSites"
    enum="DiagnosticsResult">
  <owner>shess@chromium.org</owner>
  <summary>
    Shows the success and failure rates of the SQLiteIntegrityTopSites test that
    runs on recovery startups.  The test checks the integrity of the TopSites
    database.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.SQLiteIntegrityWebData"
    enum="DiagnosticsResult">
  <owner>shess@chromium.org</owner>
  <summary>
    Shows the success and failure rates of the SQLiteIntegrityWebData test that
    runs on recovery startups.  The test checks the integrity of the Web Data
    database.
  </summary>
</histogram>

<histogram name="Diagnostics.Test.Version" enum="DiagnosticsResult"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    TBD - Not run automatically yet, so this is just a placeholder for future
    metrics collection.  Any samples collected here represent users running
    diagnostics manually.
  </summary>
</histogram>

<histogram name="Diagnostics.TestFailures" enum="DiagnosticsTestName">
  <owner>shess@chromium.org</owner>
  <summary>
    Histogram comparing the various types of diagnostic test failures when
    diagnostic tests are run.  Note that some types of test failures cause the
    rest of the tests to be skipped.
  </summary>
</histogram>

<histogram name="Dialog.Create" enum="BooleanCreated">
  <owner>pdyson@chromium.org</owner>
  <summary>
    Counts the number times dialog boxes are created using a particular parent
    class.
  </summary>
</histogram>

<histogram name="Dialog.Creation" enum="DialogName">
  <owner>pdyson@chromium.org</owner>
  <summary>
    Counts the number times various types of dialog boxes are created.
  </summary>
</histogram>

<histogram name="Dialog.Delegate.Creation" enum="BooleanCreated">
  <obsolete>
    Deprecated, use Dialog.DialogDelegate.Create.
  </obsolete>
  <owner>pdyson@chromium.org</owner>
  <summary>
    Counts the number times dialog boxes are created using DialogDelegate.
  </summary>
</histogram>

<histogram name="Dialog.DialogDelegate.Duration" units="ms">
  <owner>pdyson@chromium.org</owner>
  <summary>
    How long dialog boxes are open, for dialog boxes created using the parent
    class DialogDelegate. This will include bubbles that use
    BubbleDialogDelegateView as a parent class, and dialogs that use
    DialogDelegateView as a parent class. This is logged on delegate
    destruction.
  </summary>
</histogram>

<histogram name="DirectWrite.Fonts.BuildCache.File.Size" units="KB">
  <owner>shrikant@chromium.org</owner>
  <summary>
    Reports size of font cache file. This is reported every time we rebuild font
    cache.
  </summary>
</histogram>

<histogram name="DirectWrite.Fonts.BuildCache.Ignored">
  <owner>shrikant@chromium.org</owner>
  <summary>
    Reports the total number of fonts that will be ignored while building static
    font cache due to size limitation. During cache building phase if our logic
    suggests that we need to put more than 70% of font file contents into cache
    file then we don't cache that particular font file. These ignored font files
    are directly picked up from system fonts folder during Direct Write cache
    building process. Our end goal is to minimize costly open and close
    operations on font files in system folder.
  </summary>
</histogram>

<histogram name="DirectWrite.Fonts.Ignored">
  <owner>shrikant@chromium.org</owner>
  <summary>
    Reports the total number of fonts that will be ignored while loading a
    custom font collection. With current criteria fonts that are not in
    system-font location will be ignored.
  </summary>
</histogram>

<histogram name="DirectWrite.Fonts.Loaded">
  <owner>shrikant@chromium.org</owner>
  <summary>
    Reports the total number of fonts to be loaded through a custom font
    collection. This actually reports total font entries from registry excluding
    font entries that point to non-system location.
  </summary>
</histogram>

<histogram name="DirectWrite.Fonts.LoadTime" units="ms">
  <owner>shrikant@chromium.org</owner>
  <summary>
    Measures the total time spent in loading a custom font collection in
    non-cache-file mode. We load system fonts as a custom font collection to
    avoid any interaction with windows font cache service from sandboxed
    renderer process. Please note that windows font cache services is different
    from our cache file approach (later referred here as cache-file mode).
  </summary>
</histogram>

<histogram name="DirectWrite.Fonts.LoadTime.Cached" units="ms">
  <owner>shrikant@chromium.org</owner>
  <summary>
    Measures the total time spent in loading a custom font collection in
    cache-file mode. We load system fonts as a custom font collection to avoid
    any interaction with windows font cache service from sandboxed renderer
    process. Please note that windows font cache services is different from our
    cache file approach (later referred here as cache-file mode)
  </summary>
</histogram>

<histogram name="DirectWrite.Fonts.Proxy.CreateFontFaceResult" enum="Hresult">
  <owner>kulshin@chromium.org</owner>
  <summary>Records the error returned from CreateFontFace.</summary>
</histogram>

<histogram name="DirectWrite.Fonts.Proxy.Fallback.CacheSize" units="Count">
  <owner>kulshin@chromium.org</owner>
  <summary>Records how many font families are in the fallback cache.</summary>
</histogram>

<histogram name="DirectWrite.Fonts.Proxy.FallbackResult"
    enum="DirectWriteFontFallbackResult">
  <owner>kulshin@chromium.org</owner>
  <summary>
    Measures the effectiveness of the font fallback proxy. This tracks if we
    were able to find a suitable font to render the character, and whether an
    IPC was necessary.
  </summary>
</histogram>

<histogram name="DirectWrite.Fonts.Proxy.FamilyCount" units="families">
  <owner>kulshin@chromium.org</owner>
  <summary>
    The number of font families as seen by the font proxy in the renderer.
  </summary>
</histogram>

<histogram name="DirectWrite.Fonts.Proxy.FontProxyError"
    enum="DirectWriteFontProxyError">
  <owner>kulshin@chromium.org</owner>
  <summary>
    The errors encountered by the DirectWrite font proxy while loading fonts.
  </summary>
</histogram>

<histogram name="DirectWrite.Fonts.Proxy.GetSystemFontCollectionResult"
    enum="Hresult">
  <owner>kulshin@chromium.org</owner>
  <summary>Records the error returned from GetSystemFontCollection.</summary>
</histogram>

<histogram name="DirectWrite.Fonts.Proxy.LastResortFontCount" units="fonts">
  <owner>kulshin@chromium.org</owner>
  <summary>
    The number of last resort fallback fonts found on the system as seen by the
    browser.
  </summary>
</histogram>

<histogram name="DirectWrite.Fonts.Proxy.LastResortFontFileCount" units="files">
  <owner>kulshin@chromium.org</owner>
  <summary>
    The number of font files found for a last resort fallback font.
  </summary>
</histogram>

<histogram name="DirectWrite.Fonts.Proxy.LoaderType"
    enum="DirectWriteFontLoaderType">
  <owner>kulshin@chromium.org</owner>
  <summary>
    The codepath that was used to load a font family. This is logged in the
    browser every time a renderer attempts to load a font family, once per font
    file.
  </summary>
</histogram>

<histogram name="DirectWrite.Fonts.Proxy.LoadFamilyResult"
    enum="DirectWriteLoadFamilyResult">
  <owner>kulshin@chromium.org</owner>
  <summary>
    The outcome of attempting to load a font family in the renderer (success vs
    failure and number of families). This is logged in the renderer once per
    family that is loaded.
  </summary>
</histogram>

<histogram name="DirectWrite.Fonts.Proxy.LoadFamilyTime" units="ms">
  <owner>kulshin@chromium.org</owner>
  <summary>
    The time taken to load a font family, excluding glyph data. This is logged
    in the renderer once per family that is loaded.
  </summary>
</histogram>

<histogram name="DirectWrite.Fonts.Proxy.MessageFilterError"
    enum="DirectWriteMessageFilterError">
  <owner>kulshin@chromium.org</owner>
  <summary>
    Errors, if any, encountered by the DirectWrite font proxy message filter.
  </summary>
</histogram>

<histogram name="DisabledExtension.ExtensionWipedStatus" enum="BooleanWiped">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Whether an extension has been wiped out.</summary>
</histogram>

<histogram name="DisabledExtension.SideloadWipeoutCount">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    How many external extensions get wiped out as a result of the Sideload
    Wipeout one-time initiative.
  </summary>
</histogram>

<histogram name="DisabledExtension.SideloadWipeoutNeeded" enum="BooleanSuccess">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Whether any extension got wiped out as a result of the Sideload Wipeout
    one-time initiative.
  </summary>
</histogram>

<histogram name="DisabledExtension.UserSelection" enum="SideloadWipeoutBubble">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The user selection in the Sideload Wipeout bubble, grouped by the
    UmaWipeoutHistogramOptions enum.
  </summary>
</histogram>

<histogram name="Discarding.OnlineOnReload" enum="Boolean">
<!-- Name completed by histogram_suffixes name="DiscardReason" -->

  <owner>fdoray@chromium.org</owner>
  <summary>
    Whether the machine was online when a discarded tab was reloaded.
  </summary>
</histogram>

<histogram name="Discarding.Urgent.NumAliveTabs" units="tabs">
  <owner>fdoray@chromium.org</owner>
  <summary>
    Number of tabs that are not pending load or discarded when an urgent discard
    request is received.
  </summary>
</histogram>

<histogram name="Discarding.Urgent.TimeSinceLastUrgent" units="ms">
  <owner>fdoray@chromium.org</owner>
  <summary>
    Time between two consecutive urgent discard requests. Urgent discards are
    undesirable; it is better to reduce memory usage before the system is in a
    bad state.
  </summary>
</histogram>

<histogram name="Discarding.Urgent.TimeSinceStartup" units="ms">
  <owner>fdoray@chromium.org</owner>
  <summary>
    Time between Chrome startup and the first urgent discard request. Urgent
    discards are undesirable; it is better to reduce memory usage before the
    system is in a bad state.
  </summary>
</histogram>

<histogram name="DiskBasedCertCache.CertIo" enum="CertificateChainPosition">
  <obsolete>
    Deprecated as of 01/2016. CertCacheTrial has been removed.
    https://crbug.com/522312
  </obsolete>
  <owner>brandonsalmon@chromium.org</owner>
  <summary>
    Records information about DiskBasedCertCache operations with respect to
    certificate chain positions. Zero indicates that a certificate is root, one
    indicates that it is the first intermediate certificate, etc.
  </summary>
</histogram>

<histogram name="DiskBasedCertCache.CertIoCacheResult" enum="CacheResult">
  <obsolete>
    Deprecated as of 01/2016. CertCacheTrial has been removed.
    https://crbug.com/522312
  </obsolete>
  <owner>brandonsalmon@chromium.org</owner>
  <summary>
    Records the outcome of requests to retrieve certificates from the disk
    cache.
  </summary>
</histogram>

<histogram name="DiskBasedCertCache.CertIoReadSuccessLeaf"
    enum="BooleanSuccess">
  <obsolete>
    Deprecated as of 01/2016. CertCacheTrial has been removed.
    https://crbug.com/522312
  </obsolete>
  <owner>brandonsalmon@chromium.org</owner>
  <summary>
    Whether or not the leaf certificate of a certificate chain was successfuly
    read from the disk cache.
  </summary>
</histogram>

<histogram name="DiskBasedCertCache.CertIoWriteSuccessLeaf"
    enum="BooleanSuccess">
  <obsolete>
    Deprecated as of 01/2016. CertCacheTrial has been removed.
    https://crbug.com/522312
  </obsolete>
  <owner>brandonsalmon@chromium.org</owner>
  <summary>
    Whether or not the leaf certificate of a certificate chain was successfully
    written to the disk cache.
  </summary>
</histogram>

<histogram name="DiskBasedCertCache.ChainReadTime" units="ms">
  <obsolete>
    Deprecated as of 01/2016. CertCacheTrial has been removed.
    https://crbug.com/522312
  </obsolete>
  <owner>brandonsalmon@chromium.org</owner>
  <summary>
    Measures the wall clock time spent reading a certificate chain. The starting
    time is when the read command is issued, and the ending time is when all of
    the  certificates in the chain have been read into memory.
  </summary>
</histogram>

<histogram name="DiskBasedCertCache.ChainWriteTime" units="ms">
  <obsolete>
    Deprecated as of 01/2016. CertCacheTrial has been removed.
    https://crbug.com/522312
  </obsolete>
  <owner>brandonsalmon@chromium.org</owner>
  <summary>
    Measures the wall clock time spent writing a certificate chain to disk. The
    starting time is when the write command is issued, and the ending time is
    when all the certificates in the chain have been written to disk.
  </summary>
</histogram>

<histogram name="DiskCache.0.FilesAge" units="hours">
  <owner>rvargas@chromium.org</owner>
  <summary>The age of the cache's files (wall time).</summary>
</histogram>

<histogram name="DiskCache.2.FilesAge" units="hours">
  <owner>rvargas@chromium.org</owner>
  <summary>
    The age of the cache's files (wall time). Media-specific cache.
  </summary>
</histogram>

<histogram name="DiskCache.3.FilesAge" units="hours" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The age of the cache's files (wall time). AppCache.</summary>
</histogram>

<histogram name="DiskCache.4.FilesAge" units="hours" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The age of the cache's files (wall time). ShaderCache.</summary>
</histogram>

<histogram name="DiskCache.SizeStats2" units="KB">
  <owner>rvargas@chromium.org</owner>
  <summary>The size distribution of data stored in the HTTP cache.</summary>
</histogram>

<histogram name="DiskCache.TotalIOTime" units="ms">
  <obsolete>
    Deprecated.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The total time it takes to perform a payload IO operation, for the regular
    disk cache.
  </summary>
</histogram>

<histogram name="DisplayManager.InternalDisplayZoomPercentage" units="%">
  <owner>malaykeshav@chromium.org</owner>
  <summary>
    The zoom percentage that the user has set on the internal display and is
    actively using. This is emitted when the zoom factor has been updated in
    display manager and has not been changed for a while.
  </summary>
</histogram>

<histogram name="DisplayManager.MirroringDisplayCountRanges"
    enum="MultiDisplayModeDisplayCountRanges">
  <owner>weidongg@chromium.org</owner>
  <summary>
    The number of displays connected to the device that are in software or
    hardware mirror mode. This is emitted once when the normal or mixed mirror
    mode is enabled through API call, or the display configuration changes (e.g.
    adding or removing a display) when mirror mode is on.
  </summary>
</histogram>

<histogram name="DisplayManager.MirrorModeTypes" enum="DisplayMirrorModeTypes">
  <owner>weidongg@chromium.org</owner>
  <summary>
    The types of mirror mode in which the displays connected to the device are
    in. This is emitted once when the normal or mixed mirror mode is enabled
    through API call, or the display configuration changes ( e.g. adding or
    removing a display) when mirror mode is on.
  </summary>
</histogram>

<histogram name="DisplayManager.MultiDisplayMode" enum="MultiDisplayModes">
  <owner>afakhry@chromium.org</owner>
  <summary>
    The mode in which the connected displays to the device are in. This is
    emitted once when displays are added or removed, or when the user changes
    the mode by e.g. enabling mirror or unified modes.
  </summary>
</histogram>

<histogram name="DisplayManager.UnifiedDesktopDisplayCountRange"
    enum="MultiDisplayModeDisplayCountRanges">
  <owner>afakhry@chromium.org</owner>
  <summary>
    The number of displays connected to the device when Unified Desktop mode is
    on. This is emitted when Unified Desktop mode is turned on, or the displays
    are added or removed while in Unified Mode.
  </summary>
</histogram>

<histogram name="DNS.AttemptCancelled">
  <obsolete>
    Deprecated as of 6/2018.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    The attempt which completed after the job was already cancelled.
  </summary>
</histogram>

<histogram name="DNS.AttemptDiscarded">
  <owner>mgersh@chromium.org</owner>
  <summary>
    The attempt which completed after the job was already cancelled OR the
    attempt that has finished after host resolution was already completed by an
    earlier attempt.
  </summary>
</histogram>

<histogram name="DNS.AttemptFailDuration" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time taken in OS resolutions for actual navigations. These
    attempts which completed after the job was already canceled OR after the job
    was already completed by an earlier attempt. Note that cached resolutions
    may provide low (0ms?) resolution times.
  </summary>
</histogram>

<histogram name="DNS.AttemptFailure">
  <owner>mgersh@chromium.org</owner>
  <summary>The attempt that has not resolved the host successfully.</summary>
</histogram>

<histogram name="DNS.AttemptFirstFailure">
  <owner>mgersh@chromium.org</owner>
  <summary>
    The attempt that resolved the host first and the resolution was not
    successful.
  </summary>
</histogram>

<histogram name="DNS.AttemptFirstSuccess">
  <owner>mgersh@chromium.org</owner>
  <summary>
    The attempt that resolved the host first and the resolution was successful.
  </summary>
</histogram>

<histogram name="DNS.AttemptSuccess">
  <owner>mgersh@chromium.org</owner>
  <summary>The attempt that has resolved the host successfully.</summary>
</histogram>

<histogram name="DNS.AttemptSuccessDuration" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time taken in OS resolutions that succeeded and were requested
    for actual navigations. These attempts which completed after the job was
    already canceled OR after the job was already completed by an earlier
    attempt. Note that cached resolutions may provide low (0ms?) resolution
    times.
  </summary>
</histogram>

<histogram name="DNS.AttemptTimeSavedByRetry" units="ms">
  <obsolete>
    Deprecated as of 6/2018.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    This histogram shows the time saved by having spawned an extra attempt, when
    the first attempt didn't finish before retry attempt.
  </summary>
</histogram>

<histogram name="DNS.CacheEvicted" units="ms">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    The time left to expiration of an entry when it is removed while compacting
    the HostCache.
  </summary>
</histogram>

<histogram name="DNS.CacheExpired" units="ms">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    The time since expiration of an entry when it is removed while compacting
    the HostCache.
  </summary>
</histogram>

<histogram name="DNS.CacheExpiredOnGet" units="ms">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    The time since expiration of an entry when it is removed on lookup.
  </summary>
</histogram>

<histogram name="DNS.EmptyAddressListAndNoError"
    enum="DNSEmptyAddressListAndNoError">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Error status when an empty address list was found in OnLookupComplete().
  </summary>
</histogram>

<histogram name="DNS.HostCache.Erase" enum="DNS.HostCache.EraseReason">
  <owner>mgersh@chromium.org</owner>
  <summary>The reason for erasing a DNS entry from the host cache.</summary>
</histogram>

<histogram name="DNS.HostCache.EraseStale.ExpiredBy" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    When erasing a stale (expired or old-network) DNS entry from the host cache,
    how long past the expiration time it is.
  </summary>
</histogram>

<histogram name="DNS.HostCache.EraseStale.NetworkChanges" units="changes">
  <owner>mgersh@chromium.org</owner>
  <summary>
    When erasing a stale (expired or old-network) DNS entry from the host cache
    how many network changes happened between setting and erasing it.
  </summary>
</histogram>

<histogram name="DNS.HostCache.EraseStale.StaleHits" units="hits">
  <owner>mgersh@chromium.org</owner>
  <summary>
    When erasing a stale (expired or old-network) DNS entry from the host cache
    how many hits it received while stale.
  </summary>
</histogram>

<histogram name="DNS.HostCache.EraseValid.ValidFor" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    When erasing a valid DNS entry from the host cache, for how much longer it
    would have remained valid.
  </summary>
</histogram>

<histogram name="DNS.HostCache.Lookup" enum="DNS.HostCache.LookupOutcome">
  <owner>mgersh@chromium.org</owner>
  <summary>The outcome of looking up a DNS entry in the host cache.</summary>
</histogram>

<histogram name="DNS.HostCache.LookupStale.ExpiredBy" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    When looking up a stale DNS entry in the host cache, how long past the
    expiration time it is.
  </summary>
</histogram>

<histogram name="DNS.HostCache.LookupStale.NetworkChanges" units="changes">
  <owner>mgersh@chromium.org</owner>
  <summary>
    When looking up a stale DNS entry in the host cache, how many network
    changes happened between setting it and looking it up.
  </summary>
</histogram>

<histogram name="DNS.HostCache.RestoreSize" units="entries">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Number of HostCache entries persisted to disk, measured at restore time.
  </summary>
</histogram>

<histogram name="DNS.HostCache.RestoreSuccess" enum="BooleanSuccess">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Whether the persisted HostCache entries were restored successfully.
  </summary>
</histogram>

<histogram name="DNS.HostCache.Set" enum="DNS.HostCache.SetOutcome">
  <owner>mgersh@chromium.org</owner>
  <summary>The outcome of setting a DNS entry in the host cache.</summary>
</histogram>

<histogram name="DNS.HostCache.UpdateStale.AddressListDelta"
    enum="DNS.AddressListDeltaType">
  <owner>mgersh@chromium.org</owner>
  <summary>
    When updating a stale (expired or old-network) DNS entry in the host cache,
    and both results are successful, how the address list differs between the
    old and new entries.
  </summary>
</histogram>

<histogram name="DNS.HostCache.UpdateStale.ExpiredBy" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    When updating a stale (expired or old-network) DNS entry in the host cache,
    how long past the expiration time the old entry was.
  </summary>
</histogram>

<histogram name="DNS.HostCache.UpdateStale.NetworkChanges" units="changes">
  <owner>mgersh@chromium.org</owner>
  <summary>
    When updating a stale (expired or old-nework) DNS entry in the host cache,
    how many network changes happened between setting the old entry and setting
    the new entry.
  </summary>
</histogram>

<histogram name="DNS.HostCache.UpdateStale.StaleHits" units="hits">
  <owner>mgersh@chromium.org</owner>
  <summary>
    The number of hits received to an updated stale DNS entry in the host cache
    while it was stale.
  </summary>
</histogram>

<histogram name="DNS.IndependentFailedNavigation" units="ms">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    When either a pre-resolution was not done recently enough to provide
    benefit, or the corresponding pre-resolution is still pending, this
    histogram shows the duration of time used to resolve a hostname as not
    existing during a failed attempt to navigate to (GET) a URL.  In newer
    versions, if the hostname has never been found as a link during a page scan,
    and it has a referring URL, then it is added to referrer list data structure
    (hoping we'll do better next time).
  </summary>
</histogram>

<histogram name="DNS.IndependentNavigation" units="ms">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    When either a pre-resolution was not done recently enough to provide
    benefit, or the corresponding pre-resolution is still pending, this
    histogram shows the duration of the duration of time used to resolve a
    hostname to navigate to (GET) a URL.  In newer versions, if the hostname has
    never been found as a link during a page scan, and it has a referring URL,
    then it is added to referrer list data structure (hoping we'll do better
    next time).
  </summary>
</histogram>

<histogram name="DNS.JobQueueTime" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the time the HostResolverImpl::Job was created and the
    time the Job was started (a getaddrinfo call was dispatched to the thread
    pool).
  </summary>
</histogram>

<histogram name="DNS.JobQueueTime_HIGHEST" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the time the HostResolverImpl::Job was created and the
    time the Job was started (a getaddrinfo call was dispatched to the thread
    pool). Includes only Jobs which had priority HIGHEST when started.
  </summary>
</histogram>

<histogram name="DNS.JobQueueTime_IDLE" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the time the HostResolverImpl::Job was created and the
    time the Job was started (a getaddrinfo call was dispatched to the thread
    pool). Includes only Jobs which had priority IDLE when started.
  </summary>
</histogram>

<histogram name="DNS.JobQueueTime_LOW" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the time the HostResolverImpl::Job was created and the
    time the Job was started (a getaddrinfo call was dispatched to the thread
    pool). Includes only Jobs which had priority LOW when started.
  </summary>
</histogram>

<histogram name="DNS.JobQueueTime_LOWEST" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the time the HostResolverImpl::Job was created and the
    time the Job was started (a getaddrinfo call was dispatched to the thread
    pool). Includes only Jobs which had priority LOWEST when started.
  </summary>
</histogram>

<histogram name="DNS.JobQueueTime_MEDIUM" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTime.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the time the HostResolverImpl::Job was created and the
    time the Job was started (a getaddrinfo call was dispatched to the thread
    pool). Includes only Jobs which had priority MEDIUM when started.
  </summary>
</histogram>

<histogram name="DNS.JobQueueTimeAfterChange" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the last time the priority of a HostResolverImpl::Job
    changed (when a Request was attached or detached) and the time the Job was
    started (a getaddrinfo call was dispatched to the thread pool).
  </summary>
</histogram>

<histogram name="DNS.JobQueueTimeAfterChange_HIGHEST" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the last time the priority of a HostResolverImpl::Job
    changed (when a Request was attached or detached) and the time the Job was
    started (a getaddrinfo call was dispatched to the thread pool). Includes
    only Jobs which had priority HIGHEST when started.
  </summary>
</histogram>

<histogram name="DNS.JobQueueTimeAfterChange_IDLE" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the last time the priority of a HostResolverImpl::Job
    changed (when a Request was attached or detached) and the time the Job was
    started (a getaddrinfo call was dispatched to the thread pool). Includes
    only Jobs which had priority IDLE when started.
  </summary>
</histogram>

<histogram name="DNS.JobQueueTimeAfterChange_LOW" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the last time the priority of a HostResolverImpl::Job
    changed (when a Request was attached or detached) and the time the Job was
    started (a getaddrinfo call was dispatched to the thread pool). Includes
    only Jobs which had priority LOW when started.
  </summary>
</histogram>

<histogram name="DNS.JobQueueTimeAfterChange_LOWEST" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the last time the priority of a HostResolverImpl::Job
    changed (when a Request was attached or detached) and the time the Job was
    started (a getaddrinfo call was dispatched to the thread pool). Includes
    only Jobs which had priority LOWEST when started.
  </summary>
</histogram>

<histogram name="DNS.JobQueueTimeAfterChange_MEDIUM" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.JobQueueTimeAfterChange.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the last time the priority of a HostResolverImpl::Job
    changed (when a Request was attached or detached) and the time the Job was
    started (a getaddrinfo call was dispatched to the thread pool). Includes
    only Jobs which had priority MEDIUM when started.
  </summary>
</histogram>

<histogram name="DNS.PrefetchCacheEviction" units="ms">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    The duration of time used (most recently) to pre-resolve a hostname, when
    the prefetched resolution was apparently evicted from the cache.  The
    included samples only list pre-resolution times when the later
    navigations/fetches took in excess of 15ms.
  </summary>
</histogram>

<histogram name="DNS.PrefetchCacheEvictionL" units="ms">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    The duration of time used (most recently) to pre-resolve a hostname, when
    the prefetched resolution was apparently evicted from the cache.  The
    included samples only list pre-resolution times when the later
    navigations/fetches took in excess of 15ms.
  </summary>
</histogram>

<histogram name="DNS.PrefetchFoundName">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>Replaced by DNS.PrefetchFoundNameL.</summary>
</histogram>

<histogram name="DNS.PrefetchFoundNameL" units="ms">
  <obsolete>
    Deprecated 2/2010, and replaced by DNS.PrefetchResolution
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    The duration of time used by the DNS pre-resolving threads to resolve a host
    name via the network.  Any resolutions that are faster than 15ms are
    considered to be local cache hits, not requiring network access, and are not
    included in this histogram. This histogram is most useful for estimating the
    typical cost of a name resolution, but it also estimates the total number of
    network-based resolutions induced by this feature.  Not all these
    resolutions prove helpful (i.e., the user does not always actually visit the
    resolved hostnames).
  </summary>
</histogram>

<histogram name="DNS.PrefetchNegativeHit">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>Replaced by DNS.PrefetchNegativeHitL.</summary>
</histogram>

<histogram name="DNS.PrefetchNegativeHitL" units="ms">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    The duration of time saved due to DNS pre-resolving in the &quot;name not
    found&quot; case.  Time &quot;savings&quot; shown in the histogram are
    defined to be the difference between the DNS pre-resolution duration, and
    the DNS resolution duration seen during a navigation.  These cache hits only
    list events where the DNS pre-resolve duration for a host was in excess of
    15ms (i.e., the network was consulted), and the actual DNS resolution (when
    a user attempted to navigate to a link with the same host name) took less
    than 15ms (i.e., the network was not consulted), which means the gain was a
    result of a &quot;cache hit&quot; in the OS cache.  For some users with
    LANs, all negative results (even when the DNS cache might otherwise help)
    take about 2.5 seconds (due to timeouts for netbios broadcasts), and hence
    no savings are possible (or shown) for such users in this category.
  </summary>
</histogram>

<histogram name="DNS.PrefetchPositiveHit">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>Replaced by DNS.PrefetchPositiveHitL.</summary>
</histogram>

<histogram name="DNS.PrefetchPositiveHitL" units="ms">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    The duration of time saved due to DNS pre-resolving in the &quot;name was
    found&quot; case, and induced by either a page scan for a link or an omnibox
    entry by the user. Time &quot;savings&quot; shown in the histogram are
    defined to be the difference between the DNS pre-resolution duration, and
    the DNS resolution duration seen during a navigation.  These cache hits only
    list events where the DNS pre-resolve duration for a host was in excess of
    15ms (i.e., the network was consulted), and the actual DNS resolution (when
    a user attempted to navigate to a link with the same host name) took less
    than 15ms (i.e., the network was not consulted), which means the gain was a
    result of a &quot;cache hit&quot; in the OS cache.
  </summary>
</histogram>

<histogram name="DNS.PrefetchQueue" units="ms">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    The duration of time spent by a proposed resolution waiting in the queue to
    be resolved.  This number is in addition to any DNS resolution time that may
    come later.
  </summary>
</histogram>

<histogram name="DNS.PrefetchReferredPositiveHit" units="ms">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    The duration of time saved due to DNS pre-resolving in the &quot;name was
    found&quot; case, and induced by predicting (using referrer lists) that a
    resolution was needed. Time &quot;savings&quot; shown in the histogram are
    defined to be the difference between the DNS pre-resolution duration, and
    the DNS resolution duration seen during a navigation.  These cache hits only
    list events where the DNS pre-resolve duration for a host was in excess of
    15ms (i.e., the network was consulted), and the actual DNS resolution (when
    a user attempted to navigate to a link with the same host name) took less
    than 15ms (i.e., the network was not consulted), which means the gain was a
    result of a &quot;cache hit&quot; in the OS cache.
  </summary>
</histogram>

<histogram name="DNS.PrefetchResolution" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    The duration of time used by the DNS pre-resolving threads to resolve a host
    name via the network.  Any resolutions that are faster than 15ms are
    considered to be local cache hits, not requiring network access, and are not
    included in this histogram. This histogram is most useful for estimating the
    typical cost of a name resolution, but it also estimates the total number of
    network-based resolutions induced by this feature.  Not all these
    resolutions prove helpful (i.e., the user does not always actually visit the
    resolved hostnames).
  </summary>
</histogram>

<histogram name="DNS.QueueRecycledDeltaOver2">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    When, due to congestion avoidance, a queued pre-resolution is abandoned
    (recycled) without actually being resolved, this histograms records the age
    in the queue of that entry.  Only times over 2 seconds are recorded in this
    histogram.
  </summary>
</histogram>

<histogram name="DNS.QueueRecycledUnder2">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    When, due to congestion avoidance, a queued pre-resolution is abandoned
    (recycled) without actually being resolved, this histograms records the age
    in the queue of that entry.  Only times less than or equal to 2 seconds are
    recorded in this histogram.
  </summary>
</histogram>

<histogram name="DNS.ResolveCategory" enum="ResolutionCategory">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.ResolveCategory.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Counts of successes and failures of OS resolutions in various categories.
  </summary>
</histogram>

<histogram name="DNS.ResolveFail" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.ProcTaskFail.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time taken in OS resolutions for actual navigations.  Note that
    cached OS resolutions may provide low (0ms?) resolution times.
  </summary>
</histogram>

<histogram name="DNS.ResolveFail_FAMILY_IPV4" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.ProcTaskFail.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>Same as DNS.ResolveFail, but limited to pure IPv4 lookups.</summary>
</histogram>

<histogram name="DNS.ResolveFail_FAMILY_IPV6" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.ProcTaskFail.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>Same as DNS.ResolveFail, but limited to pure IPv6 lookups.</summary>
</histogram>

<histogram name="DNS.ResolveFail_FAMILY_UNSPEC" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.ProcTaskFail.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>Same as DNS.ResolveFail, but limited to IPv4/IPv6 lookups.</summary>
</histogram>

<histogram name="DNS.ResolveSpeculativeFail" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.ProcTaskFail.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time taken in speculative OS resolutions.  Note that cached OS
    resolutions may provide low (0ms?) resolution times.
  </summary>
</histogram>

<histogram name="DNS.ResolveSpeculativeSuccess" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.ProcTaskSuccess.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time taken in speculative OS resolution that succeeded.  Note
    that cached resolutions may provide low (0ms?) resolution times.
  </summary>
</histogram>

<histogram name="DNS.ResolveSuccess" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.ProcTaskSuccess.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time taken in OS resolutions that succeeded and were requested
    for actual navigations.  Note that cached resolutions may provide low (0ms?)
    resolution times.
  </summary>
</histogram>

<histogram name="DNS.ResolveSuccess_FAMILY_IPV4" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.ProcTaskSuccess.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Same as DNS.ResolveSuccess, but limited to pure IPv4 lookups.
  </summary>
</histogram>

<histogram name="DNS.ResolveSuccess_FAMILY_IPV6" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.ProcTaskSuccess.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Same as DNS.ResolveSuccess, but limited to pure IPv6 lookups.
  </summary>
</histogram>

<histogram name="DNS.ResolveSuccess_FAMILY_UNSPEC" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.ProcTaskSuccess.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Same as DNS.ResolveSuccess, but limited to IPv4/IPv6 lookups.
  </summary>
</histogram>

<histogram name="DNS.ResolveUnspecWaste" enum="ResolutionUnspecWasteCategory">
  <obsolete>
    Deprecated as of 5/2013.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Counts of hits and misses in the DNS cache and DNS jobs pool of wasted
    HostResolverImpl::Jobs that could be avoided by always resolving using
    AF_UNSPEC.
  </summary>
</histogram>

<histogram name="DNS.StaleHostResolver.NetworkEarly" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    When a DNS request made through StaleHostResolver returns, a stale cached
    result was available, and the network responded before or exactly at the
    stale delay, how much earlier it responded.
  </summary>
</histogram>

<histogram name="DNS.StaleHostResolver.NetworkLate" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    When a DNS request made through StaleHostResolver returns, a stale cached
    result was available, and the network responded after the stale delay, how
    much later it responded.
  </summary>
</histogram>

<histogram name="DNS.StaleHostResolver.RequestOutcome"
    enum="DNS.StaleHostResolverRequestOutcome">
  <owner>mgersh@chromium.org</owner>
  <summary>
    When a DNS request made through StaleHostResolver returns or is canceled,
    the outcome of the request.
  </summary>
</histogram>

<histogram name="DNS.StaleHostResolver.RestoreSizeOnCacheMiss">
  <owner>mgersh@chromium.org</owner>
  <summary>
    When a DNS request made through StaleHostResolver has no stale cached result
    available, the number of host cache entries that were restored from prefs.
  </summary>
</histogram>

<histogram name="DNS.StaleHostResolver.SizeOnCacheMiss">
  <owner>mgersh@chromium.org</owner>
  <summary>
    When a DNS request made through StaleHostResolver has no stale cached result
    available, the number of entries in the host cache.
  </summary>
</histogram>

<histogram name="DNS.StaleHostResolver.StaleAddressListDelta"
    enum="DNS.AddressListDeltaType">
  <owner>mgersh@chromium.org</owner>
  <summary>
    When a DNS request made through StaleHostResolver had a stale cached result
    and both the stale and network results were successful, the difference
    between the old and new address lists.
  </summary>
</histogram>

<histogram name="DNS.TotalTime" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.TotalTime.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time since a HostResolverImpl::Resolve request to the time a
    result is posted. Excludes canceled, evicted, and aborted requests. Includes
    cache hits (recorded as 0). Excludes speculative requests.
  </summary>
</histogram>

<histogram name="DNS.TotalTime_speculative" units="ms">
  <obsolete>
    Deprecated as of 9/2017. Replaced by Net.DNS.TotalTime_speculative.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time since a HostResolverImpl::Resolve request to the time a
    result is posted. Excludes canceled, evicted, and aborted requests. Includes
    cache hits (recorded as 0). Speculative requests only.
  </summary>
</histogram>

<histogram name="DNS.UnexpectedResolution">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    In some cases, such as when content arrives with embedded references to
    other servers, the prefetch system can't (or doesn't) attempt to pre-resolve
    the hostnames.  As an example, a visit to www.cnn.com will fetch content
    with references to about 12 additional hostnames, none of which are
    currently anticipated.  Such resolutions are termed &quot;Unexpected
    Resolutions,&quot; and the durations associated with those DNS resolutions
    are shown below.  Future features may attempt to learn (from prior
    experience locally, or from server provided hints), what secondary hostname
    resolutions should be done when a primary resolution (or navigation) takes
    place.  This histogram shows what the potential savings are that
    &quot;remain on the table&quot; until we employ some of these more advanced
    features.
  </summary>
</histogram>

<histogram name="DNS.UnexpectedResolutionL">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    In some cases, such as when content arrives with embedded references to
    other servers, or when a page (such as one in SSL) preclude scanning and
    prefetching, the prefetch system can't (or doesn't) attempt to pre-resolve
    the hostnames.  As an example, a visit to www.cnn.com will fetch content
    with references to about 12 additional hostnames, none of which might be
    anticipated.  Similarly, clicking on a link in an SSL page won't be
    anticipated (since scanning in not allowed by default). Such resolutions are
    termed &quot;Unexpected Resolutions,&quot; and the durations associated with
    those navigation induced DNS resolutions are shown below.  If a referring
    URL is available for the navigation, the relationship to the referring URL
    was recorded, and future navigations to the referring hostname would have
    induced a pre-resolution of hostname that caused an entry below.  Such any
    entry may facilitate future listing in the ReferredPositiveHit histogram.
  </summary>
</histogram>

<histogram name="DnsProbe.ErrorPageUpdateStatus" enum="DnsProbe.ProbeStatus">
  <owner>mgersh@chromium.org</owner>
  <summary>Status of DNS probe updates sent to a DNS error page.</summary>
</histogram>

<histogram name="DnsProbe.Probe.Elapsed" units="ms">
  <obsolete>
    Renamed 7/2013 to DnsProbe.ProbeDuration.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>Time between starting and finishing DNS probe.</summary>
</histogram>

<histogram name="DnsProbe.Probe.NcnOffline.Elapsed" units="ms">
  <obsolete>
    Removed 7/2013.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time between starting and finishing DNS probe when NCN says we're offline.
  </summary>
</histogram>

<histogram name="DnsProbe.Probe.NcnOffline.Result"
    enum="DnsProbe.ObsoleteProbeResult">
  <obsolete>
    Removed 7/2013.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Result of DNS probes sent by the probe service when NCN says we're offline.
  </summary>
</histogram>

<histogram name="DnsProbe.Probe.NcnOnline.Elapsed" units="ms">
  <obsolete>
    Removed 7/2013.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time between starting and finishing DNS probe when NCN says we're online.
  </summary>
</histogram>

<histogram name="DnsProbe.Probe.NcnOnline.Result"
    enum="DnsProbe.ObsoleteProbeResult">
  <obsolete>
    Removed 7/2013.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Result of DNS probes sent by the probe service when NCN says we're online.
  </summary>
</histogram>

<histogram name="DnsProbe.Probe.Result" enum="DnsProbe.ObsoleteProbeResult">
  <obsolete>
    Renamed 7/2013 to DnsProbe.ProbeResult.  (Also switched to the full
    DnsProbe.ProbeStatus enum.)
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>Result of DNS probes sent by the probe service.</summary>
</histogram>

<histogram name="DnsProbe.Probe.ResultBadConfig.Elapsed" units="ms">
  <obsolete>
    Removed 7/2013.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>Elapsed time of DNS probes that return PROBE_BAD_CONFIG.</summary>
</histogram>

<histogram name="DnsProbe.Probe.ResultBadConfig.SystemIsLocalhost"
    enum="DnsProbe.SystemIsLocalhost">
  <obsolete>
    Removed 7/2013.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    Whether the only nameserver in the system DNS config was 127.0.0.1 when the
    probe result was BAD_CONFIG.
  </summary>
</histogram>

<histogram name="DnsProbe.Probe.ResultBadConfig.SystemJobResult"
    enum="DnsProbe.JobResult">
  <obsolete>
    Removed 7/2013.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    The result of the system probe job when the overall probe result was
    BAD_CONFIG.
  </summary>
</histogram>

<histogram name="DnsProbe.Probe.ResultBadConfig.SystemNameserverCount">
  <obsolete>
    Removed 7/2013.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>
    The number of nameservers in the system DNS config when the probe result was
    BAD_CONFIG.
  </summary>
</histogram>

<histogram name="DnsProbe.Probe.ResultNoInternet.Elapsed" units="ms">
  <obsolete>
    Removed 7/2013.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>Elapsed time of DNS probes that return PROBE_NO_INTERNET.</summary>
</histogram>

<histogram name="DnsProbe.Probe.ResultNxdomain.Elapsed" units="ms">
  <obsolete>
    Removed 7/2013.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>Elapsed time of DNS probes that return PROBE_NXDOMAIN.</summary>
</histogram>

<histogram name="DnsProbe.Probe.ResultUnknown.Elapsed" units="ms">
  <obsolete>
    Removed 7/2013.
  </obsolete>
  <owner>mgersh@chromium.org</owner>
  <summary>Elapsed time of DNS probes that return PROBE_UNKNOWN.</summary>
</histogram>

<histogram name="DnsProbe.ProbeDuration" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>Time between starting and finishing DNS probe.</summary>
</histogram>

<histogram name="DnsProbe.ProbeResult" enum="DnsProbe.ProbeStatus">
  <owner>mgersh@chromium.org</owner>
  <summary>Result of DNS probes sent by the probe service.</summary>
</histogram>

<histogram name="Document.BeforeUnloadDialog" enum="BeforeUnloadDialogResult">
  <owner>panicker@chromium.org</owner>
  <summary>
    Records result of invoking beforeunload handler, that determines whether to
    show the dialog.
  </summary>
</histogram>

<histogram name="Document.OutliveTimeAfterShutdown.DestroyedBeforeProcessDies">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>keishi@chromium.org</owner>
  <summary>
    Records the GC count between the time when the document is shut down and and
    the time when the document is actually destroyed. This only counts documents
    that are destroyed before the process dies.
  </summary>
</histogram>

<histogram name="Document.OutliveTimeAfterShutdown.GCCount" enum="GCCount">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>keishi@chromium.org</owner>
  <summary>
    Records documents that survives some GCs after the document is shut down.
  </summary>
</histogram>

<histogram name="DocumentActivity.Enabled" enum="RunningMode">
  <obsolete>
    Removed 9/2016.
  </obsolete>
  <owner>mariakhomenko@chromium.org</owner>
  <summary>
    Recorded only for Android. Records on every metrics upload whether document
    mode is enabled.
  </summary>
</histogram>

<histogram name="DocumentEventTiming.BeforeUnloadDuration" units="microseconds">
  <owner>panicker@chromium.org</owner>
  <summary>
    Microseconds spent in beforeunload.

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

<histogram name="DocumentEventTiming.FreezeDuration" units="microseconds">
  <owner>panicker@chromium.org</owner>
  <owner>fmeawad@chromium.org</owner>
  <summary>
    Microseconds spent in onfreeze.

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

<histogram name="DocumentEventTiming.PageHideDuration" units="microseconds">
  <owner>panicker@chromium.org</owner>
  <summary>
    Microseconds spent in pagehide.

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

<histogram name="DocumentEventTiming.PageVibilityHiddenDuration"
    units="microseconds">
  <owner>panicker@chromium.org</owner>
  <summary>
    Microseconds spent in vibilitychange (hidden).

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

<histogram name="DocumentEventTiming.ResumeDuration" units="microseconds">
  <owner>panicker@chromium.org</owner>
  <owner>fmeawad@chromium.org</owner>
  <summary>
    Microseconds spent in onresume.

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

<histogram name="DocumentEventTiming.UnloadDuration" units="microseconds">
  <owner>panicker@chromium.org</owner>
  <summary>
    Microseconds spent in unload.

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

<histogram name="DocumentScan.ConverterResult" enum="BooleanSuccess">
  <owner>pstew@chromium.org</owner>
  <summary>
    Chrome OS document scan metric that tracks whether a document scan call to
    the image conversion process suceeded.
  </summary>
</histogram>

<histogram name="DocumentScan.ScanResult" enum="BooleanSuccess">
  <owner>pstew@chromium.org</owner>
  <summary>
    Chrome OS document scan metric that tracks whether a document scan call to
    the sane backend process suceeded.
  </summary>
</histogram>

<histogram name="DomainBoundCerts.DBLoadedCount">
  <obsolete>
    Removed January 2018.
  </obsolete>
  <owner>mattm@chromium.org</owner>
  <summary>Number of certs loaded from domain bound cert database.</summary>
</histogram>

<histogram name="DomainBoundCerts.DBLoadStatus"
    enum="DomainBoundCerts.DBLoadStatus">
  <owner>nharper@chromium.org</owner>
  <summary>
    The status of loading the Channel ID database from disk. This histogram
    records why the database failed to load, or that it loaded successfully.
  </summary>
</histogram>

<histogram name="DomainBoundCerts.DBLoadTime" units="ms">
  <obsolete>
    Removed January 2018.
  </obsolete>
  <owner>mattm@chromium.org</owner>
  <summary>Time spent loading domain bound cert database.</summary>
</histogram>

<histogram name="DomainBoundCerts.DBSizeInKB" units="KB">
  <obsolete>
    Removed 4/2017.
  </obsolete>
  <owner>mattm@chromium.org</owner>
  <summary>
    The size, on disk, of the domain bound cert database as it is being loaded.
  </summary>
</histogram>

<histogram name="DomainBoundCerts.DBVersion">
  <owner>nharper@chromium.org</owner>
  <summary>
    The version number of the Channel ID database (before any migrations are
    run).
  </summary>
</histogram>

<histogram name="DomainBoundCerts.GenerateCertTime" units="ms">
  <obsolete>
    Removed 4/2017.
  </obsolete>
  <owner>mattm@chromium.org</owner>
  <summary>Time spent generating a domain bound cert.</summary>
</histogram>

<histogram name="DomainBoundCerts.GetCertTime" units="ms">
  <obsolete>
    Removed 4/2017.
  </obsolete>
  <owner>mattm@chromium.org</owner>
  <summary>
    Combined time for GetDomainBoundCert retrieval (both synchronous and
    asynchronous).
  </summary>
</histogram>

<histogram name="DomainBoundCerts.GetCertTimeAsync" units="ms">
  <obsolete>
    Removed 4/2017.
  </obsolete>
  <owner>mattm@chromium.org</owner>
  <summary>
    Time for asynchronous retrieval (from the GetDomainBoundCert call until
    completion callback is called).
  </summary>
</histogram>

<histogram name="DomainBoundCerts.GetCertTimeSync" units="ms">
  <obsolete>
    Removed 4/2017.
  </obsolete>
  <owner>mattm@chromium.org</owner>
  <summary>Time for synchronous GetDomainBoundCert cert retrieval.</summary>
</histogram>

<histogram name="DomainBoundCerts.GetDomainBoundCertResult"
    enum="DomainBoundCerts.GetCertResult">
  <obsolete>
    Removed January 2018.
  </obsolete>
  <owner>mattm@chromium.org</owner>
  <summary>Result of GetDomainBoundCert function.</summary>
</histogram>

<histogram name="DomainBoundCerts.KillDatabaseResult" enum="BooleanSuccess">
  <owner>mattm@chromium.org</owner>
  <summary>
    Whether the domain-bound certs sqlite database was killed succesfully when
    an unrecoverable error was detected.
  </summary>
</histogram>

<histogram name="DomainBoundCerts.Support" enum="DomainBoundCerts.Support">
  <obsolete>
    Removed January 2018.
  </obsolete>
  <owner>mattm@chromium.org</owner>
  <summary>
    Counts of SSL client sockets broken down by support for Domain Bound
    Certificates TLS extension.  Counts only connections with full handshakes,
    resumed sessions are not counted.
  </summary>
</histogram>

<histogram name="DomainBoundCerts.TaskMaxWaitTime" units="ms">
  <obsolete>
    Removed 4/2017.
  </obsolete>
  <owner>mattm@chromium.org</owner>
  <summary>
    Longest time spent by requests waiting for load of domain bound cert
    database.
  </summary>
</histogram>

<histogram name="DomainBoundCerts.TaskWaitCount">
  <obsolete>
    Removed 4/2017.
  </obsolete>
  <owner>mattm@chromium.org</owner>
  <summary>
    Number of requests that waited for load of domain bound cert database.
  </summary>
</histogram>

<histogram name="DomainMixing.OneDay">
  <owner>qfiard@google.com</owner>
  <summary>
    The distribution over daily active users of Google Search of the ratio of
    Google searches in the past day that were issued by the user on a Google
    domain that is not the primary one used by the user over the same time
    period.
  </summary>
</histogram>

<histogram name="DomainMixing.OneMonth">
  <owner>qfiard@google.com</owner>
  <summary>
    The distribution over daily active users of Google Search of the ratio of
    Google searches in the past 30 days that were issued by the user on a Google
    domain that is not the primary one used by the user over the same time
    period.
  </summary>
</histogram>

<histogram name="DomainMixing.OneWeek">
  <owner>qfiard@google.com</owner>
  <summary>
    The distribution over daily active users of Google Search of the ratio of
    Google searches in the past week that were issued by the user on a Google
    domain that is not the primary one used by the user over the same time
    period.
  </summary>
</histogram>

<histogram name="DomainMixing.TwoWeeks">
  <owner>qfiard@google.com</owner>
  <summary>
    The distribution over daily active users of Google Search of the ratio of
    Google searches in the past two weeks that were issued by the user on a
    Google domain that is not the primary one used by the user over the same
    time period.
  </summary>
</histogram>

<histogram name="DomainReliability.BeaconInterval" units="ms">
  <obsolete>
    Removed November 2017.
  </obsolete>
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The time between successive Domain Reliability beacons being queued in the
    same context. (Can be arbitrarily long if no beacons are queued in a while.)
  </summary>
</histogram>

<histogram name="DomainReliability.BeaconIntervalGlobal" units="ms">
  <obsolete>
    Removed November 2017.
  </obsolete>
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The time between successive Domain Reliability beacons being queued across
    all contexts. (Can be arbitrarily long if no beacons are queued in a while.)
  </summary>
</histogram>

<histogram name="DomainReliability.BeaconReported" enum="BooleanReported">
  <obsolete>
    Removed November 2017.
  </obsolete>
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    Whether a beacon added to a Domain Reliability context was saved to be
    uploaded to the collector.
  </summary>
</histogram>

<histogram name="DomainReliability.OnBeaconDidEvict" enum="BooleanDidEvict">
  <obsolete>
    Removed November 2017.
  </obsolete>
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    Whether adding a beacon to a Domain Reliability context caused it to evict
    an older beacon to stay within memory limits.
  </summary>
</histogram>

<histogram name="DomainReliability.ReportedBeaconError" enum="NetErrorCodes">
  <obsolete>
    Removed November 2017.
  </obsolete>
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The Chrome error code included in a beacon saved to be uploaded to the
    collector.
  </summary>
</histogram>

<histogram name="DomainReliability.ReportedBeaconError_HasServerIP"
    enum="NetErrorCodes">
  <obsolete>
    Removed November 2017.
  </obsolete>
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The Chrome error code included in a beacon with a non-empty server_ip field
    saved to be uploaded to the collector.
  </summary>
</histogram>

<histogram name="DomainReliability.ReportedBeaconUploadDepth" units="levels">
  <obsolete>
    Removed November 2017.
  </obsolete>
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The upload depth included in a beacon saved to be uploaded to the collector.
    (Zero means the beacon was not about a report upload; n+1 means the beacon
    was about a report with upload depth n.)
  </summary>
</histogram>

<histogram name="DomainReliability.SetConfigRecreatedContext"
    enum="BooleanCreated">
  <obsolete>
    Removed November 2017.
  </obsolete>
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    When Domain Reliability receives a valid NEL configuration header for an
    origin with Domain Reliability active, whether or not it needed to recreate
    the origin's context to apply a changed config.
  </summary>
</histogram>

<histogram name="DomainReliability.UploadCollectorIndex">
  <obsolete>
    Removed November 2017.
  </obsolete>
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The index of the collector that a Domain Reliability upload was sent to.
    (Later collectors are only used when earlier collectors have failed.)
  </summary>
</histogram>

<histogram name="DomainReliability.UploadCollectorRetryDelay" units="ms">
  <obsolete>
    Removed November 2017.
  </obsolete>
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    After an upload to a collector finishes (successfully or not), the delay
    before the scheduler can send another upload to that collector. (If recent
    uploads were successful, this will be 0; if not, it will be based on the
    BackoffEntry and any Retry-After header received.)
  </summary>
</histogram>

<histogram name="DomainReliability.UploadDuration" units="ms">
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The elapsed time between starting and finishing a Domain Reliability upload.
  </summary>
</histogram>

<histogram name="DomainReliability.UploadFailover"
    enum="DomainReliability.BooleanFailover">
  <obsolete>
    Deprecated 11/2014; see UploadCollectorIndex
  </obsolete>
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    Whether a Domain Reliability upload was sent to a collector other than the
    first one listed in the config. (This only happens when an upload to the
    first collector fails.)
  </summary>
</histogram>

<histogram name="DomainReliability.UploadInterval" units="ms">
  <obsolete>
    Removed November 2017.
  </obsolete>
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The time between successive Domain Reliability uploads being started in the
    same context. (Can be arbitrarily long if no beacons are reported in a
    while.)
  </summary>
</histogram>

<histogram name="DomainReliability.UploadIntervalGlobal" units="ms">
  <obsolete>
    Removed November 2017.
  </obsolete>
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The time between successive Domain Reliability uploads being started across
    all contexts. (Can be arbitrarily long if no beacons are reported in a
    while.)
  </summary>
</histogram>

<histogram name="DomainReliability.UploadLatency" units="ms">
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The time from the first beacon in a Domain Reliability upload being recorded
    and that upload completing successfully. (Note that if some beacons are
    never uploaded successfully, they will not feature in this histogram at
    all.)
  </summary>
</histogram>

<histogram name="DomainReliability.UploadNetError" enum="NetErrorCodes">
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The network error code (or OK if none) returned by the URLFetcher when a
    Domain Reliability report is uploaded.
  </summary>
</histogram>

<histogram name="DomainReliability.UploadResponseCode" enum="HttpResponseCode">
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The HTTP response code returned by the Domain Reliability collector when a
    report is uploaded.
  </summary>
</histogram>

<histogram name="DomainReliability.UploadSuccess" enum="BooleanSuccess">
  <owner>juliatuttle@chromium.org</owner>
  <summary>Whether a Domain Reliability upload succeeded.</summary>
</histogram>

<histogram name="DomDistiller.BarCloseButtonUsage" enum="BooleanPanelWasOpen">
  <obsolete>
    UI rewrite to be an InfoBar makes this metric irrelevant as of 05/2017.
  </obsolete>
  <owner>mdjones@chromium.org</owner>
  <summary>
    Records if the close button was used before or after opening and viewing
    Reader Mode content.
  </summary>
</histogram>

<histogram name="DomDistiller.DistillabilityRejection" enum="DistillRejection">
  <owner>wychen@chromium.org</owner>
  <summary>
    The reason to reject distillability at PageDistillableAfterParsing time.
  </summary>
</histogram>

<histogram name="DomDistiller.DistillabilityScoreNMF.Negative" units="score">
  <owner>wychen@chromium.org</owner>
  <summary>
    Score of distillability from AdaBoost model, non-mobile-friendly only. The
    score shown here is multiplied by 100.
  </summary>
</histogram>

<histogram name="DomDistiller.DistillabilityScoreNMF.Positive" units="score">
  <owner>wychen@chromium.org</owner>
  <summary>
    Score of distillability from AdaBoost model, non-mobile-friendly only. The
    score shown here is multiplied by 100.
  </summary>
</histogram>

<histogram name="DomDistiller.DistillationQuality" enum="BooleanSuccess">
  <owner>nyquist@chromium.org</owner>
  <summary>
    Whether the perceived quality of the distillation of a web page was good.
  </summary>
</histogram>

<histogram name="DomDistiller.InfoBarUsage" enum="BooleanUsage">
  <owner>mdjones@chromium.org</owner>
  <summary>
    &quot;Used&quot; is recorded when the user clicks the infobar to enter
    Reader Mode. &quot;Not Used&quot; is recorded when the user clicks the close
    button. If there's no user action, nothing is recorded.
  </summary>
</histogram>

<histogram name="DomDistiller.LongArticleScoreNMF.Negative" units="score">
  <owner>wychen@chromium.org</owner>
  <summary>
    Score of long article from AdaBoost model, distillable and
    non-mobile-friendly only. The score shown here is multiplied by 100.
  </summary>
</histogram>

<histogram name="DomDistiller.LongArticleScoreNMF.Positive" units="score">
  <owner>wychen@chromium.org</owner>
  <summary>
    Score of long article from AdaBoost model, distillable and
    non-mobile-friendly only. The score shown here is multiplied by 100.
  </summary>
</histogram>

<histogram name="DomDistiller.PageDistillable" enum="DistillableType">
  <obsolete>
    PageDistillableAfterLoading and PageDistillableAfterParsing provide more
    details since 02/2016.
  </obsolete>
  <owner>cjhopman@chromium.org</owner>
  <summary>
    Records the &quot;Distillable Type&quot; (not distillable, mobile-friendly
    distillable, non-mobile-friendly distillable, etc) for each analyzed page.
  </summary>
</histogram>

<histogram name="DomDistiller.PageDistillableAfterLoading"
    enum="DistillableType2">
  <owner>wychen@chromium.org</owner>
  <summary>
    Records the &quot;Distillable Type&quot; (mobile-friendly not distillable,
    mobile-friendly distillable, non-mobile-friendly not distillable,
    non-mobile-friendly distillable) for each analyzed page after loading.
  </summary>
</histogram>

<histogram name="DomDistiller.PageDistillableAfterParsing"
    enum="DistillableType2">
  <owner>wychen@chromium.org</owner>
  <summary>
    Records the &quot;Distillable Type&quot; (mobile-friendly not distillable,
    mobile-friendly distillable, non-mobile-friendly not distillable,
    non-mobile-friendly distillable) for each analyzed page after parsing.
  </summary>
</histogram>

<histogram name="DomDistiller.PageDistilledType" enum="DistillableType">
  <obsolete>
    Not collected anymore.
  </obsolete>
  <owner>cjhopman@chromium.org</owner>
  <summary>
    Records the &quot;Distillable Type&quot; (not distillable, mobile-friendly
    distillable, non-mobile-friendly distillable, etc) for each distilled page.
  </summary>
</histogram>

<histogram name="DomDistiller.PageHasDistilledData"
    enum="BooleanHasDistilledData">
  <owner>kuan@chromium.org</owner>
  <summary>Records whether a page has distilled data.</summary>
</histogram>

<histogram name="DomDistiller.ReaderShownForPageLoad" enum="Boolean">
  <owner>mdjones@chromium.org</owner>
  <summary>
    Records if the panel became visible at any point after a page was navigated.
  </summary>
</histogram>

<histogram name="DomDistiller.Statistics.FirstPageWordCount" units="words">
  <owner>mdjones@chromium.org</owner>
  <summary>
    Records the number of words in a distilled page. This only records the first
    page of a multi-page article.
  </summary>
</histogram>

<histogram name="DomDistiller.Statistics.WordCount" units="words">
  <owner>nyquist@chromium.org</owner>
  <summary>
    Records the number of words in a distilled page. For articles with multiple
    pages, each page is counted separately.
  </summary>
</histogram>

<histogram name="DomDistiller.Time.ArticleProcessing" units="ms">
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Time spent in DomDistiller's identification of text content.
  </summary>
</histogram>

<histogram name="DomDistiller.Time.DistillationTotal" units="ms">
  <owner>yfriedman@chromium.org</owner>
  <summary>Complete time spent in DomDistiller's processing of a page.</summary>
</histogram>

<histogram name="DomDistiller.Time.DistillPage" units="ms">
  <owner>wychen@chromium.org</owner>
  <summary>
    Time spent in DistillPageImpl(), mostly ExecuteJavaScript(), including
    compilation and execution.
  </summary>
</histogram>

<histogram name="DomDistiller.Time.DocumentConstruction" units="ms">
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Time spent in creating DomDistiller's internal representation of the HTML
    document.
  </summary>
</histogram>

<histogram name="DomDistiller.Time.Formatting" units="ms">
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Time spent in DomDistiller's final processing of article content/formatting.
  </summary>
</histogram>

<histogram name="DomDistiller.Time.MarkupParsing" units="ms">
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Time spent in DomDistiller's processing of article metadata.
  </summary>
</histogram>

<histogram name="DomDistiller.Time.RunJavaScript" units="ms">
  <owner>wychen@chromium.org</owner>
  <summary>
    Time spent in ExecuteJavaScript() in DomDistiller. It includes JavaScript
    code transmission through IPC, parsing, compilation, execution, and
    returning the JSON back through IPC.
  </summary>
</histogram>

<histogram name="DomDistiller.Time.SwipeToPaint" units="ms">
  <obsolete>
    UI rewrite to be an InfoBar makes this metric irrelevant as of 05/2017.
  </obsolete>
  <owner>wychen@chromium.org</owner>
  <summary>
    Records the time from a swipe-up gesture on ReaderModePanel to the first
    paint of the empty template.
  </summary>
</histogram>

<histogram name="DomDistiller.Time.ViewerLoading" units="ms">
  <owner>wychen@chromium.org</owner>
  <summary>
    Records the time from the Reader Mode panel opening to the viewer loaded.
  </summary>
</histogram>

<histogram name="DomDistiller.Time.ViewingReaderModePage" units="ms">
  <owner>mdjones@chromium.org</owner>
  <summary>
    Records the amount of time a user spent on a Reader Mode Page.
  </summary>
</histogram>

<histogram name="DomDistiller.Time.ViewingReaderModePanel" units="ms">
  <obsolete>
    UI rewrite to be an InfoBar makes this metric irrelevant as of 05/2017.
  </obsolete>
  <owner>mdjones@chromium.org</owner>
  <summary>
    Records the amount of time between the Reader Mode panel opening and it
    closing or returning to the peeking state.
  </summary>
</histogram>

<histogram name="DOMStorage.clear" units="ms">
  <obsolete>
    Deprecated 2012.
  </obsolete>
  <owner>michaeln@chromium.org</owner>
  <summary>
    Duration to execute localStorage.clear() or sessionStorage.clear().
  </summary>
</histogram>

<histogram name="DOMStorage.getItem" units="ms">
  <obsolete>
    Deprecated 2012.
  </obsolete>
  <owner>michaeln@chromium.org</owner>
  <summary>
    Duration to execute localStorage.getItem() or sessionStorage.getItem().
  </summary>
</histogram>

<histogram name="DOMStorage.key" units="ms">
  <obsolete>
    Deprecated 2012.
  </obsolete>
  <owner>michaeln@chromium.org</owner>
  <summary>
    Duration to execute localStorage.key() or sessionStorage.key().
  </summary>
</histogram>

<histogram name="DOMStorage.length" units="ms">
  <obsolete>
    Deprecated 2012.
  </obsolete>
  <owner>michaeln@chromium.org</owner>
  <summary>
    Duration to execute localStorage.length() or sessionStorage.length().
  </summary>
</histogram>

<histogram name="DOMStorage.removeItem" units="ms">
  <obsolete>
    Deprecated 2012.
  </obsolete>
  <owner>michaeln@chromium.org</owner>
  <summary>
    Duration to execute localStorage.removeItem() or
    sessionStorage.removeItem().
  </summary>
</histogram>

<histogram name="DOMStorage.setItem" units="ms">
  <obsolete>
    Deprecated 2012.
  </obsolete>
  <owner>michaeln@chromium.org</owner>
  <summary>
    Duration to execute localStorage.setItem() or sessionStorage.setItem().
  </summary>
</histogram>

<histogram name="Doodle.ConfigDownloadOutcome"
    enum="DoodleConfigDownloadOutcome">
  <obsolete>
    Removed from code 2017-08.
  </obsolete>
  <owner>treib@chromium.org</owner>
  <summary>Outcome of downloading the Doodle config.</summary>
</histogram>

<histogram name="Doodle.ConfigDownloadTime" units="ms">
  <obsolete>
    Removed from code 2017-08.
  </obsolete>
  <owner>treib@chromium.org</owner>
  <summary>
    The time it took to download the Doodle config. Recorded only if the
    download succeeded and the received data was parsed without errors.
  </summary>
</histogram>

<histogram name="Download.AcceptRangesBytes.KBytes" units="KB">
  <owner>asanka@chromium.org</owner>
  <summary>The length of downloads for serves that accept byte ranges.</summary>
</histogram>

<histogram name="Download.AcceptRangesMissingOrInvalid.KBytes" units="KB"
    expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    The length of downloads for serves that do not specify whether the accept
    ranges, or have invalid ranges specified.
  </summary>
</histogram>

<histogram name="Download.AcceptRangesNone.KBytes" units="KB"
    expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    The length of downloads for serves that do not accept ranges.
  </summary>
</histogram>

<histogram name="Download.ActualBandwidth" units="Bytes/second">
  <obsolete>
    Deprecated January 2017.
  </obsolete>
  <owner>asanka@chromium.org</owner>
  <summary>The actual bandwidth (per read) of a download.</summary>
</histogram>

<histogram name="Download.ApiFunctions" enum="DownloadFunctions">
  <owner>asanka@chromium.org</owner>
  <summary>Downloads extension API function calls.</summary>
</histogram>

<histogram name="Download.AttachmentServices.Duration" units="ms">
  <owner>asanka@chromium.org</owner>
  <summary>
    Time taken to invoke IAttachmentExecute::Save() excluding the time taken to
    instantiate CLSID_AttachmentServices.
  </summary>
</histogram>

<histogram name="Download.AttachmentServices.Result"
    enum="AttachmentServicesResult" expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    Result of invoking (or attempting to invoke) Windows Attachment Services API
    via IAttachmentExecute::Save().
  </summary>
</histogram>

<histogram name="Download.BandwidthDiskBytesPerSecond"
    expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    Disk bandwidth (defined as total bytes divided by the amount of time blocked
    on write or close on the file descriptor) seen for a single download.
  </summary>
</histogram>

<histogram name="Download.BandwidthOverallBytesPerSecond">
  <owner>asanka@chromium.org</owner>
  <summary>
    Overall bandwidth seen for the download.  Note that this is measured at the
    point at which the file is written, and so will not take into account the
    time costs of activities that occur after file write is completed (e.g. safe
    browsing scanning).
  </summary>
</histogram>

<histogram name="Download.BandwidthUsed" units="%">
  <obsolete>
    Deprecated January 2017.
  </obsolete>
  <owner>asanka@chromium.org</owner>
  <summary>
    The percentage of the potential bandwidth actually used (per read) of a
    download.  An entry of 100% implies that Chrome was the limiting factor in
    download speed.
  </summary>
</histogram>

<histogram name="Download.BandwidthWithoutParallelStreamsBytesPerSecond"
    units="bytes/second">
  <obsolete>
    Deprecated April 2017.
  </obsolete>
  <owner>qinmin@chromium.org</owner>
  <summary>
    For parallel downloading, average disk bandwidth seen when only 1 stream is
    actively downloading the content. Other streams may have already finished,
    or have not been created yet. If a download was ever paused, this is not
    recorded.
  </summary>
</histogram>

<histogram name="Download.BandwidthWithParallelStreamsBytesPerSecond"
    units="bytes/second">
  <obsolete>
    Deprecated April 2017.
  </obsolete>
  <owner>qinmin@chromium.org</owner>
  <summary>
    For parallel downloading, average disk bandwidth seen when parallel streams
    are downloading the content. If a download was ever paused, this is not
    recorded.
  </summary>
</histogram>

<histogram name="Download.ClearAllSize">
  <obsolete>
    Deprecated 1/2017.
  </obsolete>
  <owner>asanka@chromium.org</owner>
  <summary>
    The number of downloads in history at the time it is cleared.
  </summary>
</histogram>

<histogram name="Download.ContentDisposition" enum="DownloadContentDisposition">
  <owner>asanka@chromium.org</owner>
  <summary>
    Content-Disposition header features. The presence of a Content-Disposition
    header, use of 'filename' and 'filename*' parameters, and string encoding
    schemes are counted for each unthrottled download. The total number
    downloads is Download.Counts[5] (Initiated and Unthrottled).
  </summary>
</histogram>

<histogram name="Download.ContentLength.Parallelizable" units="KB">
  <owner>qinmin@chromium.org</owner>
  <summary>
    File size calculated from the content-length header of successfully
    completed Parallelizable downloads.
  </summary>
</histogram>

<histogram name="Download.ContentType" enum="DownloadContentType">
  <obsolete>
    Deprecated 03/2017, and replaced by Download.Start.ContentType.
  </obsolete>
  <owner>asanka@chromium.org</owner>
  <summary>Content types that are downloaded.</summary>
</histogram>

<histogram name="Download.ContentType.Audio" enum="DownloadAudioType">
  <owner>jming@chromium.org</owner>
  <owner>xingliu@chromium.org</owner>
  <summary>Types of audio files that are downloaded.</summary>
</histogram>

<histogram name="Download.ContentType.Image" enum="DownloadImageType">
  <owner>asanka@chromium.org</owner>
  <summary>Types of images that are downloaded.</summary>
</histogram>

<histogram name="Download.ContentType.Text" enum="DownloadTextType">
  <owner>jming@chromium.org</owner>
  <owner>xingliu@chromium.org</owner>
  <summary>Types of text files that are downloaded.</summary>
</histogram>

<histogram name="Download.ContentType.Video" enum="DownloadVideoType">
  <owner>jming@chromium.org</owner>
  <owner>xingliu@chromium.org</owner>
  <summary>Types of video files that are downloaded.</summary>
</histogram>

<histogram base="true" name="Download.Counts" enum="DownloadCountType">
<!-- Name completed by histogram_suffixes name="DownloadSource" -->

  <owner>xingliu@chromium.org</owner>
  <summary>
    Various individual counts in the download system; see DownloadCountType for
    details.
  </summary>
</histogram>

<histogram name="Download.CountsChrome" enum="ChromeDownloadCountType">
  <owner>asanka@chromium.org</owner>
  <summary>
    Various individual counts in the download system, for example the number of
    downloads blocked by throttling from the DownloadRequestLimiter.
  </summary>
</histogram>

<histogram name="Download.DangerousDownloadValidated"
    enum="DownloadItem.DangerType">
  <owner>asanka@chromium.org</owner>
  <owner>felt@chromium.org</owner>
  <summary>
    User chose to save a download which was marked dangerous. Grouped by the
    type of danger.
  </summary>
</histogram>

<histogram name="Download.DangerousFile.DangerousDownloadValidated"
    enum="DownloadItem.DangerousFileType">
  <owner>asanka@chromium.org</owner>
  <owner>felt@chromium.org</owner>
  <summary>
    User chose to save a download which was marked DANGEROUS_FILE. Grouped by
    the type of file.
  </summary>
</histogram>

<histogram name="Download.DangerousFile.Discard"
    enum="DownloadItem.DangerousFileType">
  <owner>asanka@chromium.org</owner>
  <owner>felt@chromium.org</owner>
  <summary>
    A download which was marked DANGEROUS_FILE was discarded without the user
    directly choosing, because the browser was closed.  Grouped by the file
    extension.
  </summary>
</histogram>

<histogram name="Download.DangerousFile.Reason" enum="DangerousFile.Reason">
  <owner>jialiul@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    Indicates why a download is marked as DANGEROUS_FILE. Grouped by reason,
    such as Safe Browsing (SB) service is not available, and SB returns UNKOWN
    or SAFE verdict. The sum of all reasons should roughly equal to the
    DANGEROUS_FILE bucket count in Download.DownloadWarningShown.
  </summary>
</histogram>

<histogram name="Download.DangerousFile.UserDiscard"
    enum="DownloadItem.DangerousFileType">
  <owner>asanka@chromium.org</owner>
  <owner>felt@chromium.org</owner>
  <summary>
    User chose to discard a download which was marked DANGEROUS_FILE. Grouped by
    the file extension.
  </summary>
</histogram>

<histogram name="Download.Database.CreateDownloadDuration" units="ms"
    expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>Time taken to create a single download in the history DB.</summary>
</histogram>

<histogram name="Download.Database.IsAvailable" enum="BooleanAvailable">
  <owner>xingliu@chromium.org</owner>
  <summary>
    Records whether the download database is available when database startup
    completes, before starting any pending downloads.  If the database is
    available, it will provide the next download id. Or no download history will
    be persisted.
  </summary>
</histogram>

<histogram name="Download.Database.QueryDownloadDuration" units="ms"
    expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>Time taken to query all downloads from history DB.</summary>
</histogram>

<histogram name="Download.Database.UpdateDownloadDuration" units="ms"
    expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>Time taken to update a single download in the history DB.</summary>
</histogram>

<histogram name="Download.DatabaseDownloadExistsForDownloadSlice"
    units="Boolean">
  <owner>qinmin@chromium.org</owner>
  <summary>
    Whether a download can be found for a download slice in the DB. This
    histogram is recorded for each download slice row every time the database is
    loaded.
  </summary>
</histogram>

<histogram name="Download.DatabaseRecordDropped"
    enum="DownloadDatabaseRecordDroppedType" expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>Reason for dropping a record read in from the DB.</summary>
</histogram>

<histogram name="Download.DatabaseRemoveDownloadsCount"
    expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>Number of downloads removed from the history at once.</summary>
</histogram>

<histogram name="Download.DatabaseRemoveDownloadsTime" units="microseconds">
  <obsolete>
    Deprecated 2/2017
  </obsolete>
  <owner>asanka@chromium.org</owner>
  <summary>
    How long it took to delete a batch of downloads from history.
  </summary>
</histogram>

<histogram name="Download.DatabaseRemoveDownloadsTimePerRecord"
    units="nanoseconds/record">
  <obsolete>
    Deprecated 2/2017
  </obsolete>
  <owner>asanka@chromium.org</owner>
  <summary>
    How long it took to delete some downloads from history, per download.
  </summary>
</histogram>

<histogram name="Download.DeleteRetentionTime.Audio" units="hours">
  <owner>xingliu@chromium.org</owner>
  <summary>
    How long users keep downloaded audio files on disk. Recorded when the
    downloaded file is deleted.
  </summary>
</histogram>

<histogram name="Download.DeleteRetentionTime.Video" units="hours">
  <owner>xingliu@chromium.org</owner>
  <summary>
    How long users keep downloaded video files on disk. Recorded when the
    downloaded file is deleted.
  </summary>
</histogram>

<histogram name="Download.Discard" enum="DownloadItem.DangerType">
  <owner>asanka@chromium.org</owner>
  <owner>felt@chromium.org</owner>
  <summary>
    A download which was marked dangerous was discarded without the user
    directly choosing, because the browser was closed.  Grouped by the type of
    danger.
  </summary>
</histogram>

<histogram name="Download.DiskBandwidthUsedPercentage" units="%">
  <obsolete>
    Deprecated 1/2017.
  </obsolete>
  <owner>asanka@chromium.org</owner>
  <summary>
    The percentage of the available disk bandwidth that was used by the
    download.  100% indicates that the disk bandwidth was the limiting factor
    for the download.
  </summary>
</histogram>

<histogram name="Download.DOMEvent" enum="DownloadDOMEvent">
  <owner>asanka@chromium.org</owner>
  <summary>User actions in chrome://downloads</summary>
</histogram>

<histogram name="Download.DownloadDangerPrompt"
    enum="SBClientDownloadExtensions">
  <owner>jialiul@chromium.org</owner>
  <summary>
    Records when user is shown the download danger prompt while attempting to
    recover a blocked download from chrome://downloads, grouped by the type of
    file.
  </summary>
</histogram>

<histogram base="true" name="Download.DownloadSize" units="KB">
<!-- Name completed by histogram_suffixes name="Download.Parallelizable" -->

  <owner>asanka@chromium.org</owner>
  <summary>The size of successfully completed downloads.</summary>
</histogram>

<histogram name="Download.DownloadWarningShown" enum="DownloadItem.DangerType">
  <owner>asanka@chromium.org</owner>
  <summary>
    A download warning was shown in the shelf. Note that some downloads may not
    be shown on the shelf, e.g., if chrome://downloads is already open when the
    download completes, or if an extension is using the downloads API. Grouped
    by the type of danger.
  </summary>
</histogram>

<histogram name="Download.EstimatedTimeSavedWithParallelDownload" units="ms">
  <owner>qinmin@chromium.org</owner>
  <summary>
    Estimated time saved on a download when parallel downloading is enabled. To
    estimate this, the time spent on a download is classified into two
    categories. The fist category has only one stream active, while other
    streams are either finished, not started, or failed. And the second category
    has multiple streams active. By calculating the average bandwidth during the
    first category, a rough estimation on the time it will save is obtained by
    assuming all the bytes downloaded during the second category are downloaded
    by only one stream. If a download is ever paused, this is not recorded.
  </summary>
</histogram>

<histogram name="Download.EstimatedTimeWastedWithParallelDownload" units="ms">
  <owner>qinmin@chromium.org</owner>
  <summary>
    Similar to Download.EstimatedTimeSavedWithParallelDownload, but this
    estimates the time wasted on a download when parallel downloading is
    enabled.
  </summary>
</histogram>

<histogram name="Download.FeedbackDialogEnabled" enum="BooleanEnabled">
  <owner>asanka@chromium.org</owner>
  <summary>
    Whether the user enables dangerous download feedback reporting after viewing
    the opt-in dialog.
  </summary>
</histogram>

<histogram name="Download.FilePickerResult" enum="DownloadFilePickerResult"
    expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    How the user interacts with the file chooser when doing a &quot;Save
    As&quot; for non-full-page saves.
  </summary>
</histogram>

<histogram name="Download.FileThreadBlockedTime" expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    The amount of time in milliseconds the file thread blocks for each set of
    buffers drained from the incoming pipe (ms).
  </summary>
</histogram>

<histogram name="Download.FileThreadReceiveBuffers" expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    The number of buffers in a call to DownloadManager::UpdateDownload.
  </summary>
</histogram>

<histogram name="Download.FirstOpenTime" units="ms" expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    The time between a download completing and the file being opened for the
    first time.
  </summary>
</histogram>

<histogram name="Download.HistorySize">
  <owner>asanka@chromium.org</owner>
  <summary>
    The number of items in the History database, at the time a new download is
    recorded.
  </summary>
</histogram>

<histogram name="Download.HistorySize2">
  <owner>asanka@chromium.org</owner>
  <summary>
    The number of items in the History database, at the time a new download is
    recorded. Higher maximum, more buckets than Download.HistorySize.
  </summary>
</histogram>

<histogram name="Download.HttpResponseCode" enum="HttpResponseCode">
  <owner>xingliu@chromium.org</owner>
  <summary>The count of HTTP Response codes for download requests.</summary>
</histogram>

<histogram name="Download.InterruptedAtEndError" enum="NetErrorCodes">
  <owner>asanka@chromium.org</owner>
  <summary>
    Positive net error code that caused a download to be interrupted at the
    *end* of a download (when the number of bytes is known). This is only
    triggered when the total content size is known before any bytes are
    transferred, such as when a Content-Length header is supplied.
  </summary>
</histogram>

<histogram name="Download.InterruptedAtEndReason" enum="InterruptReason">
  <owner>asanka@chromium.org</owner>
  <summary>
    The reason that a download was interrupted at the *end* of a download (when
    the number of bytes is known). This is only triggered when the total content
    size is known before any bytes are transferred, such as when a
    Content-Length header is supplied.
  </summary>
</histogram>

<histogram name="Download.InterruptedError" enum="NetErrorCodes">
  <owner>asanka@chromium.org</owner>
  <summary>
    Positive net error code that caused a download to be interrupted.
  </summary>
</histogram>

<histogram name="Download.InterruptedOverrunBytes">
  <owner>asanka@chromium.org</owner>
  <summary>
    The total number of bytes minus the received number of bytes at the time
    that a download is interrupted. This is only triggered when the total
    content size is known before any bytes are transferred, such as when a
    Content-Length header is supplied.
  </summary>
</histogram>

<histogram base="true" name="Download.InterruptedReason" enum="InterruptReason">
<!-- Name completed by histogram_suffixes name="DownloadSource" -->

  <owner>xingliu@chromium.org</owner>
  <summary>The reason that a download was interrupted.</summary>
</histogram>

<histogram name="Download.InterruptedReceivedSizeK" units="KB">
  <owner>asanka@chromium.org</owner>
  <summary>
    The number of kilobytes received for a download at the time it is
    interrupted.
  </summary>
</histogram>

<histogram name="Download.InterruptedTotalSizeK" units="KB">
  <owner>asanka@chromium.org</owner>
  <summary>
    The reported total size in kilobytes for a download at the time it is
    interrupted. This is essentially the size reported by the Content-Length
    header. If no size is specified up-front, it is not recorded in the
    histogram. For example, a download transferred with chunked encoding will
    not be recorded.
  </summary>
</histogram>

<histogram name="Download.InterruptedUnderrunBytes">
  <owner>asanka@chromium.org</owner>
  <summary>
    The excessive number of bytes which have been received at the time that a
    download is interrupted. This is only triggered when the total content size
    is known before any bytes are transferred, such as when a Content-Length
    header is supplied.
  </summary>
</histogram>

<histogram name="Download.InterruptedUnknownSize"
    enum="DownloadInterruptedUnknownSizeType" expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    True if the size of an interrupted download is unknown, false if it is
    known.
  </summary>
</histogram>

<histogram name="Download.IOSDownloadedFileAction" enum="DownloadedFileAction">
  <owner>bdibello@chromium.org</owner>
  <summary>
    The action that a user takes on a file after it has been successfully
    downloaded on iOS.
  </summary>
</histogram>

<histogram name="Download.IOSDownloadedFileNetError" enum="NetErrorCodes">
  <owner>mrefaat@chromium.org</owner>
  <summary>
    Positive net error codes that happens in the case of download content fetch
    failure.
  </summary>
</histogram>

<histogram name="Download.IOSDownloadedFileStatusCode">
  <owner>stkhapugin@chromium.org</owner>
  <owner>eugenebut@chromium.org</owner>
  <owner>stuartmorgan@chromium.org</owner>
  <summary>
    HTTP status code returned when file download completes on iOS.
  </summary>
</histogram>

<histogram name="Download.IOSDownloadFileInBackground"
    enum="DownloadFileInBackground">
  <owner>eugenebut@chromium.org</owner>
  <summary>
    Logged when the download is completed (successfully or not) or in-progress
    download was cancelled because of the app termination. This histogram
    includes information whether the download was successful and whether or not
    the download task was running while the app was active.
  </summary>
</histogram>

<histogram name="Download.IOSDownloadFileResult" enum="DownloadFileResult">
  <owner>bdibello@chromium.org</owner>
  <summary>Result when a user attempts to download a file on iOS.</summary>
</histogram>

<histogram name="Download.IOSDownloadInstallDrivePromoShown" enum="Boolean">
  <owner>eugenebut@chromium.org</owner>
  <summary>
    Logged when the download was successfully completed. Bool value indicates
    whether or not Install Google Drive promo was shown to the user.
  </summary>
</histogram>

<histogram name="Download.IOSDownloadMimeType" enum="DownloadMimeTypeResult">
  <owner>eugenebut@chromium.org</owner>
  <summary>
    MIME type of a download response. Logged when the download UI was offered by
    the browser to the user.
  </summary>
</histogram>

<histogram name="Download.IOSDownloadPassKitResult"
    enum="DownloadPassKitResult">
  <owner>gchatz@chromium.org</owner>
  <summary>
    Result when a user attempts to download a PassKit file on iOS.
  </summary>
</histogram>

<histogram name="Download.IOSDownloadReplaced" enum="BooleanReplaced">
  <owner>eugenebut@chromium.org</owner>
  <summary>
    The user discarded in-progress download and replaced with the new one. Only
    recorded after the user interacts with a dialog offering the choice between
    replacing an in-progress download versus downloading separately to a new
    filename.
  </summary>
</histogram>

<histogram name="Download.IOSPresentAddPassesDialogResult"
    enum="PresentAddPassesDialogResult">
  <owner>eugenebut@chromium.org</owner>
  <summary>Result of an attempt to present Add Passes dialog on iOS.</summary>
</histogram>

<histogram name="Download.MaliciousDownloadClassified"
    enum="DownloadItem.DangerType">
  <owner>asanka@chromium.org</owner>
  <owner>felt@chromium.org</owner>
  <summary>
    A download has been marked as malicious. Grouped by the type of danger. Each
    download can only be recorded once; it will be labeled with the first type
    of danger spotted.
  </summary>
</histogram>

<histogram name="Download.MapErrorNetworkFailed" enum="NetErrorCodes">
  <owner>asanka@chromium.org</owner>
  <summary>
    Network error that produced a DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED
    result in DownloadResourceHandler::OnResponseCompleted().
  </summary>
</histogram>

<histogram name="Download.MapWinShErrorAccessDenied"
    enum="SpecialShFileOperationCodes" expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    Windows error that produced a DOWNLOAD_INTERRUPT_REASON_ACCESS_DENIED result
    in MapShFileOperationCodes().
  </summary>
</histogram>

<histogram name="Download.MapWinShErrorFileFailed"
    enum="SpecialShFileOperationCodes" expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    Windows error that produced a DOWNLOAD_INTERRUPT_REASON_FILE_FAILED result
    in MapShFileOperationCodes().
  </summary>
</histogram>

<histogram name="Download.MapWinShErrorTransientError"
    enum="SpecialShFileOperationCodes" expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    Windows error that produced a DOWNLOAD_INTERRUPT_REASON_FILE_TRANSIENT_ERROR
    result in MapShFileOperationCodes().
  </summary>
</histogram>

<histogram name="Download.OnChanged" expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    Percentage of DownloadItem::Observer::OnDownloadUpdated events that
    signified a change in the extension API representation of the download.
  </summary>
</histogram>

<histogram name="Download.OpenMethod" enum="DownloadOpenMethod">
  <owner>asanka@chromium.org</owner>
  <summary>
    Invocation count for methods of opening a download. For some file types,
    Chrome defaults to opening the file in the browser instead of invoking the
    system handler. The user has the option of overriding this behavior.
  </summary>
</histogram>

<histogram name="Download.OpensOutstanding">
  <owner>asanka@chromium.org</owner>
  <summary>The number of unopened downloads, when one is opened.</summary>
</histogram>

<histogram name="Download.OpenTime" units="ms">
  <owner>asanka@chromium.org</owner>
  <summary>
    The time between a download completing and the file being opened.
  </summary>
</histogram>

<histogram name="Download.OriginStateOnFullResumption"
    enum="DownloadOriginStateOnResumption" expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    Changes observed when a response is received for a full download resumption
    request.
  </summary>
</histogram>

<histogram name="Download.OriginStateOnPartialResumption"
    enum="DownloadOriginStateOnResumption" expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    Changes observed when a response is received for a partial (byte-range)
    download resumption request.
  </summary>
</histogram>

<histogram name="Download.PageTransition" enum="CorePageTransition">
  <owner>asanka@chromium.org</owner>
  <summary>
    The core page transition type for navigation initiated downloads. Not
    recorded for programmatic downloads. This metric is recorded when the
    response headers were received and processed for a download. The number of
    samples here should correspond to Download.Counts[8] (Started) -
    (programmatic downloads that don't have a page transition type).
  </summary>
</histogram>

<histogram name="Download.ParallelDownload.BandwidthRatioPercentage" units="%">
  <owner>xingliu@chromium.org</owner>
  <summary>
    Records the ratio of parallel streams bandwidth to single stream bandwidth
    in parallel download.
  </summary>
</histogram>

<histogram name="Download.ParallelDownload.CreationEvent"
    enum="ParallelDownloadCreationEvent">
  <owner>xingliu@chromium.org</owner>
  <summary>
    When parallel downloading feature is enabled, a download may be created as
    parallel download or fall back to normal download based on various factors.
    Records the total number of parallel and non-parallel downloads created when
    parallel downloading feature is enabled. Also records the reason why a
    parallel download falls back to normal download. The reasons are not
    mutually exclusive.
  </summary>
</histogram>

<histogram name="Download.ParallelDownload.RemainingTimeWhenBuildingRequests"
    units="seconds">
  <owner>qinmin@chromium.org</owner>
  <summary>
    Records the remaining download time when building parallel requests.
  </summary>
</histogram>

<histogram name="Download.ParallelDownload.TotalTimeRatioPercentage" units="%">
  <owner>xingliu@chromium.org</owner>
  <summary>
    Records the ratio of the actual total time of the download to the total time
    without parallel streams. The total time without parallel streams is
    calculated as the size of the file divided by the single stream bandwidth.
  </summary>
</histogram>

<histogram name="Download.ParallelDownloadAddStreamSuccess"
    enum="BooleanSuccess">
  <owner>xingliu@chromium.org</owner>
  <summary>
    Records if the byte stream reader of a subsequent request is successfully
    added to the download sink.
  </summary>
</histogram>

<histogram name="Download.ParallelDownloadRequestCount" units="requests">
  <owner>xingliu@chromium.org</owner>
  <summary>
    The total number of requests sent for a parallel download, including the
    initial request.
  </summary>
</histogram>

<histogram name="Download.Parallelizable.DownloadTime" units="ms">
  <owner>xingliu@chromium.org</owner>
  <summary>The download time for a parallelizable download.</summary>
</histogram>

<histogram name="Download.Parallelizable.FileSize" units="KB">
  <owner>xingliu@chromium.org</owner>
  <summary>The download size of a parallelizable download.</summary>
</histogram>

<histogram base="true" name="Download.ParallelizableDownloadBandwidth"
    units="bytes/second">
  <owner>qinmin@chromium.org</owner>
  <summary>
    For parallelizable download, average disk bandwidth seen for different
    settings. If a download was ever paused, this is not recorded.
  </summary>
</histogram>

<histogram base="true" name="Download.PathGenerationEvent"
    enum="DownloadPathGenerationEvent">
<!-- Name completed by histogram_suffixes name="DownloadType" -->

  <owner>xingliu@chromium.org</owner>
  <summary>
    The download path generation behavior which happens before download path
    validation in download target determination process.
  </summary>
</histogram>

<histogram base="true" name="Download.PathValidationResult"
    enum="DownloadPathValidationResult">
<!-- Name completed by histogram_suffixes name="DownloadType" -->

  <owner>xingliu@chromium.org</owner>
  <summary>
    The download path validation result before the final download target is
    determined.
  </summary>
</histogram>

<histogram name="Download.PotentialBandwidth" units="Bytes/second">
  <obsolete>
    Deprecated January 2017.
  </obsolete>
  <owner>asanka@chromium.org</owner>
  <summary>
    The maximum bandwidth (per read) that Chrome could have provided for the
    download.  If the actual bandwidth equals the potential bandwidth, that
    means that Chrome was the limiting factor for download bandwidth.
  </summary>
</histogram>

<histogram name="Download.ResourceHandlerBlockedPercentage" units="%"
    expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    The percentage of the lifetime of the DownloadResourceHandler for which it
    was blocked by downstream flow control.  0% indicates that the network
    bandwidth was the limiting factor for the download.
  </summary>
</histogram>

<histogram name="Download.ResultsRenderedTime" units="ms">
  <owner>dbeam@chromium.org</owner>
  <summary>
    Records the time taken to load the downloads Web UI and render (at least) a
    screen full of items. This is roughly equivalent to 'time to first
    meaningful paint' for the downloads page.
  </summary>
</histogram>

<histogram name="Download.SavePackage" enum="DownloadSavePackageEvent">
  <owner>asanka@chromium.org</owner>
  <summary>
    Events (e.g. Started, Cancelled, Finished, Write to Completed file, Write to
    Failed file) occuring within the state machine of a SavePackage operation.
  </summary>
</histogram>

<histogram name="Download.Service.Db.Operation.Failure"
    enum="Download.Service.ModelAction">
  <owner>xingliu@chromium.org</owner>
  <summary>Records a failed database operation.</summary>
</histogram>

<histogram name="Download.Service.Db.Operation.Success"
    enum="Download.Service.ModelAction">
  <owner>xingliu@chromium.org</owner>
  <summary>Records a successful database operation.</summary>
</histogram>

<histogram base="true" name="Download.Service.Db.Records" units="records">
<!-- Name completed by histogram_suffixes
     name="Download.Service.EntryState" -->

  <owner>xingliu@chromium.org</owner>
  <summary>
    The total number of database records used by download service, and the
    number of records in each entry state.
  </summary>
</histogram>

<histogram name="Download.Service.Driver.InterruptReason"
    enum="InterruptReason">
  <owner>xingliu@chromium.org</owner>
  <summary>
    The interrupt reason for failed downloads in download service.
  </summary>
</histogram>

<histogram name="Download.Service.Entry.Event"
    enum="Download.Service.EntryEvent">
  <owner>dtrainor@chromium.org</owner>
  <summary>An action the download service took on an active download.</summary>
</histogram>

<histogram name="Download.Service.Entry.ResumptionCount" units="attempts">
  <owner>dtrainor@chromium.org</owner>
  <summary>
    Records how many resumptions have taken place at the time of resumption for
    a download in the Download Service.  This differs from
    Download.Service.Entry.RetryCount, which records restarts.
  </summary>
</histogram>

<histogram name="Download.Service.Entry.RetryCount" units="attempts">
  <owner>dtrainor@chromium.org</owner>
  <summary>
    Records how many attempts have taken place at the time of a retry for a
    download in the Download Service.  This differs from
    Download.Service.Entry.ResumptionCount, which records resumptions not
    complete restarts.
  </summary>
</histogram>

<histogram name="Download.Service.Files.Cleanup.Attempts" units="attempts">
  <owner>shaktisahu@chromium.org</owner>
  <summary>
    The number of times download service tried to delete the download file
    before successfully deleting it.
  </summary>
</histogram>

<histogram base="true" name="Download.Service.Files.CleanUp.External"
    units="files">
<!-- Name completed by histogram_suffixes
     name="Download.Service.CleanupReason" -->

  <owner>xingliu@chromium.org</owner>
  <summary>
    The number of files that have been deleted by external application or the
    user, when performing clean up tasks in download service.
  </summary>
</histogram>

<histogram base="true" name="Download.Service.Files.CleanUp.Failure"
    units="attempts">
<!-- Name completed by histogram_suffixes
     name="Download.Service.CleanupReason" -->

  <owner>xingliu@chromium.org</owner>
  <summary>
    The number of failed file deletion attempts, when performing clean up tasks
    in download service.
  </summary>
</histogram>

<histogram base="true" name="Download.Service.Files.CleanUp.Success"
    units="files">
<!-- Name completed by histogram_suffixes
     name="Download.Service.CleanupReason" -->

  <owner>xingliu@chromium.org</owner>
  <summary>
    The number of files successfully deleted, when performing clean up tasks in
    download service.
  </summary>
</histogram>

<histogram name="Download.Service.Files.DirCreationError"
    enum="PlatformFileError">
  <owner>xingliu@chromium.org</owner>
  <summary>
    The error code when failed to create the download directory.
  </summary>
</histogram>

<histogram name="Download.Service.Files.DiskUsed" units="%">
  <owner>xingliu@chromium.org</owner>
  <summary>
    The percentage of disk space used by download service files. Recorded during
    initialization of the file monitor.
  </summary>
</histogram>

<histogram name="Download.Service.Files.FreeDiskSpace" units="%">
  <owner>xingliu@chromium.org</owner>
  <summary>
    The percentage of free disk space to total disk space. Recorded during
    initialization of the file monitor.
  </summary>
</histogram>

<histogram name="Download.Service.Files.LifeTime" units="ms">
  <owner>xingliu@chromium.org</owner>
  <summary>
    The lifestime of a download file, which begins from the download completion
    to the file being deleted by the clean up task.
  </summary>
</histogram>

<histogram name="Download.Service.Files.PathRenamed" enum="BooleanRenamed">
  <owner>xingliu@chromium.org</owner>
  <summary>
    Records if the final file path has been renamed by low level download
    library after the download is successfully completed.
  </summary>
</histogram>

<histogram base="true" name="Download.Service.Finish.FileSize" units="KB">
<!-- Name completed by histogram_suffixes
     name="Download.Service.CompletionType" -->

  <owner>xingliu@chromium.org</owner>
  <summary>
    The file size of completed download, including failed downloads.
  </summary>
</histogram>

<histogram base="true" name="Download.Service.Finish.Time" units="ms">
<!-- Name completed by histogram_suffixes
     name="Download.Service.CompletionType" -->

  <owner>xingliu@chromium.org</owner>
  <summary>The time to complete the download in download service.</summary>
</histogram>

<histogram name="Download.Service.Finish.Type"
    enum="Download.Service.CompletionType">
  <owner>xingliu@chromium.org</owner>
  <summary>The completion type for downloads in download service.</summary>
</histogram>

<histogram name="Download.Service.OnUploadDataReceived.PauseReason"
    enum="Download.Service.PauseReason">
  <owner>shaktisahu@chromium.org</owner>
  <summary>
    The reason for suspending a download right after the upload data is received
    from the client. Every pause will result in two entries in the histogram:
    ANY and a more specific reason.
  </summary>
</histogram>

<histogram name="Download.Service.PauseReason"
    enum="Download.Service.PauseReason">
  <owner>shaktisahu@chromium.org</owner>
  <summary>
    The reason for pausing an in-progress download. Every pause will result in
    two entries in the histogram: ANY and a more specific reason.
  </summary>
</histogram>

<histogram name="Download.Service.Recovery" enum="Download.Service.EntryStates">
  <owner>xingliu@chromium.org</owner>
  <summary>
    The state that the entry transitions to when recovery operation happens.
  </summary>
</histogram>

<histogram name="Download.Service.Request.BatteryRequirement"
    enum="Download.Service.BatteryRequirements">
  <owner>xingliu@chromium.org</owner>
  <summary>The battery requirement of the download request.</summary>
</histogram>

<histogram base="true" name="Download.Service.Request.ClientAction"
    enum="Download.Service.ServiceApiAction">
<!-- Name completed by histogram_suffixes
     name="Download.Service.Client" -->

  <owner>xingliu@chromium.org</owner>
  <summary>Records the API calls on download service.</summary>
</histogram>

<histogram name="Download.Service.Request.NetworkRequirement"
    enum="Download.Service.NetworkRequirements">
  <owner>xingliu@chromium.org</owner>
  <summary>The network requirement of the download request.</summary>
</histogram>

<histogram name="Download.Service.Request.Priority"
    enum="Download.Service.Priority">
  <owner>xingliu@chromium.org</owner>
  <summary>The priority of the download request.</summary>
</histogram>

<histogram base="true" name="Download.Service.Request.StartResponse"
    enum="Download.Service.ShouldDownload">
<!-- Name completed by histogram_suffixes
     name="Download.Service.Client" -->

  <owner>xingliu@chromium.org</owner>
  <summary>The start response of download attempts.</summary>
</histogram>

<histogram base="true" name="Download.Service.Request.StartResult"
    enum="Download.Service.StartResult">
<!-- Name completed by histogram_suffixes
     name="Download.Service.Client" -->

  <owner>xingliu@chromium.org</owner>
  <summary>The start result of download attempts.</summary>
</histogram>

<histogram base="true" name="Download.Service.StartUpStatus"
    enum="Download.Service.StartUpResult">
<!-- Name completed by histogram_suffixes
     name="Download.Service.StartUpStep" -->

  <owner>xingliu@chromium.org</owner>
  <summary>The start up result of the download service.</summary>
</histogram>

<histogram base="true" name="Download.Service.TaskScheduler.Status"
    enum="Download.Service.ScheduledTaskStatus">
<!-- Name completed by histogram_suffixes
     name="Download.Service.TaskType" -->

  <owner>xingliu@chromium.org</owner>
  <summary>
    The platform background tasks used by download service will invoke native
    functions after being scheduled. The tasks may be aborted or canceled. This
    metric records the status of background tasks when native functions are
    invoked.
  </summary>
</histogram>

<histogram name="Download.Service.Upload.EntryNotFound" enum="BooleanHit">
  <owner>shaktisahu@chromium.org</owner>
  <summary>
    Records if the entry has been deleted for some reason while we are waiting
    for the client to respond with the upload data.
  </summary>
</histogram>

<histogram base="true" name="Download.Service.Upload.HasUploadData"
    enum="BooleanUpload">
<!-- Name completed by histogram_suffixes
     name="Download.Service.Client" -->

  <owner>shaktisahu@chromium.org</owner>
  <summary>
    The download service uses a single code path for both downloading and
    uploading data.  This metric records whether a given request includes upload
    data. It is recorded upon  starting a download or upload, immediately after
    the client indicates whether the request includes upload data.
  </summary>
</histogram>

<histogram name="Download.Shelf.DragEvent" enum="Download.Shelf.DragEvent">
  <owner>sdy@chromium.org</owner>
  <summary>
    Events related to dragging a completed download from the shelf, which
    represents dragging a reference to the downloaded file.
  </summary>
</histogram>

<histogram name="Download.ShelfInProgressSizeOnAutoClose"
    expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    The number of download items in progress on the shelf when it closes
    automatically.
  </summary>
</histogram>

<histogram name="Download.ShelfInProgressSizeOnUserClose"
    expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    The number of download items in progress on the shelf when the user closes
    it.
  </summary>
</histogram>

<histogram name="Download.ShelfSizeOnAutoClose" expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    The number of download items on the shelf when it closes automatically.
  </summary>
</histogram>

<histogram name="Download.ShelfSizeOnUserClose" expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    The number of download items on the shelf when the user closes it.
  </summary>
</histogram>

<histogram name="Download.ShowDangerousDownloadConfirmationPrompt"
    enum="DownloadItem.DangerType">
  <owner>asanka@chromium.org</owner>
  <summary>
    User saw the confirm prompt to save a download which was marked dangerous.
    Grouped by the type of danger.
  </summary>
</histogram>

<histogram name="Download.Sources" enum="DownloadSource">
  <obsolete>
    Deprecated 1/2018, integrated into Download.Counts.DOWNLOAD_TRIGGERED_COUNT
  </obsolete>
  <owner>xingliu@chromium.org</owner>
  <summary>
    The initiation source (if initiated within the content layer of chrome) for
    a download.
  </summary>
</histogram>

<histogram name="Download.SourcesChrome" enum="ChromeDownloadSource">
  <owner>xingliu@chromium.org</owner>
  <summary>
    The initiation source (if initiated within the above-content layer of
    chrome) for a download.
  </summary>
</histogram>

<histogram name="Download.Start.ContentType" enum="DownloadContentType">
  <owner>shaktisahu@chromium.org</owner>
  <summary>Content types of the downloads.</summary>
</histogram>

<histogram name="Download.Start.ContentType.InsecureChain"
    enum="DownloadContentType">
  <owner>cthomp@chromium.org</owner>
  <owner>estark@chromium.org</owner>
  <summary>
    The content type of a download, for downloads where the final resolved URL
    or any redirect before the final URL are insecure. To normalize these
    numbers, divide the counts by the counts of Download.Start.ContentType (to
    measure the proportion for each content type downloaded insecurely) or by
    the sum of Download.Start.ContentType (to measure the proportion of a
    particular insecure download content type over all downloads).
  </summary>
</histogram>

<histogram name="Download.Start.ContentType.NormalProfile"
    enum="DownloadContentType">
  <owner>shaktisahu@chromium.org</owner>
  <summary>
    Content types of the downloads that are started in non-incognito profile.
  </summary>
</histogram>

<histogram name="Download.Start.ContentType.SecureChain"
    enum="DownloadContentType">
  <owner>cthomp@chromium.org</owner>
  <owner>estark@chromium.org</owner>
  <summary>
    The content type of a download, for downloads where the final resolved URL
    and all redirects before the final URL are secure. To normalize these
    numbers, divide the counts by the counts of Download.Start.ContentType (to
    measure the proportion for each content type downloaded securely) or by the
    sum of Download.Start.ContentType (to measure the proportion of a particular
    secure download content type over all downloads).
  </summary>
</histogram>

<histogram name="Download.TargetConnectionSecurity"
    enum="DownloadConnectionSecurity">
  <owner>jialiul@chromium.org</owner>
  <summary>
    The connection security state of a download, indicating whether its final
    resolved url and the redirects before final url are secure.
  </summary>
</histogram>

<histogram name="Download.Time" units="ms" expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>Time between the start of a download and its completion.</summary>
</histogram>

<histogram name="Download.TimeToRenameFailureAfterInitialFailure" units="ms"
    expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    Time elapsed until a retried download file rename operation failed for the
    last time after the initial rename failed.
  </summary>
</histogram>

<histogram name="Download.TimeToRenameSuccessAfterInitialFailure" units="ms"
    expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    Time elapsed until a retried download file rename operation succeeded after
    the initial rename failed.
  </summary>
</histogram>

<histogram name="Download.UserDiscard" enum="DownloadItem.DangerType">
  <owner>asanka@chromium.org</owner>
  <owner>felt@chromium.org</owner>
  <summary>
    User chose to discard a download which was marked dangerous.  Grouped by the
    type of danger.
  </summary>
</histogram>

<histogram name="Download.WriteLoopCount">
  <obsolete>
    Deprecated 1/2017
  </obsolete>
  <owner>asanka@chromium.org</owner>
  <summary>
    The number of iterations for the write loop in BaseFile::AppendDataTofile().
  </summary>
</histogram>

<histogram name="Download.WriteSize" units="Bytes">
  <obsolete>
    Deprecated 1/2017
  </obsolete>
  <owner>asanka@chromium.org</owner>
  <summary>The write size for calls to BaseFile::AppendDataTofile().</summary>
</histogram>

<histogram name="DownloadableStrings.InstallTime" units="ms">
  <obsolete>
    Deprecated 2/2018
  </obsolete>
  <owner>digit@chromium.org</owner>
  <summary>
    The time to succesfully download and install the DownloadableStrings
    component on Android.
  </summary>
</histogram>

<histogram name="DownloadableStrings.SimCountryCode"
    enum="DownloadableStrings.MobileCountryCode">
  <obsolete>
    Deprecated 2/2018
  </obsolete>
  <owner>digit@chromium.org</owner>
  <summary>
    The mobile country code (MCC) of the device's SIM card, if available (in the
    [200..999] range), or 0 for &quot;undetermined&quot;. This is collected on
    Chrome startup. For devices with several SIM cards, this only reports the
    code of the SIM card in use during startup.
  </summary>
</histogram>

<histogram name="DownloadableStrings.Status"
    enum="DownloadableStrings.InstallStatus">
  <obsolete>
    Deprecated 2/2018
  </obsolete>
  <owner>digit@chromium.org</owner>
  <summary>
    The status code returned after trying to install and update the
    DownloadableStrings component.
  </summary>
</histogram>

<histogram name="DownloadableStrings.Timeout" units="ms">
  <obsolete>
    Deprecated 2/2018
  </obsolete>
  <owner>digit@chromium.org</owner>
  <summary>
    The timeout reported by the component updater when trying to install the
    DownloadableStrings component fails with a specific error.
  </summary>
</histogram>

<histogram name="Drive.BatchUploadResponseCode" enum="HttpResponseCode">
  <owner>hirono@chromium.org</owner>
  <summary>Respose code of batch upload request.</summary>
</histogram>

<histogram name="Drive.CacheDBOpenStatus" enum="DriveCacheDBOpenStatus">
  <obsolete>
    Deprecated 8/2013.
  </obsolete>
  <owner>joshwoodward@google.com</owner>
  <summary>Status of drive cache metadata database open.</summary>
</histogram>

<histogram name="Drive.DeltaFeedLoadTime" units="ms" expires_after="2019-01-01">
  <owner>weifangsun@chromium.org</owner>
  <owner>sashab@chromium.org</owner>
  <summary>
    Time spent to load the delta change list information from the server.
  </summary>
</histogram>

<histogram name="Drive.DirectoryFeedLoadTime" units="ms"
    expires_after="2019-01-01">
  <owner>weifangsun@chromium.org</owner>
  <owner>sashab@chromium.org</owner>
  <summary>
    Time spent to load the list of files in a single directory from Google Drive
    server.
  </summary>
</histogram>

<histogram name="Drive.DownloadFromDriveFileSize" units="KB">
  <owner>mtomasz@chromium.org</owner>
  <summary>
    Sizes of files being downloaded from Drive. Temporary histogram for
    gathering data for http://crbug.com/229650.
  </summary>
</histogram>

<histogram name="Drive.EntireFeedLoadTime" units="microseconds">
  <obsolete>
    Deprecated 12/2013 due to the UMA stat bucket layout change. We'll use
    Drive.FullFeedLoadTime instead.
  </obsolete>
  <owner>joshwoodward@google.com</owner>
  <summary>
    Time spent to load the entire file system information from the server
  </summary>
</histogram>

<histogram name="Drive.EntryKind" enum="DriveEntryKind">
  <obsolete>
    Deprecated 10/2012.
  </obsolete>
  <owner>joshwoodward@google.com</owner>
  <summary>
    Provides breakdown of specific formats for hosted documents. Recorded when
    feed is loaded from the server.
  </summary>
</histogram>

<histogram name="Drive.FileFormat" enum="DriveFileFormat">
  <obsolete>
    Deprecated 10/2012.
  </obsolete>
  <owner>joshwoodward@google.com</owner>
  <summary>
    Provides breakdown of specific file formats for regular files. Recorded when
    feed is loaded from the server.
  </summary>
</histogram>

<histogram name="Drive.FilesListRequestRunner.ApiErrorCode"
    enum="DriveApiErrorCode">
  <owner>mtomasz@chromium.org</owner>
  <summary>
    Error codes returned by the Drive API for files list requests executed via
    the FilesListRequestRunner class.
  </summary>
</histogram>

<histogram name="Drive.FilesListRequestRunner.MaxResults">
  <owner>mtomasz@chromium.org</owner>
  <summary>
    Maximum number of results for each files list request using the Drive API.
  </summary>
</histogram>

<histogram name="Drive.FullFeedLoadTime" units="ms" expires_after="2019-01-01">
  <owner>weifangsun@chromium.org</owner>
  <owner>sashab@chromium.org</owner>
  <summary>
    Time spent to load the entire file system information from the server
  </summary>
</histogram>

<histogram name="Drive.InitialFeedLoadTime" units="microseconds">
  <obsolete>
    Deperecated 12/2013 since it did not record meaningful information.
    Drive.DirectoryFeedLoadTime should be checked for measuring the time until
    the user sees the first response of file lists.
  </obsolete>
  <owner>joshwoodward@google.com</owner>
  <summary>
    Time spent to load the initial part of the file system information from the
    server
  </summary>
</histogram>

<histogram name="Drive.MetadataDBInitResult" enum="DriveMetadataDBInitStatus">
  <owner>joshwoodward@google.com</owner>
  <summary>Result of drive resource metadata database initialization.</summary>
</histogram>

<histogram name="Drive.MetadataDBOpenExistingResult"
    enum="DriveMetadataDBInitStatus">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Result of attempt to open existing drive resource metadata database.
  </summary>
</histogram>

<histogram name="Drive.MetadataDBValidityCheckFailureReason"
    enum="DriveMetadataDBValidityCheckFailureReason">
  <owner>bengold@chromium.org</owner>
  <owner>hashimoto@chromium.org</owner>
  <summary>
    Reason of drive resource metadata database validity check failure. Recorded
    when the validity check fails during Drive metadata initialization triggered
    by profile initialization.
  </summary>
</histogram>

<histogram name="Drive.MetadataDBVersionBeforeUpgradeCheck">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Version number of drive resource metadata DB found on the disk before
    checking whether it should be upgraded. Recorded during Drive metadata
    initialization triggered by profile initialization.
  </summary>
</histogram>

<histogram name="Drive.NumberOfCacheFilesRecoveredAfterDBCorruption">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Number of files recovered from Drive cache directory. Recorded when file
    recovery takes place after metadata DB corruption is found during metadata
    DB initialization.
  </summary>
</histogram>

<histogram name="Drive.NumberOfHostedDocuments">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Number of hosted documents (spreadsheets etc.) on Drive. Logged when Drive
    is first accessed.
  </summary>
</histogram>

<histogram name="Drive.NumberOfRegularFiles">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Number of regualr files on Drive.  Logged when Drive is first accessed.
  </summary>
</histogram>

<histogram name="Drive.NumberOfTotalFiles">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Number of total files (regualr files + hosted documents) on Drive.  Logged
    when Drive is first accessed.
  </summary>
</histogram>

<histogram name="Drive.PushNotificationInitiallyEnabled" enum="BooleanEnabled">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Tracks whether the push notification is initially enabled for Drive.
    Recorded when the first notification is processed. Notification is emulated
    by polling if the push notication is disabled.
  </summary>
</histogram>

<histogram name="Drive.PushNotificationRegistered" enum="BooleanRegistered">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Tracks whether the push notification request is registered correctly for
    Drive. Recorded when the push notification manager is initialized.
  </summary>
</histogram>

<histogram name="Drive.SearchMetadataTime" units="microseconds">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Time spent to perform an incremental search for auto completion of files on
    Drive. This time is collected for every partial query the user types for
    auto completion.  For instance, if the user types &quot;faq&quot;,
    incremental searches are performed for &quot;f&quot;, &quot;fa&quot;, and
    &quot;faq&quot; respectively.

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

<histogram name="Drive.TotalFileCountInBatchUpload">
  <owner>hirono@chromium.org</owner>
  <summary>Total file count contained in a drive batch upload request.</summary>
</histogram>

<histogram name="Drive.TotalFileSizeInBatchUpload" units="KB">
  <owner>hirono@chromium.org</owner>
  <summary>Total file size contained in a drive batch upload request.</summary>
</histogram>

<histogram name="Drive.TransferBlockedOnJobs" units="jobs">
  <owner>mtomasz@chromium.org</owner>
  <summary>
    Number of jobs which have to be completed before a newly added download or
    download from or to Drive is requested. Temporary histogram for gathering
    data for http://crbug.com/229650.
  </summary>
</histogram>

<histogram name="Drive.UploadProtocol" enum="DriveUploadProtocol">
  <owner>hirono@chromium.org</owner>
  <summary>
    Upload protocol for each file. e.g. Batch upload including 5 files triggers
    the metric 5 times.
  </summary>
</histogram>

<histogram name="Drive.UploadToDriveFileSize" units="KB">
  <owner>mtomasz@chromium.org</owner>
  <summary>
    Sizes of files being uploaded to Drive. Temporary histogram for gathering
    data for http://crbug.com/229650.
  </summary>
</histogram>

<histogram name="DriveOffline.CrosAutoEnableOutcome"
    enum="CrosEnableDriveOfflineOutcome">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Outcome of enabling Google Drive offline mode automatically when a user
    first logs into a Chrome OS device. This process involves opening a hidden
    web page in the context of the Google Drive hosted app to perform the
    initialization of offline mode.
  </summary>
</histogram>

<histogram name="DrmUtil.CreateDisplaySnapshot.HasEdidBlob" enum="Boolean">
  <owner>andrescj@chromium.org</owner>
  <owner>mcasas@chromium.org</owner>
  <summary>
    Whether an EDID blob was detected. This UMA is recorded whenever we attempt
    to parse the EDID from a display.
  </summary>
</histogram>

<histogram name="DrmUtil.GetColorSpaceFromEdid.ChecksOutcome"
    enum="EdidColorSpaceChecksOutcome">
  <owner>andrescj@chromium.org</owner>
  <owner>mcasas@chromium.org</owner>
  <summary>
    When attempting to get the color space from an EDID blob, whether the sanity
    checks passed (and if not, which check failed). This UMA is recorded
    whenever the color space is extracted from an EDID blob.
  </summary>
</histogram>

<histogram name="EasyUnlock.AuthenticationSuccess" enum="BooleanSuccess">
  <obsolete>
    Deprecated as of 03/2018.
  </obsolete>
  <owner>joshwoodward@google.com</owner>
  <owner>isherman@chromium.org</owner>
  <summary>
    When Easy Unlock attempts to authenticate the secure connection between a
    Chromebook (or other Chrome device) and an Android phone, whether the
    authentication succeeded.
  </summary>
</histogram>

<histogram name="EasyUnlock.AuthEvent.DidUserManuallyUnlockPhone"
    enum="EasyUnlockDidUserManuallyUnlockPhone">
  <owner>isherman@google.com</owner>
  <owner>xiaowenx@google.com</owner>
  <owner>xiyuan@google.com</owner>
  <summary>
    Upon a successful Smart Lock unlock or signin, records whether the user's
    phone was locked during any point while the lock screen was up. This can be
    used to get a sense for whether users are using Smart Lock for Chromebook
    without something like Smart Lock for Android to keep their phones unlocked.
  </summary>
</histogram>

<histogram name="EasyUnlock.AuthEvent.SignIn" enum="EasyUnlockAuthEvent">
  <owner>isherman@google.com</owner>
  <owner>xiaowenx@google.com</owner>
  <owner>xiyuan@google.com</owner>
  <summary>
    Measures the use of Smart Lock on the sign-in screen: records whether a
    Smart Lock login succeeded or failed; or if a password fallback was used,
    the reason why. Recorded upon a login attempt for users who have the Smart
    Lock feature enabled.
  </summary>
</histogram>

<histogram name="EasyUnlock.AuthEvent.SignIn.Duration" units="ms">
  <owner>isherman@google.com</owner>
  <owner>tengs@google.com</owner>
  <owner>xiaowenx@google.com</owner>
  <summary>
    Measures the time elapsed between the user focusing their user pod and
    signing in using Smart Lock.
  </summary>
</histogram>

<histogram name="EasyUnlock.AuthEvent.Unlock" enum="EasyUnlockAuthEvent">
  <owner>isherman@google.com</owner>
  <owner>xiaowenx@google.com</owner>
  <owner>xiyuan@google.com</owner>
  <summary>
    Measures the use of Smart Lock on the lock screen: records whether a Smart
    Lock unlock attempt succeeded or failed; or if a password fallback was used,
    the reason why. Recorded upon an unlock attempt for users who have the Smart
    Lock feature enabled.
  </summary>
</histogram>

<histogram name="EasyUnlock.AuthEvent.Unlock.Duration" units="ms">
  <owner>isherman@google.com</owner>
  <owner>tengs@google.com</owner>
  <owner>xiaowenx@google.com</owner>
  <summary>
    Measures the time elapsed between the lock screen being shown and the user
    unlocking the device using Smart Lock. The lock screen is typically shown
    when the user opens their Chromebook's lid (or otherwise wakes the
    computer), but can also be shown when the user manually locks the device.
  </summary>
</histogram>

<histogram name="EasyUnlock.AuthProximity.RemoteDeviceModelHash"
    enum="EasyUnlockDeviceModelHash">
  <owner>tengs@chromium.org</owner>
  <owner>xiaowenx@chromium.org</owner>
  <summary>
    The hash of the phone model used to successfully sign in or unlock using
    Smart Lock.
  </summary>
  <details>
    This hash is calculated by taking the first 4 bytes of the MD5 hash of the
    device model.
  </details>
</histogram>

<histogram name="EasyUnlock.AuthProximity.RollingRssi" units="dBm">
  <owner>tengs@chromium.org</owner>
  <owner>xiaowenx@chromium.org</owner>
  <summary>
    Measures the exponentially weighted rolling average of the received signal
    strength indicator (RSSI) of the phone when the user successfully unlocks or
    signs in using Smart Lock.
  </summary>
  <details>
    The exponentially weighted averaging formula is:

      rollingRssi = (1 - weight) * rollingRssi + weight * currentRssi;

    RSSI readings are inherently noisy, so this averaging gives a smoothed RSSI
    value to work with as a heuristic for proximity.

    If no RSSI was read, then a sentinel value of 127 will be recorded.
  </details>
</histogram>

<histogram name="EasyUnlock.AuthProximity.TimeSinceLastZeroRssi" units="ms">
  <owner>tengs@chromium.org</owner>
  <owner>xiaowenx@chromium.org</owner>
  <summary>
    Measures the time delta in milliseconds since the last zero RSSI value was
    read to when the user successfully unlocks or signs in using Smart Lock.
  </summary>
  <details>
    A zero RSSI value is special because both Bluetooth devices in a connection
    attempt to maintain by adjusting their transmit power levels. This time
    delta can be used as a possible heuristic to determine that the phone is
    close to the local device.

    If no RSSI was read, then an overflow value will be recorded.
  </details>
</histogram>

<histogram name="EasyUnlock.AuthProximity.TransmitPowerDelta" units="dBm">
  <owner>tengs@chromium.org</owner>
  <owner>xiaowenx@chromium.org</owner>
  <summary>
    Measures the difference between the current transmit power and the maximum
    transmit power of the local device when the user successfully unlocks or
    signs in using Smart Lock.
  </summary>
  <details>
    Devices connected using classic Bluetooth adjust their transmit power
    dynamically to optimize power and signal strength. The difference between
    the current transmit power and maximum transmit power can be used as a
    heurstic to determine if the phone is close to the local device.

    According to the Bluetooth specs, there are three classes of devices, with a
    maximum transmit power of 20, 4, and 0 dBm respectively.

    If no transmit power was read, then a sentinel value of 127 will be
    recorded.
  </details>
</histogram>

<histogram name="EasyUnlock.BluetoothAvailability"
    enum="EasyUnlockBluetoothType">
  <obsolete>
    Deprecated as of 02/2017.
  </obsolete>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    Reports the type of Bluetooth adapter present in the device.
  </summary>
  <details>
    Statistics about what Bluetooth capabilities are available will determine
    how the EasyUnlock feature gets developed and deployed across platforms.

    This value is logged only once during the lifetime of the Chrome process,
    shortly after it starts up.  If a Bluetooth USB adapter is inserted after
    that point, the change will not be registered until Chrome restarts.
  </details>
</histogram>

<histogram name="EasyUnlock.ClickedButton" enum="EasyUnlockButton">
  <owner>joshwoodward@google.com</owner>
  <owner>tbarzic@chromium.org</owner>
  <summary>Button clicked in EasyUnlock app during setup process.</summary>
</histogram>

<histogram name="EasyUnlock.NotificationEvent"
    enum="EasyUnlockNotificationEvent">
  <obsolete>
    Deprecated 02/2015. Replaced by EasyUnlock.Setup.PromoNotificationEvent.
  </obsolete>
  <owner>joshwoodward@google.com</owner>
  <owner>tbarzic@chromium.org</owner>
  <summary>
    Tracks events related to notifications used by EasyUnlock feature. For
    example a specific EasyUnlock notification being shown or clicked.
  </summary>
</histogram>

<histogram name="EasyUnlock.RemoteLockScreenState"
    enum="EasyUnlockRemoteLockScreenState">
  <owner>joshwoodward@google.com</owner>
  <owner>tengs@chromium.org</owner>
  <owner>isherman@chromium.org</owner>
  <summary>
    Whether a lock screen and a trust agent are enabled on the remote device
    (Android phone) for Easy Unlock. Recorded once per status update message
    from the remote device. A status update message is expected to be sent once
    when the secure channel between the local and the remote device is
    established, and also each time the user-presence status changes on the
    remote side.
  </summary>
</histogram>

<histogram name="EasyUnlock.Setup.Devices.Count.Eligible">
  <owner>isherman@chromium.org</owner>
  <owner>xiaowenx@chromium.org</owner>
  <summary>
    The number of eligible devices that the CryptAuth server returns during the
    Smart Lock setup flow.
  </summary>
  <details>
    Note that a single user might report multiple values, for example if they
    try to complete the setup flow with a device in airplane mode, and then try
    again taking the device out of airplane mode.
  </details>
</histogram>

<histogram name="EasyUnlock.Setup.Devices.Count.Ineligible">
  <owner>isherman@chromium.org</owner>
  <owner>xiaowenx@chromium.org</owner>
  <summary>
    The number of ineligible devices that the CryptAuth server returns during
    the Smart Lock setup flow.
  </summary>
  <details>
    Note that a single user might report multiple values, for example if they
    try to complete the setup flow with a device in airplane mode, and then try
    again taking the device out of airplane mode.
  </details>
</histogram>

<histogram name="EasyUnlock.Setup.Devices.HasSecureScreenLock"
    enum="EasyUnlockHasSecureScreenLock">
  <owner>isherman@chromium.org</owner>
  <owner>xiaowenx@chromium.org</owner>
  <summary>
    Whether the user's phone has a secure screen lock installed. Recorded during
    Smart Lock setup, when the user's phone first connects to the Chromebook.
  </summary>
</histogram>

<histogram name="EasyUnlock.Setup.Devices.HasTrustAgentEnabled"
    enum="EasyUnlockHasTrustAgentEnabled">
  <owner>isherman@chromium.org</owner>
  <owner>xiaowenx@chromium.org</owner>
  <summary>
    Whether the user's phone has a trust agent -- e.g. Smart Lock for Android --
    enabled. Recorded during Smart Lock (for Chrome) setup, when the user's
    phone first connects to the Chromebook.
  </summary>
  <details>
    Note that this histogram tracks whether the setting under Settings ~&gt;
    Security ~&gt; Trust agents ~&gt; Smart Lock (Google) (or any other trust
    agent) is enabled. The Smart Lock trust agent is enabled by default for
    users who have ascure lock screen. This metric does _not_ measure whether
    users have any Smart Lock trustlets enabled.
  </details>
</histogram>

<histogram name="EasyUnlock.Setup.Devices.IneligibilityReason"
    enum="EasyUnlockDeviceIneligibilityReason">
  <owner>isherman@chromium.org</owner>
  <owner>xiaowenx@chromium.org</owner>
  <summary>
    Records the most actionable reason why none of a user's devices were
    eligible as unlock keys for Smart Lock. This is recorded during the Smart
    Lock setup flow, only if the CryptAuth server returns no eligible devices
    for the user.
  </summary>
  <details>
    To be precise, this metric tracks the _least_ actionable _reason_ why the
    _most_ actionable _device_ is not eligible as an unlock key. For example,
    suppose that the user has 10 ineligible devices returned. This metric tries
    to identify the most likely candidate device for use as a Smart Lock key,
    and then records the most confounding reason why that device is still not
    eligible to be used as an unlock key.
  </details>
</histogram>

<histogram name="EasyUnlock.Setup.Progress.SansPromo"
    enum="EasyUnlockSetupProgress">
  <owner>jhawkins@chromium.org</owner>
  <summary>
    Records events at each step of the Setup process, when the Setup flow is
    initiated without the promotion notification.
  </summary>
</histogram>

<histogram name="EasyUnlock.Setup.Progress.ViaPromo"
    enum="EasyUnlockSetupProgress">
  <owner>jhawkins@chromium.org</owner>
  <summary>
    Records events at each step of the Setup process, when the Setup flow is
    initiated via the promotion notification.
  </summary>
</histogram>

<histogram name="EasyUnlock.Setup.PromoNotificationEvent"
    enum="EasyUnlockPromoNotificationEvent">
  <owner>isherman@chromium.org</owner>
  <owner>xiaowenx@chromium.org</owner>
  <summary>
    Measures user interactions with the Smart Lock promo notification.
  </summary>
  <details>
    Due to technical limitations of the implementation, it is hard to track
    precisely which users opened the setup app as a result of interacting with
    the promo notification. This metric measures setup app interactions from all
    users who click on the promo notification, and subsequently launch the setup
    app.
  </details>
</histogram>

<histogram name="EasyUnlock.SetupStateOnClose" enum="EasyUnlockSetupState">
  <obsolete>
    Deprecated as of 03/2018.
  </obsolete>
  <owner>joshwoodward@google.com</owner>
  <owner>tbarzic@chromium.org</owner>
  <summary>
    The state of EasyUnlock setup when the app window was closed by user.
  </summary>
</histogram>

<histogram name="EasyUnlock.SignIn.LoginEvent" enum="EasyUnlockAuthEvent">
  <obsolete>
    Deprecated 02/2015; replaced by EasyUnlock.AuthEvent.SignIn.
  </obsolete>
  <owner>xiaowenx@google.com</owner>
  <owner>xiyuan@google.com</owner>
  <summary>
    Measures the use of Easy sign-in: records whether an Easy sign-in login
    succeeded or failed; or if a password fallback was used, the reason why.
    Recorded upon a login attempt for users who have the Easy sign-in feature
    enabled.
  </summary>
</histogram>

<histogram name="EasyUnlock.StartupTimeFromSuspend" units="ms">
  <owner>joshwoodward@google.com</owner>
  <owner>tengs@chromium.org</owner>
  <summary>
    The time it takes after resuming from a suspended state (ie. opening the
    Chromebook lid) to when a remote device is connected and a request is made.
    Note that it is possible for the remote device not to be present when
    resuming from suspend, and the device may be connected at a later time.
    Therefore, large values for this metric may not be too meaningful due to
    meddling users.
  </summary>
</histogram>

<histogram name="EasyUnlock.TrialRun.Events" enum="EasyUnlockTrialRunEvents">
  <owner>isherman@chromium.org</owner>
  <owner>xiaowenx@chromium.org</owner>
  <summary>
    Records when the Easy Unlock trial run is launched, and when the user
    attempts to click on the lock icon during the trial run.
  </summary>
  <details>
    If a user clicks on the lock icon more than once, then the &quot;clicked
    lock icon&quot; event counter will be incremented more than once as well.
    Hence, the &quot;user count&quot; data shows how many users ever clicked on
    the lock icon during the trial run. From the raw (non-&quot;user
    count&quot;) data, we can also see whether users click on the icon multiple
    times.
  </details>
</histogram>

<histogram name="EasyUnlock.UnlockEvent" enum="EasyUnlockUnlockEvent">
  <obsolete>
    Deprecated 02/2015; replaced by EasyUnlock.AuthEvent.Unlock.
  </obsolete>
  <owner>joshwoodward@google.com</owner>
  <owner>tbarzic@chromium.org</owner>
  <summary>Screen unlock events detected while EasyUnlock was enabled.</summary>
</histogram>

<histogram name="EmbeddedWorkerInstance.ExistingProcessAllocation" units="ms">
  <obsolete>
    Deprecated 03/2016; replaced by
    EmbeddedWorkerInstance.Start.SendStartWorker_ExistingProcess and
    EmbeddedWorkerInstance.Start.TimeToURLJob_ExistingProcess.
  </obsolete>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time taken to allocate a process to start the EmbeddedWorkerInstance.
    Recorded when an existing process was used.
  </summary>
</histogram>

<histogram name="EmbeddedWorkerInstance.NewProcessAllocation" units="ms">
  <obsolete>
    Deprecated 03/2016; replaced by
    EmbeddedWorkerInstance.Start.SendStartWorker_NewProcess and
    EmbeddedWorkerInstance.Start.TimeToURLJob_NewProcess.
  </obsolete>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time taken to allocate a process to start the EmbeddedWorkerInstance.
    Recorded when a new process was created.
  </summary>
</histogram>

<histogram name="EmbeddedWorkerInstance.ProcessAllocation" units="ms">
  <obsolete>
    Deprecated as of 05/2015. Replaced by
    EmbeddedWorkerInstance.NewProcessAllocation and
    EmbeddedWorkerInstance.ExistingProcessAllocation.
  </obsolete>
  <owner>horo@chromium.org</owner>
  <summary>
    The time taken to allocate a process to start the EmbeddedWorkerInstance.
  </summary>
</histogram>

<histogram name="EmbeddedWorkerInstance.ProcessCreated" enum="BooleanCreated">
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Whether a new renderer process was created for the EmbeddedWorkerInstance or
    existing one was used. Only recorded for installed workers.
  </summary>
</histogram>

<histogram name="EmbeddedWorkerInstance.ScriptEvaluate" units="ms">
  <obsolete>
    Deprecated as of 03/2016. Replaced by
    EmbeddedWorkerInstance.Start.TimeToEvaluateScript.
  </obsolete>
  <owner>horo@chromium.org</owner>
  <summary>
    The time taken to evaluate the script to start the EmbeddedWorkerInstance.
  </summary>
</histogram>

<histogram name="EmbeddedWorkerInstance.ScriptLoadWithNetworkAccess" units="ms">
  <obsolete>
    Deprecated as of 03/2016. Replaced by
    EmbeddedWorkerInstance.Start.TimeToLoad_Network.
  </obsolete>
  <owner>horo@chromium.org</owner>
  <summary>
    The time taken to load the script file for the EmbeddedWorkerInstance with
    network access.
  </summary>
</histogram>

<histogram name="EmbeddedWorkerInstance.ScriptLoadWithoutNetworkAccess"
    units="ms">
  <obsolete>
    Deprecated as of 03/2016. Replaced by
    EmbeddedWorkerInstance.Start.TimeToLoad_HttpCache and
    EmbeddedWorkerInstance.Start.TimeToLoad_InstalledScript.
  </obsolete>
  <owner>horo@chromium.org</owner>
  <summary>
    The time taken to load the script file for the EmbeddedWorkerInstance
    without network access.
  </summary>
</histogram>

<histogram name="EmbeddedWorkerInstance.Start.StartMessageLatency" units="ms">
  <obsolete>
    Removed June 2018 (M69). Replaced with
    ServiceWorker.StartTiming.SentStartWorkerToReceivedStartWorker.
  </obsolete>
  <owner>falken@chromium.org</owner>
  <summary>
    The time between the browser sending a &quot;start a service worker&quot;
    message to the renderer, and the renderer receiving it. This may include
    renderer startup time. Only recorded if the high-resolution system clock was
    used and deemed consistent across proceses, and the time was non-negative
    (see EmbeddedWorkerInstance.Start.StartMessageLatency.Type). Only recorded
    for installed workers. Recorded upon successful startup.
  </summary>
</histogram>

<histogram name="EmbeddedWorkerInstance.Start.StartMessageLatency.Type"
    enum="CrossProcessTimeDelta">
  <obsolete>
    Removed June 2018 (M69). Replaced with
    ServiceWorker.StartTiming.ClockConsistency.
  </obsolete>
  <owner>falken@chromium.org</owner>
  <summary>
    See EmbeddedWorkerInstance.Start.StartMessageLatency. Describes the outcome
    of taking the measurement and whether StartMessageLatency was recorded.
  </summary>
</histogram>

<histogram name="EmbeddedWorkerInstance.Start.TimeToEvaluateScript" units="ms">
  <obsolete>
    Removed July 2018 (M69). Replaced with
    ServiceWorker.StartTiming.ScriptEvaluationStartToScriptEvaluationEnd.
  </obsolete>
  <owner>falken@chromium.org</owner>
  <summary>
    The time taken for initial evaluation of the service worker script.
    Specifically, the time between ACK from the renderer that the thread started
    and ACK that the script evaluation finished. Only recorded for installed
    workers.
  </summary>
</histogram>

<histogram name="EmbeddedWorkerInstance.Start.TimeToLoad.HttpCache" units="ms">
  <obsolete>
    Removed June 2018 (M69). This depended on the URLRequestJob code path, which
    won't be taken with S13nServiceWorker/NetworkService. If we want this again,
    it can be logged from ServiceWorkerScriptLoader or in Blink directly using
    Resource Timing.
  </obsolete>
  <owner>falken@chromium.org</owner>
  <summary>
    The time taken to load a new (not installed) service worker, when it came
    from the HTTP cache.
  </summary>
</histogram>

<histogram name="EmbeddedWorkerInstance.Start.TimeToLoad.InstalledScript"
    units="ms">
  <obsolete>
    Removed June 2018 (M69). This path is no longer taken since service worker
    installed script manager is used for installed scripts.
  </obsolete>
  <owner>falken@chromium.org</owner>
  <summary>The time taken to load an installed service worker.</summary>
</histogram>

<histogram name="EmbeddedWorkerInstance.Start.TimeToLoad.Network" units="ms">
  <obsolete>
    Removed June 2018 (M69), see note in
    EmbeddedWorkerInstance.Start.TimeToLoad.HttpCache.
  </obsolete>
  <owner>falken@chromium.org</owner>
  <summary>
    The time taken to load a new (not installed) service worker, when it came
    from the network.
  </summary>
</histogram>

<histogram name="EmbeddedWorkerInstance.Start.TimeToSendStartWorker" units="ms">
  <obsolete>
    Removed July 2018 (M69). Replaced with
    ServiceWorker.StartTiming.StartToSentStartWorker.
  </obsolete>
  <owner>falken@chromium.org</owner>
  <summary>
    The time taken between deciding to start a worker and sending the start
    worker IPC. Only recorded for installed workers.
  </summary>
</histogram>

<histogram name="EmbeddedWorkerInstance.Start.TimeToStartThread" units="ms">
  <obsolete>
    Removed July 2018 (M69). Replaced with
    ServiceWorker.StartTiming.ReceivedStartWorkerToScriptEvaluationStart.
  </obsolete>
  <owner>falken@chromium.org</owner>
  <summary>
    The time taken to start the service worker thread. Specifically, the time
    between ACK from the renderer that load finished and ACK that the thread
    started. Does not include script evaluation time. Only recorded for
    installed workers.
  </summary>
</histogram>

<histogram name="EmbeddedWorkerInstance.Start.TimeToURLJob" units="ms">
  <obsolete>
    Removed June 2018 (M69). This path is no longer taken since service worker
    installed script manager is used for installed scripts.
  </obsolete>
  <owner>falken@chromium.org</owner>
  <summary>
    The round-trip time between asking the renderer process to start a worker
    and receiving the corresponding resource request. Only recorded for
    installed workers.
  </summary>
</histogram>

<histogram name="EmbeddedWorkerInstance.Start.WaitedForRendererSetup"
    enum="BooleanWaited">
  <obsolete>
    Removed June 2018 (M69).
  </obsolete>
  <owner>falken@chromium.org</owner>
  <summary>
    Indicates if Blink was not initialized by the time the browser sent a
    &quot;start a service worker&quot; message to the renderer. If this is true,
    receiving the message had to wait until after Blink initialization finished.
    Blink initialization is considered the time RenderThreadImpl::Init sets up
    the Mojo interface for receiving the &quot;start a service worker&quot;
    message. Only recorded for installed workers. Recorded upon successful
    startup.
  </summary>
</histogram>

<histogram name="EmbeddedWorkerInstance.Start.WaitedForRendererSetup.Time"
    units="ms">
  <obsolete>
    Removed June 2018 (M69).
  </obsolete>
  <owner>falken@chromium.org</owner>
  <summary>
    Recorded when EmbeddedWorkerInstance.Start.WaitedForRendererSetup is true.
    The time between when the &quot;start a service worker&quot; was sent by the
    browser, and Blink initialization finishing. The start time is recorded by
    the browser process, and the end time by the renderer process, so process
    clock skew could possibly affect the result.
  </summary>
</histogram>

<histogram name="EnhancedBookmarks.AllBookmarksCount">
  <obsolete>
    Removed 4/2016 after we no longer show &quot;all bookamrks&quot; in bookmark
    manager.
  </obsolete>
  <owner>ianwen@chromium.org</owner>
  <summary>Number of bookmarks the user has. Android only.</summary>
</histogram>

<histogram name="EnhancedBookmarks.SyncExperimentState"
    enum="BookmarksExperimentState">
  <obsolete>
    Removed 3/2015 along with the enhanced bookmarks sync experiment.
  </obsolete>
  <owner>noyau@chromium.org</owner>
  <owner>yefim@chromium.org</owner>
  <summary>
    Captures the state the enhanced bookmark experiment is in. Recorded on
    startup. To be removed once the enhanced bookmark experiment is finished.
    see crbug/323423.
  </summary>
</histogram>

<histogram name="EnhancedBookmarks.ViewMode" enum="EnhancedBookmarkViewMode">
  <obsolete>
    Removed 9/2015 after list view became the only view mode.
  </obsolete>
  <owner>ianwen@chromium.org</owner>
  <summary>
    Record which Enhanced Bookmark UI mode users are in. This will be recorded
    everytime the user opens the bookmark manager UI.
  </summary>
</histogram>

<histogram name="Enterprise.ActiveDirectoryJoin"
    enum="ActiveDirectoryDomainJoinType">
  <owner>rsorokin@chromium.org</owner>
  <summary>
    The way device is joined to the Active Directory domain. This will be
    recorded during successful enterprise enrollment and domain join.
  </summary>
</histogram>

<histogram name="Enterprise.AppRestrictionLoadTime" units="ms">
  <owner>aberent@chromium.org</owner>
  <summary>
    Android Only - Time to load the App Restrictions from the O.S..
  </summary>
</histogram>

<histogram name="Enterprise.AppRestrictionsCacheLoad" enum="BooleanSuccess">
  <owner>aberent@chromium.org</owner>
  <summary>
    Android Only - Whether Chrome was able to read and decode the
    AppRestrictions policy cache on startup.
  </summary>
</histogram>

<histogram name="Enterprise.AttributesTPMConsistency"
    enum="EnterpriseAttributesTPMConsistencyType">
  <owner>tnagel@chromium.org</owner>
  <summary>
    Consistency between TPM lock state and absence/presence of install
    attributes at boot.
  </summary>
</histogram>

<histogram base="true" name="Enterprise.AutoEnrollmentBucketDownloadTime"
    units="ms">
<!-- Name completed by histogram_suffixes name="EnterpriseAutoEnrollmentType". -->

  <owner>pmarko@chromium.org</owner>
  <owner>igorcov@chromium.org</owner>
  <summary>
    Duration of the bucket download part of the auto-enrollment protocol.
  </summary>
</histogram>

<histogram base="true" name="Enterprise.AutoEnrollmentExtraTime" units="ms">
<!-- Name completed by histogram_suffixes name="EnterpriseAutoEnrollmentType". -->

  <owner>pmarko@chromium.org</owner>
  <owner>igorcov@chromium.org</owner>
  <summary>
    Time since the user logged in until the auto-enrollment protocol completed.
    0 is sampled when the protocol is done by the time the user logs in.
  </summary>
</histogram>

<histogram base="true" name="Enterprise.AutoEnrollmentProtocolTime" units="ms">
<!-- Name completed by histogram_suffixes name="EnterpriseAutoEnrollmentType". -->

  <owner>pmarko@chromium.org</owner>
  <owner>igorcov@chromium.org</owner>
  <summary>Total duration time of the auto-enrollment protocol.</summary>
</histogram>

<histogram base="true" name="Enterprise.AutoEnrollmentRequestNetworkErrorCode"
    enum="NetErrorCodes">
<!-- Name completed by histogram_suffixes name="EnterpriseAutoEnrollmentType". -->

  <owner>pmarko@chromium.org</owner>
  <owner>igorcov@chromium.org</owner>
  <summary>
    Network error code (if applicable) for auto-enrollment requests.
  </summary>
</histogram>

<histogram base="true" name="Enterprise.AutoEnrollmentRequestStatus"
    enum="EnterpriseDeviceManagementStatus">
<!-- Name completed by histogram_suffixes name="EnterpriseAutoEnrollmentType". -->

  <owner>pmarko@chromium.org</owner>
  <owner>igorcov@chromium.org</owner>
  <summary>URL fetcher status for auto-enrollment requests.</summary>
</histogram>

<histogram name="Enterprise.DevicePolicyInvalidations"
    enum="EnterprisePolicyInvalidations">
  <owner>bartfab@chromium.org</owner>
  <summary>
    Events for counting device policy invalidations received with and without
    payloads. Invalidations indicate that a policy has been updated and should
    be refreshed. Payloads provide context about the policy update, but may be
    absent if dropped by the invalidation service.
  </summary>
</histogram>

<histogram name="Enterprise.DevicePolicyRefresh" enum="EnterprisePolicyRefresh">
  <owner>bartfab@chromium.org</owner>
  <summary>
    Events measuring effectiveness of refreshing device policy when
    invalidations are received from a service. For each refresh, indicates
    whether the policy changed, and whether the policy was invalidated at the
    time of the refresh.
  </summary>
</histogram>

<histogram name="Enterprise.DMServerRequestSuccess"
    enum="EnterpriseDMServerRequestSuccess">
  <owner>hunyadym@chromium.org</owner>
  <summary>
    Number of retries the client did to execute a DeviceManagementServer
    request. It's recorded after the request has been completed, either
    successfully after 0 or more retries, with a failure (too many retries or
    non-retriable error) or with a server error.
  </summary>
</histogram>

<histogram name="Enterprise.DMToken" enum="EnterpriseDMTokenType">
  <owner>mnissler@chromium.org</owner>
  <summary>
    Events related to fetching, saving and loading DM server tokens. These are
    used to retrieve cloud policies.
  </summary>
</histogram>

<histogram name="Enterprise.DomainWhitelistRegexFailure"
    enum="EnterpriseDomainRegex">
  <owner>atwilson@chromium.org</owner>
  <summary>
    Temporary metric tracking which regex caused an icu::RegexMatcher
    initialization failure, to help figure out the cause of
    http://crbug.com/365351 which we can't repro locally.
  </summary>
</histogram>

<histogram name="Enterprise.DomainWhitelistRegexFailureStatus"
    units="icu error">
  <owner>atwilson@chromium.org</owner>
  <summary>
    Temporary metric tracking the type of an icu::RegexMatcher initialization
    failure, to help figure out the cause of http://crbug.com/365351 which we
    can't repro locally.
  </summary>
</histogram>

<histogram name="Enterprise.DomainWhitelistRegexSuccess" enum="BooleanSuccess">
  <owner>atwilson@chromium.org</owner>
  <summary>
    Temporary metric tracking the success of icu::RegexMatcher IcuMatcher
    initialization, to help figure out the cause of http://crbug.com/365351.
  </summary>
</histogram>

<histogram name="Enterprise.EnrolledPolicyHasDMToken" enum="Boolean">
  <owner>tnagel@chromium.org</owner>
  <summary>
    Whether loading of device policy from file on an enterprise-enrolled
    (checked against install_attributes.pb) Chrome OS device yields an
    enterprise policy with a DM token.  Filled once during session startup,
    after first successful device policy read.
  </summary>
</histogram>

<histogram name="Enterprise.Enrollment" enum="EnterpriseEnrollmentType">
  <owner>mnissler@chromium.org</owner>
  <summary>
    Events related to device enrollment on new installs of Chrome OS devices.
  </summary>
</histogram>

<histogram name="Enterprise.EnrollmentForced" enum="EnterpriseEnrollmentType">
  <owner>tnagel@chromium.org</owner>
  <summary>
    Events related to forced re-enrollment (FRE) of Chrome OS devices.
  </summary>
</histogram>

<histogram name="Enterprise.EnrollmentRecovery" enum="EnterpriseEnrollmentType">
  <owner>tnagel@chromium.org</owner>
  <summary>
    Events related to Chrome OS enterprise enrollment recovery.  Note that this
    only covers cases in which prior to recovery, the &quot;private owner&quot;
    of the device had UMA stats enabled.
  </summary>
</histogram>

<histogram name="Enterprise.EnrollmentTime.Cancel" units="ms">
  <owner>tnagel@chromium.org</owner>
  <summary>
    Elapsed time from *after* GAIA login until enrollment was cancelled.
  </summary>
</histogram>

<histogram name="Enterprise.EnrollmentTime.Failure" units="ms">
  <owner>tnagel@chromium.org</owner>
  <summary>
    Elapsed time from *after* GAIA login until enrollment failed.
  </summary>
</histogram>

<histogram name="Enterprise.EnrollmentTime.Success" units="ms">
  <owner>tnagel@chromium.org</owner>
  <summary>
    Elapsed time from *after* GAIA login until enrollment succeeded.
  </summary>
</histogram>

<histogram name="Enterprise.ExistingInstallAttributesLock"
    enum="EnterpriseExistingInstallAttributesLockType" expires_after="M70">
  <owner>emaxx@chromium.org</owner>
  <owner>poromov@chromium.org</owner>
  <summary>
    Chrome OS only. Whether the successful locking of install attributes reused
    the previously existing locked attributes, or a fresh lock has being held.
  </summary>
</histogram>

<histogram name="Enterprise.InitialEnrollmentRequirement"
    enum="EnterpriseInitialEnrollmentRequirement">
  <owner>pmarko@chromium.org</owner>
  <owner>igorcov@chromium.org</owner>
  <summary>
    Chrome OS only. Encodes if initial enrollment should be done, and if not,
    why. This histogram is recorded when the Auto Enrollment Check screen is
    reached in the Chrome OS Out Of The Box Experience (OOBE) sequence and the
    device has not been enrolled or in consumer mode before, i.e. when the
    'check_enrollment' and 'ActivateDate' VPD keys are not present.
  </summary>
</histogram>

<histogram name="Enterprise.InvalidDevicePolicyFiles" units="files">
  <owner>igorcov@chromium.org</owner>
  <summary>
    Chrome OS only. Number of policy files that turned out to be invalid when
    reading the device policy data. In success scenario the latest policy file
    read is successful and has valid data submitting zero for this statistic.
  </summary>
</histogram>

<histogram name="Enterprise.IOSPolicies">
  <owner>mnissler@chromium.org</owner>
  <summary>
    Number of policies loaded at startup on iOS, and when a change is detected
    at runtime.
  </summary>
</histogram>

<histogram
    name="Enterprise.MachineLevelUserCloudPolicyEnrollment.InstallLevel_Win"
    enum="BooleanIsSystemLevelInstall">
  <owner>zmin@chromium.org</owner>
  <summary>
    Records whether the Chrome install is system level or user level when trying
    to enroll into the machine level user cloud policy on Windows. This is
    intended to count the number of enrollments for each install type.
  </summary>
</histogram>

<histogram
    name="Enterprise.MachineLevelUserCloudPolicyEnrollment.RequestFailureTime"
    units="ms">
  <owner>rogerta@chromium.org</owner>
  <summary>
    Time since the enrollment request was made until an error is returned from
    the server.
  </summary>
</histogram>

<histogram
    name="Enterprise.MachineLevelUserCloudPolicyEnrollment.RequestSuccessTime"
    units="ms">
  <owner>rogerta@chromium.org</owner>
  <summary>
    Time since the enrollment request was made until a successful enrollment
    response is returned from the server.
  </summary>
</histogram>

<histogram name="Enterprise.MachineLevelUserCloudPolicyEnrollment.Result"
    enum="MachineLevelUserCloudPolicyEnrollmentResult">
  <owner>zmin@chromium.org</owner>
  <summary>The result of machine level user cloud policy enrollment.</summary>
</histogram>

<histogram
    name="Enterprise.MachineLevelUserCloudPolicyEnrollment.StartupDialog"
    enum="MachineLevelUserCloudPolicyEnrollmentStartupDialog">
  <owner>rogerta@chromium.org</owner>
  <summary>
    Records whether the machine level user cloud policy enrollment dialog is
    shown to the user and the action they took.
  </summary>
</histogram>

<histogram
    name="Enterprise.MachineLevelUserCloudPolicyEnrollment.StartupDialogTime"
    units="ms">
  <owner>rogerta@chromium.org</owner>
  <summary>
    The length of time the machine level user cloud policy enrollment dialog was
    visible to the user.
  </summary>
</histogram>

<histogram name="Enterprise.ONC.PolicyValidation" enum="BooleanSuccess">
  <owner>mnissler@chromium.org</owner>
  <summary>Result of the OpenNetworkConfiguration policy validation.</summary>
</histogram>

<histogram name="Enterprise.Policies" enum="EnterprisePolicies">
  <owner>mnissler@chromium.org</owner>
  <summary>
    A set of enterprise policy rules that are in use. This is recorded every 24
    hours and at startup, if the last recording was earlier than a day before.
  </summary>
</histogram>

<histogram name="Enterprise.Policy" enum="EnterprisePolicyType">
  <owner>mnissler@chromium.org</owner>
  <summary>
    Events related to fetching, saving and loading user policies, and also
    device policies on Chrome OS.
  </summary>
</histogram>

<histogram name="Enterprise.PolicyHasVerifiedCachedKey"
    enum="BooleanValidKeyExists">
  <owner>atwilson@chromium.org</owner>
  <summary>
    Boolean tracking whether there is a valid policy signing key on disk.
  </summary>
</histogram>

<histogram name="Enterprise.PolicyInvalidations"
    enum="EnterprisePolicyInvalidations">
  <owner>mnissler@chromium.org</owner>
  <summary>
    Events for counting user policy invalidations received with and without
    payloads. Invalidations indicate that a policy has been updated and should
    be refreshed. Payloads provide context about the policy update, but may be
    absent if dropped by the invalidation service.
  </summary>
</histogram>

<histogram name="Enterprise.PolicyInvalidationsStartupTime" units="ms">
  <owner>mnissler@chromium.org</owner>
  <summary>
    Time since startup of the cloud policy code until the policy invalidation
    service first reported its online status.
  </summary>
</histogram>

<histogram name="Enterprise.PolicyKeyVerification"
    enum="EnterprisePolicyKeyVerification">
  <owner>atwilson@chromium.org</owner>
  <summary>Tracking the results of policy key verification.</summary>
</histogram>

<histogram name="Enterprise.PolicyLoadStatus" enum="EnterprisePolicyLoadStatus">
  <owner>mnissler@chromium.org</owner>
  <summary>
    Load status from the policy loaders which pull policy settings from the
    underlying platform, such as Windows Group Policy.
  </summary>
</histogram>

<histogram name="Enterprise.PolicyRefresh" enum="EnterprisePolicyRefresh">
  <owner>mnissler@chromium.org</owner>
  <summary>
    Events measuring effectiveness of refreshing user policy when invalidations
    are received from a service. For each refresh, indicates whether the policy
    changed, and whether the policy was invalidated at the time of the refresh.
  </summary>
</histogram>

<histogram name="Enterprise.PolicyUpdatePeriod.Device" units="days">
  <owner>antrim@chromium.org</owner>
  <summary>Time since last device policy fetch.</summary>
</histogram>

<histogram name="Enterprise.PolicyUpdatePeriod.MachineLevelUser" units="days">
  <owner>zmin@chromium.org</owner>
  <summary>Time since last machine level user policy fetch.</summary>
</histogram>

<histogram name="Enterprise.PolicyUpdatePeriod.User" units="days">
  <owner>antrim@chromium.org</owner>
  <summary>Time since last user policy fetch.</summary>
</histogram>

<histogram name="Enterprise.PolicyUserVerification"
    enum="EnterprisePolicyUserVerification">
  <owner>poromov@chromium.org</owner>
  <summary>Tracking the results of policy user verification.</summary>
</histogram>

<histogram name="Enterprise.PublicSession.ExtensionPermissions"
    enum="ExtensionPermission3">
  <owner>isandrk@chromium.org</owner>
  <owner>sduraisamy@chromium.org</owner>
  <summary>
    Extensions (and apps) are quite restricted in public sessions for security
    and privacy concerns - some permissions are blocked which means the
    extension itself is blocked (prevented from loading). This histogram counts
    requested permissions on extension installation in public sessions (both
    installed and blocked extensions).
  </summary>
</histogram>

<histogram name="Enterprise.PublicSession.SessionLength" units="minutes">
  <owner>xiyuan@chromium.org</owner>
  <owner>sduraisamy@chromium.org</owner>
  <summary>
    A public session starts when a user signs in using the policy configured
    public account. It stops when the user signs out. Session length is the
    duration between the start and stop events. It is recorded during signing
    out and reported on the next chrome run. This metric tracks the recorded
    session length rounded down to the nearest 10-minute bucket and capped at 24
    hours.
  </summary>
</histogram>

<histogram name="Enterprise.RegularUserSession.SessionLength" units="minutes">
  <owner>xiyuan@chromium.org</owner>
  <owner>sduraisamy@chromium.org</owner>
  <summary>
    A regular user session starts when a user signs in using his/her user
    account. It stops when the user signs out. Session length is the duration
    between the start and stop events. It is recorded during signing out and
    reported on the next chrome run. This metric tracks the recorded session
    length on an enrolled device rouned down to the nearest 10-minute bucket and
    capped at 24 hours.
  </summary>
</histogram>

<histogram base="true" name="Enterprise.RetrievePolicyResponse"
    enum="EnterpriseRetrievePolicyResponseType">
<!-- Name completed by histogram_suffixes name="EnterpriseRetrievePolicyResponse" -->

  <owner>emaxx@chromium.org</owner>
  <owner>igorcov@chromium.org</owner>
  <summary>
    On Chrome OS, the response obtained to retrieve policy request.
  </summary>
</histogram>

<histogram name="Enterprise.SystemLogPIILeak" enum="SystemLogPIIType">
  <obsolete>
    Deprecated and removed from code as of 01/2016.
  </obsolete>
  <owner>pbond@chromium.org</owner>
  <summary>
    Events for counting sensitive data occurrences in system logs to upload.
    (Email addresses, IP addresses, SSIDs, URLs). The lines with this data will
    be removed before upload.
  </summary>
</histogram>

<histogram name="Enterprise.UploadJobSuccess" enum="EnterpriseUploadJobSuccess">
  <owner>hunyadym@chromium.org</owner>
  <summary>
    Number of retries the client did to execute an UploadJob. It's recorded
    after the request has been completed, either successfully after 0 or more
    retries, with a failure because of too many retries or if the UploadJob is
    interrupted (destroyed before it could succeed or fail).
  </summary>
</histogram>

<histogram name="Enterprise.UserCloudPolicyStore.LoadStatus"
    enum="PolicyLoadStatus">
  <owner>atwilson@chromium.org</owner>
  <summary>
    Result of the attempted policy load during profile initialization.
  </summary>
</histogram>

<histogram name="Enterprise.UserCloudPolicyStore.LoadValidationStatus"
    enum="PolicyValidationStatus">
  <owner>atwilson@chromium.org</owner>
  <summary>
    Result of validating the policy that has just been loaded from disk.
  </summary>
</histogram>

<histogram name="Enterprise.UserCloudPolicyStore.StoreValidationStatus"
    enum="PolicyValidationStatus">
  <owner>atwilson@chromium.org</owner>
  <summary>
    Result of validating the policy sent down from the server, before writing to
    disk.
  </summary>
</histogram>

<histogram name="Enterprise.UserPolicyChromeOS.DelayInitialization" units="ms">
  <owner>mnissler@chromium.org</owner>
  <summary>Initialization delay due to loading the user policy cache.</summary>
</histogram>

<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.ClientError"
    enum="EnterpriseDeviceManagementStatus">
  <owner>mnissler@chromium.org</owner>
  <summary>Policy client error during initial policy fetch.</summary>
</histogram>

<histogram
    name="Enterprise.UserPolicyChromeOS.InitialFetch.DelayClientRegister"
    units="ms">
  <owner>mnissler@chromium.org</owner>
  <summary>Delay for registering the client with the policy server.</summary>
</histogram>

<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.DelayOAuth2Token"
    units="ms">
  <owner>mnissler@chromium.org</owner>
  <summary>Delay for minting an OAuth2 acccess token.</summary>
</histogram>

<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.DelayPolicyFetch"
    units="ms">
  <owner>mnissler@chromium.org</owner>
  <summary>Delay for fetching policy from the policy server.</summary>
</histogram>

<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.DelayTotal"
    units="ms">
  <owner>mnissler@chromium.org</owner>
  <summary>Total delay for the initial policy fetch.</summary>
</histogram>

<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.OAuth2Error"
    enum="GoogleServiceAuthError">
  <owner>mnissler@chromium.org</owner>
  <summary>Service error during OAuth2 access token fetch.</summary>
</histogram>

<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.OAuth2NetworkError"
    enum="NetErrorCodes">
  <owner>mnissler@chromium.org</owner>
  <summary>Network error during OAuth2 access token fetch.</summary>
</histogram>

<histogram name="Enterprise.UserPolicyChromeOS.SessionAbort"
    enum="EnterpriseUserPolicyChromeOSSessionAbortType">
  <owner>emaxx@chromium.org</owner>
  <summary>
    Session abort due to a fatal error of Chrome OS user policy initialization.
  </summary>
</histogram>

<histogram name="Enterprise.UserPolicyValidationFailure"
    enum="ValidationFailures">
  <owner>mnissler@chromium.org</owner>
  <summary>Source of policy validation errors on Chrome OS.</summary>
</histogram>

<histogram name="Enterprise.UserPolicyValidationLoadStatus"
    enum="PolicyValidationStatus">
  <owner>mnissler@chromium.org</owner>
  <summary>
    Validation result when loading user policy from the policy store.
  </summary>
</histogram>

<histogram name="Enterprise.UserPolicyValidationStoreStatus"
    enum="PolicyValidationStatus">
  <owner>mnissler@chromium.org</owner>
  <summary>
    Validation result when writing user policy to the policy store.
  </summary>
</histogram>

<histogram name="Enterprise.UserSession.Logins"
    enum="EnterpriseUserSessionLogins">
  <owner>xiyuan@chromium.org</owner>
  <owner>sduraisamy@chromium.org</owner>
  <summary>Tracks the sign-in events on an enrolled device.</summary>
</histogram>

<histogram name="Enterprise.UserSigninChoice" enum="SigninChoice">
  <owner>atwilson@chromium.org</owner>
  <summary>
    Choice the user made when presented with enterprise signin dialog.
  </summary>
</histogram>

<histogram name="Enterprise.VpdCheck">
  <owner>igorcov@chromium.org</owner>
  <owner>tnagel@chromium.org</owner>
  <summary>
    The status code (exit code or signal) from sanity check of RW_VPD read and
    matching the contents with data from dump_vpd_log (Chrome OS).
  </summary>
</histogram>

<histogram name="Enterprise.VpdUpdateStatus">
  <owner>igorcov@chromium.org</owner>
  <owner>tnagel@chromium.org</owner>
  <summary>
    The status code (exit code or signal) from VPD update operation (Chrome OS).
  </summary>
</histogram>

<histogram name="Enterprise.WildcardLoginCheck.DelayPolicyTokenFetch"
    units="ms">
  <owner>mnissler@chromium.org</owner>
  <summary>
    Delay incurred by the token fetching step of the wildcard login check.
  </summary>
</histogram>

<histogram name="Enterprise.WildcardLoginCheck.DelayTotal" units="ms">
  <owner>mnissler@chromium.org</owner>
  <summary>Total delay incurred by the wildcard login check.</summary>
</histogram>

<histogram name="Enterprise.WildcardLoginCheck.DelayUserInfoFetch" units="ms">
  <owner>mnissler@chromium.org</owner>
  <summary>
    Delay incurred by the user info fetching step of the wildcard login check.
  </summary>
</histogram>

<histogram name="EnterpriseCheck.DeprecatedDomainBindSucceeded"
    enum="BooleanSuccess">
  <obsolete>
    Deprecated 07/2016 in Issue 621270.
  </obsolete>
  <owner>mnissler@chromium.org</owner>
  <owner>pastarmovj@chromium.org</owner>
  <summary>
    Whether we were able to contact the AD Domain Controller. This check is
    performed once at start-up on Windows.
  </summary>
</histogram>

<histogram name="EnterpriseCheck.DeprecatedDomainCheckFailed"
    enum="EnterpriseCheckError">
  <obsolete>
    Deprecated 07/2016 in Issue 621270.
  </obsolete>
  <owner>mnissler@chromium.org</owner>
  <owner>pastarmovj@chromium.org</owner>
  <summary>
    Enum of possible things that can fail while checking for enterprise env.
    This check is performed once at start-up on Windows.
  </summary>
</histogram>

<histogram name="EnterpriseCheck.InDomain" enum="BooleanEnabled">
  <owner>mnissler@chromium.org</owner>
  <owner>pastarmovj@chromium.org</owner>
  <summary>
    Whether the machine is part of an AD domain. This check is performed once at
    start-up on Windows.
  </summary>
</histogram>

<histogram name="EnterpriseCheck.InvalidJsonPolicies" enum="EnterprisePolicies">
  <owner>olsen@chromium.org</owner>
  <summary>
    A set of policy rules that failed validation due to unparsable JSON, or JSON
    that did not match the schema. This validation happens on start-up and when
    the policy has changed.
  </summary>
</histogram>

<histogram name="EnterpriseCheck.InvalidPolicies" enum="EnterprisePolicies">
  <owner>mnissler@chromium.org</owner>
  <summary>
    A set of policy rules that were ignored due to integrity violations while
    parsing the policy data which happens on start-up and when the policy has
    changed.
  </summary>
</histogram>

<histogram name="EnterpriseCheck.InvalidPoliciesDetected"
    units="disabled policies">
  <owner>mnissler@chromium.org</owner>
  <owner>pastarmovj@chromium.org</owner>
  <summary>
    The number of disabled policy entries on Windows due to integrity violations
    while parsing the policy data which happens on start-up and when the policy
    has changed.
  </summary>
</histogram>

<histogram name="EnterpriseCheck.IsDomainJoined" enum="BooleanEnabled">
  <owner>mad@chromium.org</owner>
  <summary>
    Whether the machine is joined to an AD domain. This check is performed once
    at start-up on Windows.
  </summary>
</histogram>

<histogram name="EnterpriseCheck.IsEnterpriseUser" enum="BooleanEnabled">
  <owner>rogerta@chromium.org</owner>
  <summary>
    Whether the machine is considered an enterprise user. An enterprise user is
    either in a domain or is managed via MDM. This check is performed once at
    start-up on Windows.
  </summary>
</histogram>

<histogram name="EnterpriseCheck.IsLocalMachine" enum="Boolean">
  <owner>mad@chromium.org</owner>
  <summary>
    Whether the full machine name is the same as the short one, identifying a
    local machine. This check is performed once at start-up on Windows.
  </summary>
</histogram>

<histogram name="EnterpriseCheck.IsLocalUser" enum="Boolean">
  <owner>mad@chromium.org</owner>
  <summary>
    Whether the currently logged in user is a local user or not, based on its
    SAM compatible user name and machine name. This check is performed once at
    start-up on Windows.
  </summary>
</histogram>

<histogram name="EnterpriseCheck.IsManaged" enum="BooleanEnabled">
  <owner>rogerta@chromium.org</owner>
  <summary>
    Whether the machine is managed via MDM. This check is performed once at
    start-up on Windows.
  </summary>
</histogram>

<histogram name="EnterpriseCheck.NetGetJoinInformationAddress"
    enum="BooleanEnabled">
  <owner>rogerta@chromium.org</owner>
  <summary>
    Whether we could obtain the address of the NetGetJoinInformation function.
    This check is performed once at start-up on Windows.
  </summary>
</histogram>

<histogram name="EnterpriseCheck.OSType" enum="OsSuite">
  <owner>mnissler@chromium.org</owner>
  <owner>pastarmovj@chromium.org</owner>
  <summary>
    The rough Windows suite we are running on. This check is performed once at
    start-up on Windows.
  </summary>
</histogram>

<histogram name="Event.ActionAfterDoubleTapNoDelay" enum="ActionAfterDoubleTap">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    On non-mobile sites, gesture taps are delayed to prevent double taps from
    sending a click event. This stat tracks the user's first action within 5
    seconds after a double tap gesture when the gesture tap delay is disabled.

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

<histogram name="Event.ActionAfterDoubleTapWithDelay"
    enum="ActionAfterDoubleTap">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    On non-mobile sites, gesture taps are delayed to prevent double taps from
    sending a click event. This stat tracks the user's first action within 5
    seconds after a double tap gesture when gesture tap events are delayed.

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

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

    Team: input-dev@chromium.org.

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

<histogram name="Event.AndroidActionDown.ToolType" enum="MotionEventToolType">
  <owner>mustaq@chromium.org</owner>
  <summary>
    Tracks the number of Android MotionEvents with ACTION_DOWN or
    ACTION_POINTER_DOWN or ACTION_BUTTON_PRESS for each ToolType (unknown,
    finger, mouse or stylus).

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

<histogram name="Event.AsyncTargeting.AsyncClientDepth" units="clients">
  <owner>riajiang@chromium.org</owner>
  <owner>event-targeting@chromium.org</owner>
  <summary>
    Tracks how many clients were queried (asynchronously) to determine the
    target for an input event.
  </summary>
</histogram>

<histogram name="Event.AsyncTargeting.ResponseTime" units="ms">
  <owner>riajiang@chromium.org</owner>
  <summary>
    Tracks how long it takes for a client to respond to an asynchronous request
    to find a target for an input event.

    Team: event-targeting@chromium.org.
  </summary>
</histogram>

<histogram name="Event.AsyncTargeting.TimeInQueue" units="ms">
  <owner>riajiang@chromium.org</owner>
  <summary>
    Tracks how long an event has to wait in the queue while a previous event is
    being targeted asynchronously.

    Team: event-targeting@chromium.org.
  </summary>
</histogram>

<histogram name="Event.ClickNotFiredDueToDomManipulation" enum="BooleanHit">
  <owner>nzolghadr@chromium.org</owner>
  <summary>
    Whether click target was affected by DOM manipulation or not.

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

<histogram name="Event.CoalescedCount.Mouse">
  <owner>tdresser@chromium.org</owner>
  Team: input-dev@chromium.org.
  <summary>Number of Mouse events coalesced.</summary>
</histogram>

<histogram name="Event.CoalescedCount.Touch">
  <owner>tdresser@chromium.org</owner>
  Team: input-dev@chromium.org.
  <summary>Number of Touch events coalesced.</summary>
</histogram>

<histogram name="Event.CoalescedLatency.Mouse" units="ms">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between the first and last events in a coalesced mouse events group.

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

<histogram name="Event.CoalescedLatency.Touch" units="ms">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between the first and last events in a coalesced touch events group.

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

<histogram name="Event.CompositorThreadEventQueue.CoalescedCount"
    units="events">
  <owner>chongz@chromium.org</owner>
  <summary>
    Number of continuous gesture events (GestureScrollUpdate,
    GesturePinchUpdate) coalesced inside the compositor thread event queue per
    event. This field is recorded just before the event is processed on the
    compositor thread.

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

<histogram name="Event.CompositorThreadEventQueue.Continuous.HeadQueueingTime"
    units="microseconds">
  <owner>chongz@chromium.org</owner>
  <summary>
    Time between the first event in a coalesced continuous gesture events group
    (GestureScrollUpdate, GesturePinchUpdate) and when it was processed on the
    compositor thread.

    Team: input-dev@chromium.org.

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

<histogram name="Event.CompositorThreadEventQueue.Continuous.TailQueueingTime"
    units="microseconds">
  <owner>chongz@chromium.org</owner>
  <summary>
    Time between the last event in a coalesced continuous gesture events group
    (GestureScrollUpdate, GesturePinchUpdate) and when it was processed on the
    compositor thread.

    Team: input-dev@chromium.org.

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

<histogram name="Event.CompositorThreadEventQueue.NonContinuous.QueueingTime"
    units="microseconds">
  <owner>chongz@chromium.org</owner>
  <summary>
    Time between when a non-continuous gesture event (GestureScrollStart/End,
    GesturePinchStart/End) was placed into the queue and when it was processed
    on the compositor thread.

    Team: input-dev@chromium.org.

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

<histogram name="Event.DownEventCount.PerDestination"
    enum="DownEventDestination">
  <obsolete>
    Deprecated 01/2018 in favor of
    Event.DownEventCount.PerInputFormFactorDestinationCombination.
  </obsolete>
  <owner>xiaoyinh@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    The number of down events received per destination. Every down event that is
    targeted to each destination will be counted, including those that don't
    have an effect. For example: Tapping on a disabled button inside the browser
    frame will be treated as down events on browser window.
  </summary>
</histogram>

<histogram name="Event.DownEventCount.PerFormFactor" enum="DownEventFormFactor">
  <obsolete>
    Deprecated 01/2018 in favor of
    Event.DownEventCount.PerInputFormFactorDestinationCombination.
  </obsolete>
  <owner>xiaoyinh@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    Counts the number of down events generated by clamshell/touchview.
  </summary>
</histogram>

<histogram name="Event.DownEventCount.PerInput" enum="DownEventSource">
  <obsolete>
    Deprecated 01/2018 in favor of
    Event.DownEventCount.PerInputFormFactorDestinationCombination.
  </obsolete>
  <owner>xiaoyinh@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    Counts the number of down events generated by Mouse/Touch/Stylus.
  </summary>
</histogram>

<histogram name="Event.DownEventCount.PerInputFormFactorDestinationCombination"
    enum="DownEventInputFormFactorDestinationCombination">
  <owner>xiaoyinh@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <summary>
    The number of down events received per input, form factor, and destination
    combination.

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

<histogram name="Event.DragDrop.Cancel" enum="DragDropEventSource">
  <owner>mfomitchev@chromium.org</owner>
  <summary>
    Counts the number of times the user cancelled a drag and drop operation.
  </summary>
</histogram>

<histogram name="Event.DragDrop.Drop" enum="DragDropEventSource">
  <owner>mfomitchev@chromium.org</owner>
  <summary>
    Counts the number of times the user completed a drag and drop operation.
  </summary>
</histogram>

<histogram name="Event.DragDrop.ExternalOriginDrop">
  <owner>mfomitchev@chromium.org</owner>
  <summary>
    Counts the number of times a drag and drop operation originating outside of
    a Chrome window successfuly drops.
  </summary>
</histogram>

<histogram name="Event.DragDrop.Start" enum="DragDropEventSource">
  <owner>mfomitchev@chromium.org</owner>
  <summary>
    Counts the number of times the user started a drag and drop operation.
  </summary>
</histogram>

<histogram name="Event.FractionOfTimeWithoutUserInput" units="%">
  <owner>tdresser@chromium.org</owner>
  <owner>progressive-web-metrics@chromium.org</owner>
  <summary>
    For each 10 second window, reports the fraction of the time there was no
    user input. We consider there to be no user input if we haven't received any
    events for &gt; 50ms.
  </summary>
</histogram>

<histogram name="Event.FrameEventRouting.NoGestureTarget">
  <owner>wjmaclean@chromium.org</owner>
  <summary>
    Record whether we unexpectedly encounter an empty gesture queue while
    routing gesture events to frames' renderers: true =&gt; empty queue, false
    =&gt; non-empty queue.
  </summary>
</histogram>

<histogram name="Event.Frequency.Renderer.FlingAnimate" units="hertz">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Emitted after a renderer process main-thread fling curve animation
    terminates, for any reason, reporting the average animation frequency
    (animations/second) of the fling instance over its lifetime. This is
    computed as the number of fling animation ticks divided by the fling
    animation duration.

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

<histogram name="Event.Frequency.RendererImpl.FlingAnimate" units="hertz">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Emitted after a renderer process impl-thread fling curve animation
    terminates, for any reason, reporting the average animation frequency
    (animations/second) of the fling instance over its lifetime. This is
    computed as the number of fling animation ticks divided by the fling
    animation duration.

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

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

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

<histogram name="Event.HitTest" enum="EventHitTest">
  <owner>dtapuska@chromium.org</owner>
  <summary>
    For each hit test, records whether it was a hit or miss, and why.

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

<histogram name="Event.HitTestValidity" enum="EventHitTestValidity">
  <owner>dtapuska@chromium.org</owner>
  <summary>
    For hit tests that are validated, records whether it was correct or not, and
    why.

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

<histogram name="Event.HitTestValidityScore" enum="EventHitTestValidityScore">
  <owner>dtapuska@chromium.org</owner>
  <summary>
    For hit tests that are invalid, records the score (a series of bits
    indicating what was matched and what wasn't).

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

<histogram name="Event.Latency.BlockingTime.KeyPressDefaultAllowed" units="ms">
  <owner>tdresser@chromium.org</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    Time between the renderer main thread receiving a keyboard event and acking
    it, for events which were not preventDefaulted. Only recorded for key
    presses.
  </summary>
</histogram>

<histogram name="Event.Latency.BlockingTime.KeyPressDefaultPrevented"
    units="ms">
  <owner>tdresser@chromium.org</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    Time between the renderer main thread receiving a keyboard event and acking
    it, for events which were preventDefaulted. Only recorded for key presses.
  </summary>
</histogram>

<histogram name="Event.Latency.BlockingTime.TouchEndDefaultAllowed" units="ms">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between the renderer main thread receiving a touchend event and acking
    it, for events which were not preventDefaulted.

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

<histogram name="Event.Latency.BlockingTime.TouchEndDefaultPrevented"
    units="ms">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between the renderer main thread receiving a touchend event and acking
    it, for events which were preventDefaulted.

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

<histogram name="Event.Latency.BlockingTime.TouchMoveDefaultAllowed" units="ms">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between the renderer main thread receiving a touchmove event and acking
    it, for events which were not preventDefaulted.

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

<histogram name="Event.Latency.BlockingTime.TouchMoveDefaultPrevented"
    units="ms">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between the renderer main thread receiving a touchmove event and acking
    it, for events which were preventDefaulted.

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

<histogram name="Event.Latency.BlockingTime.TouchStartDefaultAllowed"
    units="ms">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between the renderer main thread receiving a touchstart event and
    acking it, for events which were not preventDefaulted.

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

<histogram name="Event.Latency.BlockingTime.TouchStartDefaultPrevented"
    units="ms">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between the renderer main thread receiving a touchstart event and
    acking it, for events which were preventDefaulted.

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

<histogram name="Event.Latency.Browser" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of all input events and browser processing.

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

<histogram name="Event.Latency.Browser.ET_DROP_TARGET_EVENT"
    units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_GESTURE_BEGIN" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_GESTURE_DOUBLE_TAP"
    units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_GESTURE_END" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_GESTURE_LONG_PRESS"
    units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_GESTURE_LONG_TAP"
    units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_GESTURE_MULTIFINGER_SWIPE"
    units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_GESTURE_PINCH_BEGIN"
    units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_GESTURE_PINCH_END"
    units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_GESTURE_PINCH_UPDATE"
    units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_GESTURE_SCROLL_BEGIN"
    units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_GESTURE_SCROLL_END"
    units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_GESTURE_SCROLL_UPDATE"
    units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_GESTURE_TAP" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_GESTURE_TAP_CANCEL"
    units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_GESTURE_TAP_DOWN"
    units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_GESTURE_TWO_FINGER_TAP"
    units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_KEY_PRESSED" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_KEY_RELEASED" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_MOUSE_CAPTURE_CHANGED"
    units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_MOUSE_DRAGGED" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_MOUSE_ENTERED" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_MOUSE_EXITED" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_MOUSE_MOVED" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_MOUSE_RELEASED" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_MOUSEWHEEL" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_SCROLL" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_SCROLL_FLING_CANCEL"
    units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_SCROLL_FLING_START"
    units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_TOUCH_CANCELLED" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_TOUCH_MOVED" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_TOUCH_PRESSED" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_TOUCH_RELEASED" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_TOUCH_STATIONARY"
    units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_TRANSLATED_KEY_PRESS"
    units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_TRANSLATED_KEY_RELEASE"
    units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.ET_UNKNOWN" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of input event and browser processing.

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

<histogram name="Event.Latency.Browser.KeyPressAcked" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between key events sent from RWH to renderer and acked by renderer.
    Only monitors key presses.
  </summary>
</histogram>

<histogram name="Event.Latency.Browser.KeyPressUI" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between key events received by Chrome and sent from RWH to renderer.
    Only monitors key presses.
  </summary>
</histogram>

<histogram name="Event.Latency.Browser.TouchAcked" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between touch events sent from RWH to renderer and acked by renderer.

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

<histogram name="Event.Latency.Browser.TouchUI" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between touch events received by Chrome and sent from RWH to renderer.

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

<histogram name="Event.Latency.Browser.WheelAcked" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>ccameron@chromium.org</owner>
  <summary>
    Time between wheel events sent from RWH to renderer and acked by renderer.

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

<histogram name="Event.Latency.Browser.WheelUI" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>ccameron@chromium.org</owner>
  <summary>
    Time between wheel events received by Chrome and sent from RWH to renderer.

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

<histogram name="Event.Latency.EndToEnd.KeyPress" units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    Time between the OS receiving a keyboard event and the resulting GPU frame
    swap. If no swap was induced by the event, no recording is made. Only
    recorded for key presses.

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

<histogram name="Event.Latency.EndToEnd.Mouse" units="microseconds">
  <owner>input-dev@chromium.org</owner>
  <summary>
    Time between the OS receiving a mouse event and the resulting GPU frame
    swap. If no swap was induced by the event, no recording is made.

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

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

    Team: input-dev@chromium.org.

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

<histogram name="Event.Latency.HitTestRecursive" units="microseconds">
  <owner>dtapuska@chromium.org</owner>
  <summary>
    Duration of a recursive hitTest operation. The hit test is recursive when
    the AllowChildFrameContent flag is set. See also Event.Latency.HitTest.

    Team: input-dev@chromium.org.

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

<histogram name="Event.Latency.OS" units="microseconds">
  <owner>tdresser@chromium.org</owner>
  Team: input-dev@chromium.org.
  <summary>
    Time between input event received by OS and sent to Chrome.

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

<histogram name="Event.Latency.QueueingTime.KeyPressDefaultAllowed" units="ms">
  <owner>tdresser@chromium.org</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    Time between sending a keyboard event to the renderer main thread and when
    the renderer begins to process that event, for events which were not
    preventDefaulted. Only recorded for key presses.

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

<histogram name="Event.Latency.QueueingTime.KeyPressDefaultPrevented"
    units="ms">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between sending a keyboard event to the renderer main thread and when
    the renderer begins to process that event, for events which were
    preventDefaulted. Only recorded for key presses.

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

<histogram name="Event.Latency.QueueingTime.TouchEndDefaultAllowed" units="ms">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between sending a touchend event to the renderer main thread and when
    the renderer begins to process that event, for events which were not
    preventDefaulted.

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

<histogram name="Event.Latency.QueueingTime.TouchEndDefaultPrevented"
    units="ms">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between sending a touchend event to the renderer main thread and when
    the renderer begins to process that event, for events which were
    preventDefaulted.

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

<histogram name="Event.Latency.QueueingTime.TouchMoveDefaultAllowed" units="ms">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between sending a touchmove event to the renderer main thread and when
    the renderer begins to process that event, for events which were not
    preventDefaulted.

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

<histogram name="Event.Latency.QueueingTime.TouchMoveDefaultPrevented"
    units="ms">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between sending a touchmove event to the renderer main thread and when
    the renderer begins to process that event, for events which were
    preventDefaulted.

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

<histogram name="Event.Latency.QueueingTime.TouchStartDefaultAllowed"
    units="ms">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between sending a touchstart event to the renderer main thread and when
    the renderer begins to process that event, for events which were not
    preventDefaulted.

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

<histogram name="Event.Latency.QueueingTime.TouchStartDefaultPrevented"
    units="ms">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between sending a touchstart event to the renderer main thread and when
    the renderer begins to process that event, for events which were
    preventDefaulted.

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

<histogram name="Event.Latency.Renderer" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initiation of all input events and renderer processing. This is
    soon to be replaced by Event.Latency.Renderer2.*

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

<histogram name="Event.Latency.Renderer2" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between input event creation and the renderer receiving and starting to
    process the event. For touch events on Windows, we measure from when the
    event reaches Chrome, whereas on other platforms we use the timestamp from
    the kernel. On Windows, this metric is only reported when |IsHighResolution|
    is true, which will introduce some sampling bias.

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

<histogram name="Event.Latency.RendererImpl" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between input event creation and the renderer impl thread receiving and
    starting to process the event. For touch events on Windows, we measure from
    when the event reaches Chrome, whereas on other platforms we use the
    timestamp from the kernel. On Windows, this metric is only reported when
    |IsHighResolution| is true, which will introduce some sampling bias.

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

<histogram name="Event.Latency.RendererImpl.GestureScroll" units="microseconds">
  <obsolete>
    Deprecated 12/2013 and replaced by Event.Latency.RendererImpl.GestureScroll2
  </obsolete>
  <owner>rbyers@chromium.org</owner>
  <summary>
    Time between initial creation of touch event and when the resulting
    ScrollGesture reaches Impl thread. Maximum is 200ms.
  </summary>
</histogram>

<histogram name="Event.Latency.RendererImpl.GestureScroll2"
    units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between touch event creation and when the resulting GestureScroll
    reaches the Impl thread. Maximum is 1000ms. On Windows, we measure from when
    the touch event reaches Chrome, whereas on other platforms we use the
    timestamp from the kernel. On Windows, this metric is only reported when
    |IsHighResolution| is true, which will introduce some sampling bias. This
    supersedes the Event.Latency.RendererImpl.GestureScroll metric.

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

<histogram name="Event.Latency.Scroll.Wheel.TimeToHandled2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a wheel event and the generated
    ScrollUpdate gesture event is handled on main/impl thread (specified by
    suffix). If no swap was induced by the ScrollUpdate gesture event, no
    recording is made. Unlike Event.Latency.ScrollUpdate.Wheel.TimeToHandled2
    this metric includes the first GSU of every scrolling sequence as well.

    Team: input-dev@chromium.org.

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

<histogram name="Event.Latency.Scroll.Wheel.TimeToScrollUpdateSwapBegin2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a wheel event and start of the frame swap
    on the GPU service caused by the generated ScrollUpdate gesture event. If no
    swap was induced by the event, no recording is made. Unlike
    Event.Latency.ScrollUpdate.Wheel.TimeToScrollUpdateSwapBegin2 this metric
    includes the first GSU of every scrolling sequence as well.

    Team: input-dev@chromium.org.

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

<histogram name="Event.Latency.ScrollBegin.TimeToScrollUpdateSwapBegin"
    units="microseconds">
  <obsolete>
    Replaced by *.TimeToScrollUpdateSwapBegin2 https://crbug.com/849735 in M68.
  </obsolete>
  <owner>nzolghadr@chromium.org</owner>
  <summary>
    Time between initial creation of a wheel/touch event and start of the frame
    swap on the GPU service caused by the generated ScrollUpdate gesture event
    if that ScrollUpdate is the first such event in a given scroll gesture event
    sequence. If no swap was induced by the event, no recording is made. If no
    swap was induced by the event, no recording is made.

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

<histogram name="Event.Latency.ScrollBegin.TimeToScrollUpdateSwapBegin2"
    units="microseconds">
  <owner>nzolghadr@chromium.org</owner>
  <summary>
    Time between initial creation of a wheel/touch event and start of the frame
    swap on the GPU service caused by the generated ScrollUpdate gesture event
    if that ScrollUpdate is the first such event in a given scroll gesture event
    sequence. If no swap was induced by the event, no recording is made. If no
    swap was induced by the event, no recording is made.

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

<histogram
    name="Event.Latency.ScrollBegin.Touch.BrowserNotifiedToBeforeGpuSwap2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between the browser receives the notification of the first ScrollUpdate
    gesture event in a given scroll gesture event sequence with touch source
    induced renderer swap and GPU starts to swap.

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

<histogram name="Event.Latency.ScrollBegin.Touch.GpuSwap2" units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between gpu starts to swap the first ScrollUpdate gesture event in a
    given scroll gesture event sequence with touch source induced frame and the
    swap finishes.

    Team: input-dev@chromium.org.

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

<histogram name="Event.Latency.ScrollBegin.Touch.HandledToRendererSwap2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between the first ScrollUpdate gesture event in a given scroll gesture
    event sequence with touch source, is handled on main/impl thread (specified
    by suffix) and before renderer starts to swap.

    Team: input-dev@chromium.org.

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

<histogram
    name="Event.Latency.ScrollBegin.Touch.RendererSwapToBrowserNotified2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between the renderer starts to swap a frame induced by the first
    ScrollUpdate gesture event in a given scroll gesture event sequence with
    touch source, and browser receives the swap notification.

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

<histogram name="Event.Latency.ScrollBegin.Touch.TimeToHandled2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a touch event and the first generated
    ScrollUpdate gesture event in a given scroll gesture event sequence is
    handled on main/impl thread (specified by suffix). If no swap was induced by
    the ScrollUpdate gesture event, no recording is made.

    Team: input-dev@chromium.org.

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

<histogram name="Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a touch event and the start of the frame
    swap on the GPU service caused by the generated ScrollUpdate gesture event
    if that ScrollUpdate is the first such event in a given scroll gesture event
    sequence. If no swap was induced by the event, no recording is made. This is
    going to be replaced by *.TimeToScrollUpdateSwapBegin3 version since a
    rebucketing change made this metric lose its usefulness in Chirp
    infrastructure.

    Team: input-dev@chromium.org.

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

<histogram name="Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin3"
    units="microseconds">
  <obsolete>
    Replaced by *.TimeToScrollUpdateSwapBegin4 https://crbug.com/849735 in M68.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a touch event and the start of the frame
    swap on the GPU service caused by the generated ScrollUpdate gesture event
    if that ScrollUpdate is the first such event in a given scroll gesture event
    sequence. If no swap was induced by the event, no recording is made.

    Team: input-dev@chromium.org.

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

<histogram name="Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin4"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a touch event and the start of the frame
    swap on the GPU service caused by the generated ScrollUpdate gesture event
    if that ScrollUpdate is the first such event in a given scroll gesture event
    sequence. If no swap was induced by the event, no recording is made.

    Team: input-dev@chromium.org.

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

<histogram
    name="Event.Latency.ScrollBegin.Wheel.BrowserNotifiedToBeforeGpuSwap2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between the browser receives the notification of the first ScrollUpdate
    gesture event in a given scroll gesture event sequence with wheel source
    induced renderer swap and GPU starts to swap.

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

<histogram name="Event.Latency.ScrollBegin.Wheel.GpuSwap2" units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between gpu starts to swap the first ScrollUpdate gesture event in a
    given scroll gesture event sequence with wheel source induced frame and the
    swap finishes.

    Team: input-dev@chromium.org.

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

<histogram name="Event.Latency.ScrollBegin.Wheel.HandledToRendererSwap2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between the first ScrollUpdate gesture event in a given scroll gesture
    event sequence with wheel source, is handled on main/impl thread (specified
    by suffix) and before renderer starts to swap.

    Team: input-dev@chromium.org.

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

<histogram
    name="Event.Latency.ScrollBegin.Wheel.RendererSwapToBrowserNotified2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between the renderer starts to swap a frame induced by the first
    ScrollUpdate gesture event in a given scroll gesture event sequence with
    wheel source, and browser receives the swap notification.

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

<histogram name="Event.Latency.ScrollBegin.Wheel.TimeToHandled2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a wheel event and the first generated
    ScrollUpdate gesture event in a given scroll gesture event sequence is
    handled on main/impl thread (specified by suffix). If no swap was induced by
    the ScrollBegin gesture event, no recording is made.

    Team: input-dev@chromium.org.

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

<histogram name="Event.Latency.ScrollBegin.Wheel.TimeToScrollUpdateSwapBegin2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a wheel event and the start of the frame
    swap on the GPU service caused by the generated ScrollUpdate gesture event
    if that ScrollUpdate is the first such event in a given scroll gesture event
    sequence. If no swap was induced by the event, no recording is made. This is
    going to be replaced by *.TimeToScrollUpdateSwapBegin3 version since a
    rebucketing change made this metric lose its usefulness in Chirp
    infrastructure.

    Team: input-dev@chromium.org.

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

<histogram name="Event.Latency.ScrollBegin.Wheel.TimeToScrollUpdateSwapBegin3"
    units="microseconds">
  <obsolete>
    Replaced by *.TimeToScrollUpdateSwapBegin4 https://crbug.com/849735 in M68.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a wheel event and the start of the frame
    swap on the GPU service caused by the generated ScrollUpdate gesture event
    if that ScrollUpdate is the first such event in a given scroll gesture event
    sequence. If no swap was induced by the event, no recording is made.

    Team: input-dev@chromium.org.

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

<histogram name="Event.Latency.ScrollBegin.Wheel.TimeToScrollUpdateSwapBegin4"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a wheel event and the start of the frame
    swap on the GPU service caused by the generated ScrollUpdate gesture event
    if that ScrollUpdate is the first such event in a given scroll gesture event
    sequence. If no swap was induced by the event, no recording is made.

    Team: input-dev@chromium.org.

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

<histogram
    name="Event.Latency.ScrollInertial.Touch.BrowserNotifiedToBeforeGpuSwap2"
    units="microseconds">
  <owner>sahel@chromium.org</owner>
  <summary>
    Time between the browser receives the notification of a ScrollUpdate gesture
    generated from a touchscreen fling induced renderer swap and GPU starts to
    swap.

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

<histogram name="Event.Latency.ScrollInertial.Touch.GpuSwap2"
    units="microseconds">
  <owner>sahel@chromium.org</owner>
  <summary>
    Time between gpu starts to swap a ScrollUpdate gesture event generated from
    a touchscreen fling induced frame and the swap finishes.

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

<histogram name="Event.Latency.ScrollInertial.Touch.HandledToRendererSwap2"
    units="microseconds">
  <owner>sahel@chromium.org</owner>
  <summary>
    Time between a ScrollUpdate gesture event generated from a touchscreen
    fling, is handled on main/impl thread (specified by suffix) and before
    renderer starts to swap.

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

<histogram
    name="Event.Latency.ScrollInertial.Touch.RendererSwapToBrowserNotified2"
    units="microseconds">
  <owner>sahel@chromium.org</owner>
  <summary>
    Time between the renderer starts to swap a frame induced by a ScrollUpdate
    gesture event generated from a touchscreen fling, and browser receives the
    swap notification.

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

<histogram name="Event.Latency.ScrollInertial.Touch.TimeToHandled2"
    units="microseconds">
  <owner>sahel@chromium.org</owner>
  <summary>
    Time between initial creation of a ScrollUpdate gesture event generated from
    a touchscreen fling is handled on main/impl thread (specified by suffix). If
    no swap was induced by the ScrollUpdate gesture event, no recording is made.

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

<histogram
    name="Event.Latency.ScrollInertial.Touch.TimeToScrollUpdateSwapBegin2"
    units="microseconds">
  <owner>sahel@chromium.org</owner>
  <summary>
    Time between initial creation of a ScrollUpdate gesture event generated from
    a touchscreen fling and the start of the frame swap on the GPU service
    caused by the generated ScrollUpdate gesture event. If no swap was induced
    by the event, no recording is made. This is going to be replaced by
    *.TimeToScrollUpdateSwapBegin3 version since a rebucketing change made this
    metric lose its usefulness in Chirp infrastructure.

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

<histogram
    name="Event.Latency.ScrollInertial.Touch.TimeToScrollUpdateSwapBegin3"
    units="microseconds">
  <obsolete>
    Replaced by *.TimeToScrollUpdateSwapBegin4 https://crbug.com/849735 in M68.
  </obsolete>
  <owner>sahel@chromium.org</owner>
  <summary>
    Time between initial creation of a ScrollUpdate gesture event generated from
    a touchscreen fling and the start of the frame swap on the GPU service
    caused by the generated ScrollUpdate gesture event. If no swap was induced
    by the event, no recording is made.

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

<histogram
    name="Event.Latency.ScrollInertial.Touch.TimeToScrollUpdateSwapBegin4"
    units="microseconds">
  <owner>sahel@chromium.org</owner>
  <summary>
    Time between initial creation of a ScrollUpdate gesture event generated from
    a touchscreen fling and the start of the frame swap on the GPU service
    caused by the generated ScrollUpdate gesture event. If no swap was induced
    by the event, no recording is made.

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

<histogram name="Event.Latency.ScrollUpdate.BrowserNotifiedToBeforeGpuSwap"
    units="microseconds">
  <obsolete>
    To be replaced by
    Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2,
    Event.Latency.ScrollUpdate.Wheel.BrowserNotifiedToBeforeGpuSwap2 in M56.
    https://crbug.com/649754
  </obsolete>
  <owner>rbyers@chromium.org</owner>
  <summary>
    Time between the browser receives the notification of a ScrollUpdate gesture
    event induced renderer swap and GPU starts to swap.
  </summary>
</histogram>

<histogram name="Event.Latency.ScrollUpdate.GpuSwap" units="microseconds">
  <obsolete>
    To be replaced by Event.Latency.ScrollUpdate.Touch.GpuSwap2,
    Event.Latency.ScrollUpdate.wheel.GpuSwap2 in M56. https://crbug.com/649754
  </obsolete>
  <owner>rbyers@chromium.org</owner>
  <summary>
    Time between gpu starts to swap a ScrollUpdate gesture event induced frame
    and the swap finishes.
  </summary>
</histogram>

<histogram name="Event.Latency.ScrollUpdate.HandledToRendererSwap"
    units="microseconds">
  <obsolete>
    To be replaced by Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2,
    Event.Latency.ScrollUpdate.Wheel.HandledToRendererSwap2 in M56.
    https://crbug.com/649754
  </obsolete>
  <owner>rbyers@chromium.org</owner>
  <summary>
    Time between the ScrollUpdate gesture event is handled on main/impl thread
    (specified by suffix) and before renderer starts to swap.
  </summary>
</histogram>

<histogram name="Event.Latency.ScrollUpdate.RendererSwapToBrowserNotified"
    units="microseconds">
  <obsolete>
    To be replaced by
    Event.Latency.ScrollUpdate.Touch.RendererSwapToBrowserNotified2,
    Event.Latency.ScrollUpdate.Wheel.RendererSwapToBrowserNotified2 in M56.
    https://crbug.com/649754
  </obsolete>
  <owner>rbyers@chromium.org</owner>
  <summary>
    Time between the renderer starts to swap a frame induced by ScrollUpdate
    gesture event and browser receives the swap notification.
  </summary>
</histogram>

<histogram name="Event.Latency.ScrollUpdate.TimeToScrollUpdateSwapBegin"
    units="microseconds">
  <obsolete>
    Replaced by *.TimeToScrollUpdateSwapBegin2 https://crbug.com/849735 in M68.
  </obsolete>
  <owner>nzolghadr@chromium.org</owner>
  <summary>
    Time between initial creation of a wheel/touch event and start of the frame
    swap on the GPU service caused by the generated ScrollUpdate gesture event.
    If no swap was induced by the event, no recording is made. The first GSU of
    every scrolling sequence is excluded from this metric.

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

<histogram name="Event.Latency.ScrollUpdate.TimeToScrollUpdateSwapBegin2"
    units="microseconds">
  <owner>nzolghadr@chromium.org</owner>
  <summary>
    Time between initial creation of a wheel/touch event and start of the frame
    swap on the GPU service caused by the generated ScrollUpdate gesture event.
    If no swap was induced by the event, no recording is made. The first GSU of
    every scrolling sequence is excluded from this metric.

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

<histogram
    name="Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between the browser receives the notification of a ScrollUpdate gesture
    event with touch source induced renderer swap and GPU starts to swap.

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

<histogram name="Event.Latency.ScrollUpdate.Touch.GpuSwap2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between gpu starts to swap a ScrollUpdate gesture event with touch
    source induced frame and the swap finishes.

    Team: input-dev@chromium.org.

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

<histogram name="Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between the ScrollUpdate gesture event with touch source, is handled on
    main/impl thread (specified by suffix) and before renderer starts to swap.

    Team: input-dev@chromium.org.

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

<histogram
    name="Event.Latency.ScrollUpdate.Touch.RendererSwapToBrowserNotified2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between the renderer starts to swap a frame induced by ScrollUpdate
    gesture event with touch source, and browser receives the swap notification.

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

<histogram
    name="Event.Latency.ScrollUpdate.Touch.TimeToFirstScrollUpdateSwapBegin2"
    units="microseconds">
  <obsolete>
    Replaced by Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin2.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a touch event and the start of the frame
    swap on the GPU service caused by the generated ScrollUpdate gesture event
    if that ScrollUpdate is the first such event in a given scroll gesture event
    sequence. If no swap was induced by the event, no recording is made.

    To be replaced by
    Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin2 in M57.
    https://crbug.com/669618

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

<histogram name="Event.Latency.ScrollUpdate.Touch.TimeToHandled2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a touch event and the generated
    ScrollUpdate gesture event is handled on main/impl thread (specified by
    suffix). If no swap was induced by the ScrollUpdate gesture event, no
    recording is made.

    Team: input-dev@chromium.org.

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

<histogram name="Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a touch event and start of the frame swap
    on the GPU service caused by the generated ScrollUpdate gesture event. If no
    swap was induced by the event, no recording is made. The first GSU of every
    scrolling sequence is excluded from this metric. This is going to be
    replaced by *.TimeToScrollUpdateSwapBegin3 version since a rebucketing
    change made this metric lose its usefulness in Chirp infrastructure.

    Team: input-dev@chromium.org.

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

<histogram name="Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin3"
    units="microseconds">
  <obsolete>
    Replaced by *.TimeToScrollUpdateSwapBegin4 https://crbug.com/849735 in M68.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a touch event and start of the frame swap
    on the GPU service caused by the generated ScrollUpdate gesture event. If no
    swap was induced by the event, no recording is made. The first GSU of every
    scrolling sequence is excluded from this metric.

    Team: input-dev@chromium.org.

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

<histogram name="Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin4"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a touch event and start of the frame swap
    on the GPU service caused by the generated ScrollUpdate gesture event. If no
    swap was induced by the event, no recording is made. The first GSU of every
    scrolling sequence is excluded from this metric.

    Team: input-dev@chromium.org.

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

<histogram name="Event.Latency.ScrollUpdate.TouchToHandled"
    units="microseconds">
  <obsolete>
    To be replaced by Event.Latency.ScrollUpdate.Touch.TimeToHandled2 in M56.
    https://crbug.com/649754
  </obsolete>
  <owner>rbyers@chromium.org</owner>
  <summary>
    Time between initial creation of a touch event and the generated
    ScrollUpdate gesture event is handled on main/impl thread (specified by
    suffix). If no swap was induced by the ScrollUpdate gesture event, no
    recording is made.
  </summary>
</histogram>

<histogram
    name="Event.Latency.ScrollUpdate.Wheel.BrowserNotifiedToBeforeGpuSwap2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between the browser receives the notification of a ScrollUpdate gesture
    event with wheel source induced renderer swap and GPU starts to swap.

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

<histogram name="Event.Latency.ScrollUpdate.Wheel.GpuSwap2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between gpu starts to swap a ScrollUpdate gesture event with wheel
    source induced frame and the swap finishes.

    Team: input-dev@chromium.org.

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

<histogram name="Event.Latency.ScrollUpdate.Wheel.HandledToRendererSwap2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between the ScrollUpdate gesture event with wheel source, is handled on
    main/impl thread (specified by suffix) and before renderer starts to swap.

    Team: input-dev@chromium.org.

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

<histogram
    name="Event.Latency.ScrollUpdate.Wheel.RendererSwapToBrowserNotified2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between the renderer starts to swap a frame induced by ScrollUpdate
    gesture event with wheel source, and browser receives the swap notification.

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

<histogram
    name="Event.Latency.ScrollUpdate.Wheel.TimeToFirstScrollUpdateSwapBegin2"
    units="microseconds">
  <obsolete>
    Replaced by Event.Latency.ScrollBegin.Wheel.TimeToScrollUpdateSwapBegin2.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a wheel event and the start of the frame
    swap on the GPU service caused by the generated ScrollUpdate gesture event
    if that ScrollUpdate is the first such event in a given scroll gesture event
    sequence. If no swap was induced by the event, no recording is made.

    To be replaced by
    Event.Latency.ScrollBegin.Wheel.TimeToScrollUpdateSwapBegin2 in M57.
    https://crbug.com/669618

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

<histogram name="Event.Latency.ScrollUpdate.Wheel.TimeToHandled2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a wheel event and the generated
    ScrollUpdate gesture event is handled on main/impl thread (specified by
    suffix). If no swap was induced by the ScrollUpdate gesture event, no
    recording is made. The first GSU of every scrolling sequence is excluded
    from this metric.

    Team: input-dev@chromium.org.

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

<histogram name="Event.Latency.ScrollUpdate.Wheel.TimeToScrollUpdateSwapBegin2"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a wheel event and start of the frame swap
    on the GPU service caused by the generated ScrollUpdate gesture event. If no
    swap was induced by the event, no recording is made. The first GSU of every
    scrolling sequence is excluded from this metric. This is going to be
    replaced by *.TimeToScrollUpdateSwapBegin3 version since a rebucketing
    change made this metric lose its usefulness in Chirp infrastructure.

    Team: input-dev@chromium.org.

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

<histogram name="Event.Latency.ScrollUpdate.Wheel.TimeToScrollUpdateSwapBegin3"
    units="microseconds">
  <obsolete>
    Replaced by *.TimeToScrollUpdateSwapBegin4 https://crbug.com/849735 in M68.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a wheel event and start of the frame swap
    on the GPU service caused by the generated ScrollUpdate gesture event. If no
    swap was induced by the event, no recording is made. The first GSU of every
    scrolling sequence is excluded from this metric.

    Team: input-dev@chromium.org.

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

<histogram name="Event.Latency.ScrollUpdate.Wheel.TimeToScrollUpdateSwapBegin4"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a wheel event and start of the frame swap
    on the GPU service caused by the generated ScrollUpdate gesture event. If no
    swap was induced by the event, no recording is made. The first GSU of every
    scrolling sequence is excluded from this metric.

    Team: input-dev@chromium.org.

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

<histogram name="Event.Latency.Touch.TimeToFirstScrollUpdateSwapBegin2"
    units="microseconds">
  <obsolete>
    Replaced by
    Event.Latency.ScrollUpdate.Touch.TimeToFirstScrollUpdateSwapBegin2.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a touch event and the start of the frame
    swap on the GPU service caused by the generated ScrollUpdate gesture event
    if that ScrollUpdate is the first such event in a given scroll gesture event
    sequence. If no swap was induced by the event, no recording is made.
  </summary>
</histogram>

<histogram name="Event.Latency.Touch.TimeToScrollUpdateSwapBegin2"
    units="microseconds">
  <obsolete>
    Replaced by Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin2.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a touch event and start of the frame swap
    on the GPU service caused by the generated ScrollUpdate gesture event. If no
    swap was induced by the event, no recording is made.
  </summary>
</histogram>

<histogram name="Event.Latency.TouchToFirstScrollUpdateSwap"
    units="microseconds">
  <obsolete>
    Replaced by Event.Latency.TouchToFirstScrollUpdateSwapBegin.
    crbug.com/478845
  </obsolete>
  <owner>rbyers@chromium.org</owner>
  <summary>
    Time between initial creation of a touch event and the frame swap caused by
    by the generated ScrollUpdate gesture event if that ScrollUpdate is the
    first such in a given scroll gesture event sequence. If no swap was induced
    by the event, no recording is made.
  </summary>
</histogram>

<histogram name="Event.Latency.TouchToFirstScrollUpdateSwapBegin"
    units="microseconds">
  <obsolete>
    Replaced by Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin2.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a touch event and the start of the frame
    swap on the GPU service caused by the generated ScrollUpdate gesture event
    if that ScrollUpdate is the first such event in a given scroll gesture event
    sequence. If no swap was induced by the event, no recording is made.

    To be replaced by
    Event.Latency.ScrollUpdate.Touch.TimeToFirstScrollUpdateSwapBegin2 in M56.
    https://crbug.com/649754

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

<histogram name="Event.Latency.TouchToScrollUpdateSwap" units="microseconds">
  <obsolete>
    Replaced by Event.Latency.TouchToScrollUpdateSwapBegin. crbug.com/478845
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a touch event and the frame swap caused by
    by the generated ScrollUpdate gesture event. If no swap was induced by the
    event, no recording is made.
  </summary>
</histogram>

<histogram name="Event.Latency.TouchToScrollUpdateSwapBegin"
    units="microseconds">
  <obsolete>
    Replaced by Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin2.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a touch event and start of the frame swap
    on the GPU service caused by the generated ScrollUpdate gesture event. If no
    swap was induced by the event, no recording is made.

    To be replaced by
    Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin2 in M56.
    https://crbug.com/649754

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

<histogram name="Event.Latency.Wheel.TimeToFirstScrollUpdateSwapBegin2"
    units="microseconds">
  <obsolete>
    Replaced by
    Event.Latency.ScrollUpdate.Wheel.TimeToFirstScrollUpdateSwapBegin2.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between initial creation of a wheel event and the start of the frame
    swap on the GPU service caused by the generated ScrollUpdate gesture event
    if that ScrollUpdate is the first such event in a given scroll gesture event
    sequence. If no swap was induced by the event, no recording is made.
  </summary>
</histogram>

<histogram name="Event.Latency.X11EventSource.UpdateServerTime"
    units="microseconds">
  <obsolete>
    Deprecated 08/2016, and replaced by Linux.X11.ServerRTT.
  </obsolete>
  <owner>thomasanderson@chromium.org</owner>
  <summary>Time to request a timestamp from the X server.</summary>
</histogram>

<histogram name="Event.MainThreadEventQueue.CoalescedCount" units="events">
  <obsolete>
    Deprecated 03/2018 due to lack of usage.
  </obsolete>
  <owner>dtapuska@chromium.org</owner>
  <summary>
    Number of continuous events (touchmove, mousemove, mousewheel) coalesced
    inside the main thread event queue per event. This field is recorded just
    before the event is processed on the main thread.

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

<histogram name="Event.MainThreadEventQueue.Continuous.FreshnessTime"
    units="microseconds">
  <obsolete>
    Deprecated 01/2018 due to lack of usage.
  </obsolete>
  <owner>dtapuska@chromium.org</owner>
  <summary>
    Time between when a continuous event (touchmove, mousemove, mousewheel) was
    placed into the queue (or coalesced with another event) and when it was
    processed on the main thread.

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

<histogram name="Event.MainThreadEventQueue.Continuous.QueueingTime"
    units="microseconds">
  <obsolete>
    Deprecated 01/2018 due to lack of usage.
  </obsolete>
  <owner>dtapuska@chromium.org</owner>
  <summary>
    Time between when a continuous event (touchmove, mousemove, mousewheel) was
    placed into the queue and when it was processed on the main thread.

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

<histogram name="Event.MainThreadEventQueue.FlushQueueNoBeginMainFrame"
    enum="BooleanHit">
  <owner>dtapuska@chromium.org</owner>
  <summary>
    Whether the Begin Main Frame was not received and the queue generated a
    flush queue after a given timeout.

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

<histogram name="Event.MainThreadEventQueue.NonContinuous.QueueingTime"
    units="microseconds">
  <obsolete>
    Deprecated 01/2018 due to lack of usage.
  </obsolete>
  <owner>dtapuska@chromium.org</owner>
  <summary>
    Time between when a non-continuous event (not touchmove, mousemove,
    mousewheel) was placed into the queue and when it was processed on the main
    thread.

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

<histogram name="Event.PassiveForcedEventDispatchCancelled"
    enum="PassiveForcedListenerResultType">
  <owner>dtapuska@chromium.org</owner>
  <summary>
    Counts the number of event listener invocations that were forced to be
    passive due to interventions and whether the invocation of the listener
    called prevent default or not.

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

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

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

<histogram name="Event.PassiveListeners.ForcedNonBlockingLatency"
    units="microseconds">
  <obsolete>
    Deprecated 08/2016 in Issue 595327, and replaced by
    Event.PassiveListeners.ForcedNonBlockingLatencyDueToFling.
  </obsolete>
  <owner>dtapuska@chromium.org</owner>
  <summary>
    Time between when a forced non-blocking event was generated and the event
    processed. This histogram tracks the benefit of forcing non-blocking events
    listeners.
  </summary>
</histogram>

<histogram name="Event.PassiveListeners.ForcedNonBlockingLatencyDueToFling"
    units="microseconds">
  <owner>dtapuska@chromium.org</owner>
  <summary>
    Time between when a touchstart or first touchmove event per scroll was
    generated and the event processed, for events which were forced non-blocking
    since they occurred during fling. This histogram tracks the benefit of
    forcing events non-blocking during fling.

    Team: input-dev@chromium.org.

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

<histogram
    name="Event.PassiveListeners.ForcedNonBlockingLatencyDueToUnresponsiveMainThread"
    units="microseconds">
  <obsolete>
    Deprecated 04/2018 due to cancellation of experiment.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between when a touchstart or first touchmove event per scroll was
    generated and the event processed, for events which were forced non-blocking
    since they occurred while the main thread was unresponsive. This histogram
    tracks the benefit of forcing events non-blocking when the main thread is
    unresponsive.

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

<histogram name="Event.PassiveListeners.Latency" units="microseconds">
  <owner>dtapuska@chromium.org</owner>
  <summary>
    Time between when a cancelable event was generated and the event processed
    yet no action was executed for the event. This histogram tracks the
    potential benefit of using passive events listeners.

    Team: input-dev@chromium.org.

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

<histogram name="Event.RenderView.DiscardInput" enum="BooleanHit">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>dtapuska@chromium.org</owner>
  <summary>
    Whether the input IPC messages were discarded before being fully processed
    in RenderView's IPC message handler.

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

<histogram name="Event.Scroll.ScrollerSize.OnLoad" units="pixels">
  <obsolete>
    Deprecated 10/2017 due to the completion of the experiment.
  </obsolete>
  <owner>yigu@chromium.org</owner>
  <summary>
    Record the area of a scroller upon page load. This is intended to help us
    measure the distribution of scrollers with different sizes. Combined with
    the other two metrics which measure the size of scrollers on scroll, we may
    have a better idea of not compositing small scrollers.

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

<histogram name="Event.Scroll.ScrollerSize.OnScroll" units="pixels">
  <obsolete>
    Deprecated 10/2017 due to the completion of the experiment.
  </obsolete>
  <owner>yigu@chromium.org</owner>
  <summary>
    Record the area of a scroller upon ScrollBegin. This is intended to help us
    measure the frequencies of different sizes of scrollers getting scrolled.
    For those small scrollers that users may rarely scroll, there is no need to
    composite them even if we are able to do so.

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

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

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

<histogram name="Event.TimestampHasValidTimebase" enum="EventTimestampValidity">
  <obsolete>
    Deprecated as of 1/2018 in issue 650338 (http://crbug.com/650338). Using a
    DCHECK instead.
  </obsolete>
  <owner>majidvp@chromium.org</owner>
  <owner>caseq@chromium.org</owner>
  <summary>
    Whether the timestamps on input events produced by the windowing system
    appear to be sharing the same time base as TimeTicks, modulo possible
    roll-over.

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

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

<histogram name="Event.Touch.TargetAndDispatchResult"
    enum="TouchTargetAndDispatchResultType">
  <obsolete>
    Deprecated 05/2016, and replaced by Event.Touch.TargetAndDispatchResult2.
  </obsolete>
  <owner>dtapuska@chromium.org</owner>
  <summary>
    An enumeration identifying 3 properties: 1) a classification of the event
    target whether it is a root scroll listener (window, document, body) or not;
    2) the result of the dispatch; 3) whether the document was scrollable or
    not.
  </summary>
</histogram>

<histogram name="Event.Touch.TargetAndDispatchResult2"
    enum="TouchTargetAndDispatchResultType2">
  <owner>dtapuska@chromium.org</owner>
  <summary>
    An enumeration identifying 4 properties: 1) a classification of the current
    target whether it is a root scroll listener (window, document, body) or not;
    2) the result of the dispatch or whether it was previously canceled 3)
    whether the document was scrollable or not 4) what phase the listener was
    encountered at. This metric is logged during the dispatch of the touch
    events. It will only be reported for main frame events that block scrolling,
    have only one touch point and current targets that fired an event listener
    at that phase.

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

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

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

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

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

<histogram name="Event.Touch.TouchAdjustment.AdjustDistance" units="pixels">
  <owner>eirage@chromium.org</owner>
  <summary>
    Records the euclidean distance in dips from a gesture event's original tap
    center to its adjusted touch point. 0 if not adjusted. This only records
    GestureTap events and GestureLongPress events.

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

<histogram name="Event.Touch.TouchAdjustment.AdjustedNode"
    enum="TouchAdjustmentNodeRelation">
  <obsolete>
    Deprecated 03/2018 due to no longer needed.
  </obsolete>
  <owner>eirage@chromium.org</owner>
  <summary>
    Records if doing touch adjustment on touchstart have same hit test node as
    doing touch adjustment on GestureTap. If not, record if one is descendant of
    the other. Others means neither of the nodes are descendant of the other.
    This only records GestureTap events.

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

<histogram name="Event.Touch.TouchAdjustment.AdjustToSameNode" enum="Boolean">
  <obsolete>
    Deprecated 02/2018 and replaced by Event.Touch.TouchAdjustment.AdjustedNode.
  </obsolete>
  <owner>eirage@chromium.org</owner>
  <summary>
    Records if doing touch adjustment on touchstart have same hit test node as
    doing touch adjustment on GestureTap. True for same node, false for
    different node. This only records GestureTap events.

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

<histogram name="Event.Touch.TouchDispositionsAfterPageLoad"
    enum="TouchEventDispatchResultType">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Records the disposition (handled or not handled) of touchstart events and
    the first touchmove events per scroll. Only recorded after the page is fully
    loaded.

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

<histogram name="Event.Touch.TouchDispositionsBeforePageLoad"
    enum="TouchEventDispatchResultType">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Records the disposition (handled or not handled) of touchstart events and
    the first touchmove events per scroll. Only recorded before the page is
    fully loaded.

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

<histogram name="Event.Touch.TouchDispositionsDuringFling"
    enum="TouchEventDispatchResultType">
  <obsolete>
    Deprecated 08/2016 in Issue 595327, and replaced by
    Event.Touch.TouchDispositionsDuringFling2.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Records the disposition (handled or not handled) of touchstart events. Only
    recorded while there is an active fling animation.
  </summary>
</histogram>

<histogram name="Event.Touch.TouchDispositionsDuringFling2"
    enum="TouchEventDispatchResultType">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Records the disposition (handled or not handled) of touchstart and first
    touchmove events per scroll. Only recorded while there is an active fling
    animation.

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

<histogram name="Event.Touch.TouchDispositionsOutsideFling"
    enum="TouchEventDispatchResultType">
  <obsolete>
    Deprecated 08/2016 in Issue 595327, and replaced by
    Event.Touch.TouchDispositionsOutsideFling2.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Records the disposition (handled or not handled) of touchstart events. Only
    recorded while there is no active fling animation.
  </summary>
</histogram>

<histogram name="Event.Touch.TouchDispositionsOutsideFling2"
    enum="TouchEventDispatchResultType">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Records the disposition (handled or not handled) of touchstart and first
    touchmove events per scroll events. Only recorded while there is no active
    fling animation.

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

<histogram name="Event.Touch.TouchLatencyAfterPageLoad" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between when a touch event was generated and the event was processed.
    Recorded only for touchstart events and the first touchmove events per
    scroll that occur after the page is fully loaded.

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

<histogram name="Event.Touch.TouchLatencyBeforePageLoad" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between when a touch event was generated and the event was processed.
    Recorded only for touchstart events and the first touchmove events per
    scroll that occur before the page is fully loaded. This histogram tracks the
    benefit of forcing passive event listeners before the page is fully loaded.

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

<histogram name="Event.Touch.TouchLatencyOutsideFling" units="microseconds">
  <obsolete>
    Deprecated 06/2017 due to lack of usage.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between when a touch event was generated and the event was processed.
    Recorded only for touchstart events and the first touchmove events per
    scroll when there was no active fling animation.

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

<histogram name="Event.Touch.TouchStartLatencyDuringFling" units="microseconds">
  <obsolete>
    Deprecated 08/2016 in Issue 595327, and replaced by
    Event.PassiveListeners.ForcedNonBlockingLatencyDueToFling.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between when a touchstart event was generated and the event was
    processed. Recorded only when there was an active fling animation. This
    histogram tracks the benefit of forcing passive event listeners during
    fling.
  </summary>
</histogram>

<histogram name="Event.Touch.TouchStartLatencyOutsideFling"
    units="microseconds">
  <obsolete>
    Deprecated 08/2016 in Issue 595327, and replaced by
    Event.Touch.TouchLatencyOutsideFling.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between when a touchstart event was generated and the event was
    processed. Recorded only when there was no active fling animation.
  </summary>
</histogram>

<histogram name="Event.TouchDuration" units="ms">
  <owner>kuscher@google.com</owner>
  <owner>tdresser@chromium.org</owner>
  <summary>
    The duration of a touch-sequence. Only measured for single finger gestures.
    This replaces Ash.TouchDuration2, which did not record events on Android and
    Windows.

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

<histogram name="Event.TouchMaxDistance" units="pixels">
  <owner>kuscher@google.com</owner>
  <owner>tdresser@chromium.org</owner>
  <summary>
    The maximum euclidean distance in dips (device independent pixel) which a
    touch point has travelled away from its starting point. Only measured for
    single finger gestures. This replaces Ash.TouchMaxDistance, which did not
    record events on Android and Windows.

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

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

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

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

<histogram name="Event.TouchSelectionHandle.BestVerticalClippingPercentage"
    units="%">
  <owner>amaralp@chromium.org</owner>
  <summary>
    Percentage of touch handle height that would be clipped by the viewport in
    the best case of flipping or not flipping.
  </summary>
</histogram>

<histogram name="Event.TouchSelectionHandle.BottomHandleClippingPercentage"
    units="%">
  <owner>amaralp@chromium.org</owner>
  <summary>
    Percentage of touch handle height that would be clipped by the viewport if
    the handle was not vertically flipped.
  </summary>
</histogram>

<histogram name="Event.TouchSelectionHandle.FlippingImprovementPercentage"
    units="%">
  <owner>amaralp@chromium.org</owner>
  <summary>
    The difference between the metrics |BottomHandleClippingPercentage| and
    |BestVerticalClippingPercentage|. Measures how useful vertical flipping is.
  </summary>
</histogram>

<histogram name="Event.TouchSelectionHandle.LeftHandleClippingPercentage"
    units="%">
  <owner>amaralp@chromium.org</owner>
  <summary>
    Percentage of left touch handle width that would be clipped by the viewport
    without flipping.
  </summary>
</histogram>

<histogram name="Event.TouchSelectionHandle.RightHandleClippingPercentage"
    units="%">
  <owner>amaralp@chromium.org</owner>
  <summary>
    Percentage of right touch handle width that would be clipped by the viewport
    without flipping.
  </summary>
</histogram>

<histogram name="Event.TouchSelectionHandle.ShouldFlipHandleVertically"
    enum="TouchHandleVerticallyFlipped">
  <owner>amaralp@chromium.org</owner>
  <summary>
    Whether flipping the handle vertically would result in less clipping.
  </summary>
</histogram>

<histogram name="Event.VizHitTest.AggregateTime" units="ms">
  <obsolete>
    Deprecated as of 07/2018. Replaced with Event.VizHitTest.AggregateTimeUs.
  </obsolete>
  <owner>riajiang@chromium.org</owner>
  <owner>event-targeting@chromium.org</owner>
  <summary>
    Tracks how long it takes for HitTestAggregator to aggregate hit-test data
    received from all clients.
  </summary>
</histogram>

<histogram name="Event.VizHitTest.AggregateTimeUs" units="microseconds">
  <owner>riajiang@chromium.org</owner>
  <owner>event-targeting@chromium.org</owner>
  <summary>
    Tracks how long it takes for HitTestAggregator to aggregate hit-test data
    received from all clients, in microseconds.
  </summary>
</histogram>

<histogram name="Event.VizHitTest.HitTestRegions" units="regions">
  <owner>riajiang@chromium.org</owner>
  <owner>event-targeting@chromium.org</owner>
  <summary>
    Total number of hit-test regions Viz received from all clients.
  </summary>
</histogram>

<histogram name="Event.VizHitTest.TargetTime" units="ms">
  <obsolete>
    Deprecated as of 07/2018. Replaced with Event.VizHitTest.TargetTimeUs.
  </obsolete>
  <owner>riajiang@chromium.org</owner>
  <owner>event-targeting@chromium.org</owner>
  <summary>
    Tracks how long it takes for HitTestQuery to find a target on a given
    location.
  </summary>
</histogram>

<histogram name="Event.VizHitTest.TargetTimeUs" units="microseconds">
  <owner>riajiang@chromium.org</owner>
  <owner>event-targeting@chromium.org</owner>
  <summary>
    Tracks how long it takes for HitTestQuery to find a target on a given
    location, in microseconds.
  </summary>
</histogram>

<histogram name="Event.VizHitTest.TransformTime" units="ms">
  <obsolete>
    Deprecated as of 07/2018. Replaced with Event.VizHitTest.TransformTimeUs.
  </obsolete>
  <owner>riajiang@chromium.org</owner>
  <owner>event-targeting@chromium.org</owner>
  <summary>
    Tracks how long it takes for HitTestQuery to transform a location to a given
    target's coordinate space.
  </summary>
</histogram>

<histogram name="Event.VizHitTest.TransformTimeUs" units="microseconds">
  <owner>riajiang@chromium.org</owner>
  <owner>event-targeting@chromium.org</owner>
  <summary>
    Tracks how long it takes for HitTestQuery to transform a location to a given
    target's coordinate space, in microseconds.
  </summary>
</histogram>

<histogram name="ExclusiveAccess.BubbleReshowsPerSession.Fullscreen"
    units="reshows">
  <owner>mgiuca@chromium.org</owner>
  <summary>
    The number of times the fullscreen bubble was re-shown due to inactivity
    during a session of fullscreen mode (not including mouse or keyboard lock).
    If the mouse or keyboard is also locked while a re-show occurs, both this
    and BubbleReshowsPerSession.MouseLock and/or
    BubbleReshowsPerSession.KeyboardLock are incremented. Includes all types of
    fullscreen (user-triggered, extension-triggered and page-triggered).
    Recorded at the end of the session if the simplified-fullscreen-ui flag is
    enabled.
  </summary>
</histogram>

<histogram name="ExclusiveAccess.BubbleReshowsPerSession.KeyboardLock"
    units="reshows">
  <owner>joedow@chromium.org</owner>
  <summary>
    The number of times the keyboard lock exit bubble was re-shown during a
    session of keyboard lock mode. This occurs when the ExclusiveAccessMode
    inactivity timer fires (roughly every 15 minutes). If also in fullscreen
    while a re-show occurs both this and BubbleReshowsPerSession.Fullscreen are
    incremented in that scenario. Recorded at the end of the session if the
    simplified-fullscreen-ui flag is enabled.
  </summary>
</histogram>

<histogram name="ExclusiveAccess.BubbleReshowsPerSession.KeyboardLockForced"
    units="reshows">
  <owner>joedow@chromium.org</owner>
  <summary>
    The number of times the keyboard lock exit bubble was re-shown during a
    session of keyboard lock mode due to the user pressing the escape key
    repeatedly.  This metric does not count reshows due to inactivity. Recorded
    at the end of the session if the simplified-fullscreen-ui flag is enabled.
  </summary>
</histogram>

<histogram name="ExclusiveAccess.BubbleReshowsPerSession.MouseLock"
    units="reshows">
  <owner>mgiuca@chromium.org</owner>
  <summary>
    The number of times the mouse lock bubble was re-shown due to inactivity
    during a session of mouse lock mode. If also in fullscreen while a re-show
    occurs, both this and BubbleReshowsPerSession.Fullscreen are incremented.
    Recorded at the end of the session if the simplified-fullscreen-ui flag is
    enabled.
  </summary>
</histogram>

<histogram name="ExtensionActivity.AdInjected" units="Extension Count">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    For each pageload, the number of extensions that inject at least one new ad.
  </summary>
</histogram>

<histogram name="ExtensionActivity.AdLikelyInjected" units="Extension Count">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    For each pageload, the number of extensions that performed an action that
    heuristically looks like injecting an ad, but could not be confirmed.
  </summary>
</histogram>

<histogram name="ExtensionActivity.AdLikelyReplaced" units="Extension Count">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    For each pageload, the number of extensions that performed an action that
    heuristically looks like replacing an ad, but could not be confirmed.
  </summary>
</histogram>

<histogram name="ExtensionActivity.AdRemoved" units="Extension Count">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    For each pageload, the number of extensions that remove at least one ad.
  </summary>
</histogram>

<histogram name="ExtensionActivity.AdReplaced" units="Extension Count">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    For each pageload, the number of extensions that replace at least one ad.
  </summary>
</histogram>

<histogram name="ExtensionActivity.ContentScript">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each pageload, the number of extensions that inject a content script.
  </summary>
</histogram>

<histogram name="ExtensionActivity.CreatedDiv">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each pageload, the number of extensions that create divs to add to the
    page.
  </summary>
</histogram>

<histogram name="ExtensionActivity.CreatedEmbed">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each pageload, the number of extensions that create 'embed' elements to
    add to the page.
  </summary>
</histogram>

<histogram name="ExtensionActivity.CreatedIframe">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each pageload, the number of extensions that create iframes to add to
    the page.
  </summary>
</histogram>

<histogram name="ExtensionActivity.CreatedInput">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each pageload, the number of extensions that create inputs to add to the
    page.
  </summary>
</histogram>

<histogram name="ExtensionActivity.CreatedLink">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each pageload, the number of extensions that create links to add to the
    page.
  </summary>
</histogram>

<histogram name="ExtensionActivity.CreatedObject">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each pageload, the number of extensions that create 'object' elements to
    add to the page.
  </summary>
</histogram>

<histogram name="ExtensionActivity.CreatedScript">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each pageload, the number of extensions that create script tags to add
    to the page.
  </summary>
</histogram>

<histogram name="ExtensionActivity.DocumentWrite">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each pageload, the number of extensions that use document.write.
  </summary>
</histogram>

<histogram name="ExtensionActivity.Google.ContentScript">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each www.google.com pageload, the number of extensions that inject a
    content script.
  </summary>
</histogram>

<histogram name="ExtensionActivity.Google.CreatedDiv">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each www.google.com pageload, the number of extensions that create divs
    to add to the page.
  </summary>
</histogram>

<histogram name="ExtensionActivity.Google.CreatedEmbed">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each www.google.com pageload, the number of extensions that create
    'embed' elements to add to the page.
  </summary>
</histogram>

<histogram name="ExtensionActivity.Google.CreatedIframe">
  <owner>felt@chromium.org</owner>
  <summary>
    For each www.google.com pageload, the number of extensions that create
    iframes to add to the page.
  </summary>
</histogram>

<histogram name="ExtensionActivity.Google.CreatedInput">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each www.google.com pageload, the number of extensions that create
    inputs to add to the page.
  </summary>
</histogram>

<histogram name="ExtensionActivity.Google.CreatedLink">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each www.google.com pageload, the number of extensions that create links
    to add to the page.
  </summary>
</histogram>

<histogram name="ExtensionActivity.Google.CreatedObject">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each www.google.com pageload, the number of extensions that create
    'object' elements to add to the page.
  </summary>
</histogram>

<histogram name="ExtensionActivity.Google.CreatedScript">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each www.google.com pageload, the number of extensions that create
    script tags to add to the page.
  </summary>
</histogram>

<histogram name="ExtensionActivity.Google.DocumentWrite">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each www.google.com pageload, the number of extensions that use
    document.write.
  </summary>
</histogram>

<histogram name="ExtensionActivity.Google.InnerHtml">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each www.google.com pageload, the number of extensions that set
    innerHTML.
  </summary>
</histogram>

<histogram name="ExtensionActivity.Google.InvokedDomMethod">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each www.google.com pageload, the number of extensions that invoke DOM
    methods.
  </summary>
</histogram>

<histogram name="ExtensionActivity.Google.ModifiedDom">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each www.google.com pageload, the number of extensions that set the
    value of DOM properties via assignments.
  </summary>
</histogram>

<histogram name="ExtensionActivity.Google.ReadDom">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each www.google.com pageload, the number of extensions that read from
    the DOM.
  </summary>
</histogram>

<histogram name="ExtensionActivity.InnerHtml">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each pageload, the number of extensions that set innerHTML.
  </summary>
</histogram>

<histogram name="ExtensionActivity.InvokedDomMethod">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each pageload, the number of extensions that invoke DOM methods.
  </summary>
</histogram>

<histogram name="ExtensionActivity.ModifiedDom">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each pageload, the number of extensions that set the value of DOM
    properties via assignments.
  </summary>
</histogram>

<histogram name="ExtensionActivity.ReadDom">
  <obsolete>
    Deprecated with M46.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    For each pageload, the number of extensions that read from the DOM.
  </summary>
</histogram>

<histogram name="ExtensionBlacklist.BlacklistInstalled"
    enum="ExtensionLocation">
  <owner>nparker@chromium.org</owner>
  <summary>
    The number of extensions that were blacklisted when already installed,
    grouped by Extension::Location. Logged when ExtensionService blackists and
    unloads an installed extension.
  </summary>
</histogram>

<histogram name="ExtensionBlacklist.BlockCRX" enum="ExtensionLocation">
  <owner>nparker@chromium.org</owner>
  <summary>
    The number of extensions that have been blocked from installing grouped by
    Extension::Location. Logged when ExtensionService refuses to install a
    blacklisted extension.
  </summary>
</histogram>

<histogram name="ExtensionBlacklist.SilentInstall" enum="ExtensionLocation">
  <owner>nparker@chromium.org</owner>
  <summary>
    The number of extensions that have been silently installed in a blacklisted
    state, grouped by Extension::Location. Logged when ExtensionService installs
    a blacklisted extension without blocking it (ExtensionBlacklist.BlockCRX
    would be logged otherwise). Typically this will be when a user has a
    blacklisted extension synced.
  </summary>
</histogram>

<histogram name="ExtensionBlacklist.UnblacklistInstalled"
    enum="ExtensionLocation">
  <owner>nparker@chromium.org</owner>
  <summary>
    The number of extensions that were unblacklisted when installed, grouped by
    Extension::Location. Logged when ExtensionService unblacklists and loads a
    blacklisted extension.
  </summary>
</histogram>

<histogram name="ExtensionBubble.DevModeUserSelection"
    enum="ExtensionBubbleAction">
  <owner>finnur@chromium.org</owner>
  <summary>
    The action taken by the user when seeing the bubble, logged right after the
    action is taken.
  </summary>
</histogram>

<histogram name="ExtensionBubble.ExtensionsInDevModeCount"
    units="Developer Mode Extensions">
  <owner>finnur@chromium.org</owner>
  <summary>
    The total number of extensions found to be loaded under Developer Mode,
    logged when the devmode bubble is shown (once per startup per profile, if
    any devmode extension is found).
  </summary>
</histogram>

<histogram name="ExtensionBubble.ExtensionWipeoutCount" units="Extensions">
  <owner>finnur@chromium.org</owner>
  <summary>
    The total number of extensions found to be wiped by SideloadWipeout, logged
    when the wipeout bubble is shown, which is once per startup per profile (as
    long as wiped extensions were found). Not logged if no extensions of that
    nature were found.
  </summary>
</histogram>

<histogram name="ExtensionBubble.WipeoutUserSelection"
    enum="ExtensionBubbleAction">
  <owner>finnur@chromium.org</owner>
  <summary>
    The action taken by the user when seeing the bubble, logged right after the
    action is taken.
  </summary>
</histogram>

<histogram name="ExtensionContentHashFetcher.CreateHashesTime" units="ms">
  <owner>asargent@chromium.org</owner>
  <summary>
    The time taken to create the computed_hashes.json file for an extension.
    This happens once for each extension after we get signed values of the
    expected root node of a tree hashes for each file from the webstore; we then
    compute the individual block level hashes of the actual files and cache them
    in computed_hashes.json (assuming we don't detect any mismatches).
  </summary>
</histogram>

<histogram name="ExtensionContentHashReader.InitLatency" units="ms">
  <owner>asargent@chromium.org</owner>
  <summary>
    The time taken to initialize the ContentHashReader for an extension resource
    load. (The work done is to read in the verified contents and computed hashes
    data, and compare them to make sure they agree.)
  </summary>
</histogram>

<histogram name="ExtensionContentVerifyJob.TimeSpentUS" units="microseconds">
  <owner>asargent@chromium.org</owner>
  <summary>
    The time taken in computation (hashing actual bytes read and comparing
    against expected computed hashes values) during an extension resource load.

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

<histogram name="ExtensionInstalledLoader.ForceDisabled"
    enum="BooleanForceDisabled">
  <obsolete>
    Replaced with ExtensionInstalledLoader.ForceDisabled2.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Counts whether we force-disabled an installed extension at startup because a
    policy provider indicated it must remain disabled.
  </summary>
</histogram>

<histogram name="ExtensionInstalledLoader.ForceDisabled2"
    enum="BooleanForceDisabled">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Counts whether we force-disabled an installed extension at startup because
    it failed ManagementPolicy::MustRemainDisabled check. This checks both
    UserMayLoad and MustRemainDisabled methods on a policy provider.
  </summary>
</histogram>

<histogram name="ExtensionInstallSigner.InvalidCount">
  <owner>asargent@chromium.org</owner>
  <summary>
    This is a count of the number of ids that we asked to be signed which the
    server response indicated were not in the webstore.
  </summary>
</histogram>

<histogram name="ExtensionInstallSigner.RequestCount">
  <owner>asargent@chromium.org</owner>
  <summary>
    A count of the number of server requests since Chrome started running,
    recorded each time we do a request. NOTE: when interpreting these values,
    keep in mind that a user who did 5 server requests during one run of Chrome
    will log this histogram 5 times with values 1, 2, 3, 4, and 5.
  </summary>
</histogram>

<histogram name="ExtensionInstallSigner.ResultWasValid">
  <owner>asargent@chromium.org</owner>
  <summary>
    Whether the server result received by the extensions install signer was
    valid or invalid.
  </summary>
</histogram>

<histogram name="ExtensionInstallSigner.SecondsSinceLastRequest"
    units="seconds">
  <owner>asargent@chromium.org</owner>
  <summary>
    This records the number of seconds since the last time we've done a request
    to the server (only during this run of the browser).
  </summary>
</histogram>

<histogram name="ExtensionInstallSigner.UptimeAtTimeOfRequest" units="seconds">
  <owner>asargent@chromium.org</owner>
  <summary>
    Records how many seconds the browser has been running at the time a request
    to the server is made to get a new install signature.
  </summary>
</histogram>

<histogram name="ExtensionInstallVerifier.ActualStatus"
    enum="ExtensionInstallVerifierStatus">
  <owner>asargent@chromium.org</owner>
  <summary>
    Logged during InstallVerifier::Init, to indicate the actual enforcement
    status used (usually determined by the ExtensionInstallVerifier field trial
    experiment, but possibly modified by command line flags).
  </summary>
</histogram>

<histogram name="ExtensionInstallVerifier.ExperimentStatus"
    enum="ExtensionInstallVerifierStatus">
  <owner>asargent@chromium.org</owner>
  <summary>
    Logged during InstallVerifier::Init to indicate the enforcement status as
    determined by the ExtensionInstallVerifier field trial experiment.
  </summary>
</histogram>

<histogram name="ExtensionInstallVerifier.GetSignatureResult"
    enum="ExtensionInstallVerifierGetSignatureResult">
  <owner>asargent@chromium.org</owner>
  <summary>The result of the verifier trying to get a new signature.</summary>
</histogram>

<histogram name="ExtensionInstallVerifier.InitResult"
    enum="ExtensionInstallVerifierInitResult">
  <owner>asargent@chromium.org</owner>
  <summary>
    The result of initialization for the extension install verifier.
  </summary>
</histogram>

<histogram name="ExtensionInstallVerifier.MustRemainDisabled"
    enum="ExtensionInstallVerifierMustRemainDisabled">
  <owner>asargent@chromium.org</owner>
  <summary>
    The outcome for each call to InstallVerifier::MustRemainDisabled.
  </summary>
</histogram>

<histogram name="ExtensionOverrideBubble.NtpOverriddenUserSelection"
    enum="ExtensionBubbleAction">
  <owner>finnur@chromium.org</owner>
  <summary>
    The action taken by the user when seeing the bubble, notifing them of an
    extension overriding their new tab page. Logged right after the action is
    taken.
  </summary>
</histogram>

<histogram name="ExtensionOverrideBubble.SettingsApiUserSelectionHomePage"
    enum="ExtensionBubbleAction">
  <owner>finnur@chromium.org</owner>
  <summary>
    The action taken by the user when seeing the bubble, notifing them of an
    extension overriding their homepage. Logged right after the action is taken.
  </summary>
</histogram>

<histogram name="ExtensionOverrideBubble.SettingsApiUserSelectionSearchEngine"
    enum="ExtensionBubbleAction">
  <owner>finnur@chromium.org</owner>
  <summary>
    The action taken by the user when seeing the bubble, notifing them of an
    extension overriding their search engine. Logged right after the action is
    taken.
  </summary>
</histogram>

<histogram name="ExtensionOverrideBubble.SettingsApiUserSelectionStartupPage"
    enum="ExtensionBubbleAction">
  <owner>finnur@chromium.org</owner>
  <summary>
    The action taken by the user when seeing the bubble, notifing them of an
    extension overriding their startup page. Logged right after the action is
    taken.
  </summary>
</histogram>

<histogram name="Extensions.ActiveScriptController.DeniedExtensions"
    units="Extension Count">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of extensions on a page that wanted to execute a script, required
    explicit user consent, and were denied permission.
  </summary>
</histogram>

<histogram name="Extensions.ActiveScriptController.PermittedExtensions"
    units="Extension Count">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of extensions on a page that wanted to execute a script, required
    explicit user consent, and were granted permission.
  </summary>
</histogram>

<histogram name="Extensions.ActiveScriptController.PreventableAdInjectors"
    units="Extension Count">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of extensions per page that injected an ad and could have been
    stopped if the user had declined script injection. This is related to the
    ActivityLog metrics, ExtensionActivity.Ad*. Recorded upon page close or
    navigation. Only recorded if there was at least one ad injection detected.
  </summary>
</histogram>

<histogram name="Extensions.ActiveScriptController.ShownActiveScriptsOnPage"
    units="Number of Actions">
  <obsolete>
    Deprecated 2/2014.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of extensions which would display an Active Script Running
    indiciation to the user. Recorded at page close.
  </summary>
</histogram>

<histogram name="Extensions.ActiveScriptController.UnpreventableAdInjectors"
    units="Extension Count">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of extensions per page that injected an ad and that could not
    have been stopped through script injection permission. This is related to
    the ActivityLog metrics, ExtensionActivity.Ad*. Recorded upon page close or
    navigation. Only recorded if there was at least one ad injection detected.
  </summary>
</histogram>

<histogram name="Extensions.AdInjection.AdType" enum="InjectedAdType">
  <owner>felt@chromium.org</owner>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>The type of ad that was injected.</summary>
</histogram>

<histogram name="Extensions.AdInjection.InstallLocation"
    enum="ExtensionLocation">
  <owner>felt@chromium.org</owner>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The install location of an ad-injecting extension. Recorded upon page close
    for any extension that injected ads on that page.
  </summary>
</histogram>

<histogram name="Extensions.ApiBindingGenerationTime" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The amount of time it takes to generate the JavaScript API bindings for a
    particular extension API. This includes the time from when a JavaScript
    context tries to access the API, triggering the lazy initializion, to the
    time when the API object is returned. This is only recorded if the binding
    is successfully generated. See also Extensions.DidCreateScriptContext_*.
  </summary>
</histogram>

<histogram name="Extensions.ApiBindingObjectGenerationTime"
    units="microseconds">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The amount of time it takes to create the JavaScript binding object using
    the binding.js module. This is a strict subset of
    Extensions.ApiBindingGenerationTime, which includes this work and more.

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

<histogram name="Extensions.ApiTabUpdateJavascript" enum="Boolean">
  <owner>dbertoni@chromium.org</owner>
  <summary>
    Reports whether a tab was updated to a javascript:-scheme URL from the
    extensions tabs.update API. Reported once per call to tabs.update().
  </summary>
</histogram>

<histogram name="Extensions.APIUse_RelativeURL" enum="UrlResolutionResult">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Captures the results of URL resolution when relative urls are used in the
    tabs/windows api.
  </summary>
</histogram>

<histogram name="Extensions.AppLaunch" enum="AppLaunch">
  <owner>benwells@chromium.org</owner>
  <owner>tapted@chromium.org</owner>
  <summary>
    The number of times v1 apps are launched grouped by
    extension_misc::AppLaunchBuckets. See also Apps.AppLaunch for v2 apps.
  </summary>
</histogram>

<histogram name="Extensions.AppLaunchContainer" enum="AppLaunchContainer">
  <obsolete>
    Deprecated as of 12/2014, replaced by Apps.HostedAppLaunchContainer.
  </obsolete>
  <owner>benwells@chromium.org</owner>
  <owner>tapted@chromium.org</owner>
  <summary>
    The number of times apps are launched grouped by
    extensions::LaunchContainer.
  </summary>
</histogram>

<histogram name="Extensions.AppLaunchSource" enum="AppLaunchSource">
  <owner>benwells@chromium.org</owner>
  <owner>cylee@chromium.org</owner>
  <summary>
    The number of times apps are launched grouped by
    extensions::AppLaunchSource.
  </summary>
</histogram>

<histogram name="Extensions.AppLoadedInTab" enum="AppLoadedInTabSource">
  <owner>lazyboy@chromium.org</owner>
  <summary>
    A platform app ended up in a regular tab either by the app page or its
    background page. Note that this happens unexpectedly right now and we wish
    to track its usage before removing the supporting code.
  </summary>
</histogram>

<histogram name="Extensions.AppLocation" enum="ExtensionLocation">
  <owner>benwells@chromium.org</owner>
  <owner>tapted@chromium.org</owner>
  <summary>
    The number of apps loaded at startup time grouped by Extension::Location.
  </summary>
</histogram>

<histogram name="Extensions.AppsPromo" enum="AppPromoAction">
  <owner>benwells@chromium.org</owner>
  <owner>tapted@chromium.org</owner>
  <summary>
    The actions taken in the NTP apps promo grouped by
    extension_misc::AppsPromoBuckets.
  </summary>
</histogram>

<histogram name="Extensions.AppTabLaunchType" enum="ExtensionLaunchType">
  <owner>benwells@chromium.org</owner>
  <owner>tapted@chromium.org</owner>
  <summary>
    The number of apps launched grouped by extensions::LaunchType.
  </summary>
</histogram>

<histogram name="Extensions.AttemptedToDowngradeVersionLocation"
    enum="ExtensionLocation">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The extension install location of an extension that Chrome attempted to add,
    but failed because it would downgrade the version. Tracking for
    https://crbug.com/810799.
  </summary>
</histogram>

<histogram name="Extensions.AttemptedToDowngradeVersionType"
    enum="ExtensionType">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The extension item type of an extension that Chrome attempted to add, but
    failed because it would downgrade the version. Tracking for
    https://crbug.com/810799.
  </summary>
</histogram>

<histogram name="Extensions.BackgroundContentsServiceStartupTime" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Time taken to load BackgroundContents for apps at startup when the extension
    system notifies that it is ready.
  </summary>
</histogram>

<histogram name="Extensions.BackgroundPageLoadTime" units="ms">
  <obsolete>
    Replaced by Extensions.BackgroundPageLoadTime2.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>The time for an extension's background page to load.</summary>
</histogram>

<histogram name="Extensions.BackgroundPageLoadTime2" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The time taken for an extension's persistent background page to load its
    initial URL.
  </summary>
</histogram>

<histogram name="Extensions.BackgroundPageType"
    units="ExtensionBackgroundPageType">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The type (if any) of background page the extension has. Recorded for
    installed extensions on startup.
  </summary>
</histogram>

<histogram name="Extensions.BadMessageFunctionName" enum="ExtensionFunctions">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of times each Extension function call sends a bad message,
    killing the renderer. This may indicate a bug in that API's implementation
    on the renderer. Note a similar, aggregate metric is BadMessageTerminate_EFD
    which counts the number of bad messages that are sent overall.
  </summary>
</histogram>

<histogram name="Extensions.BadSyncDataReason" enum="BadSyncDataReason">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The reason a valid ExtensionSyncData could not be parsed from a SyncData
    received from sync.
  </summary>
</histogram>

<histogram name="Extensions.Bindings.NativeBindingCreationTime"
    units="microseconds">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The elapsed time to create a new full instance of an extension API's
    bindings using native bindings.

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

<histogram name="Extensions.Bindings.UpdateBindingsForContextTime"
    units="microseconds">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The elapsed time to update the bindings for a new or existing v8::Context.
    The suffix indicates which type of context the bindings are for.

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

<histogram name="Extensions.BookmarkApp.GetAppForCurrentURLDuration" units="ms">
  <owner>mgiuca@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <summary>
    Time it takes to retrieve the app for the current URL during a navigation.
  </summary>
</histogram>

<histogram name="Extensions.BookmarkApp.GetAppForWindowDuration" units="ms">
  <owner>mgiuca@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <summary>
    Time it takes to retrieve the app associated with the window during a
    navigation.
  </summary>
</histogram>

<histogram name="Extensions.BookmarkApp.GetTargetAppDuration" units="ms">
  <owner>mgiuca@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <summary>
    Time it takes to retrieve the app for the target url during a navigation.
  </summary>
</histogram>

<histogram name="Extensions.BookmarkApp.Icon.HttpStatusCodeClassOnCreate"
    enum="HttpStatusCodeClass">
  <owner>alancutter@chromium.org</owner>
  <owner>mgiuca@chromium.org</owner>
  <summary>
    The HTTP status code class returned for each icon loaded during a
    BookmarkApp's creation.
  </summary>
</histogram>

<histogram name="Extensions.BookmarkApp.Icon.HttpStatusCodeClassOnSync"
    enum="HttpStatusCodeClass">
  <owner>alancutter@chromium.org</owner>
  <owner>mgiuca@chromium.org</owner>
  <summary>
    The HTTP status code class returned for each icon loaded when syncing a
    BookmarkApp.
  </summary>
</histogram>

<histogram name="Extensions.BookmarkApp.NavigationResult"
    enum="BookmarkAppNavigationResult">
  <owner>mgiuca@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <summary>
    Number of times navigations into and out of Bookmark Apps are processed,
    grouped by their result.
  </summary>
</histogram>

<histogram name="Extensions.BookmarkApp.TimeBetweenOpenAppAndLastNavigation"
    units="ms">
  <owner>mgiuca@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <summary>
    The time between the last navigation in the context and us opening a new app
    window in response to a new navigation. If it is very small, the context
    probably redirected immediately, which is a bad user experience.
  </summary>
</histogram>

<histogram name="Extensions.BookmarkAppLaunchContainer"
    enum="AppLaunchContainer">
  <owner>benwells@chromium.org</owner>
  <summary>Records the container used for a bookmark app launch.</summary>
</histogram>

<histogram name="Extensions.BookmarkAppLaunchSource" enum="AppLaunchSource">
  <owner>benwells@chromium.org</owner>
  <owner>mgiuca@chromium.org</owner>
  <owner>ortuno@chromium.org</owner>
  <summary>
    The number of times Bookmark Apps are launched, grouped by
    extensions::AppLaunchSource. The equivalent histogram on Android is called
    Launch.HomeScreenSource.
  </summary>
</histogram>

<histogram name="Extensions.BrowsingInstanceViolation.ExtensionType"
    enum="ExtensionType">
  <owner>lukasza@chromium.org</owner>
  <summary>
    When an extension violates browsing instance boundaries, this metric records
    the extension type.

    This is a temporary metric - probably okay to remove it in M66, after we've
    gathered sufficient UMA data in M65.  See also http://crbug.com/718489.
  </summary>
</histogram>

<histogram
    name="Extensions.BrowsingInstanceViolation.IsBackgroundSourceOrTarget"
    enum="ExtensionViewTypeIsBackground">
  <owner>lukasza@chromium.org</owner>
  <summary>
    When an extension violates browsing instance boundaries, this metric records
    whether either the source or the target frame was of the extension view type
    of VIEW_TYPE_BACKGROUND_CONTENTS.

    This is a temporary metric - probably okay to remove it in M66, after we've
    gathered sufficient UMA data in M65.  See also http://crbug.com/718489.
  </summary>
</histogram>

<histogram name="Extensions.BrowsingInstanceViolation.SourceExtensionViewType"
    enum="ExtensionViewType">
  <owner>lukasza@chromium.org</owner>
  <summary>
    When an extension violates browsing instance boundaries, this metric records
    the extension view type of the source frame.

    This is a temporary metric - probably okay to remove it in M66, after we've
    gathered sufficient UMA data in M65.  See also http://crbug.com/718489.
  </summary>
</histogram>

<histogram name="Extensions.BrowsingInstanceViolation.TargetExtensionViewType"
    enum="ExtensionViewType">
  <owner>lukasza@chromium.org</owner>
  <summary>
    When an extension violates browsing instance boundaries, this metric records
    the extension view type of the found frame.

    This metric should help confirm or deny the theory that violating browsing
    instance boundaries is only needed for looking up background contents /
    pages (of VIEW_TYPE_BACKGROUND_CONTENTS type).

    This is a temporary metric - probably okay to remove it in M66, after we've
    gathered sufficient UMA data in M65.  See also http://crbug.com/718489.
  </summary>
</histogram>

<histogram name="Extensions.CheckForExternalUpdatesTime" units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during
    ExtensionService::CheckForExternalUpdates.
  </summary>
</histogram>

<histogram name="Extensions.ContentVerification.ComputedHashesInitTime"
    units="ms" expires_after="2019-11-30">
  <owner>lazyboy@chromium.org</owner>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    How long a successful initialization of computed_hashes.json file takes.
    Recorded when content verification needs to retrieve block hashes.
  </summary>
</histogram>

<histogram name="Extensions.ContentVerification.ComputedHashesReadResult"
    enum="BooleanSuccess" expires_after="2019-11-30">
  <owner>lazyboy@chromium.org</owner>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Whether or not computed_hashes.json file read and parse succeeded. Recorded
    when content verification needs to retrieve block hashes.
  </summary>
</histogram>

<histogram name="Extensions.ContentVerification.FetchResult"
    enum="BooleanSuccess" expires_after="2019-11-30">
  <owner>lazyboy@chromium.org</owner>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Whether or not fetching verified_contents.json succeeded. Recorded when the
    file wasn't available locally and we needed to fetch it from network.
  </summary>
</histogram>

<histogram name="Extensions.ContentVerification.ReadContentHashTime" units="ms"
    expires_after="2019-11-30">
  <owner>lazyboy@chromium.org</owner>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Time spent by ContentVerifier for a request to create a ContentHash
    instance. Recorded during an extension load completion or during an on
    demand content verification that was triggered by ContentVerifyJob.
  </summary>
</histogram>

<histogram name="Extensions.ContentVerification.VerifiedContentsInitResult"
    enum="BooleanSuccess" expires_after="2019-11-30">
  <owner>lazyboy@chromium.org</owner>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Whether or not initializing verified_contents.json succeeded. Recorded
    during an extension load completion or during an on demand content
    verification that was triggered by ContentVerifyJob.
  </summary>
</histogram>

<histogram name="Extensions.ContentVerification.VerifiedContentsInitTime"
    units="ms" expires_after="2019-11-30">
  <owner>lazyboy@chromium.org</owner>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    How long a successful initialization of verified_contents.json file takes.
    Recorded if Extensions.ContentVerification.VerifiedContentsInitResult = true
    was recorded.
  </summary>
</histogram>

<histogram name="Extensions.CorruptExtensionBecameDisabled">
  <owner>asargent@chromium.org</owner>
  <summary>
    Fired each time an extension was detected to be corrupted (contents not
    matching an expected content hash from the webstore) and was disabled.
  </summary>
</histogram>

<histogram name="Extensions.CorruptExtensionDisabledReason"
    enum="CorruptExtensionDisabledReason">
  <owner>rockot@chromium.org</owner>
  <summary>
    The reason why an extension was detected to be corrupted. Recorded each time
    an extension is disabled due to corruption detection.
  </summary>
</histogram>

<histogram name="Extensions.CorruptExtensionTotalDisables">
  <owner>asargent@chromium.org</owner>
  <summary>
    Logged once at startup, this is the value of a counter that is incremented
    anytime we disable a corrupted extension because its content didn't match an
    expected content hash.
  </summary>
</histogram>

<histogram name="Extensions.CorruptExtensionWouldBeDisabled">
  <owner>asargent@chromium.org</owner>
  <summary>
    Simiar to Extensions.CorruptExtensionBecameDisabled, but fires when we're in
    a bootstrapping mode and would have disabled an extension.
  </summary>
</histogram>

<histogram name="Extensions.CorruptPolicyExtensionDetected" enum="BooleanHit">
  <owner>asargent@chromium.org</owner>
  <summary>
    Fires when we detect corruption in an enterprise policy forced install
    extension and begin the process of reinstalling it. Compare to
    CorruptPolicyExtensionResolved to judge success rate.
  </summary>
</histogram>

<histogram name="Extensions.CorruptPolicyExtensionResolved" units="ms">
  <owner>asargent@chromium.org</owner>
  <summary>
    Fires when we've successfully resinstalled a corrupt enterprise policy
    force-installed extension, with a value indicating how long it took
    end-to-end to complete the reinstall (including download time).
  </summary>
</histogram>

<histogram name="Extensions.CorruptPolicyExtensionWouldBeDisabled"
    enum="BooleanHit">
  <obsolete>
    Deprecated 9/2016 by fix for Issue 447040.
  </obsolete>
  <owner>asargent@chromium.org</owner>
  <summary>
    Fires when we detect corruption in an enterprise policy forced install
    extension. See http://crbug.com/447040 for more background on why we don't
    yet disable these. A useful comparison can be made between this value and
    the number of policy forced extensions loaded at startup, which is logged in
    the EXTERNAL_POLICY_DOWNLOAD bucket of the Extensions.ExtensionLocation
    histogram.
  </summary>
</histogram>

<histogram name="Extensions.CrxFetchError" enum="NetErrorCodes">
  <owner>asargent@chromium.org</owner>
  <summary>Net error results from URLFetcher.</summary>
</histogram>

<histogram name="Extensions.CrxFetchFailureRetryCountGoogleUrl">
  <owner>asargent@chromium.org</owner>
  <summary>
    Number of times chrome retried to download an extension with a url on a
    google.com domain, before eventually giving up.
  </summary>
</histogram>

<histogram name="Extensions.CrxFetchFailureRetryCountOtherUrl">
  <owner>asargent@chromium.org</owner>
  <summary>
    Number of times chrome retried to download an extension with a url on a non
    google.com domain, before eventually giving up.
  </summary>
</histogram>

<histogram name="Extensions.CrxFetchSuccessRetryCountGoogleUrl">
  <owner>asargent@chromium.org</owner>
  <summary>
    Number of times chrome retried to download an extension with a url on a
    google.com domain, before eventually succeeding.
  </summary>
</histogram>

<histogram name="Extensions.CrxFetchSuccessRetryCountOtherUrl">
  <owner>asargent@chromium.org</owner>
  <summary>
    Number of times chrome retried to download an extension with a url on a non
    google.com domain, before eventually succeeding.
  </summary>
</histogram>

<histogram name="Extensions.CrxInstallDirPathLength">
  <owner>asargent@chromium.org</owner>
  <summary>
    Length of the path to the directory under which an extension is installed.
    This directory is in the user's profile.
  </summary>
</histogram>

<histogram name="Extensions.Database.Database.Restore"
    enum="LevelDBDatabaseCorruptionRestoreValue">
  <owner>cmumford@chromium.org</owner>
  <summary>
    The result of an attempt to recover from an attempt to open a database that
    failed as a result of corruption.
  </summary>
</histogram>

<histogram name="Extensions.Database.Open" enum="LevelDBStatus">
  <owner>cmumford@chromium.org</owner>
  <summary>The result of an open attempt to an Extensions database.</summary>
</histogram>

<histogram name="Extensions.Database.Restore"
    enum="LevelDBDatabaseCorruptionRestoreValue">
  <obsolete>
    Shipped only in M48. Superceded by Extensions.Database.Database.Restore and
    Extensions.Database.Value.Restore.
  </obsolete>
  <owner>cmumford@chromium.org</owner>
  <summary>
    The result of an attempt to recover from an attempt to open a database that
    failed as a result of corruption.
  </summary>
</histogram>

<histogram name="Extensions.Database.Value.Restore"
    enum="LevelDBValueCorruptionDeleteValue">
  <owner>cmumford@chromium.org</owner>
  <summary>
    The result of an attempt to delete a corrupted value from a database.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeAPIFunctionCalls"
    enum="DeclarativeAPIFunctionType">
  <owner>karandeepb@chromium.org</owner>
  <summary>
    Number of calls to the declarative API extension functions. This includes
    the declarativeContent and declarativeWebRequest APIs. Emitted when the
    extension function is called.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeNetRequest.CreateVerifiedMatcherTime"
    units="ms">
  <owner>karandeepb@chromium.org</owner>
  <summary>
    Measures the time taken to load the indexed ruleset in the browser process
    for an extension. This includes memory mapping the ruleset file and
    verifying it. Emitted when an extension using the Declarative Net Request
    API is loaded.
  </summary>
</histogram>

<histogram
    name="Extensions.DeclarativeNetRequest.EvaluateRequestTime.AllExtensions"
    units="ms">
  <owner>karandeepb@chromium.org</owner>
  <summary>
    Time taken to evaluate whether a network request should be blocked or
    redirected as per the Declarative Net Request API. This includes the time
    taken to evaluate all the extension rulesets. Emitted for non-sensitive
    network requests seen by the Extension System.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeNetRequest.IndexAndPersistRulesTime"
    units="ms">
  <owner>karandeepb@chromium.org</owner>
  <summary>
    Time taken to index and persist to disk, the deserialized json rules
    provided by an extension manifest for the Declarative Net Request API. This
    includes the time recorded in
    Extensions.DeclarativeNetRequest.IndexRulesTime together with the time taken
    to persist the ruleset to disk. This is emitted whenever an extension's json
    ruleset is successfully indexed and persisted. This may happen when a packed
    extension is installed, an unpacked extension is loaded, an extension's
    ruleset is re-indexed due to corruption, etc.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeNetRequest.IndexRulesTime" units="ms">
  <owner>karandeepb@chromium.org</owner>
  <summary>
    Time taken to index the deserialized json rules provided by an extension
    manifest for the Declarative Net Request API. This is emitted whenever an
    extension's json ruleset is successfully indexed. This may happen when a
    packed extension is installed, an unpacked extension is loaded, an
    extension's ruleset is re-indexed due to corruption, etc.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeNetRequest.LoadRulesetResult"
    enum="LoadRulesetResult">
  <owner>karandeepb@chromium.org</owner>
  <summary>
    Records the result of loading an extension ruleset for the Declarative Net
    Request API. Emitted whenever an extension with a ruleset is loaded.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeNetRequest.ManifestRulesCount"
    units="rules">
  <owner>karandeepb@chromium.org</owner>
  <summary>
    The number of indexed declarative rules provided by an extension manifest
    for the Declarative Net Request API. This is emitted whenever an extension's
    json ruleset is indexed. This may happen when a packed extension is
    installed, an unpacked extension is loaded, an extension's ruleset is re-
    indexed, due to corruption, etc.
  </summary>
</histogram>

<histogram
    name="Extensions.DeclarativeNetRequest.PageWhitelistingInitiatorCheck"
    enum="PageWhitelistingInitiatorCheck" expires_after="2019-06-30">
  <owner>karandeepb@chromium.org</owner>
  <owner>lazyboy@chromium.org</owner>
  <summary>
    Describes the different cases pertaining to initiator checks used by the
    Declarative Net Request Page Whitelisting API. Emitted whenever an extension
    ruleset is evaluated for a main frame sub-resource request.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeNetRequest.RulesetReindexSuccessful"
    enum="BooleanSuccess" expires_after="2019-06-30">
  <owner>karandeepb@chromium.org</owner>
  <owner>lazyboy@chromium.org</owner>
  <summary>
    Indicates whether reindexing of the Declarative Net Request ruleset was
    successful. Called whenever the JSON ruleset for an extension is reindexed,
    e.g. on ruleset corruption.
  </summary>
</histogram>

<histogram
    name="Extensions.DeclarativeNetRequest.ShouldBlockRequestTime.AllExtensions"
    units="ms">
  <obsolete>
    Deprecated May 2018. Replaced with
    Extensions.DeclarativeNetRequest.EvaluateRequestTime.AllExtensions
  </obsolete>
  <owner>karandeepb@chromium.org</owner>
  <summary>
    Time taken to evaluate whether a network request should be blocked as per
    the Declarative Net Request API. This includes the time taken to evaluate
    all the extension rulesets. Emitted whenever a non-sensitive network request
    is seen by the Extension System.
  </summary>
</histogram>

<histogram
    name="Extensions.DeclarativeNetRequest.ShouldBlockRequestTime.SingleExtension"
    units="ms">
  <owner>karandeepb@chromium.org</owner>
  <summary>
    Time taken to evaluate whether a network request should be blocked for a
    single extension ruleset. Emitted for each network request that is visible
    to the extension.
  </summary>
</histogram>

<histogram
    name="Extensions.DeclarativeNetRequest.ShouldRedirecRequestTime.SingleExtension"
    units="ms">
  <owner>karandeepb@chromium.org</owner>
  <summary>
    Time taken to evaluate whether a network request should be redirected for a
    single extension ruleset. Emitted for network requests visible to the
    extension.
  </summary>
</histogram>

<histogram
    name="Extensions.DeclarativeNetRequest.ShouldRedirectRequestTime.AllExtensions"
    units="ms">
  <obsolete>
    Deprecated May 2018. Replaced with
    Extensions.DeclarativeNetRequest.EvaluateRequestTime.AllExtensions
  </obsolete>
  <owner>karandeepb@chromium.org</owner>
  <summary>
    Time taken to evaluate whether a network request should be redirected as per
    the Declarative Net Request API. This includes the time taken to evaluate
    all the extension rulesets. Emitted for non-sensitive network requests seen
    by the Extension System.
  </summary>
</histogram>

<histogram name="Extensions.DeclarativeRulesStorageInitialization" units="ms">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Time spent until rules storage delegate gets ready.</summary>
</histogram>

<histogram
    name="Extensions.DeclarativeWebRequest.WebViewRequestDeclarativeRules"
    enum="BooleanDeclarativeRules">
  <owner>karandeepb@chromium.org</owner>
  <summary>
    Whether a network request from a guest webview has any declarative web
    request rules that need to be evaluated. Emitted whenever a network request
    from a guest webview is received at the network layer.
  </summary>
</histogram>

<histogram name="Extensions.DepricatedExternalJsonCount">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Number of extensions referenced in the depricated external extensions source
    at path chrome::DIR_DEPRICATED_EXTERNAL_EXTENSIONS.
  </summary>
</histogram>

<histogram name="Extensions.DialogLoadTime" units="ms">
  <obsolete>
    There is no such thing as an extension dialog.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The time for a dialog-hosted extension to load.</summary>
</histogram>

<histogram name="Extensions.DidCreateScriptContext_Blessed" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
    the time taken to install Extension JavaScript bindings per blessed
    extension context (chrome-extension://... origins within Extension
    processes, like background pages, options pages, popups).
  </summary>
</histogram>

<histogram name="Extensions.DidCreateScriptContext_BlessedWebPage" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
    the time taken to install Extension JavaScript bindings per blessed web page
    context (hosted apps).
  </summary>
</histogram>

<histogram name="Extensions.DidCreateScriptContext_ContentScript" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
    the time taken to install Extension JavaScript bindings per content script
    context.
  </summary>
</histogram>

<histogram name="Extensions.DidCreateScriptContext_LockScreenExtension"
    units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
    the time taken to install Extension JavaScript bindings per content script
    context. This histogram measures the time to install Extension Javascript
    bindings in a context for a platform app enabled on the Chrome OS lock
    screen.
  </summary>
</histogram>

<histogram name="Extensions.DidCreateScriptContext_Unblessed" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
    the time taken to install Extension JavaScript bindings per unblessed
    extension context (chrome-extension://... origins hosted in iframes).
  </summary>
</histogram>

<histogram name="Extensions.DidCreateScriptContext_Unspecified" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
    the time taken to install Extension JavaScript bindings in an unknown type
    of context (this should never happen other than in bizarre circumstances).
  </summary>
</histogram>

<histogram name="Extensions.DidCreateScriptContext_WebPage" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
    the time taken to install Extension JavaScript bindings per web page context
    (just the chrome.app, chrome.webstore, and possibly chrome.runtime APIs).
  </summary>
</histogram>

<histogram name="Extensions.DidCreateScriptContext_WebUI" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
    the time taken to install Extension JavaScript bindings per WebUI context
    (chrome://extensions and so forth).
  </summary>
</histogram>

<histogram name="Extensions.DidInitializeServiceWorkerContextOnWorkerThread"
    units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Records the time taken to install Extension JavaScript bindings per service
    worker context.
  </summary>
</histogram>

<histogram name="Extensions.DidSuppressJavaScriptException"
    enum="ChromeChannelForHistogram">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Records the Chrome channel when JavaScript exceptions are not gracefully
    dealt with, and suppressed by C++ instead. These are exceptions generated
    (or simply not caught and gracefully recovered) in our own internal
    JavaScript, not from JavaScript code written by developers (that which is
    typically hosted in CRX files). This should be 0 for unstable channels like
    canary and dev, because we try *not* to suppress errors and instead kill the
    renderer and generate a crash report. However, at times we need to suppress
    even those. Note that this histogram is intended to be tracked over time,
    per channel, to observe crash rates. Comparisons between
    stable/beta/dev/canary are unlikely to be meaningful.
  </summary>
</histogram>

<histogram name="Extensions.Disabled">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of extensions that are disabled at browser startup.
  </summary>
</histogram>

<histogram name="Extensions.DisabledForPermissions">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of extensions that are disabled at browser startup due to
    permissions increases.
  </summary>
</histogram>

<histogram name="Extensions.DisabledUIUserResponse"
    enum="ExtensionDisabledUIUserResponse">
  <obsolete>
    Deprecated 03/2017 because miscounting IGNORE histogram entry. This error is
    fixed with DisabledUIUserResponse2.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    User response to the dialog shown when an extension is disabled due to an
    update requiring more permissions.
  </summary>
</histogram>

<histogram name="Extensions.DisabledUIUserResponse2"
    enum="ExtensionDisabledUIUserResponse">
  <owner>catmullings@chromium.org</owner>
  <summary>
    User response to the dialog shown when an extension is disabled due to an
    update requiring more permissions. A count is recorded when the user takes
    an action on the dialog (re-enable or remove the extension) or ignores the
    dialog.
  </summary>
</histogram>

<histogram name="Extensions.DisabledUIUserResponseRemoteInstall"
    enum="ExtensionDisabledUIUserResponse">
  <obsolete>
    Deprecated 03/2017 because miscounting IGNORE histogram entry. This error is
    fixed with DisabledUIUserResponseRemoteInstall2.
  </obsolete>
  <owner>mek@chromium.org</owner>
  <summary>
    User response to the dialog shown when an extension is disabled due to it
    having been installed remotely.
  </summary>
</histogram>

<histogram name="Extensions.DisabledUIUserResponseRemoteInstall2"
    enum="ExtensionDisabledUIUserResponse">
  <owner>catmullings@chromium.org</owner>
  <summary>
    User response to the dialog shown when an extension is disabled due to it
    having been installed remotely. A count is recorded when the user takes an
    action on the dialog (re-enable or remove the extension) or ignores the
    dialog.
  </summary>
</histogram>

<histogram name="Extensions.DisableReason" enum="ExtensionDisableReason">
  <owner>asargent@chromium.org</owner>
  <summary>
    The count of disabled extensions at startup grouped by disble reason from
    disable_reason::DisableReason. When an extension is disabled, it can be for
    one or more reasons (although typically just one), so the sum of these may
    be greater than 'Extensions.Disabled' which is a count of the number of
    unique extensions that are disabled.
  </summary>
</histogram>

<histogram name="Extensions.DocsOfflineIconState" enum="ExtensionIconState">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The state of the toolbar icon for the docs offline extension (visible in the
    toolbar, overflowed in the menu, or the extension is disabled). Recorded
    once per startup per (non-incognito) profile.
  </summary>
</histogram>

<histogram name="Extensions.EnhancedBookmarksManagerNumEventListeners">
  <obsolete>
    Obsolete since the enhanced bookmarks manager is no longer using an event
    page.
  </obsolete>
  <owner>wittman@chromium.org</owner>
  <summary>
    The number of event listeners the Enhanced Bookmarks Manager has, measured
    at profile startup. A value of 0 implies that Chrome has a general bug with
    event page management, since the bookmarks manager should always have at
    least one event listener - but a bug with event page management that affects
    the bookmarks manager is particularly dire.
  </summary>
</histogram>

<histogram name="Extensions.ErrorCodeFromCrxOpen">
  <owner>asargent@chromium.org</owner>
  <summary>
    If opening the CRX file for unpacking fails, this integer is the error code
    given by the OS.
  </summary>
</histogram>

<histogram name="Extensions.EventlessEventPages">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of extensions with event pages that have no registered event
    listeners at profile startup. (This may indicate something has gone wrong;
    such event pages will never get started.)
  </summary>
</histogram>

<histogram name="Extensions.EventPageActiveTime" units="ms">
  <obsolete>
    Replaced by Extensions.EventPageActiveTime2.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>The time an extension's event page has spent loaded.</summary>
</histogram>

<histogram name="Extensions.EventPageActiveTime2" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The time between an extension's event page loading its first URL and the
    event page later shutting down.
  </summary>
</histogram>

<histogram name="Extensions.EventPageIdleTime" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>The time an extension's event page has spent unloaded.</summary>
</histogram>

<histogram name="Extensions.EventPageLoadTime" units="ms">
  <obsolete>
    Replaced by Extensions.EventPageLoadTime2.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>The time for an extension's event page to load.</summary>
</histogram>

<histogram name="Extensions.EventPageLoadTime2" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The time taken for an extension's event page to load its initial URL.
  </summary>
</histogram>

<histogram name="Extensions.Events.Dispatch" enum="ExtensionEvents">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>Recorded every time an event is dispatched to an extension.</summary>
</histogram>

<histogram name="Extensions.Events.DispatchToComponent" enum="ExtensionEvents">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Recorded every time an event is dispatched to a *component* extension.
    Otherwise identical to Extensions.Events.Dispatched.
  </summary>
</histogram>

<histogram name="Extensions.Events.DispatchToComponentWithSuspendedEventPage"
    enum="ExtensionEvents">
  <owner>mfoltz@chromium.org</owner>
  <summary>
    Recorded every time an event is dispatched to a *component* extension with a
    suspended event page.  Otherwise identical to
    Extensions.Events.DispatchWithSuspendedEventPage.
  </summary>
</histogram>

<histogram name="Extensions.Events.DispatchWithPersistentBackgroundPage"
    enum="ExtensionEvents">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Recorded every time an event is dispatched to an extension with a persistent
    background page. The event may or may not have been dispatched to the
    background page itself, for example it may have been dispatched to its
    popup. When this metric is recorded, Extensions.Events.Dispatch will also be
    recorded.
  </summary>
</histogram>

<histogram name="Extensions.Events.DispatchWithRunningEventPage"
    enum="ExtensionEvents">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Recorded every time an event is dispatched to an extension with an event
    page that was already running (i.e. at some point had been woken from its
    suspended state, see Extensions.Events.DispatchWithSuspendedEventPage). The
    event may or may not have been dispatched to the event page itself, for
    example it may have been dispatched to its popup. When this metric is
    recorded, Extensions.Events.Dispatch will also be recorded.
  </summary>
</histogram>

<histogram name="Extensions.Events.DispatchWithSuspendedEventPage"
    enum="ExtensionEvents">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Recorded every time an event is dispatched to an extension with an event
    page that was suspended. This implies that firing this event woke up the
    event page. The event may or may not have been dispatched to the event page
    itself, for example it may have been dispatched to its popup, but regardless
    it will wake the event page.  When this metric is recorded,
    Extensions.Events.Dispatch will also be recorded.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionCacheCount">
  <owner>achuith@chromium.org</owner>
  <summary>
    Number of cached extensions on disk. Reported on Chrome OS during user
    session start.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionCacheSize" units="MB">
  <owner>achuith@chromium.org</owner>
  <summary>
    Total size of .crx files in cache on disk. Reported on Chrome OS during user
    session start.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionCreationTime" units="microseconds">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The amount of time taken to create a single extension object. This includes
    parsing all the different extension manifest keys and initializating the
    associated manifest data.

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

<histogram name="Extensions.ExtensionFrameMapCacheHit" units="Boolean">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    True if the cache of the extension frame map was hit during access on the IO
    thread.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionFrameMapLookupSuccessful" units="Boolean">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    True if the lookup for a frame in the extension frame map succeeded after a
    cache miss.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionHostMonitoring.MaxActiveLoading">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The maximum number of ExtensionHosts (primarily background/event pages) that
    were actively loading at any one time, within the first minute of Chrome
    startup. Emitted exactly one minute after startup.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionHostMonitoring.MaxInQueue">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The maximum number of ExtensionHosts (primarily background/event pages) in
    the queue awaiting being loaded (via an ExtensionHostQueue), within the
    first minute of Chrome startup. Emitted exactly one minute after startup.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionHostMonitoring.NumLoaded">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The total number of ExtensionHosts that completed loading in the first
    minute of Chrome startup. Emitted exactly one minute after startup.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionHostMonitoring.NumQueued">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The total number of ExtensionHosts (primarily background/event pages) that
    were added to a queue to start loading, within the first minute of Chrome
    startup. These may or may not end up starting, let alone finishing,
    depending on the queue behavior. Emitted exactly one minute after startup.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionInstalled">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>An extension has been installed.</summary>
</histogram>

<histogram name="Extensions.ExtensionLocation" enum="ExtensionLocation">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of extensions loaded at startup time grouped by
    Extension::Location.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionManagement_RefreshTime" units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during ExtensionManagement::Refresh.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionRendererStateCacheHit" units="Boolean">
  <obsolete>
    Deprecated 4/2016. ExtensionRendererState was replaced with
    ExtensionFrameMap.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    True if the cache for the ExtensionRendererState was hit during a lookup.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionRootPathLength">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Length of the Extensions dir path inside the profile directory.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionServiceInitTime">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Time taken for the ExtensionService to initialize, including the time it
    takes to load the extensions for the service's profile and parse their
    manifests. This happens during startup and also any time a new profile is
    loaded.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionServiceNotifyReadyListenersTime">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Time taken for the ExtensionService to notify all ready listeners that the
    extension system is now ready. This happens as part of the total
    initialization time of ExtensionService, measured in
    Extensions.ExtensionServiceInitTime.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionUninstalled">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>An extension has been uninstalled.</summary>
</histogram>

<histogram name="Extensions.ExtensionUpdaterRawUpdateCalls" units="extensions">
  <owner>mxnguyen@chromium.org</owner>
  <summary>
    The number of extensions that are checked for update. This number is emitted
    right before the extensions are split between the current extension updater
    and the unified extension updater (if used).
  </summary>
</histogram>

<histogram name="Extensions.ExtensionUpdaterUpdateCalls" units="extensions">
  <owner>mxnguyen@chromium.org</owner>
  <summary>
    The number of extensions that are passed over to the extension updater for
    update check. Triggered when the extension updater starts doing update
    check.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionUpdaterUpdateFoundCount"
    units="extensions">
  <owner>mxnguyen@chromium.org</owner>
  <summary>
    The number of extensions that have updates in an update check session.
    Triggered when the extension updater found an update for an extension.
  </summary>
</histogram>

<histogram name="Extensions.ExtensionUpdaterUpdateResults"
    enum="ExtensionUpdaterUpdateResult">
  <owner>mxnguyen@chromium.org</owner>
  <summary>
    Records the update results of extensions in an extension updater session,
    grouped by ExtensionUpdaterUpdateResult.
  </summary>
</histogram>

<histogram name="Extensions.ExternalExtensionEvent" enum="SideloadUIEvents">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Records what happens to extensions that are sideloaded, grouped by the
    ExternalExtensionEvent enum.
  </summary>
</histogram>

<histogram name="Extensions.ExternalItemState" enum="ExternalItemState"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of sideloaded apps/extensions loaded on startup grouped by
    enabled/disabled state.
  </summary>
</histogram>

<histogram name="Extensions.ExternalJsonCount">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Number of extensions referenced in the external extensions source at path
    chrome::DIR_EXTERNAL_EXTENSIONS.
  </summary>
</histogram>

<histogram name="Extensions.ExternalWarningUninstallationResult" enum="Boolean">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Whether or not the uninstallation of an external extension succeeded.
    Triggered when the external install warning is shown to the user and the
    user selects to remove the extension.
  </summary>
</histogram>

<histogram name="Extensions.FeatureProviderStaticInitTime" units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during extensions::FeatureProvider::Static.
    Only measured while in the browser process.
  </summary>
</histogram>

<histogram name="Extensions.FileAccessAllowed">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of extensions (and friends) that could have been given access to
    the file:// scheme, and were, for users that have at least one extension
    that could have been given access. This excludes anything that doesn't show
    up in chrome://extensions (platform apps, hosted apps, component
    extensions), policy-installed extensions, and unpacked extensions. See also
    Extensions.FileAccessNotAllowed.
  </summary>
</histogram>

<histogram name="Extensions.FileAccessNotAllowed">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of extensions (and friends) that could have been given access to
    the file:// scheme, but weren't, for users that have at least one extension
    that could have been given access. This excludes anything that doesn't show
    up in chrome://extensions (platform apps, hosted apps, component
    extensions), policy-installed extensions, and unpacked extensions. See also
    Extensions.FileAccessAllowed.
  </summary>
</histogram>

<histogram name="Extensions.FileInstallation" units="ms">
  <owner>xiaohuic@chromium.org</owner>
  <summary>
    Record the time taken to physically move the extention files from temporary
    location to the final installation directory. It includes the time to flush
    the file system if ExtensionUseSafeInstallation field trial is enabled. This
    is recorded once per extension install/update.
  </summary>
</histogram>

<histogram name="Extensions.FontSettingsEventRouterCtorTime" units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during the FontSettingsEventRouter
    construction.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalledLoadTime" units="ms">
  <owner>poromov@chromium.org</owner>
  <summary>
    The amount of time elapsed during installation of enterprise policy forced
    extensions.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalledTimedOutAndNotInstalledCount">
  <owner>poromov@chromium.org</owner>
  <summary>
    Number of enterprise policy forced extensions that are not installed after 5
    minutes if at least one of policy forced extensions is not yet enabled.
  </summary>
</histogram>

<histogram name="Extensions.ForceInstalledTimedOutCount">
  <owner>poromov@chromium.org</owner>
  <summary>
    Number of enterprise policy forced extensions that are not enabled after 5
    minutes timeout, while might be already installed.
  </summary>
</histogram>

<histogram name="Extensions.FromWebstoreInconsistency"
    enum="ExtensionFromWebstoreInconcistencyEnum" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Number of apps/extensions loaded on startup with an inconsistent &quot;from
    webstore&quot; state. This means an item that is flagged as from_webstore,
    but with either a non-webstore update_url or an external install location.
  </summary>
</histogram>

<histogram name="Extensions.FunctionCalls" enum="ExtensionFunctions">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>Number of calls to extension functions.</summary>
</histogram>

<histogram name="Extensions.Functions.FailedTime" enum="ExtensionFunctions">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Recorded when an extension function call fails and finishes execution. The
    suffix indicates the exact bucket the function is in. See also
    Extensions.Functions.FailedTotalExecutionTime.
  </summary>
</histogram>

<histogram name="Extensions.Functions.FailedTotalExecutionTime" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The total amount of time it took to execute an extension function that
    failed from the time the extension function is called to the time the
    function responds. Note that since some extension functions are inherently
    slow (anything that requires user interaction, for instance), this is not a
    definitive source for function performance.
  </summary>
</histogram>

<histogram name="Extensions.Functions.HandleResponseElapsedTime" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The amount of time it takes to handle a response for an extension API
    request. Recorded on the renderer side once we receive the response IPC from
    the browser and have deserialized the arguments and passed them to the JS
    context. Only recorded if the response is successfully handled.
  </summary>
</histogram>

<histogram name="Extensions.Functions.StartRequestElapsedTime" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The amount of time it takes to start an extension API request. Recorded on
    the renderer side after we perform JS pre-processing, but includes all
    serialization and dispatching. Only recorded if the request is successfully
    dispatched.
  </summary>
</histogram>

<histogram name="Extensions.Functions.SucceededTime" enum="ExtensionFunctions">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Recorded when an extension function call succeeds and finishes execution.
    The suffix indicates the exact bucket the function is in. See also
    Extensions.Functions.SucceededTotalExecutionTime.
  </summary>
</histogram>

<histogram name="Extensions.Functions.SucceededTotalExecutionTime" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The total amount of time it took to execute an extension function that
    succeeded from the time the extension function is called to the time the
    function responds. Note that since some extension functions are inherently
    slow (anything that requires user interaction, for instance), this is not a
    definitive source for function performance.
  </summary>
</histogram>

<histogram name="Extensions.Functions.SynchronousExecutionTime" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The synchronous amount of time an extension function takes. Note that many
    extension functions run asynchronously; see also
    Extensions.Functions.[Succeeded|Failed]TotalExecutionTime.
  </summary>
</histogram>

<histogram name="Extensions.GetUserDataTempDir" enum="GetUserDataTempDirResult">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    What happens when the extensions system tries to get a temp dir to unpack
    in?
  </summary>
</histogram>

<histogram name="Extensions.HasPermissions_AutoDisable3" enum="Boolean">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    Whether there were any permissions present in an extension when it is
    automatically disabled due to a permission increase (e.g., after an
    extension upgrade). To find places where this histogram may be emitted, look
    for calls to ExtensionService::RecordPermissionMessagesHistogram with the
    argument AutoDisable. For Sync users, this may be reported for each device,
    depending on whether the Sync update or the extension auto-update happen
    first.
  </summary>
</histogram>

<histogram name="Extensions.HasPermissions_Install3" enum="Boolean">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    Whether there were any permissions present in an extension when it was
    installed. To find places where this histogram may be emitted, look for
    calls to ExtensionService::RecordPermissionMessagesHistogram with the
    argument Install. For Sync users, this is reported for each device.
  </summary>
</histogram>

<histogram name="Extensions.HasPermissions_InstallAbort3" enum="Boolean">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    Whether there were any permissions present in an extension when installation
    was aborted (e.g. because the parent window of the confirmation dialog went
    away), not including installation errors and user cancels. To find places
    where this histogram may be emitted, look for calls to
    ExtensionService::RecordPermissionMessagesHistogram with the argument
    InstallAbort.
  </summary>
</histogram>

<histogram name="Extensions.HasPermissions_InstallCancel3" enum="Boolean">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    Whether there were any permissions present in an extension when installation
    was canceled. To find places where this histogram may be emitted, look for
    calls to ExtensionService::RecordPermissionMessagesHistogram with the
    argument InstallCancel.
  </summary>
</histogram>

<histogram name="Extensions.HasPermissions_Load3" enum="Boolean">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    Whether there were any permissions present in an extension when it was
    loaded (which happens at profile open or extension install). To find places
    where this histogram may be emitted, look for calls to
    ExtensionService::RecordPermissionMessagesHistogram with the argument Load.
  </summary>
</histogram>

<histogram name="Extensions.HasPermissions_ReEnable3" enum="Boolean">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    Whether there were any permissions present in an extension when it was
    re-enabled from a confirmation prompt. To find places where this histogram
    may be emitted, look for calls to
    ExtensionService::RecordPermissionMessagesHistogram with the argument
    ReEnable.
  </summary>
</histogram>

<histogram name="Extensions.HasPermissions_ReEnableAbort3" enum="Boolean">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    Whether there were any permissions present in an extension when the
    re-enable prompt was aborted (e.g. because the parent window of the
    confirmation dialog went away), not including installation errors and manual
    user cancels. To find places where this histogram may be emitted, look for
    calls to ExtensionService::RecordPermissionMessagesHistogram with the
    argument ReEnableAbort.
  </summary>
</histogram>

<histogram name="Extensions.HasPermissions_ReEnableCancel3" enum="Boolean">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    Whether there were any permissions present in an extension when the
    re-enable was canceled from the confirmation prompt. To find places where
    this histogram may be emitted, look for calls to
    ExtensionService::RecordPermissionMessagesHistogram with the argument
    ReEnableCancel.
  </summary>
</histogram>

<histogram name="Extensions.HasPermissions_Uninstall3" enum="Boolean">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    Whether there were any permissions present in an extension when it was
    uninstalled. To find places where this histogram may be emitted, look for
    calls to ExtensionService::RecordPermissionMessagesHistogram with the
    argument Uninstall. For Sync users, this is reported for each device.
  </summary>
</histogram>

<histogram name="Extensions.HasPermissions_WebStoreInstall3" enum="Boolean">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    Whether there were any permissions present in an extension when it was
    installed through the web store. To find places where this histogram may be
    emitted, look for calls to
    ExtensionService::RecordPermissionMessagesHistogram with the argument
    WebStoreInstall. Contrary to the more-general HasPermissions_Install3
    histogram, this one is NOT reported for each device.
  </summary>
</histogram>

<histogram name="Extensions.HasPermissions_WebStoreInstallAbort3"
    enum="Boolean">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    Whether there were any permissions present in an extension when installation
    from the web store was aborted (e.g. because the parent window of the
    confirmation dialog went away), not including installation errors and user
    cancels. To find places where this histogram may be emitted, look for calls
    to ExtensionService::RecordPermissionMessagesHistogram with the argument
    WebStoreInstallAbort.
  </summary>
</histogram>

<histogram name="Extensions.HasPermissions_WebStoreInstallCancel3"
    enum="Boolean">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    Whether there were any permissions present in an extension when installation
    from the web store was canceled. To find places where this histogram may be
    emitted, look for calls to
    ExtensionService::RecordPermissionMessagesHistogram with the argument
    WebStoreInstallCancel.
  </summary>
</histogram>

<histogram name="Extensions.HostedAppLaunchContainer" enum="AppLaunchContainer">
  <owner>benwells@chromium.org</owner>
  <summary>
    Records the container used for a hosted app launch. The definition of
    'launch' for the purposes of this histogram is different to that used for
    the launch type histograms. This definition is less inclusive, for example
    it does not include navigations to the hosted app due to normal browsing,
    which the other definition does include. This definition could be thought of
    more as explicit launches via a launch surface such as the app launcher,
    chrome://apps, or a shortcut.
  </summary>
</histogram>

<histogram name="Extensions.HostedAppUnlimitedStoragePersistentStorageUsage"
    units="KB">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The usage (in kilobytes) of persistent storage in a hosted app with the
    unlimitedStorage permission. This is logged each time the storage is used*,
    so this also serves as a cap of the number of calls that would fail if the
    app did not have the unlimited storage permission. *Capped at once per 30
    seconds so as to not impact performance.
  </summary>
</histogram>

<histogram name="Extensions.HostedAppUnlimitedStorageTemporaryStorageUsage"
    units="%">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The percentage of &quot;normal&quot; (that is, not unlimited) quota that a
    hosted app with unlimited storage is currently using. This is logged each
    time the storage is used*, so the number of times the app would use greater
    than 100% of the default storage can serve as a cap for the number of calls
    that would fail if the app did not have the unlimitedStorage permission.
    *Capped at once per 30 seconds so as to not impact performance.
  </summary>
</histogram>

<histogram name="Extensions.HostedAppUnlimitedStorageUsage" units="KB">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The usage (in kilobytes) of a hosted app with the unlimitedStorage api
    permission, recorded once per run per app the first time we load storage for
    the hosted app. This is separate from the other metrics on hosted app
    unlimited storage usage because it is logged once per extension per run.
  </summary>
</histogram>

<histogram name="Extensions.IncognitoAllowed">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of extensions (and friends) that could have been allowed in
    incognito, and were, for users that have at least one extension that could
    have been allowed. This excludes anything that doesn't show up in
    chrome://extensions (platform apps, hosted apps, component extensions),
    policy-installed extensions, and unpacked extensions. See also
    Extensions.IncognitoNotAllowed.
  </summary>
</histogram>

<histogram name="Extensions.IncognitoNotAllowed">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of extensions (and friends) that could have been allowed in
    incognito, but weren't, for users that have at least one extension that
    could have been allowed. This excludes anything that doesn't show up in
    chrome://extensions (platform apps, hosted apps, component extensions),
    policy-installed extensions, and unpacked extensions. See also
    Extensions.IncognitoAllowed.
  </summary>
</histogram>

<histogram name="Extensions.InitExtensionControlledPrefsTime" units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during
    ExtensionPrefs::InitExtensionControlledPrefs.
  </summary>
</histogram>

<histogram name="Extensions.InitPrefGetExtensionsTime" units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during the GetExtensions call within
    ExtensionPrefs::InitPrefStore.
  </summary>
</histogram>

<histogram name="Extensions.InitPrefStoreTime" units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during ExtensionPrefs::InitPrefStore.
  </summary>
</histogram>

<histogram name="Extensions.InjectCssTime" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The amount of time for a CSS file to be injected into a page.
  </summary>
</histogram>

<histogram name="Extensions.InjectedScriptExecutionTime" units="ms">
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Time taken to execute all scripts for one location within an extension.
    Recorded every time content scripts injected by extensions are executed.
    Unlike Extensions.InjectScriptTime, this includes execution time of
    asynchronously injected scripts.
  </summary>
</histogram>

<histogram name="Extensions.InjectEnd_BlockingScriptCount">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Number of blocking scripts injected at document end by extensions.
  </summary>
</histogram>

<histogram name="Extensions.InjectEnd_ScriptCount">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>Number of scripts injected at document end by extensions.</summary>
</histogram>

<histogram name="Extensions.InjectEnd_Time" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Time taken to inject all scripts at document end by extensions. Not reported
    if scripts are executed asynchronously.
  </summary>
</histogram>

<histogram name="Extensions.InjectIdle_BlockingScriptCount">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Number of blocking scripts injected at document idle by extensions.
  </summary>
</histogram>

<histogram name="Extensions.InjectIdle_ScriptCount">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>Number of scripts injected at document idle by extensions.</summary>
</histogram>

<histogram name="Extensions.InjectIdle_Time" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Time taken to inject all scripts at document idle by extensions. Not
    reported if scripts are executed asynchronously.
  </summary>
</histogram>

<histogram name="Extensions.InjectScriptTime" units="ms">
  <obsolete>
    Deprecated 03/2017 in favor of Extensions.InjectedScriptExecutionTime.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>Time taken to inject all scripts by extensions.</summary>
</histogram>

<histogram name="Extensions.InjectStart_BlockingScriptCount">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Number of blocking scripts injected at document start by extensions.
  </summary>
</histogram>

<histogram name="Extensions.InjectStart_CssCount">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>Number of css files injected by extensions.</summary>
</histogram>

<histogram name="Extensions.InjectStart_ScriptCount">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>Number of scripts injected at document start by extensions.</summary>
</histogram>

<histogram name="Extensions.InjectStart_Time" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Time taken to inject css/scripts at document start by extensions. Not
    reported if scripts are executed asynchronously.
  </summary>
</histogram>

<histogram name="Extensions.InstallPrompt.Accepted" enum="BooleanAccepted">
  <owner>meacer@chromium.org</owner>
  <summary>
    Whether the user accepted or aborted an extension installation.
  </summary>
</histogram>

<histogram name="Extensions.InstallPrompt.Type"
    enum="ExtensionInstallPromptType">
  <owner>meacer@chromium.org</owner>
  <summary>
    Type of the extension install prompt displayed when an extension
    installation is triggered.
  </summary>
</histogram>

<histogram name="Extensions.InstallPromptExperiment.ShowDetails"
    enum="ExtensionInstallPromptExperimentLinkAction">
  <owner>meacer@chromium.org</owner>
  <summary>
    Actions on the show details link grouped by action type when the install
    prompt trial is running.
  </summary>
</histogram>

<histogram name="Extensions.InstallPromptExperiment.ShowPermissions"
    enum="ExtensionInstallPromptExperimentLinkAction">
  <owner>meacer@chromium.org</owner>
  <summary>
    Actions on the show permissions link grouped by action type when the install
    prompt trial is running.
  </summary>
</histogram>

<histogram name="Extensions.InstallSource" enum="ExtensionLocation">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>Installs grouped by the location property in prefs.</summary>
</histogram>

<histogram name="Extensions.InstallType" enum="ExtensionType">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>Installs grouped by Extension::HistogramType.</summary>
</histogram>

<histogram name="Extensions.LoadAll">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>The number of extensions and themes loaded at profile open.</summary>
</histogram>

<histogram name="Extensions.LoadAllComponentTime" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Time taken to load all component extensions at profile open. This happens as
    part of the total initialization time of ExtensionService, measured in
    Extensions.ExtensionServiceInitTime.
  </summary>
</histogram>

<histogram name="Extensions.LoadAllTime" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Time taken to load all non-component extensions at profile open. This
    happens as part of the total initialization time of ExtensionService,
    measured in Extensions.ExtensionServiceInitTime.
  </summary>
</histogram>

<histogram name="Extensions.LoadAllTime2" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Time taken to load all non-component extensions at profile open and record
    metrics. This happens as part of the total initialization time of
    ExtensionService, measured in Extensions.ExtensionServiceInitTime.
  </summary>
</histogram>

<histogram name="Extensions.LoadApp">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>The number of apps loaded by each user at profile open.</summary>
</histogram>

<histogram name="Extensions.LoadAppExternal">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of externally managed apps loaded by each user at profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadAppUser">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of user-installed apps loaded by each user at profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadBrowserAction">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of browser action extensions loaded at profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadContentPack">
  <obsolete>
    Deprecated as of 4/2015. Replaced by ManagedUsers.Whitelist.Count.
  </obsolete>
  <owner>asargent@chromium.org</owner>
  <summary>
    The number of content-pack extensions loaded at profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadCreationFlags" enum="ExtensionCreationFlags">
  <owner>calamity@chromium.org</owner>
  <summary>
    The creation flags of all extensions loaded at profile open grouped by
    Extension::InitFromValueFlags.
  </summary>
</histogram>

<histogram name="Extensions.LoadExtension">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>The number of extensions loaded at profile open.</summary>
</histogram>

<histogram name="Extensions.LoadExtensionExternal">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of externally managed extensions loaded at profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadExtensionUser">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of user-installed extensions loaded at profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadExternal">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of externally managed extensions and apps loaded at profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadHostedApp">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of hosted apps loaded by each user at profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadNoExtensionAction">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of extensions that had neither a page nor browser action
    specified in their manifest. Recorded at profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadOffStoreItems" units="Number of items">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of enabled extensions or apps the user has installed that do not
    update from the Chrome Web Store. Recorded during profile initialization.
  </summary>
</histogram>

<histogram name="Extensions.LoadPackagedApp">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of legacy packaged apps loaded by each user at profile open.
  </summary>
</histogram>

<histogram name="Extensions.LoadPlatformApp">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>The number of platform apps loaded at profile open.</summary>
</histogram>

<histogram name="Extensions.LoadTheme">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>The number of themes loaded at profile open.</summary>
</histogram>

<histogram name="Extensions.LoadType" enum="ExtensionType">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of extensions loaded at profile open grouped by
    Extension::HistogramType.
  </summary>
</histogram>

<histogram name="Extensions.LoadUserScript">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of converted user scripts loaded at profile open.
  </summary>
</histogram>

<histogram name="Extensions.LockedFullscreenStateRequest"
    enum="LockedFullscreenState" expires_after="2019-07-01">
  <owner>isandrk@chromium.org</owner>
  <owner>jhastings@chromium.org</owner>
  <summary>
    Records requests to enter or exit locked fullscreen mode through extension
    APIs. Used only on Chrome OS.
  </summary>
</histogram>

<histogram base="true" name="Extensions.LongInjectionTaskTime" units="ms">
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The amount of time taken to inject content scripts. If multiple scripts are
    injected within a single task, this records the time taken to execute all
    the scripts.

    This metric only logs tasks longer than 50 milliseconds. This threshold
    aligns with the definition of &quot;long task&quot; in Long Tasks API
    (https://w3c.github.io/longtasks/).

    Note that this histogram itself doesn't tell you what percentage of content
    scripts are greater than 50 ms. See Extensions.Inject{Start,End,Idle}_Time
    and Extensions.InjectedScriptExecutionTime.* for the overall distribution.
  </summary>
</histogram>

<histogram name="Extensions.ManifestFetchFailureRetryCountGoogleUrl">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Number of times chrome retried to download an extension update manifest with
    a url on a google.com domain, before eventually giving up.
  </summary>
</histogram>

<histogram name="Extensions.ManifestFetchFailureRetryCountOtherUrl"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Number of times chrome retried to download an extension update manifest with
    a url on a non google.com domain, before eventually giving up.
  </summary>
</histogram>

<histogram name="Extensions.ManifestFetchSuccessRetryCountGoogleUrl">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Number of times chrome retried to download an extension update manifest with
    a url on a google.com domain, before eventually succeeding.
  </summary>
</histogram>

<histogram name="Extensions.ManifestFetchSuccessRetryCountOtherUrl">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Number of times chrome retried to download an extension update manifest with
    a url on a non google.com domain, before eventually succeeding.
  </summary>
</histogram>

<histogram name="Extensions.ManifestReloadNeedsRelocalization"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Number of extension loads on startup where it is necessary to reload the
    mainfest because the locale has changed.
  </summary>
</histogram>

<histogram name="Extensions.ManifestReloadNotNeeded" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Number of extension loads on startup where it is not necessary to reload the
    extension's manifest.
  </summary>
</histogram>

<histogram name="Extensions.ManifestReloadUnpackedDir"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Number of extension loads on startup where it is necessary to reload the
    manifest because the extension is unpacked.
  </summary>
</histogram>

<histogram name="Extensions.ManifestVersion">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>The manifest version of each loaded extension.</summary>
</histogram>

<histogram name="Extensions.Messaging.ExtensionPortsCreated"
    units="number of ports">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of ports created in a given script context at a specific time.
    Recorded once at the destruction of the script context (when no more ports
    could be created) if and only if at least one port was created in the
    context. Only includes ports to extension contexts (i.e., not ports created
    to tabs or native apps).
  </summary>
</histogram>

<histogram name="Extensions.Messaging.GetPortIdAsyncTime" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The total amount of time between when an extension opens a new channel and
    when it receives the global port id from the browser and can begin sending
    messages.
  </summary>
</histogram>

<histogram name="Extensions.Messaging.GetPortIdSyncTime" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The amount of synchronous time taken for the renderer to request an
    extension message port id from the browser when a new channel is first
    opened by an extension.
  </summary>
</histogram>

<histogram name="Extensions.Messaging.IncludeChannelIdBehavior"
    enum="ExtensionMessagingIncludeChannelIdBehavior"
    expires_after="2018-12-01">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>nharper@hromium.org</owner>
  <summary>
    The behavior for including the TLS channel ID in the information sent with
    extension messaging. Recorded once per opened channel.
  </summary>
</histogram>

<histogram name="Extensions.Messaging.MessageSize" units="bytes">
  <owner>redevlin.cronin@chromium.org</owner>
  <summary>
    The size, in bytes, of a message sent from an extension using one of the
    messaging APIs (e.g. chrome.runtime.sendMessage). All message sizes are
    logged, but messages over 64 MB in size aren't sent.
  </summary>
</histogram>

<histogram name="Extensions.Messaging.SetPortIdTime" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The amount of time for the renderer to inform the browser process of a new
    port being created with a certain id. This replaces the flow for
    Extensions.Messaging.GetPortId[A]SyncTime.
  </summary>
</histogram>

<histogram name="Extensions.NetworkDelay" units="ms">
  <owner>battre@chromium.org</owner>
  <summary>Time that network requests were blocked due to extensions.</summary>
</histogram>

<histogram name="Extensions.NetworkDelayPercentage" units="%">
  <owner>battre@chromium.org</owner>
  <summary>
    Percentage of total lifetime a network request was blocked due to an
    extension.
  </summary>
</histogram>

<histogram name="Extensions.NetworkDelayRegistryLoad" units="ms">
  <owner>battre@chromium.org</owner>
  <summary>
    Time that network requests were blocked due to relevant rule registries
    loading.
  </summary>
</histogram>

<histogram name="Extensions.NetworkDelayStartup" units="ms">
  <obsolete>
    Never used. Added to source 06/2012. Removed from source and added here
    09/2016.
  </obsolete>
  <summary>
    Delay of network requests due to waiting for extension declarativeWebRequest
    rules to be loaded from disk at startup.
  </summary>
</histogram>

<histogram name="Extensions.NonWebstoreLocation" enum="ExtensionLocation">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of apps/extensions with a non-webstore update_url loaded at
    startup time grouped by Extension::Location.
  </summary>
</histogram>

<histogram name="Extensions.NonWebStoreNewTabPageOverrides">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Number of non-WebStore extensions on startup that override the new tab page.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_AutoDisable" enum="ExtensionPermission">
  <obsolete>
    Deprecated as of 5/2014, replaced by Extensions.Permissions_AutoDisable2.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when it is automatically disabled
    due to a permission increase (e.g., after an extension upgrade).
  </summary>
</histogram>

<histogram name="Extensions.Permissions_AutoDisable2"
    enum="ExtensionPermission2">
  <obsolete>
    Deprecated as of 6/2015, replaced by Extensions.Permissions_AutoDisable3.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when it is automatically disabled
    due to a permission increase (e.g., after an extension upgrade).
  </summary>
</histogram>

<histogram name="Extensions.Permissions_AutoDisable3"
    enum="ExtensionPermission3">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when it is automatically disabled
    due to a permission increase (e.g., after an extension upgrade). To find
    places where this histogram may be emitted, look for calls to
    ExtensionService::RecordPermissionMessagesHistogram with the argument
    AutoDisable. For Sync users, this may be reported for each device, depending
    on whether the Sync update or the extension auto-update happen first.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_Install" enum="ExtensionPermission">
  <obsolete>
    Deprecated as of 5/2014, replaced by Extensions.Permissions_Install2.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when it was installed.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_Install2" enum="ExtensionPermission2">
  <obsolete>
    Deprecated as of 6/2015, replaced by Extensions.Permissions_Install3.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when it was installed.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_Install3" enum="ExtensionPermission3">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when it was installed. To find
    places where this histogram may be emitted, look for calls to
    ExtensionService::RecordPermissionMessagesHistogram with the argument
    Install. For Sync users, this is reported for each device.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_InstallAbort"
    enum="ExtensionPermission">
  <obsolete>
    Deprecated as of 5/2014, replaced by Extensions.Permissions_InstallAbort2.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when installation was aborted, not
    including installation errors and user cancels.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_InstallAbort2"
    enum="ExtensionPermission2">
  <obsolete>
    Deprecated as of 6/2015, replaced by Extensions.Permissions_InstallAbort3.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when installation was aborted, not
    including installation errors and user cancels.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_InstallAbort3"
    enum="ExtensionPermission3">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when installation was aborted (e.g.
    because the parent window of the confirmation dialog went away), not
    including installation errors and user cancels. To find places where this
    histogram may be emitted, look for calls to
    ExtensionService::RecordPermissionMessagesHistogram with the argument
    InstallAbort.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_InstallCancel"
    enum="ExtensionPermission">
  <obsolete>
    Deprecated as of 5/2014, replaced by Extensions.Permissions_InstallCancel2.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when installation was canceled.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_InstallCancel2"
    enum="ExtensionPermission2">
  <obsolete>
    Deprecated as of 6/2015, replaced by Extensions.Permissions_InstallCancel3.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when installation was canceled.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_InstallCancel3"
    enum="ExtensionPermission3">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when installation was canceled. To
    find places where this histogram may be emitted, look for calls to
    ExtensionService::RecordPermissionMessagesHistogram with the argument
    InstallCancel.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_Load" enum="ExtensionPermission">
  <obsolete>
    Deprecated as of 5/2014, replaced by Extensions.Permissions_Load2.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>The permissions present in an extension when it was loaded.</summary>
</histogram>

<histogram name="Extensions.Permissions_Load2" enum="ExtensionPermission2">
  <obsolete>
    Deprecated as of 6/2015, replaced by Extensions.Permissions_Load3.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>The permissions present in an extension when it was loaded.</summary>
</histogram>

<histogram name="Extensions.Permissions_Load3" enum="ExtensionPermission3">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when it was loaded (which happens at
    profile open or extension install). To find places where this histogram may
    be emitted, look for calls to
    ExtensionService::RecordPermissionMessagesHistogram with the argument Load.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_ReEnable" enum="ExtensionPermission">
  <obsolete>
    Deprecated as of 5/2014, replaced by Extensions.Permissions_ReEnable2.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when it was re-enabled from a
    confirmation prompt.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_ReEnable2" enum="ExtensionPermission2">
  <obsolete>
    Deprecated as of 6/2015, replaced by Extensions.Permissions_ReEnable3.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when it was re-enabled from a
    confirmation prompt.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_ReEnable3" enum="ExtensionPermission3">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when it was re-enabled from a
    confirmation prompt. To find places where this histogram may be emitted,
    look for calls to ExtensionService::RecordPermissionMessagesHistogram with
    the argument ReEnable.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_ReEnableAbort"
    enum="ExtensionPermission">
  <obsolete>
    Deprecated as of 5/2014, replaced by Extensions.Permissions_ReEnableAbort2.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when the re-enable prompt was
    aborted, not including installation errors and manual user cancels.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_ReEnableAbort2"
    enum="ExtensionPermission2">
  <obsolete>
    Deprecated as of 6/2015, replaced by Extensions.Permissions_ReEnableAbort3.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when the re-enable prompt was
    aborted, not including installation errors and manual user cancels.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_ReEnableAbort3"
    enum="ExtensionPermission3">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when the re-enable prompt was
    aborted (e.g. because the parent window of the confirmation dialog went
    away), not including installation errors and manual user cancels. To find
    places where this histogram may be emitted, look for calls to
    ExtensionService::RecordPermissionMessagesHistogram with the argument
    ReEnableAbort.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_ReEnableCancel"
    enum="ExtensionPermission">
  <obsolete>
    Deprecated as of 5/2014, replaced by Extensions.Permissions_ReEnableCancel2.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when the re-enable was canceled from
    the confirmation prompt.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_ReEnableCancel2"
    enum="ExtensionPermission2">
  <obsolete>
    Deprecated as of 6/2015, replaced by Extensions.Permissions_ReEnableCancel3.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when the re-enable was canceled from
    the confirmation prompt.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_ReEnableCancel3"
    enum="ExtensionPermission3">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when the re-enable was canceled from
    the confirmation prompt. To find places where this histogram may be emitted,
    look for calls to ExtensionService::RecordPermissionMessagesHistogram with
    the argument ReEnableCancel.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_Uninstall" enum="ExtensionPermission">
  <obsolete>
    Deprecated as of 5/2014, replaced by Extensions.Permissions_Uninstall2.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when it was uninstalled.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_Uninstall2" enum="ExtensionPermission2">
  <obsolete>
    Deprecated as of 6/2015, replaced by Extensions.Permissions_Uninstall3.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when it was uninstalled.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_Uninstall3" enum="ExtensionPermission3">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when it was uninstalled. To find
    places where this histogram may be emitted, look for calls to
    ExtensionService::RecordPermissionMessagesHistogram with the argument
    Uninstall. For Sync users, this is reported for each device.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_WebStoreInstall"
    enum="ExtensionPermission">
  <obsolete>
    Deprecated as of 5/2014, replaced by
    Extensions.Permissions_WebStoreInstall2.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when it was installed through the
    web store.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_WebStoreInstall2"
    enum="ExtensionPermission2">
  <obsolete>
    Deprecated as of 6/2015, replaced by
    Extensions.Permissions_WebStoreInstall3.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when it was installed through the
    web store.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_WebStoreInstall3"
    enum="ExtensionPermission3">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when it was installed through the
    web store. To find places where this histogram may be emitted, look for
    calls to ExtensionService::RecordPermissionMessagesHistogram with the
    argument WebStoreInstall. Contrary to the more-general Permissions_Install3
    histogram, this one is NOT reported for each device.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_WebStoreInstallAbort"
    enum="ExtensionPermission">
  <obsolete>
    Deprecated as of 5/2014, replaced by
    Extensions.Permissions_WebStoreInstallAbort2.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when installation from the web store
    was aborted, not including installation errors and user cancels.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_WebStoreInstallAbort2"
    enum="ExtensionPermission2">
  <obsolete>
    Deprecated as of 6/2015, replaced by
    Extensions.Permissions_WebStoreInstallAbort3.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when installation from the web store
    was aborted, not including installation errors and user cancels.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_WebStoreInstallAbort3"
    enum="ExtensionPermission3">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when installation from the web store
    was aborted (e.g. because the parent window of the confirmation dialog went
    away), not including installation errors and user cancels. To find places
    where this histogram may be emitted, look for calls to
    ExtensionService::RecordPermissionMessagesHistogram with the argument
    WebStoreInstallAbort.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_WebStoreInstallCancel"
    enum="ExtensionPermission">
  <obsolete>
    Deprecated as of 5/2014, replaced by
    Extensions.Permissions_WebStoreInstallCancel2.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when installation from the web store
    was canceled.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_WebStoreInstallCancel2"
    enum="ExtensionPermission2">
  <obsolete>
    Deprecated as of 6/2015, replaced by
    Extensions.Permissions_WebStoreInstallCancel3.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when installation from the web store
    was canceled.
  </summary>
</histogram>

<histogram name="Extensions.Permissions_WebStoreInstallCancel3"
    enum="ExtensionPermission3">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>rpaquay@chromium.org</owner>
  <summary>
    The permissions present in an extension when installation from the web store
    was canceled. To find places where this histogram may be emitted, look for
    calls to ExtensionService::RecordPermissionMessagesHistogram with the
    argument WebStoreInstallCancel.
  </summary>
</histogram>

<histogram name="Extensions.PopupCreateTime" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The time taken between a user clicking on a button to open a popup, and the
    popup finishing loading its initial URL. This is a good way to measure the
    UI responsiveness of extension popups. It will be strictly larger than
    Extensions.PopupLoadTime2, which only measures the time it takes to load -
    there may be a delay between clicking and starting to load, for example, if
    the popup's host got caught in a queue.
  </summary>
</histogram>

<histogram name="Extensions.PopupLoadTime" units="ms">
  <obsolete>
    Replaced by Extensions.PopupLoadTime2.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>The time for an Extension's popup to load.</summary>
</histogram>

<histogram name="Extensions.PopupLoadTime2" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The time taken for an extension popup to load its initial URL. This may not
    include the time taken for an extension process to start, if the extension
    already has a background page running. It does not necessarily correlate
    with the amount of time since the popup was *clicked* either, since there
    may be a delay between the user clicking and the loading started.
    Extensions.PopupCreateTime measures this instead.
  </summary>
</histogram>

<histogram name="Extensions.ProcessManagerStartupHostsTime" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The time taken to start up persistent background pages for extensions in
    ExtensionProcessManager when the extension system notifies that it is ready.
  </summary>
</histogram>

<histogram name="Extensions.ResetPermissionsIncrease" enum="Boolean">
  <owner>rdevlin.cronin@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <summary>
    Whether the DISABLE_PERMISSIONS_INCREASE disable reason was removed from an
    extension while checking for a permissions increase. Recorded during startup
    and on reload and update, for each extension that has the
    DISABLE_PERMISSIONS_INCREASE reason.
  </summary>
</histogram>

<histogram name="Extensions.ResourceDirectoryTimestampQueryLatency" units="ms">
  <owner>asargent@chromium.org</owner>
  <summary>
    The initialization latency (in milliseconds) introduced to each extension
    resource request by querying the directory timestamp.
  </summary>
</histogram>

<histogram name="Extensions.ResourceLastModifiedDelta" units="seconds">
  <owner>asargent@chromium.org</owner>
  <summary>
    The difference in seconds between an extension resource's last modification
    time and its extension base directory's creation time. Recorded on each
    extension resource request if the difference is non-negative (i.e., the
    resource's last modification time is more recent than the directory's
    creation time.) For cases where the directory creation date is more recent,
    see Extensions.ResourceLastModifiedNegativeDelta instead.
  </summary>
</histogram>

<histogram name="Extensions.ResourceLastModifiedNegativeDelta" units="seconds">
  <owner>asargent@chromium.org</owner>
  <summary>
    The absolute difference in seconds between an extension resource's last
    modification time and extension base directory's creation time. Recorded on
    each extension resource request if the difference is negative (i.e., the
    directory's creation time is more recent than the resource's last
    modification time.) For cases where the resource modification time is more
    recent, see Extensions.ResourceLastModifiedDelta instead.
  </summary>
</histogram>

<histogram name="Extensions.SandboxUnpackFailure">
  <owner>asargent@chromium.org</owner>
  <summary>
    Count the number of times a sandboxed extension unpack fails.
  </summary>
</histogram>

<histogram name="Extensions.SandboxUnpackFailureReason"
    enum="ExtensionUnpackFailureReason">
  <owner>asargent@chromium.org</owner>
  <summary>What caused a sandboxed extension unpack to fail?</summary>
</histogram>

<histogram name="Extensions.SandboxUnpackFailureTime">
  <owner>asargent@chromium.org</owner>
  <summary>Time taken to unpack an extension, when the unpack fails.</summary>
</histogram>

<histogram name="Extensions.SandboxUnpackHashCheck" enum="BooleanValidHashSum">
  <owner>achuith@chromium.org</owner>
  <summary>
    Whether a CRX file hash sum was the same as in an updater manifest.
  </summary>
</histogram>

<histogram name="Extensions.SandboxUnpackInitialCrxPathLength">
  <owner>asargent@chromium.org</owner>
  <summary>Length of the initial path to the CRX to be unpacked.</summary>
</histogram>

<histogram name="Extensions.SandboxUnpackLinkFreeCrxPathLength">
  <owner>asargent@chromium.org</owner>
  <summary>
    Length of the normalized (link/junction free) path to the temporary copy of
    a CRX made during unpacking.
  </summary>
</histogram>

<histogram name="Extensions.SandboxUnpackRate">
  <owner>asargent@chromium.org</owner>
  <summary>
    Rate at which a CRX file is unpacked in Kilobytes per second.
  </summary>
</histogram>

<histogram name="Extensions.SandboxUnpackRate1To2mB">
  <owner>asargent@chromium.org</owner>
  <summary>
    Rate at which CRX files 1MB to 2MB are unpacked in Kilobytes per second.
  </summary>
</histogram>

<histogram name="Extensions.SandboxUnpackRate2To5mB">
  <owner>asargent@chromium.org</owner>
  <summary>
    Rate at which CRX files 2MB to 5MB are unpacked in Kilobytes per second.
  </summary>
</histogram>

<histogram name="Extensions.SandboxUnpackRate50kBTo1mB">
  <owner>asargent@chromium.org</owner>
  <summary>
    Rate at which CRX files 50kB to 1MB are unpacked in Kilobytes per second.
  </summary>
</histogram>

<histogram name="Extensions.SandboxUnpackRate5To10mB">
  <owner>asargent@chromium.org</owner>
  <summary>
    Rate at which CRX files 5MB to 10 MB are unpacked in Kilobytes per second.
  </summary>
</histogram>

<histogram name="Extensions.SandboxUnpackRateOver10mB">
  <owner>asargent@chromium.org</owner>
  <summary>
    Rate at which CRX files larger than 10MB are unpacked in Kilobytes per
    second.
  </summary>
</histogram>

<histogram name="Extensions.SandboxUnpackRateUnder50kB">
  <owner>asargent@chromium.org</owner>
  <summary>
    Rate at which CRX files under 50 KB are unpacked in Kilobytes per second.
  </summary>
</histogram>

<histogram name="Extensions.SandboxUnpackSuccess">
  <owner>asargent@chromium.org</owner>
  <summary>Count the number of times a sandboxed CRX unpack succeeds.</summary>
</histogram>

<histogram name="Extensions.SandboxUnpackSuccessCantGetCrxSize">
  <owner>asargent@chromium.org</owner>
  <summary>
    Count the number of times a sandboxed CRX unpack succeeds, but we can't get
    the file size.
  </summary>
</histogram>

<histogram name="Extensions.SandboxUnpackSuccessCrxSize">
  <owner>asargent@chromium.org</owner>
  <summary>Size of the .crx file, in KB, when the unpack succeeds.</summary>
</histogram>

<histogram name="Extensions.SandboxUnpackSuccessTime">
  <owner>asargent@chromium.org</owner>
  <summary>
    Time taken to unpack an extension, when the unpack succeeds.
  </summary>
</histogram>

<histogram name="Extensions.SandboxUnpackTempCrxPathLength">
  <owner>asargent@chromium.org</owner>
  <summary>
    Length of the path of the temporary copy of a CRX made during unpacking.
  </summary>
</histogram>

<histogram name="Extensions.SandboxUnpackUnpackedCrxPathLength">
  <owner>asargent@chromium.org</owner>
  <summary>Length of the path under which a CRX is unpacked.</summary>
</histogram>

<histogram name="Extensions.SettingsQuotaExceeded.BytesPerSetting">
  <obsolete>
    Removed in September, 2016
  </obsolete>
  <summary>
    Emitted when QuotaExceededError was called due to an extension using too
    many bytes for a given setting.  The number has no natural numerator
    (normalizing factor) and thus is not particularly useful.
  </summary>
</histogram>

<histogram name="Extensions.SettingsQuotaExceeded.KeyCount">
  <obsolete>
    Removed in September, 2016
  </obsolete>
  <summary>
    Emitted when QuotaExceededError was called due to an extension using too
    many keys.  The number has no natural numerator (normalizing factor) and
    thus is not particularly useful.
  </summary>
</histogram>

<histogram name="Extensions.SettingsQuotaExceeded.TotalBytes">
  <obsolete>
    Removed in September, 2016
  </obsolete>
  <summary>
    Emitted when QuotaExceededError was called due to an extension using too
    many bytes.  The number has no natural numerator (normalizing factor) and
    thus is not particularly useful.
  </summary>
</histogram>

<histogram name="Extensions.ShouldAllowOpenURL.Failure"
    enum="ShouldAllowOpenURLFailureReason">
  <owner>alexmos@chromium.org</owner>
  <summary>
    When the web-accessible resource check in
    ChromeContentBrowserClientExtensionsPart::ShouldAllowOpenURL fails, this
    records the reason for the failure.  This check is performed on navigations
    that utilize the OpenURL path as well as on transfers.
  </summary>
</histogram>

<histogram name="Extensions.ShouldAllowOpenURL.Failure.Scheme"
    enum="ShouldAllowOpenURLFailureScheme">
  <owner>alexmos@chromium.org</owner>
  <summary>
    When the web-accessible resource check in
    ChromeContentBrowserClientExtensionsPart::ShouldAllowOpenURL fails, this
    records the scheme of the SiteInstance that initiated the blocked load. This
    check is performed on navigations that utilize the OpenURL path as well as
    on transfers.
  </summary>
</histogram>

<histogram name="Extensions.StartupDelay" units="ms">
  <obsolete>
    This has not been recorded since at least mid-2013.
  </obsolete>
  <owner>asargent@chromium.org</owner>
  <summary>The time one extension delays network requests at startup.</summary>
</histogram>

<histogram name="Extensions.StartupDelay_Total" units="ms">
  <obsolete>
    This has not been recorded since at least mid-2013.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The total time extensions delay network requests at startup.
  </summary>
</histogram>

<histogram name="Extensions.StorageFrontendInitTime" units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during StorageFrontend::Init.
  </summary>
</histogram>

<histogram name="Extensions.SyncGetMessageBundle" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The amount of synchronous time spent retrieving an extension's message
    bundle (the collection of its i18n resources) from the browser.
  </summary>
</histogram>

<histogram name="Extensions.ThrottledNetworkRequestDelay" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The duration by which a network request was delayed while waiting for
    extension user script load. Recorded once per request that is delayed, at
    the time the resource resumes loading.
  </summary>
</histogram>

<histogram name="Extensions.ThrottledNetworkRequests" units="requests">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The total number of network requests that were delayed by extension user
    script load. Recorded once each time network requests may have been delayed
    by user script load (i.e., once at the end of each batch of script loads).
  </summary>
</histogram>

<histogram base="true" name="Extensions.TimeYieldedBetweenContentScriptRuns"
    units="ms">
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Time elapsed between two asynchronously-injected content script runs.
  </summary>
</histogram>

<histogram name="Extensions.ToolstripLoadTime" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Time taken to load a toolstrip.</summary>
</histogram>

<histogram name="Extensions.UnifiedExtensionUpdaterDownloadErrors"
    enum="CombinedHttpResponseAndNetErrorCode">
  <owner>mxnguyen@chromium.org</owner>
  <summary>
    Records the error codes of the unified extension updater download errors.
    These events are triggered when the extension updater fails to download the
    extension update package of an extension, which can happen only after the
    updater has successfuly determined that there is an update for the
    extension.
  </summary>
</histogram>

<histogram name="Extensions.UnifiedExtensionUpdaterUpdateCalls"
    units="extensions">
  <owner>mxnguyen@chromium.org</owner>
  <summary>
    The number of extensions that are passed over to the unified extension
    updater for update check. Triggered when the new extension updater starts
    doing update check.
  </summary>
</histogram>

<histogram name="Extensions.UnifiedExtensionUpdaterUpdateCheckErrors"
    enum="CombinedHttpResponseAndNetErrorCode">
  <owner>mxnguyen@chromium.org</owner>
  <summary>
    Records the error codes of the unified extension updater update check
    errors. These events are triggered only when the new extension updater gets
    an error in the update check phase.
  </summary>
</histogram>

<histogram name="Extensions.UnifiedExtensionUpdaterUpdateResults"
    enum="ExtensionUpdaterUpdateResult">
  <owner>mxnguyen@chromium.org</owner>
  <summary>
    Records the update results of extensions in an unified extension updater
    session, grouped by ExtensionUpdaterUpdateResult.
  </summary>
</histogram>

<histogram name="Extensions.UninstallDialogAction"
    enum="ExtensionUninstallDialogAction">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The action that was taken from an extension uninstall dialog. Recorded once
    per dialog shown. Only recorded if all possible actions (including report
    abuse) were available on the dialog.
  </summary>
</histogram>

<histogram name="Extensions.UninstallSource" enum="ExtensionUninstallSource">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The source for the extension uninstall. This is only recorded if an
    uninstall dialog is shown to the user (i.e., it is not recorded for internal
    &quot;cleanups&quot;).
  </summary>
</histogram>

<histogram name="Extensions.UninstallType" enum="ExtensionType">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>Uninstalls grouped by Extension::HistogramType.</summary>
</histogram>

<histogram name="Extensions.UnpackFailureInstallCause"
    enum="ExtensionInstallCause">
  <owner>asargent@chromium.org</owner>
  <summary>
    Count failing CRX installs, grouped by the way an extension can be
    installed.
  </summary>
</histogram>

<histogram name="Extensions.UnpackFailureInstallSource"
    enum="ExtensionLocation">
  <owner>asargent@chromium.org</owner>
  <summary>
    Count successful CRX installs, grouped by the location property in prefs.
    installed.
  </summary>
</histogram>

<histogram name="Extensions.UnpackSuccessInstallCause"
    enum="ExtensionInstallCause">
  <owner>asargent@chromium.org</owner>
  <summary>
    Count successful CRX installs, grouped by the cause of the install.
  </summary>
</histogram>

<histogram name="Extensions.UnpackSuccessInstallSource"
    enum="ExtensionLocation">
  <owner>asargent@chromium.org</owner>
  <summary>
    Count successful CRX installs, grouped by the location property in prefs.
  </summary>
</histogram>

<histogram name="Extensions.UpdateCheckApp" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of legacy packaged apps and hosted apps that were checked during
    an update check.
  </summary>
</histogram>

<histogram name="Extensions.UpdateCheckExtension">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of extensions that were checked during an update check.
  </summary>
</histogram>

<histogram name="Extensions.UpdateCheckGap" units="minutes">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Time in minutes between update checks.</summary>
</histogram>

<histogram name="Extensions.UpdateCheckGoogleUrl">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of crx's with a Google-hosted update URL that were checked during
    an update check.
  </summary>
</histogram>

<histogram name="Extensions.UpdateCheckNoUrl">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of crx's with no update URL checked during an update check.
  </summary>
</histogram>

<histogram name="Extensions.UpdateCheckOtherUrl">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of crx's with a non-Google update URL that were checked during an
    update check.
  </summary>
</histogram>

<histogram name="Extensions.UpdateCheckPackagedApp" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of packaged apps that were checked during an update check.
  </summary>
</histogram>

<histogram name="Extensions.UpdateCheckTheme" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of themes that were checked during an update check.
  </summary>
</histogram>

<histogram name="Extensions.UpdateFrequencyCommandLineFlagIsUsed"
    enum="BooleanPresent">
  <obsolete>
    Deprecated 3/2018 in https://crbug.com/357781 with the removal of the
    extensions-update-frequency command line flag.
  </obsolete>
  <owner>catmullings@chromium.org</owner>
  <summary>
    Logs whether or not the extensions-update-frequency command line flag is
    used. Recorded at profile creation if extensions autoupdate is enabled.
  </summary>
</histogram>

<histogram name="Extensions.UpdateManifestDuplicateEntryCount" units="entries">
  <owner>mxnguyen@chromium.org</owner>
  <summary>
    Counts the number of entries with the same extension ID found in the update
    manifest of an update check request. When the update manifest does not
    contain any update entry for an extension ID in the update check request,
    the count will be 0.
  </summary>
</histogram>

<histogram name="Extensions.UpdateManifestHasProdVersionMinCounts"
    units="extensions">
  <owner>mxnguyen@chromium.org</owner>
  <summary>
    The number of prodversionmin attributes appearing in an update manifest of
    an update check request.
  </summary>
</histogram>

<histogram name="Extensions.UpdateOnLoad">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of extensions that were updated at browser startup.
  </summary>
</histogram>

<histogram name="Extensions.UpdaterWriteCrx" enum="ExtensionFileWriteResult">
  <obsolete>
    Deprecated 10/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    What happened when the extension updater tried to write a file?
  </summary>
</histogram>

<histogram name="Extensions.UpdateSource" enum="ExtensionLocation">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Updates grouped by the location property in prefs.</summary>
</histogram>

<histogram name="Extensions.UpdateType" enum="ExtensionType">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Updates grouped by Extension::HistogramType.</summary>
</histogram>

<histogram name="Extensions.WebRequest.InitiatorAccess" enum="InitiatorAccess"
    expires_after="2018-12-31">
  <owner>karandeepb@chromium.org</owner>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Describes the different cases pertaining to host permissions check for the
    initiator URL of a network request. This is emitted whenever an extension is
    found to have access to a request url, when checked by the WebRequest API.
  </summary>
</histogram>

<histogram name="Extensions.WebRequest.ModifiedResponseHeaders"
    enum="WebRequestResponseHeaderType">
  <owner>rockot@chromium.org</owner>
  <summary>
    Tracks whether any interesting response header modifications were made for
    each request seen by the Web Request API. Logged for every network request
    as long as one or more enabled extensions is using a declarative or blocking
    filter to process onHeadersReceived events.

    This histogram is temporary, for investigating https://crbug.com/827582. It
    can probably be removed by M69.
  </summary>
</histogram>

<histogram name="Extensions.WebRequest.OnBeforeSendHeadersEventResponse"
    enum="WebRequestEventResponse">
  <owner>rockot@chromium.org</owner>
  <summary>
    For every network request visible to the Web Request API, this indicates
    whether any registered declarative rules or event listeners observed the
    onBeforeSendHeaders event.

    This histogram is temporary, for investigating https://crbug.com/827582. It
    can probably be removed by M69.
  </summary>
</histogram>

<histogram name="Extensions.WebRequest.OnHeadersReceivedEventResponse"
    enum="WebRequestEventResponse">
  <owner>rockot@chromium.org</owner>
  <summary>
    For every network request visible to the Web Request API, this indicates
    whether any registered declarative rules or event listeners observed the
    onHeadersReceived event.

    This histogram is temporary, for investigating https://crbug.com/827582. It
    can probably be removed by M69.
  </summary>
</histogram>

<histogram name="Extensions.WebRequest.SpecialHeadersRemoved"
    enum="WebRequestSpecialHeaderRemoval">
  <owner>rockot@chromiumorg</owner>
  <summary>
    Whether either or both of the special Accept-Language or User-Agent request
    headers were removed by an extension using the Web Request API. Logged for
    every network request as long as one or more enabled extensions is using a
    declarative or blocking filter to process onBeforeSendHeaders events.

    This histogram is temporary, for investigating https://crbug.com/827582. It
    can probably be removed by M69.
  </summary>
</histogram>

<histogram
    name="Extensions.WebRequest.WS_CookiesAreModifiedOnBeforeSendHeaders"
    units="boolean">
  <owner>yhirano@chromium.org</owner>
  <summary>
    Whether cookies on a websocket connection are modified in
    OnBeforeSendHeaders.

    This histogram is temporary, for investigating https://crbug.com/827582.
  </summary>
</histogram>

<histogram name="Extensions.WebRequest.WS_CookiesAreModifiedOnHeadersReceived"
    units="boolean">
  <owner>yhirano@chromium.org</owner>
  <summary>
    Whether cookies on a websocket connection are modified in OnHeadersReceived.

    This histogram is temporary, for investigating https://crbug.com/827582.
  </summary>
</histogram>

<histogram base="true" name="Extensions.WebRequest.WS_RequestHeaders"
    expires_after="M69">
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>
    Whether certain headers are modified in OnBeforeSendHeaders.
  </summary>
</histogram>

<histogram name="Extensions.WebRequest.WS_RequestHeadersModification"
    enum="WebRequestWSRequestHeadersModification">
  <owner>yhirano@chromiumorg</owner>
  <summary>
    Tracks request headers modifications on a websocket connection in
    OnBeforeSendHeaders.

    This histogram is temporary, for investigating https://crbug.com/827582.
  </summary>
</histogram>

<histogram name="Extensions.WebRequest.WS_ResponseHeadersAreModified"
    units="boolean">
  <owner>yhirano@chromiumorg</owner>
  <summary>
    Whether response headers on a websocket connection are modified in
    OnHeadersReceived.

    This histogram is temporary, for investigating https://crbug.com/827582.
  </summary>
</histogram>

<histogram name="Extensions.WebRequestAction" enum="RequestAction">
  <owner>karandeepb@chromium.org</owner>
  <summary>
    Counts the number of times an action is requested by extensions as part of
    the Web Request API. For a given web request stage, multiple actions may be
    logged.
  </summary>
</histogram>

<histogram name="Extensions.WebRequestBlockingCount"
    units="Number of extensions">
  <owner>karandeepb@chromium.org</owner>
  <summary>
    Number of enabled extensions which have requested the
    &quot;webRequestBlocking&quot; permission. Includes all kinds of extensions,
    including component and unpacked extensions. Recorded during profile
    initialization.
  </summary>
</histogram>

<histogram name="Extensions.WebRequestEventFoundFrame" units="boolean">
  <obsolete>
    Deprecated as of 11/2017. No longer relevant after refactoring.
  </obsolete>
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    Whether or not the render frame lookup for a given webRequest event
    succeeded.
  </summary>
</histogram>

<histogram name="Extensions.WebstoreDownload.FileDownload" units="ms">
  <owner>xiaohuic@chromium.org</owner>
  <summary>
    The time spent to download the crx file from the webstore to local disk.
    This is recorded once per successful download.
  </summary>
</histogram>

<histogram name="Extensions.WebstoreDownload.InterruptReason"
    enum="InterruptReason" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The reason a webstore download was interrupted.</summary>
</histogram>

<histogram name="Extensions.WebstoreDownload.InterruptReceivedKBytes"
    units="KB" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of KBytes received for a webstore download before it was
    interrupted.
  </summary>
</histogram>

<histogram name="Extensions.WebstoreDownload.InterruptTotalKBytes" units="KB"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The total expected size in KBytes of an interrupted webstore download.
  </summary>
</histogram>

<histogram name="Extensions.WebstoreDownload.InterruptTotalSizeUnknown"
    enum="Boolean" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Tracks whether the total size of an interrupted webstore download was known.
  </summary>
</histogram>

<histogram name="Extensions.WebUi.DocumentLoadedInMainFrameTime" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The amount of time between starting the provisional load and fully loading
    the document in the main frame of the chrome://extensions page. This
    corresponds to the WebContentsObserver::DocumentLoadedInFrame method.
  </summary>
</histogram>

<histogram name="Extensions.WebUi.LoadCompletedInMainFrame" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The amount of time between starting the provisional load and having
    completed the onload handler in the main frame of the chrome://extensions
    page. This corresponds to the
    WebContentsObserver::DocumentOnLoadCompletedInMainFrame method.
  </summary>
</histogram>

<histogram name="ExtensionService.AddVerified" enum="BooleanSuccess"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Records whether adding a new/updated extension to the install verifier
    succeeded.
  </summary>
</histogram>

<histogram name="ExtensionService.VerifyAllSuccess"
    enum="ExtensionServiceVerifyAllSuccess" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The outcome of a call to ExtensionService::VerifyAllExtensions, whether it
    was called for bootstrapping or another reason (extension
    installed/uninstalled, etc.).
  </summary>
</histogram>

<histogram name="ExtensionService.ZipUnpackerDisabledReason"
    enum="ExtensionDisableReason">
  <owner>yamaguchi@google.com</owner>
  <summary>
    Records the reason why the ZIP unpacker extension was disabled when the
    service attempted to re-enable the extension upon startup. Each entry
    indicates that the extension was disabled unintentionally and a fix was
    attempted.
  </summary>
</histogram>

<histogram name="ExtensionSettings.ShouldDoVerificationCheck" enum="Boolean"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    When loading the chrome://extensions page, this records whether we decided
    to do a verification check against the server (because the user had one or
    more extensions disabled due to verification failure).
  </summary>
</histogram>

<histogram name="ExtensionToolbarModel.BrowserActionsCount">
  <owner>finnur@chromium.org</owner>
  <summary>
    The number of icons the Browser Actions Container knows about (visible or in
    the overflow bucket). Does not count icons that have been permanently hidden
    by the user. Measured once per startup per (non-incognito) profile.
  </summary>
</histogram>

<histogram name="ExtensionToolbarModel.BrowserActionsPermanentlyHidden">
  <owner>finnur@chromium.org</owner>
  <summary>
    The number of Browser Action icons the user has elected to permanently hide
    (as opposed to putting them in the overflow bucket). Measured once per
    startup per (non-incognito) profile.
  </summary>
</histogram>

<histogram name="ExtensionToolbarModel.BrowserActionsVisible">
  <owner>finnur@chromium.org</owner>
  <summary>
    The number of visible icons in the Browser Actions Container (visible as in
    number of icons not in the overflow bucket). 0 means all icons are in the
    overflow bucket. MAX_INT means the toolbar is always showing all icons.
    Measured once per startup per (non-incognito) profile but only for those
    profiles that have one or more browser actions showing in the toolbar.
  </summary>
</histogram>

<histogram name="ExtensionUrlRequest.Latency" units="ms">
  <owner>asargent@chromium.org</owner>
  <summary>The time taken to complete an extension url request.</summary>
</histogram>

<histogram name="ExtensionUrlRequest.OnReadCompleteError" enum="NetErrorCodes">
  <owner>asargent@chromium.org</owner>
  <summary>
    The error code for failures of incremental reads of a file stream for a
    chrome-extension:// URL. (See also ExtensionUrlRequest.OnReadCompleteResult
    for the success case).
  </summary>
</histogram>

<histogram name="ExtensionUrlRequest.OnReadCompleteResult">
  <owner>asargent@chromium.org</owner>
  <summary>
    The result of an incremental read of a file stream for a chrome-extension://
    URL, representing a byte count. Logged in success cases (see also
    ExtensionUrlRequest.OnReadCompleteError).
  </summary>
</histogram>

<histogram name="ExtensionUrlRequest.SeekPosition">
  <owner>asargent@chromium.org</owner>
  <summary>
    When fetching a chrome-extension:// URL, this indicates the first byte
    position we read from. This will be greater than 0 in cases such as XHR's
    with a Range header, but will normally be 0 in the typical case of reading
    the entire file. This helps identify how frequently partial file reads are
    taking place.
  </summary>
</histogram>

<histogram name="ExtensionUrlRequest.TotalKbRead" units="KB">
  <owner>asargent@chromium.org</owner>
  <summary>
    The total number of bytes read for a chrome-extension:// URL, logged when
    the job is finished (either successfully or not).
  </summary>
</histogram>

<histogram name="FactoryPingEmbargo.EndDateValidity"
    enum="FactoryPingEmbargoEndDateValidity">
  <owner>pmarko@chromium.org</owner>
  <owner>rogerta@chromium.org</owner>
  <summary>
    Record the validity of |rlz_embargo_end_date| in RW_VPD. This is recorded
    when the VPD value is accessed, which may be multiple times in the same
    chrome invocation. This is not recorded when the VPD value is missing.
  </summary>
</histogram>

<histogram name="FaultTolerantHeap" enum="FaultTolerantHeap">
  <owner>brucedawson@chromium.org</owner>
  <summary>
    Records several bits of information about whether the Windows
    FaultTolerantHeap might be enabled. This is logged (from a delayed task)
    when the browser process starts up.
  </summary>
</histogram>

<histogram name="Favicons.CandidatesCount">
  <obsolete>
    Deprecated as of 12/2017.
  </obsolete>
  <owner>fhorschig@chromium.org</owner>
  <summary>
    Records the number of favicon link tags on a page once the page has finished
    loading. The count includes the automatically added favicon.ico entry.
  </summary>
</histogram>

<histogram name="Favicons.CandidatesWithDefinedSizesCount">
  <obsolete>
    Deprecated as of 12/2017.
  </obsolete>
  <owner>fhorschig@chromium.org</owner>
  <summary>
    Records the number of favicon link tags with a non empty sizes attribute
    once the page has finished loading.
  </summary>
</histogram>

<histogram name="Favicons.CandidatesWithTouchIconsCount">
  <obsolete>
    Deprecated as of 12/2017.
  </obsolete>
  <owner>fhorschig@chromium.org</owner>
  <summary>
    Records the number of apple-touch-icon and apple-touch-icon-precomposed link
    tags once the page has finished loading.
  </summary>
</histogram>

<histogram base="true" name="Favicons.DownloadAttempts" units="attempts">
  <obsolete>
    Deprecated as of 12/2017.
  </obsolete>
  <owner>fhorschig@chromium.org</owner>
  <summary>
    Records the number of icons requested until the best-fitting candidate was
    found or there were no candidates left to check. More than 15 attempts are
    unlikely and will be stored in overflow bucket 16. Less than 1 attempt means
    an error happened; these cases are in bucket 0.
  </summary>
</histogram>

<histogram name="Favicons.DownloadOutcome" enum="FaviconDownloadStatus">
  <obsolete>
    Deprecated as of 12/2017.
  </obsolete>
  <owner>fhorschig@chromium.org</owner>
  <summary>
    Records whether a download succeeded, failed or was skipped because it has
    failed previously.
  </summary>
</histogram>

<histogram name="Favicons.LargeIconService.BlacklistedURLMismatch"
    units="BooleanError">
  <owner>mastiz@chromium.org</owner>
  <summary>
    Records the number of large icons that were fetched from the local cache
    (e.g. during NTP impression), where the URL (of the page or the icon)
    matches a hardcoded blacklist. Suspicious mismatches are reported as errors.
  </summary>
</histogram>

<histogram name="Favicons.LargeIconService.DownloadedSize" units="pixels">
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Records the size (concretely the width) in pixel of the favicon downloaded
    from Google favicon server (size 0 denotes that download has failed).
  </summary>
</histogram>

<histogram name="Favicons.LargeIconService.FallbackSize" units="pixels">
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Records the size (concretely the width) in pixel of the favicon that is used
    to generate a fallback style in the case when large enough favicon is not
    available (size 0 denotes that no favicon is available at all).
  </summary>
</histogram>

<histogram name="Feed.Scheduler.RefreshTrigger" enum="RefreshTrigger"
    expires_after="2019-07-11">
  <owner>skym@chromium.org</owner>
  <summary>
    The scheduler watches for various triggers, which cause it to decide if a
    refresh is currently warranted or not. This histogram is emitted when a
    trigger causes a refresh.
  </summary>
</histogram>

<histogram name="Feed.Scheduler.RequestBehavior" enum="RequestBehavior"
    expires_after="2019-07-11">
  <owner>skym@chromium.org</owner>
  <summary>
    When NTP is opened, the scheduler host tells the Feed library how to act, if
    the existing content should be shown, immediately or with timeout, and if a
    refresh request should be started.
  </summary>
</histogram>

<histogram name="Feedback.RequestSource" enum="FeedbackSource">
  <owner>afakhry@chromium.org</owner>
  <summary>Records the source that requested showing the feedback app.</summary>
</histogram>

<histogram name="FileBrowser.ChangeDirectory.RootType"
    enum="FileManagerRootType">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS File Browser: Counts the number of directory-changed events,
    bucketed by the RootType of the directory newly displayed.
  </summary>
</histogram>

<histogram name="FileBrowser.CloudImport.UserAction"
    enum="CloudImportUserAction">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS File Browser - Specific actions taken by user such initiating
    cloud import, canceling import, selecting a directory, or opting-in to
    Drive&gt;Photos sync.
  </summary>
</histogram>

<histogram name="FileBrowser.Create" enum="FileDialogType">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>Chrome OS File Browser opening mode.</summary>
</histogram>

<histogram name="FileBrowser.DirectoryScan" units="ms">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS File Browser: time to scan a directory. Measured on every File
    Browser directory change.
  </summary>
</histogram>

<histogram name="FileBrowser.DownloadDestination.IsGoogleDrive.Changed"
    enum="BooleanEnabled">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Tracks whether download destination is set to a Google Drive folder when the
    download destination is changed by the user in the settings page.
  </summary>
</histogram>

<histogram name="FileBrowser.DownloadDestination.IsGoogleDrive.Started"
    enum="BooleanEnabled">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Tracks whether download destination is set to a Google Drive folder on
    startup.
  </summary>
</histogram>

<histogram name="FileBrowser.DownloadsCount">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS File Browser: number of files and directories in the Downloads
    directory (not including the contents of nested directories). Computed every
    time the File Browser current directory changes to Downloads.
  </summary>
</histogram>

<histogram name="FileBrowser.FolderShortcut.Add">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS File Browser: this is recorded when the user adds a folder
    shortcut.
  </summary>
</histogram>

<histogram name="FileBrowser.FolderShortcut.Count">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS File Browser: number of saved folder shorcuts. This is recorded
    when the Files app is launched.
  </summary>
</histogram>

<histogram name="FileBrowser.FolderShortcut.Navigate">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS File Browser: this is recorded when the user clicks or selects a
    folder shortcut and is navigated to the target folder.
  </summary>
</histogram>

<histogram name="FileBrowser.FolderShortcut.Remove">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS File Browser: this is recorded when the user removes a folder
    shortcut.
  </summary>
</histogram>

<histogram name="FileBrowser.HardUnpluggedAroundSuspend.TimeSinceResume"
    units="ms">
  <obsolete>
    The bug which the UMA was investigating got fixed.
  </obsolete>
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS File Browser: time from the SuspendDone event to the DiskRemoved
    event. The UMA is added temporarily for crbug.com/433734.
  </summary>
</histogram>

<histogram name="FileBrowser.HardUnpluggedAroundSuspend.TimeUntilSuspend"
    units="ms">
  <obsolete>
    The bug which the UMA was investigating got fixed.
  </obsolete>
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS File Browser: time from the DiskRemoved event to the Suspend
    event. The UMA is added temporarily for crbug.com/433734.
  </summary>
</histogram>

<histogram name="FileBrowser.Load" units="ms">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS File Browser is an built-in extension without a background page.
    Its main.html file is loaded every time the user opens a File Browser tab or
    a file chooser dialog. The file is fairly large and the initialization is
    pretty expensive.
  </summary>
</histogram>

<histogram name="FileBrowser.Location.OnEntryExpandedOrCollapsed.NonTopLevel"
    enum="FileManagerRootType">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS Files App: The locations (root types) of non-top-level entries
    when they are expanded or collapsed (expand icon clicked) in the directory
    tree.
  </summary>
</histogram>

<histogram name="FileBrowser.Location.OnEntryExpandedOrCollapsed.TopLevel"
    enum="FileManagerRootType">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS Files App: The locations (root types) of top-level entries (root
    entries) when they are expanded or collapsed (expand icon clicked) in the
    directory tree.
  </summary>
</histogram>

<histogram name="FileBrowser.Location.OnEntrySelected.NonTopLevel"
    enum="FileManagerRootType">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS Files App: The locations (root types) of non-top-level entries
    when they are clicked in the directory tree.
  </summary>
</histogram>

<histogram name="FileBrowser.Location.OnEntrySelected.TopLevel"
    enum="FileManagerRootType">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS Files App: The locations (root types) of top-level entries (root
    entries) when they are clicked in the directory tree.
  </summary>
</histogram>

<histogram name="FileBrowser.MenuItemSelected" enum="FileManagerMenuCommands">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS Files App: The commands selected in the menu by the files app.
  </summary>
</histogram>

<histogram name="FileBrowser.MountCrostiniContainer" units="ms"
    expires_after="2019-05-30">
  <owner>joelhockey@google.com</owner>
  <owner>sashab@google.com</owner>
  <summary>
    Chrome OS File Browser: time to start and mount the crostini container in
    order to show Linux Files.
  </summary>
</histogram>

<histogram name="FileBrowser.OpenFiles.RootType" enum="FileManagerRootType">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS File Browser: The locations (root types) of files which are opened
    by the file picker.
  </summary>
</histogram>

<histogram name="FileBrowser.OpeningFileType" enum="FileType">
  <obsolete>
    Deprecated 4/2013, and replaced by FileBrowser.ViewingFileType.
  </obsolete>
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>File types that were tried to be opened through browser.</summary>
</histogram>

<histogram name="FileBrowser.PhotoEditor.DisplayTime" units="ms">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS Photo Editor: time to display an image. Measured from the moment
    the user selected the image till the moment it is displayed (not counting
    the low resolution preview).
  </summary>
</histogram>

<histogram name="FileBrowser.PhotoEditor.FileType" enum="PhotoEditorFileType">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>Chrome OS Photo Editor: the type of the file opened.</summary>
</histogram>

<histogram name="FileBrowser.PhotoEditor.LoadMode" enum="PhotoEditorLoadMode">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>Chrome OS Photo Editor: the way the image has been loaded.</summary>
</histogram>

<histogram name="FileBrowser.PhotoEditor.LoadTime" units="ms">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>Chrome OS Photo Editor: time to load an image from a file.</summary>
</histogram>

<histogram name="FileBrowser.PhotoEditor.SaveResult"
    enum="PhotoEditorSaveResult">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS Photo Editor: the result of a file save operation.
  </summary>
</histogram>

<histogram name="FileBrowser.PhotoEditor.SaveTime" units="ms">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>Chrome OS Photo Editor: time to save an image to a file.</summary>
</histogram>

<histogram name="FileBrowser.PhotoEditor.Size.MB" units="MBytes">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS Photo Editor: size of an image file in megabytes. Measured on
    every image load.
  </summary>
</histogram>

<histogram name="FileBrowser.PhotoEditor.Size.MPix" units="MPixels">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS Photo Editor: size of an image in megapixels. Measured on every
    image load.
  </summary>
</histogram>

<histogram name="FileBrowser.PhotoEditor.Tool" enum="PhotoEditorToolType">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>Chrome OS Photo Editor: the button which the user clicked.</summary>
</histogram>

<histogram name="FileBrowser.PhotoImport.Action" enum="ExternalDeviceAction">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS Photo Import flow: action chosen in the Action Choice dialog for
    the external device.
  </summary>
</histogram>

<histogram name="FileBrowser.PhotoImport.ImportCount">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS Photo Import flow: the number of photos imported. Measured on
    every successfull import operation.
  </summary>
</histogram>

<histogram name="FileBrowser.PhotoImport.ImportPercentage" units="%">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS Photo Import flow: the percent of photos imported among all the
    photos on the device. Measured on every successfull import operation.
  </summary>
</histogram>

<histogram name="FileBrowser.PhotoImport.Load" units="ms">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS Photo Import flow: time to load the action dialog. Measured
    between the moment window appears and the moment user see all available
    actions for the device.
  </summary>
</histogram>

<histogram name="FileBrowser.PhotoImport.Scan" units="ms">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS Photo Import flow: time to scan the external device.
  </summary>
</histogram>

<histogram name="FileBrowser.QuickView.DialogType" enum="FileDialogType">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    File dialog type (e.g. Full page, Save as file) when quick view is launched.
  </summary>
</histogram>

<histogram name="FileBrowser.QuickView.FileType" enum="ViewFileType">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>File types that were tried to be opened with quick view.</summary>
</histogram>

<histogram name="FileBrowser.QuickView.FileTypeOnLaunch" enum="ViewFileType">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>File types that were selected when quick view is launched.</summary>
</histogram>

<histogram name="FileBrowser.QuickView.VolumeType" enum="FileManagerVolumeType">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>The volume type where quick view is opened.</summary>
</histogram>

<histogram name="FileBrowser.QuickView.WayToOpen"
    enum="FileManagerQuickViewWayToOpen">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>How quick view was opened.</summary>
</histogram>

<histogram name="FileBrowser.Recent.LoadArcMedia" units="ms">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Time to load a recently modified file list from Media Views. It is triggered
    when the user opens or reloads Recent view in the Files app.
  </summary>
</histogram>

<histogram name="FileBrowser.Recent.LoadDownloads" units="ms">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Time to load a recently modified file list from Downloads. It is triggered
    when the user opens or reloads Recent view in the Files app.
  </summary>
</histogram>

<histogram name="FileBrowser.Recent.LoadDrive" units="ms">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Time to load a recently modified file list from Drive. It is triggered when
    the user opens or reloads Recent view in the Files app.
  </summary>
</histogram>

<histogram name="FileBrowser.Recent.LoadTotal" units="ms">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Time to load a recently modified file list from all sources. It is triggered
    when the user opens or reloads Recent view in the Files app.
  </summary>
</histogram>

<histogram name="FileBrowser.SuggestApps.CloseDialog"
    enum="SuggestAppsDialogCloseReason">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS File Browser: the reason why the suggest apps dialog was closed.
  </summary>
</histogram>

<histogram name="FileBrowser.SuggestApps.Install"
    enum="SuggestAppsDialogInstall">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS File Browser: whether the Webstore item user selected was
    successfully installed or not.
  </summary>
</histogram>

<histogram name="FileBrowser.SuggestApps.Load" enum="SuggestAppsDialogLoad">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS File Browser: whether the initialization of the dialog succeeded
    or not.
  </summary>
</histogram>

<histogram name="FileBrowser.SuggestApps.LoadTime" units="ms">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS File Browser: time to load the suggest apps dialog. Measured
    between the moment window appears and the moment all the contents in the
    dialog including the Chrome Webstore widget are ready.
  </summary>
</histogram>

<histogram name="FileBrowser.TeamDrivesCount" units="Team Drives"
    expires_after="M75">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS File Browser: number of Team Drives a user has available in the
    Files app. Computed every time the File Browser is opened (including file
    picker dialogs). NOTE: This data is biased towards users that use the Files
    App more often.
  </summary>
</histogram>

<histogram name="FileBrowser.ToggleFileListType" enum="FileManagerListType">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS Files App: Recorded when the Grid View/List View toggle menu icon
    is selected.
  </summary>
</histogram>

<histogram name="FileBrowser.ViewingFileType" enum="ViewFileType">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    File types that were tried to be viewed through browser. This is recorded
    when the user tries to view a file from the Files app.
  </summary>
</histogram>

<histogram name="FileBrowser.ViewingRootType" enum="FileManagerRootType">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS File Browser: The locations (root types) of files which are opened
    in stand-alone mode. This does not include files opened in file picker mode.
  </summary>
</histogram>

<histogram name="FileBrowser.ViewingTaskType" enum="FileManagerTaskType">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS File Browser: The type of the handler to be used to open files.
  </summary>
</histogram>

<histogram name="FileBrowser.VolumeType" enum="FileManagerVolumeType">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS File Browser: counts the number of times volumes are mounted for
    each volume type.
  </summary>
</histogram>

<histogram name="FileBrowser.ZipFileTask" enum="FileManagerZipHandlerType">
  <owner>sashab@chromium.org</owner>
  <owner>slangley@chromium.org</owner>
  <summary>
    Chrome OS File Browser: counts the number of times ZIP file was opened or
    created, categorized by component extensions and its operation types.
  </summary>
</histogram>

<histogram name="FileReaderSync.WorkerType" enum="FileReaderSyncWorkerType">
  <owner>mek@chromium.org</owner>
  <summary>
    For each FileReaderSync instance records the type of the web worker that
    created the instance.
  </summary>
</histogram>

<histogram name="FileSystem.DirectoryDatabaseInit"
    enum="FileSystemDatabaseInitResult">
  <owner>tzik@chromium.org</owner>
  <summary>The result of FileSystemDirectoryDatabase initialization.</summary>
</histogram>

<histogram name="FileSystem.DirectoryDatabaseRepair"
    enum="DirectoryDatabaseRepairResult">
  <owner>tzik@chromium.org</owner>
  <summary>The result of FileSystemDirectoryDatabase repair.</summary>
</histogram>

<histogram name="FileSystem.OpenFileSystem" enum="OpenFileSystemResult">
  <owner>tzik@chromium.org</owner>
  <summary>
    The success or the cause of failure for each call to OpenFileSystem().
  </summary>
</histogram>

<histogram name="FileSystem.OpenFileSystemDetail" enum="FileSystemErrors">
  <owner>tzik@chromium.org</owner>
  <summary>The result of opening a filesystem.</summary>
</histogram>

<histogram name="FileSystem.OpenFileSystemDetailNonthrottled"
    enum="FileSystemErrors">
  <owner>tzik@chromium.org</owner>
  <summary>The result of opening a non-throttled filesystem.</summary>
</histogram>

<histogram name="FileSystem.OriginDatabaseInit"
    enum="FileSystemDatabaseInitResult">
  <owner>tzik@chromium.org</owner>
  <summary>The result of FileSystemOriginDatabase initialization.</summary>
</histogram>

<histogram name="FileSystem.OriginFailedCanCommitURL" enum="BooleanHit">
  <owner>nick@chromium.org</owner>
  <summary>
    Logged when we fail the permission validation of the filesystem URL origin,
    from ChildProcessSecurityPolicy::HasPermissionsForFileSystemFile. This is
    not expected to happen in normal operation.
  </summary>
</histogram>

<histogram name="FileSystem.PersistentOriginsCount" expires_after="2018-08-30">
  <owner>tzik@chromium.org</owner>
  <summary>
    Number of origins that have persistent filesystem. Measured when the Quota
    system queries the filesystem subsystem about its entire usage, which
    usually happens when one of the storage subsystem methods is called for the
    first time.
  </summary>
</histogram>

<histogram name="FileSystem.TemporaryOriginsCount" expires_after="2018-08-30">
  <owner>tzik@chromium.org</owner>
  <summary>
    Number of origins that have temporary filesystem. Measured when the Quota
    system queries the filesystem subsystem about its entire usage, which
    usually happens when one of the storage subsystem methods is called for the
    first time.
  </summary>
</histogram>

<histogram name="FirstRun.LaunchSource" enum="FirstRunLaunchSource">
  <owner>olivierrobin@chromium.org</owner>
  <summary>
    Counts the number of times First Run experience was triggered by another
    application launching Chrome. This metric measures the effectiveness of
    Smart App Banner promotions on installation of Chrome.
  </summary>
</histogram>

<histogram name="FirstRun.NewUserExperience.GoogleAppsInteraction"
    enum="NuxGoogleAppsInteractions">
  <owner>hcarmona@chromium.org</owner>
  <summary>
    This histogram records when a user interacted with the Google Apps new user
    experience. We record both accept and reject but are not recording when a
    user ignored the prompt completely. Users can ignore this prompt by closing
    the tab or navigating away, we record when the prompt is shown.
  </summary>
</histogram>

<histogram name="FirstRun.NewUserExperience.GoogleAppsSelection"
    enum="NuxGoogleAppsSelections">
  <owner>hcarmona@chromium.org</owner>
  <summary>
    This histogram records what Google apps were selected as part of the Google
    Apps New User Experience. Histogram is only recorded when a user accepts the
    prompt to add Google Apps.
  </summary>
</histogram>

<histogram name="FirstRun.Sentinel.Created" enum="FirstRunSentinelResult">
  <owner>jlebel@chromium.org</owner>
  <summary>Result of sentinel file has been written.</summary>
</histogram>

<histogram name="FirstRun.Sentinel.CreatedFileError" enum="PlatformFileError">
  <owner>jlebel@chromium.org</owner>
  <summary>File error when the sentinel file was not written.</summary>
</histogram>

<histogram name="FirstRun.SignIn" enum="FirstRunSignInResult">
  <owner>msarda@chromium.org</owner>
  <summary>Result of the sign in flow during Mobile first run.</summary>
</histogram>

<histogram name="FirstUserAction.BackgroundTime" units="minutes">
<!-- Name completed by histogram_suffixes name="FirstUserActionType" and name="FirstUserActionTypeDevice" -->

  <owner>pkl@chromium.org</owner>
  <summary>
    WARNING: The list of actions used to identify new tasks hasn't been
    attentively updated for several years (as of 2017).  Some actions that
    should likely be considered new tasks are probably missing.  Take this
    histogram with a grain of salt.

    The amount of time (in seconds) that the app was in the background before
    the user started it
  </summary>
</histogram>

<histogram base="true" name="FirstUserAction.BackgroundTime.MainIntent"
    units="minutes">
  <owner>tedchoc@chromium.org</owner>
  <summary>
    The amount of time (in minutes) that the app was in the background before
    the user started it (via an ACTION_MAIN intent) and performed a user action
    that describes the intent of resuming the app.  Only recorded if the action
    took place within the first 10 seconds of starting Chrome.  The actions are
    further described in the FirstUserActionTypes suffix.
  </summary>
</histogram>

<histogram name="FirstUserAction.HandsetUserActionType"
    enum="FirstUserActionType">
  <owner>pkl@chromium.org</owner>
  <summary>
    WARNING: The list of actions used to identify new tasks hasn't been
    attentively updated for several years (as of 2017).  Some actions that
    should likely be considered new tasks are probably missing.  Take this
    histogram with a grain of salt.

    On handsets, the type of the first user action performed after the app was
    started or unbackgrounded.
  </summary>
</histogram>

<histogram name="FirstUserAction.TabletUserActionType"
    enum="FirstUserActionType">
  <owner>pkl@chromium.org</owner>
  <summary>
    WARNING: The list of actions used to identify new tasks hasn't been
    attentively updated for several years (as of 2017).  Some actions that
    should likely be considered new tasks are probably missing.  Take this
    histogram with a grain of salt.

    On tablets, the type of the first user action performed after the app was
    started or unbackgrounded.
  </summary>
</histogram>

<histogram name="GCM.AndroidGcmReceiverError" enum="GcmReceiverStatus">
  <obsolete>
    Deprecated as of 01/2016. The error has been fixed by GCM. (crbug/580367)
  </obsolete>
  <owner>khushalsagar@chromium.org</owner>
  <summary>Result of a message received by the GcmReceiver on Android.</summary>
</histogram>

<histogram name="GCM.APICallUnregister">
  <owner>jianli@chromium.org</owner>
  <summary>Number of times when gcm.unregister API is called.</summary>
</histogram>

<histogram name="GCM.CheckinCompleteTime" units="ms">
  <owner>jianli@chromium.org</owner>
  <summary>
    Length of time taken to complete a GCM checkin request successfully. If the
    checkin is retried multiple times, the length of time is counted for the
    last successful retry.
  </summary>
</histogram>

<histogram name="GCM.CheckinRequestStatus" enum="GCMCheckinRequestStatus">
  <owner>juyik@chromium.org</owner>
  <summary>Status code of the outcome of a GCM checkin request.</summary>
</histogram>

<histogram name="GCM.CheckinRetryCount">
  <owner>jianli@chromium.org</owner>
  <summary>Number of retries before a GCM checkin succeeds.</summary>
</histogram>

<histogram name="GCM.ConnectedViaProxy" enum="Boolean">
  <obsolete>
    Deprecated as of 03/2018 (M67).
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Whether the GCM connection was made via a proxy or not.</summary>
</histogram>

<histogram name="GCM.ConnectionDisconnectErrorCode"
    enum="CombinedHttpResponseAndNetErrorCode">
  <owner>zea@chromium.org</owner>
  <summary>URL response and error codes from GCM disconnect events.</summary>
</histogram>

<histogram name="GCM.ConnectionEndpoint" enum="GCMEndpoints"
    expires_after="2018-08-30">
  <owner>zea@chromium.org</owner>
  <summary>Number of connections made to each specific MCS endpoint.</summary>
</histogram>

<histogram name="GCM.ConnectionFailureErrorCode"
    enum="CombinedHttpResponseAndNetErrorCode" expires_after="2018-08-30">
  <owner>zea@chromium.org</owner>
  <summary>URL response and error codes from GCM connection attempts.</summary>
</histogram>

<histogram name="GCM.ConnectionLatency" units="ms">
  <owner>juyik@chromium.org</owner>
  <summary>
    The time between the initiation of a connection and the successful
    completion of it.
  </summary>
</histogram>

<histogram name="GCM.ConnectionResetReason" enum="GCMConnectionResetReason"
    expires_after="2018-08-30">
  <owner>zea@chromium.org</owner>
  <summary>Reasons for GCM connection resets.</summary>
</histogram>

<histogram name="GCM.ConnectionSuccessRate" enum="BooleanSuccess"
    expires_after="2018-08-30">
  <owner>zea@chromium.org</owner>
  <summary>
    GCM connection success rate. Does not take into account login success. See
    GCM.ConnectionFailureErrorCode for a breakdown of connection failure
    reasons.
  </summary>
</histogram>

<histogram name="GCM.ConnectionUpTime" units="ms" expires_after="2018-08-30">
  <owner>zea@chromium.org</owner>
  <summary>
    Time (from login until reset) that a GCM connection was active.
  </summary>
</histogram>

<histogram name="GCM.Crypto.CreateKeySuccessRate" enum="BooleanSuccess">
  <owner>peter@chromium.org</owner>
  <summary>
    Success rate of writing new keying material to the GCM key store.
  </summary>
</histogram>

<histogram name="GCM.Crypto.DecryptMessageResult" enum="GCMDecryptionResult">
  <owner>peter@chromium.org</owner>
  <summary>
    Result of decryption on a received GCM message, which includes unencrypted
    messages, successfully decrypted messages and decryption failures.
  </summary>
</histogram>

<histogram name="GCM.Crypto.GCMDatabaseUpgradeResult" enum="Boolean">
  <owner>nator@chromium.org</owner>
  <summary>
    Result of upgrading GCM Key Store Database from deprecated format to current
    format. We upgrade the GCM Key store when it first initialized, if it
    contains any EncryptionData object with a KeyPair in it, and then record
    whether the upgrade was successful in this metric.
  </summary>
</histogram>

<histogram name="GCM.Crypto.GetKeySuccessRate" enum="BooleanSuccess">
  <owner>peter@chromium.org</owner>
  <summary>
    Success rate of reading keying material from the GCM key store.
  </summary>
</histogram>

<histogram name="GCM.Crypto.InitKeyStoreSuccessRate" enum="BooleanSuccess">
  <owner>peter@chromium.org</owner>
  <summary>
    Success rate of initializing the LevelDB back-end of the GCM key store.
  </summary>
</histogram>

<histogram name="GCM.Crypto.LoadKeyStoreSuccessRate" enum="BooleanSuccess">
  <owner>peter@chromium.org</owner>
  <summary>
    Success rate of loading existing keying material in the GCM key store.
  </summary>
</histogram>

<histogram name="GCM.Crypto.RemoveKeySuccessRate" enum="BooleanSuccess">
  <owner>peter@chromium.org</owner>
  <summary>
    Success rate of removing keying material from the GCM key store.
  </summary>
</histogram>

<histogram name="GCM.Database.Open" enum="LevelDBStatus">
  <owner>cmumford@chromium.org</owner>
  <summary>The result of a database open attempt by the GCM store.</summary>
</histogram>

<histogram name="GCM.DataMessageBurstReceivedInterval" units="ms">
  <owner>juyik@chromium.org</owner>
  <summary>
    Interval between two successive received data message bursts.
  </summary>
</histogram>

<histogram name="GCM.DataMessageReceived" enum="BooleanReceived">
  <owner>peter@chromium.org</owner>
  <summary>
    Number of DATA_MESSAGE messages received from Google Cloud Messaging for
    which a matching registration exists. Recorded when processing the received
    message. Prior to M56 this also counted received DELETED_MESSAGES messages
    (whether or not a registration existed).
  </summary>
</histogram>

<histogram name="GCM.DataMessageReceivedHasCollapseKey"
    enum="BooleanHasCollapseKey">
  <owner>peter@chromium.org</owner>
  <summary>
    Records whether a non-empty collapse_key token is set for each received
    DATA_MESSAGE message from Google Cloud Messaging for which a matching
    registration exists. Recorded while processing the received message.
  </summary>
</histogram>

<histogram name="GCM.DataMessageReceivedHasRegisteredApp"
    enum="BooleanRegistered">
  <obsolete>
    No longer used starting with Chrome 61 as the check was removed.
  </obsolete>
  <owner>peter@chromium.org</owner>
  <summary>
    Records whether a matching registration was found for each received
    DATA_MESSAGE message from Google Cloud Messaging. Recorded while processing
    the received message. Prior to M56 this also counted received
    DELETED_MESSAGES messages.
  </summary>
</histogram>

<histogram name="GCM.DeletedMessagesReceived" units="messages">
  <owner>peter@chromium.org</owner>
  <summary>
    For every DELETED_MESSAGES message received from Google Cloud Messaging
    (whether or not a matching registration exists), this records the provided
    count of how many messages were simultaneously deleted, or zero if the count
    is unknown.
  </summary>
</histogram>

<histogram name="GCM.FirstReceivedDataMessageLatencyAfterConnection" units="ms">
  <owner>juyik@chromium.org</owner>
  <summary>
    The time between the successful completion of the connection and the arrival
    of the first data message.
  </summary>
</histogram>

<histogram name="GCM.HeartbeatMissedDelta" units="ms"
    expires_after="2018-08-30">
  <owner>zea@chromium.org</owner>
  <summary>
    If a heartbeat was missed, the time delta by which it was missed (in system
    time, not ticks).
  </summary>
</histogram>

<histogram name="GCM.IncomingSendErrors" units="messages">
  <owner>peter@chromium.org</owner>
  <summary>
    Number of SEND_ERROR messages received from Google Cloud Messaging. Recorded
    when processing the received message.
  </summary>
</histogram>

<histogram name="GCM.LoadStatus" enum="GCMLoadStatus">
  <owner>jianli@chromium.org</owner>
  <summary>Status code of loading from the persistent GCM store.</summary>
</histogram>

<histogram name="GCM.LoadSucceeded" enum="BooleanSuccess">
  <obsolete>
    Deprecated as of 2/2015.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Success indicates successfully loading an initialized persistent GCM store
    at startup time. Failure indicates a failure loading the store.
  </summary>
</histogram>

<histogram name="GCM.NumThrottledApps">
  <owner>zea@chromium.org</owner>
  <summary>
    Number of applications hitting GCM per-app outstanding message limits at
    startup time.
  </summary>
</histogram>

<histogram name="GCM.NumUsers">
  <obsolete>
    Deprecated as of 3/2014.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Number of GCM users associated with this client at startup time.
  </summary>
</histogram>

<histogram name="GCM.OutgoingMessageTTL" enum="GCMOutgoingMessageTTLCategory">
  <owner>jianli@chromium.org</owner>
  <summary>
    Category of TTL specified in the outgoing message: 0, less than or equal to
    1 minute, less than or equal to 1 hour and etc.
  </summary>
</histogram>

<histogram name="GCM.PendingConnectionEventsAtShutdown" units="events">
  <owner>peter@chromium.org</owner>
  <summary>
    Number of connection events which have not been sent to GCM. This is
    recorded only at the time of shutdown to capture the events which are being
    lost due to shutdown. Because this is recorded at shutdown, this is not
    guaranteed to be complete and should be treated as a best effort record.
  </summary>
</histogram>

<histogram name="GCM.ReceivedDataMessageBurstSize" units="messages">
  <owner>juyik@chromium.org</owner>
  <summary>Number of messages in a received GCM data message burst.</summary>
</histogram>

<histogram name="GCM.ReceivedDataMessageIntervalWithinBurst" units="ms">
  <owner>juyik@chromium.org</owner>
  <summary>
    Interval between messages within a received GCM data message burst.
  </summary>
</histogram>

<histogram name="GCM.RegistrationCacheStatus" enum="GCMRegistrationCacheStatus">
  <owner>nator@chromium.org</owner>
  <summary>
    Reports the status of cached GCM registration. This is recorded when a new
    registration request is considered on the GCM client.
  </summary>
</histogram>

<histogram name="GCM.RegistrationCompleteTime" units="ms">
  <owner>jianli@chromium.org</owner>
  <summary>
    Length of time taken to complete a GCM registration request successfully. If
    the registration is retried multiple times, the length of time is counted
    for the last successful retry.
  </summary>
</histogram>

<histogram name="GCM.RegistrationRequest" units="requests">
  <owner>peter@chromium.org</owner>
  <summary>
    Number of registration requests sent to Google Cloud Messaging. Recorded
    immediately after the request has started.
  </summary>
</histogram>

<histogram name="GCM.RegistrationRequestStatus"
    enum="GCMRegistrationRequestStatus">
  <owner>juyik@chromium.org</owner>
  <summary>
    Status code of the outcome of a GCM registration request. The Unknown error
    case was split up in M56 (merged mid-beta to M55) to separate out the
    Response parsing failed, Internal server error, Quota exceeded, and Device
    has too many registrations cases.
  </summary>
</histogram>

<histogram name="GCM.RegistrationRetryCount">
  <owner>jianli@chromium.org</owner>
  <summary>Number of retries before a GCM registration succeeds.</summary>
</histogram>

<histogram name="GCM.RegistrationSenderIdCount">
  <owner>jianli@chromium.org</owner>
  <summary>Number of sender IDs specified in a registration request.</summary>
</histogram>

<histogram name="GCM.ResetStore" enum="GCMResetStoreError">
  <obsolete>
    Deprecated in M56 in favor of GCM.ResetStoreError
  </obsolete>
  <owner>jianli@chromium.org</owner>
  <summary>
    Reports the problem encountered when resetting the GCM store.
  </summary>
</histogram>

<histogram name="GCM.ResetStoreError" enum="GCMResetStoreError">
  <owner>zea@chromium.org</owner>
  <summary>
    Reports the problem encountered when resetting the GCM store.
  </summary>
</histogram>

<histogram name="GCM.RestoredIncomingMessages" expires_after="2018-08-30">
  <owner>zea@chromium.org</owner>
  <summary>
    Number of unacknowledged incoming messages restored from the persistent
    store at startup.
  </summary>
</histogram>

<histogram name="GCM.RestoredOutgoingMessages" expires_after="2018-08-30">
  <owner>zea@chromium.org</owner>
  <summary>
    Number of pending outgoing messages restored from the persistent store at
    startup.
  </summary>
</histogram>

<histogram name="GCM.RestoredRegistrations">
  <owner>jianli@chromium.org</owner>
  <summary>
    Number of registrations restored from the persistent store at startup.
  </summary>
</histogram>

<histogram name="GCM.SendMessageStatus" enum="GCMSendMessageStatus">
  <owner>peter@chromium.org</owner>
  <summary>
    Result of sending an upstream message through Google Cloud Messaging.
    Recorded when the message has either been queued, sent, or has been dropped
    because it expired or an error happened.
  </summary>
</histogram>

<histogram name="GCM.StoreDestroySucceeded" enum="BooleanSuccess">
  <owner>zea@chromium.org</owner>
  <summary>
    Success indicates successfully destroying the GCM persistent store. Failure
    indicates a failure destroying the persistence store. GCM store will be
    destroyed when the profile has been signed out.
  </summary>
</histogram>

<histogram name="GCM.StoreSizeKB" units="KB" expires_after="2018-08-30">
  <owner>zea@chromium.org</owner>
  <summary>Size of the GCM persistent store in kilobytes at startup.</summary>
</histogram>

<histogram name="GCM.StoreUpdateSucceeded" enum="BooleanSuccess"
    expires_after="2018-08-30">
  <owner>zea@chromium.org</owner>
  <summary>
    Success indicates successfully updating the GCM persistent store on message
    update. Failure indicates a failure updating the persistence store.
  </summary>
</histogram>

<histogram name="GCM.SuspendTime" units="ms" expires_after="2018-08-30">
  <owner>zea@chromium.org</owner>
  <summary>Time elapsed from machine suspend until resume.</summary>
</histogram>

<histogram name="GCM.UnregistrationCompleteTime" units="ms">
  <owner>jianli@chromium.org</owner>
  <summary>
    Length of time taken to complete a GCM unregistration request successfully.
    If the unregistration is retried multiple times, the length of time is
    counted for the last successful retry.
  </summary>
</histogram>

<histogram name="GCM.UnregistrationRequest" units="requests">
  <owner>peter@chromium.org</owner>
  <summary>
    Number of unregistration requests sent to Google Cloud Messaging. Recorded
    immediately after the request has started.
  </summary>
</histogram>

<histogram name="GCM.UnregistrationRequestStatus"
    enum="GCMUnregistrationRequestStatus">
  <owner>juyik@chromium.org</owner>
  <summary>Status code of the outcome of a GCM unregistration request.</summary>
</histogram>

<histogram name="GCM.UnregistrationRetryCount">
  <owner>jianli@chromium.org</owner>
  <summary>Number of retries before a GCM unregistration succeeds.</summary>
</histogram>

<histogram name="GCM.UserSignedIn" enum="Boolean">
  <owner>jianli@chromium.org</owner>
  <summary>
    Indicates whether the user was signed in when GCM started up.
  </summary>
</histogram>

<histogram name="GCMInvalidations.IncomingMessageStatus"
    enum="GCMInvalidationsIncomingMessageStatus">
  <owner>pavely@chromium.org</owner>
  <summary>
    Status of parsing incoming invalidations message from GCM channel.
  </summary>
</histogram>

<histogram name="GCMInvalidations.OutgoingMessageStatus"
    enum="GCMInvalidationsOutgoingMessageStatus">
  <owner>pavely@chromium.org</owner>
  <summary>
    Status of sending outgoing invalidations message through GCM.
  </summary>
</histogram>

<histogram name="GData.AuthSuccess" enum="GDataAuthResult"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Result of the authentication for Drive.</summary>
</histogram>

<histogram name="GData.EntireFeedLoadTime" units="microseconds">
  <obsolete>
    Deprecated 9/2012, and replaced by Drive.EntireFeedLoadTime
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time spent to load the entire file system information from the server
  </summary>
</histogram>

<histogram name="GData.EntryKind" enum="GDataEntryKind">
  <obsolete>
    Deprecated 9/2012, and replaced by Drive.EntryKind
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Provides breakdown of specific formats for hosted documents. Recorded when
    feed is loaded from the server.
  </summary>
</histogram>

<histogram name="GData.InitialFeedLoadTime" units="microseconds">
  <obsolete>
    Deprecated 9/2012, and replaced by Drive.InitialFeedLoadTime
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time spent to load the initial part of the file system information from the
    server
  </summary>
</histogram>

<histogram name="GData.NumberOfHostedDocuments">
  <obsolete>
    Deprecated 9/2012, and replaced by Drive.NumberOfHostedDocuments
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Number of hosted documents (spreadsheets etc.) on Drive. Logged when Drive
    is first accessed.
  </summary>
</histogram>

<histogram name="GData.NumberOfRegularFiles">
  <obsolete>
    Deprecated 9/2012, and replaced by Drive.NumberOfRegularFiles
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Number of regualr files on Drive.  Logged when Drive is first accessed.
  </summary>
</histogram>

<histogram name="GData.NumberOfTotalFiles">
  <obsolete>
    Deprecated 9/2012, and replaced by Drive.NumberOfTotalFiles
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Number of total files (regualr files + hosted documents) on Drive.  Logged
    when Drive is first accessed.
  </summary>
</histogram>

<histogram name="Geolocation.AuthorizationActionExistingUser"
    enum="GeolocationAuthorizationAction">
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>
    Records the action performed by an existing user when prompted to authorize
    the use of location by Chrome.
  </summary>
</histogram>

<histogram name="Geolocation.AuthorizationActionNewUser"
    enum="GeolocationAuthorizationAction">
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>
    Records the action performed by a new user when prompted to authorize the
    use of location by Chrome.
  </summary>
</histogram>

<histogram name="Geolocation.GeolocationDispatcherHostImpl.EnableHighAccuracy"
    enum="BooleanEnabled">
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>
    Whether high accuracy geolocation information was requested.
  </summary>
</histogram>

<histogram base="true" name="Geolocation.Header.LocationAge" units="seconds">
  <owner>kcarattini@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    For Geolocation requests from the omnibox on Android, the time since the
    location was most recently acquired. If no location has been acquired, the
    maximum bucket is incremented.
  </summary>
</histogram>

<histogram name="Geolocation.Header.PermissionState"
    enum="GeolocationHeaderPermissionState">
  <owner>kcarattini@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    Counts Geolocation requests for omnibox searches sliced by various
    permission combinations. The location mode abbreviations indicate one of:
    High Accuracy, Battery Saving, GPS On or Location Mode Off.
  </summary>
</histogram>

<histogram base="true" name="Geolocation.Header.TimeListening" units="ms">
  <owner>kcarattini@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    For Geolocation requests from the omnibox on Android, the time since the
    location was first acquired. If no location has been acquired, the minimum
    bucket is incremented.
  </summary>
</histogram>

<histogram name="Geolocation.HeaderSentOrNot" enum="GeolocationHeaderSentOrNot">
  <owner>kiyun@chromium.org</owner>
  <owner>mvanouwerkerk@chromium.org</owner>
  <owner>newt@chromium.org</owner>
  <summary>
    Reason why the X-Geo header was or was not included in a Google search from
    the omnibox.
  </summary>
</histogram>

<histogram name="Geolocation.InfoBarDelegate.Event"
    enum="GeolocationInfoBarDelegateEvent">
  <obsolete>
    Deprecated 9/2014, and replaced by
    ContentSettings.PermissionActions_Geolocation.
  </obsolete>
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>Events in GeolocationInfoBarDelegate.</summary>
</histogram>

<histogram name="Geolocation.InfoBarDelegateAndroid.Event"
    enum="GeolocationInfoBarDelegateAndroidEvent">
  <obsolete>
    Deprecated 9/2014, and replaced by
    ContentSettings.PermissionActions_Geolocation.
  </obsolete>
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>Events in GeolocationInfoBarDelegateAndroid.</summary>
</histogram>

<histogram name="Geolocation.LocationUpdate.ErrorCode"
    enum="GeopositionErrorCode">
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>Error code for the geoposition sent to the renderers.</summary>
</histogram>

<histogram name="Geolocation.NetworkLocationRequest.AccessPoints">
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>
    The number of WiFi access points used to determine geolocation.
  </summary>
</histogram>

<histogram name="Geolocation.NetworkLocationRequest.Event"
    enum="NetworkLocationRequestEvent">
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>Events in NetworkLocationRequest.</summary>
</histogram>

<histogram name="Geolocation.NetworkLocationRequest.ResponseCode"
    units="HTTP response code">
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>Http response codes in NetworkLocationRequest.</summary>
</histogram>

<histogram base="true" name="Geolocation.SettingsDialog.AcceptEvent"
    enum="GeolocationSettingsDialogBackOff">
  <owner>benwells@chromium.org</owner>
  <summary>
    Records the backoff level when the Location Settings Dialog is accepted by
    the user.
  </summary>
</histogram>

<histogram base="true" name="Geolocation.SettingsDialog.DenyEvent"
    enum="GeolocationSettingsDialogBackOff">
  <owner>benwells@chromium.org</owner>
  <summary>
    Records the backoff level when the Location Settings Dialog is rejected by
    the user.
  </summary>
</histogram>

<histogram base="true" name="Geolocation.SettingsDialog.ShowEvent"
    enum="GeolocationSettingsDialogBackOff">
  <owner>benwells@chromium.org</owner>
  <summary>
    Records the backoff level when the Location Settings Dialog is shown to the
    user.
  </summary>
</histogram>

<histogram base="true" name="Geolocation.SettingsDialog.SuppressEvent"
    enum="GeolocationSettingsDialogBackOff">
  <owner>benwells@chromium.org</owner>
  <summary>
    Records the backoff level when the Location Settings Dialog is suppressed
    due to backoff.
  </summary>
</histogram>

<histogram name="Geolocation.Timeout">
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>
    Counts Geolocation request timeout values, bucketing by timeout duration.
    This is recorded for all requests upon creation, see
    Geolocation.TimeoutExpired for timeouts that actually expired.
  </summary>
</histogram>

<histogram name="Geolocation.TimeoutExpired">
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>
    Counts Geolocation request timeout expirations, bucketing by timeout
    duration. This means no position was received within the allowed time from
    the browser process due to e.g. a slow network or an unresponsive system
    location provider.
  </summary>
</histogram>

<histogram name="GeolocationDisclosure.DisclosureResult"
    enum="GeolocationDisclosureResult">
  <owner>benwells@chromium.org</owner>
  <summary>
    Records the action the user took after the geolocation disclosure has been
    displayed.
  </summary>
</histogram>

<histogram name="GeolocationDisclosure.InfoBarVisibleTime" units="ms">
  <owner>benwells@chromium.org</owner>
  <summary>
    Records how long the search geolocation disclosure infobar was visible for.
  </summary>
</histogram>

<histogram name="GeolocationDisclosure.PostDisclosureContentSetting"
    enum="ContentSetting">
  <obsolete>
    Deprecated 2017/11. Use PostDisclosureDSESetting instead.
  </obsolete>
  <owner>benwells@chromium.org</owner>
  <summary>
    Records the geolocation content setting for the default search engine's
    origin after the search geolocation disclosure has been shown and won't be
    shown again. This metric is only recorded once per client.
  </summary>
</histogram>

<histogram name="GeolocationDisclosure.PostDisclosureDSESetting"
    enum="BooleanAllowed">
  <owner>benwells@chromium.org</owner>
  <summary>
    Records the geolocation default search engine setting after the search
    geolocation disclosure has been shown and won't be shown again. This metric
    is only recorded once per client.
  </summary>
</histogram>

<histogram name="GeolocationDisclosure.PostDisclosurePermission"
    enum="PermissionStatus">
  <obsolete>
    Deprecated 2017/01. Replaced by PostDisclosureContentSetting.
  </obsolete>
  <owner>benwells@chromium.org</owner>
  <summary>
    Records the geolocation permission for the default search engine's origin
    after the search geolocation disclosure has been shown and won't be shown
    again. This metric is only recorded once per client.
  </summary>
</histogram>

<histogram name="GeolocationDisclosure.PreDisclosureContentSetting"
    enum="ContentSetting">
  <obsolete>
    Deprecated 2017/11. Use PreDisclosureDSESetting instead.
  </obsolete>
  <owner>benwells@chromium.org</owner>
  <summary>
    Records the geolocation content setting for the default search engine's
    origin immediately before the search geolocation disclosure has been shown.
    This metric is only recorded once per client.
  </summary>
</histogram>

<histogram name="GeolocationDisclosure.PreDisclosureDSESetting"
    enum="BooleanAllowed">
  <owner>benwells@chromium.org</owner>
  <summary>
    Records the geolocation default search engine setting immediately before the
    search geolocation disclosure has been shown. This metric is only recorded
    once per client.
  </summary>
</histogram>

<histogram name="GeolocationDisclosure.PreDisclosurePermission"
    enum="PermissionStatus">
  <obsolete>
    Deprecated 2017/01. Replaced by PreDisclosureContentSetting.
  </obsolete>
  <owner>benwells@chromium.org</owner>
  <summary>
    Records the geolocation permission for the default search engine's origin
    immediately before the search geolocation disclosure has been shown. This
    metric is only recorded once per client.
  </summary>
</histogram>

<histogram name="GoogleNow.Card.Button.Clicked0" enum="GoogleNowCardTypeId">
  <owner>robliao@chromium.org</owner>
  <owner>skare@chromium.org</owner>
  <summary>Types of cards which received an index 0 button click.</summary>
</histogram>

<histogram name="GoogleNow.Card.Button.Clicked1" enum="GoogleNowCardTypeId">
  <owner>robliao@chromium.org</owner>
  <owner>skare@chromium.org</owner>
  <summary>Types of cards which received an index 1 button click.</summary>
</histogram>

<histogram name="GoogleNow.Card.Clicked" enum="GoogleNowCardTypeId">
  <owner>robliao@chromium.org</owner>
  <owner>skare@chromium.org</owner>
  <summary>Types of cards which received a notification click.</summary>
</histogram>

<histogram name="GoogleNow.Event" enum="GoogleNowEvent">
  <owner>robliao@chromium.org</owner>
  <owner>skare@chromium.org</owner>
  <summary>Events in Google Now component extension.</summary>
</histogram>

<histogram name="GoogleNow.MessageCenter.Displayed.NotificationsVisible"
    units="count">
  <owner>robliao@chromium.org</owner>
  <owner>skare@chromium.org</owner>
  <summary>
    Count of the number of Google Now notifications visible when the message
    center/notification center is shown.
  </summary>
</histogram>

<histogram name="GooglePlayServices.ConnectionResult"
    enum="GooglePlayServicesConnectionResult">
  <owner>andrewhayden@chromium.org</owner>
  <owner>dgn@chromium.org</owner>
  <summary>
    ConnectionResult error codes resulting from attempts to check whether or not
    Google Play Services is available. Most of these checks are done lazily,
    when a user accesses a feature that uses Google Play Services. Added for
    http://crbug.com/490710.
  </summary>
</histogram>

<histogram name="GooglePlayServices.ErrorHandlerAction"
    enum="GooglePlayServicesErrorHandlerAction">
  <owner>andrewhayden@chromium.org</owner>
  <summary>
    Types of action taken in response to Google Play Services user-recoverable
    errors. Added for http://crbug.com/490710.
  </summary>
</histogram>

<histogram name="GoogleSearch.AccessPoint" enum="SearchAccessPoint">
  <obsolete>
    Deprecated 2015/08.
  </obsolete>
  <owner>kmadhusu@chromium.org</owner>
  <summary>
    Counts number of Google searches from various access points in the browser.
    WARNING: Do not use this histogram as it currently fails to classify a large
    percentage of Omnibox searches correctly - http://crbug.com/421631.
  </summary>
</histogram>

<histogram name="GoogleUpdate.EffectivePolicy" enum="UpdatePolicy"
    expires_after="2018-08-30">
  <owner>gab@chromium.org</owner>
  <summary>
    The effective update policy for Chrome on Windows. Recorded once per startup
    (following a 45 seconds delay).
  </summary>
</histogram>

<histogram name="GoogleUpdate.ErrorHresult" enum="Hresult">
  <owner>grt@chromium.org</owner>
  <summary>The HRESULT for a failed on-demand update check.</summary>
</histogram>

<histogram name="GoogleUpdate.InfoBar.ActionTaken"
    enum="GoogleUpdateInfoBarActions">
  <obsolete>
    Deprecated 12/2015 in Issue 566085.
  </obsolete>
  <owner>yfriedman@chromium.org</owner>
  <owner>dfalcantara@chromium.org</owner>
  <summary>
    (Android-only) Records what action the user took (if any) on the InfoBar
    indicating that a new version of Chrome is available.
  </summary>
</histogram>

<histogram name="GoogleUpdate.InfoBar.DeviceFreeSpace" units="MB">
  <owner>shaktisahu@chromium.org</owner>
  <summary>
    (Android-only) The amount of internal memory storage that is free on the
    file system and available to the applications when the InfoBar or update
    menu item is shown.
  </summary>
</histogram>

<histogram name="GoogleUpdate.InfoBar.InternalStorageSizeAvailable" units="MB">
  <owner>yfriedman@chromium.org</owner>
  <owner>dfalcantara@chromium.org</owner>
  <owner>khushalsagar@chromium.org</owner>
  <summary>
    (Android-only) The amount of internal memory storage available on the user's
    device when the InfoBar or update menu item is shown. Deprecating soon in
    M64.
  </summary>
</histogram>

<histogram name="GoogleUpdate.InfoBar.TimeShown" units="ms">
  <obsolete>
    Deprecated 12/2015 in Issue 566085.
  </obsolete>
  <owner>yfriedman@chromium.org</owner>
  <owner>dfalcantara@chromium.org</owner>
  <summary>
    (Android-only) The amount of time which the InfoBar indicating a new version
    is available is visible.
  </summary>
</histogram>

<histogram name="GoogleUpdate.InstallerExitCode" enum="InstallStatus">
  <owner>grt@chromium.org</owner>
  <summary>
    The exit code from Chrome's installer following a failed on-demand update
    check. All values reported for this histogram fall in the
    GOOGLE_UPDATE_ERROR_UPDATING bucket of the GoogleUpdate.UpdateErrorCode
    histogram and the GOOPDATEINSTALL_E_INSTALLER_FAILED bucket of the
    GoogleUpdate.ErrorHresult histogram.
  </summary>
</histogram>

<histogram name="GoogleUpdate.MenuItem.ActionTakenAfterItemClicked"
    enum="GoogleUpdateAfterItemClickedActions">
  <owner>twellington@chromium.org</owner>
  <summary>
    (Android-only) Records whether Chrome was updated after the update menu item
    was clicked.
  </summary>
</histogram>

<histogram name="GoogleUpdate.MenuItem.ActionTakenOnMenuOpen"
    enum="GoogleUpdateMenuItemActions">
  <owner>twellington@chromium.org</owner>
  <summary>
    (Android-only) Records whether the update menu item was clicked when the app
    menu was opened.
  </summary>
</histogram>

<histogram name="GoogleUpdate.UnexpectedState">
  <owner>grt@chromium.org</owner>
  <summary>
    An unrecognized CurrentState value received from Google Update while polling
    for the status of an on-demand update check.
  </summary>
</histogram>

<histogram name="GoogleUpdate.UpdateErrorCode" enum="GoogleUpdateErrorCode">
  <owner>grt@chromium.org</owner>
  <summary>The error code for a failed on-demand update check.</summary>
</histogram>

<histogram name="GoogleUpdate.UpdatePolicyIsOverridden" enum="Boolean"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    True if the effective update policy for Chrome on Windows is the result of
    an app-specific override; false if it is the default for all apps. Recorded
    once per startup (following a 45 seconds delay).
  </summary>
</histogram>

<histogram name="GoogleUpdate.UpgradeResult" enum="GoogleUpdateUpgradeStatus">
  <owner>grt@chromium.org</owner>
  <summary>The result of an on-demand update check.</summary>
</histogram>

<histogram name="GPU.AcceleratedSurfaceRefreshRate" units="hz">
  <owner>vmiura@chromium.org</owner>
  <summary>
    Refresh rate of the display in Hz.  This is recorded every time we present a
    frame.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.Buffer11CPUMemoryMB" units="MB">
  <owner>cwallez@chromium.org</owner>
  <summary>
     The sum of the size of the CPU-side memory allocations of Buffer11's copies
    (vs. GPU memory allocations). These allocations are used when modifying the
    buffer data on the CPU or when transfering to GPU memory via DMA.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.D3D11CreateDeviceError" enum="Hresult">
  <owner>jmadill@chromium.org</owner>
  <summary>
    An extended Windows error code returned from D3D11CreateDevice on error. Can
    be almost any valid HRESULT or DXGI error code, which are listed at
    https://msdn.microsoft.com/en-us/library/windows/desktop/bb509553.aspx.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.D3D11CreateDeviceMS" units="ms">
  <owner>jmadill@chromium.org</owner>
  <summary>
    The time that elapses for the initial call to D3D11CreateDevice on D3D11
    ANGLE. A pure system call, with no ANGLE or Chromium code, called once every
    GPU process startup.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.D3D11FeatureLevel" enum="D3DFeatureLevel">
  <owner>jmadill@chromium.org</owner>
  <summary>
    The maxmium supported (or currently requested) Direct3D feature level in
    D3D11 ANGLE. We support as low as 9.3, and as high as 11.1, though Chrome
    should only use 10.0+ for D3D11. Gives an indication of how new a user's
    video card is, what features it supports, and it's general speed tier.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.D3D11InitializeResult" enum="D3D11InitializeResult">
  <owner>jmadill@chromium.org</owner>
  <summary>
    The result from initializing a D3D11 device in ANGLE. Can be success, or one
    of several error codes which indicate different reasons for failing.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.D3D9InitializeResult" enum="D3D9InitializeResult">
  <owner>jmadill@chromium.org</owner>
  <summary>
    The result from initializing a D3D9 device in ANGLE. Can be success, or one
    of several error codes which indicate different reasons for failing.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.D3DCompileMS" units="ms">
  <owner>jmadill@chromium.org</owner>
  <summary>
    The time ANGLE spends calling the D3D shader compiler. Tracks total time we
    spend compiling shaders on startup and during Chrome's lifetime.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.DisplayInitializeMS" units="ms">
  <owner>jmadill@chromium.org</owner>
  <summary>
    Time ANGLE spends in eglInitialize, where it spins up a Renderer. This can
    gives us insight into how much time we're spending initializing the GPU.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.ProgramCache.BinaryCacheHitTimeUS"
    units="microseconds">
  <owner>jmadill@chromium.org</owner>
  <summary>
    The time to load a gpu program from the program cache.

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

<histogram name="GPU.ANGLE.ProgramCache.BinaryCacheMissTimeUS"
    units="microseconds">
  <owner>jmadill@chromium.org</owner>
  <summary>
    The time to link a gpu program.

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

<histogram name="GPU.ANGLE.ProgramCache.CacheResult"
    enum="ANGLEProgramCacheResult">
  <owner>jmadill@chromium.org</owner>
  <summary>
    If a successfully linked program was found in the GPU program cache during a
    program link call, and if the hit was originally loaded from disk.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.ProgramCache.LoadBinarySuccess"
    enum="BooleanSuccess">
  <owner>jmadill@chromium.org</owner>
  <summary>
    Records if the call to load a cached binary was successful. This can
    legitimately fail if the driver wants chrome to re-link and re-cache the gpu
    program.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.ProgramCache.ProgramBinarySizeBytes" units="bytes">
  <owner>jmadill@chromium.org</owner>
  <summary>
    The size of program binaries loaded into the gpu program cache.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.Renderer11InitializeDeviceMS" units="ms">
  <owner>jmadill@chromium.org</owner>
  <summary>
    Time ANGLE spends initializing various shaders and internal classes. This is
    time that isn't purely loading system DLLs and calling OS methods. It might
    be work we can optimize or defer until later.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.Renderer11InitializeDLLsMS" units="ms">
  <owner>jmadill@chromium.org</owner>
  <summary>
    Time ANGLE spends loading system DLLs, such as the D3D compiler DLL, and the
    D3D11 and DXGI DLLs. Probably unavoidable startup costs, though very useful
    to keep track of.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.SupportsDXGI1_2" enum="BooleanSupported">
  <owner>jmadill@chromium.org</owner>
  <summary>
    Windows computers running Windows 8+, or running Windows 7 with a platform
    update, support the newer version of DXGI. This update also indicates the
    computer is capable of running Direct3D 11.1 if the hardware supports it.
  </summary>
</histogram>

<histogram name="GPU.AppContainer.EnableState"
    enum="GPUAppContainerEnableState">
  <owner>forshaw@chromium.org</owner>
  <summary>
    On Windows 10 version RS1 and above the GPU can be sandboxed using an
    AppContainer. This is recorded every time the GPU sandbox is initialized and
    enabling the AppContainer is requested, such as through a command line
    option. The recorded value can indicate that the AppContainer was disabled
    due to an incompatible configuration or the GPU process had previously
    crashed resulting in the AppContainer being forcefully disabled.
  </summary>
</histogram>

<histogram name="GPU.AppContainer.Status" enum="LaunchErrorCodes">
  <owner>forshaw@chromium.org</owner>
  <summary>
    On Windows 10 version RS1 and above the GPU can be sandboxed using an
    AppContainer. This indicates the status when initializing the sandbox
    profile during process creation.
  </summary>
</histogram>

<histogram name="GPU.AtExitMBytesAllocated" units="MB">
  <owner>vmiura@chromium.org</owner>
  <summary>
    The amount of GPU memory that was currently allocated as of just before the
    GPU process' exit.
  </summary>
</histogram>

<histogram name="GPU.AtExitMBytesAllocatedMax" units="MB">
  <owner>vmiura@chromium.org</owner>
  <summary>
    The maximum amount of GPU memory that had ever been allocated during the GPU
    process' lifetime, as of just before the GPU process' exit.
  </summary>
</histogram>

<histogram name="GPU.AtExitMBytesLimit" units="MB">
  <owner>vmiura@chromium.org</owner>
  <summary>
    The GPU memory manager's limit on the amount of GPU memory that can be
    allocated as of just before the GPU process' exit.
  </summary>
</histogram>

<histogram name="GPU.AtExitSurfaceCount">
  <owner>vmiura@chromium.org</owner>
  <summary>
    The number of surfaces that the GPU process was rendering to right before
    exiting. This should be equal to the number of tabs (both visible and
    hidden) rendering via the compositor.
  </summary>
</histogram>

<histogram name="GPU.AtExitWindowCount">
  <owner>vmiura@chromium.org</owner>
  <summary>
    The number of windows that the GPU memory manager believed to exist as of
    just before the GPU process' exit.
  </summary>
</histogram>

<histogram name="GPU.BlacklistFeatureTestResults"
    enum="GPUBlacklistFeatureTestResults">
  <owner>vmiura@chromium.org</owner>
  <summary>
    Counts number of browser invocations for which a GPU feature is
    allowed/blacklisted/disabled.
  </summary>
</histogram>

<histogram name="GPU.BlacklistFeatureTestResultsWindows"
    enum="GPUBlacklistFeatureTestResultsWindows">
  <obsolete>
    Replaced by GPU.BlacklistFeatureTestResultsWindows2 in M67.
  </obsolete>
  <owner>vmiura@chromium.org</owner>
  <summary>
    Counts number of browser invocations for which a GPU feature is
    allowed/blacklisted/disabled in various Windows sub-versions.
  </summary>
</histogram>

<histogram name="GPU.BlacklistFeatureTestResultsWindows2"
    enum="GPUBlacklistFeatureTestResultsWindows2">
  <owner>vmiura@chromium.org</owner>
  <summary>
    Counts number of browser invocations for which a GPU feature is
    allowed/blacklisted/disabled in various Windows sub-versions.
  </summary>
</histogram>

<histogram name="GPU.BlacklistTestResultsPerDisabledEntry"
    enum="GPUBlacklistTestResultPerEntry">
  <owner>vmiura@chromium.org</owner>
  <summary>
    Counts number of browser invocations for which a disabled blacklist entry is
    matched.
  </summary>
</histogram>

<histogram name="GPU.BlacklistTestResultsPerEntry"
    enum="GPUBlacklistTestResultPerEntry">
  <owner>vmiura@chromium.org</owner>
  <summary>
    Counts number of browser invocations for which the GPU process is blocked
    due to a blacklist entry match.
  </summary>
</histogram>

<histogram name="GPU.BlockStatusForClient3DAPIs"
    enum="BlockStatusForClient3DAPIs">
  <owner>kbr@chromium.org</owner>
  <summary>
    Indicates whether WebGL / Pepper3D were blocked, and if so, for all domains,
    or only a single one. This statistic is gathered every time an attempt is
    made to create a 3D context.
  </summary>
</histogram>

<histogram name="GPU.CheckFramebufferValidDuration" units="ms">
  <obsolete>
    Deprecated 01/2017.
  </obsolete>
  <owner>ericrk@chromium.org</owner>
  <summary>
    The amount of time spent in GLES2DecoderImpl::CheckFramebufferValid.
  </summary>
</histogram>

<histogram name="GPU.CollectContextGraphicsInfo" units="microseconds">
  <owner>vmiura@chromium.org</owner>
  <summary>
    The time that the GPU process spends collecting driver information during
    startup.

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

<histogram name="GPU.ContextLost" enum="ContextLostReason">
  <owner>sievers@chromium.org</owner>
  <summary>
    The reason a GPU command buffer context of a given type was lost.
  </summary>
</histogram>

<histogram name="GPU.ContextMemory" units="MB">
  <owner>ericrk@chromium.org</owner>
  <summary>The amount of memory used by a GL Context.</summary>
</histogram>

<histogram name="GPU.CreateBrowserCompositor" units="microseconds">
  <obsolete>
    Deprecated 07/2018: not useful anymore.
  </obsolete>
  <owner>vmiura@chromium.org</owner>
  <summary>
    The time that the browser process takes to create the compositor from its
    point of view. One of these is created for each top-level window (browser
    frame, menus, etc.).

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

<histogram name="GPU.D3D11_B8G8R8A8_RenderTargetSupport" enum="BooleanSuccess">
  <owner>vmiura@chromium.org</owner>
  <summary>Whether D3D11 supports B8G8R8A8 format for render targets.</summary>
</histogram>

<histogram name="GPU.D3D11_B8G8R8A8_Texture2DSupport" enum="BooleanSuccess">
  <owner>vmiura@chromium.org</owner>
  <summary>Whether D3D11 supports B8G8R8A8 format for 2D textures.</summary>
</histogram>

<histogram name="GPU.D3D11_FeatureLevel" enum="D3D11FeatureLevel">
  <owner>vmiura@chromium.org</owner>
  <summary>The highest D3D11 feature level available.</summary>
</histogram>

<histogram name="GPU.D3D12FeatureLevel" enum="D3D12FeatureLevel">
  <owner>vmiura@chromium.org</owner>
  <owner>magchen@chromium.org</owner>
  <summary>
    The maximum D3D12 feature level supported in the gpu drivers. It is recorded
    15 seconds after the browser launch.
  </summary>
</histogram>

<histogram name="GPU.D3DShaderModel" enum="ShaderModel">
  <owner>jmadill@chromium.org</owner>
  <summary>
    ANGLE's currently active D3D shader model version. Logged once every startup
    of the GPU process, on Windows only. Note that Shader Models 2 and 3 map to
    D3D9 with ANGLE, and 4+ map to D3D11 ANGLE.
  </summary>
</histogram>

<histogram name="GPU.DestroyProgramManagerPrograms.Elapsed" units="ms">
  <obsolete>
    Deprecated 11/2016.
  </obsolete>
  <owner>ericrk@chromium.org</owner>
  <summary>
    The amount of time spent destroying programs during ProgramManager::Destroy.
  </summary>
</histogram>

<histogram name="GPU.DestroyProgramManagerPrograms.Programs" units="programs">
  <obsolete>
    Deprecated 11/2016.
  </obsolete>
  <owner>ericrk@chromium.org</owner>
  <summary>
    The number of progams destroyed during ProgramManager::Destroy.
  </summary>
</histogram>

<histogram name="GPU.DestroyProgramManagerPrograms.ProgramsPerMs"
    units="programs per ms">
  <obsolete>
    Deprecated 11/2016.
  </obsolete>
  <owner>ericrk@chromium.org</owner>
  <summary>
    The number of programs destroyed per millisecond during
    ProgramManager::Destroy. Only logged if both the number of programs and the
    elapsed time are greater than zero.
  </summary>
</histogram>

<histogram name="GPU.DirectComposition.CompositionMode"
    enum="DxgiFramePresentationMode">
  <owner>jbauman@chromium.org</owner>
  <summary>
    How the Desktop Window Manager presented Chrome's DirectComposition layers
    to the screen.
  </summary>
</histogram>

<histogram name="GPU.DirectComposition.DCLayerResult" enum="DCLayerResult">
  <owner>jbauman@chromium.org</owner>
  <summary>
    Recorded for each quad (on overlay processing) the reason it was or wasn't
    put in an overlay.
  </summary>
</histogram>

<histogram name="GPU.DirectComposition.FramesSinceColorSpaceChange"
    units="frames">
  <owner>jbauman@chromium.org</owner>
  <summary>
    How many frames since the last time the layer color format was changed.
  </summary>
</histogram>

<histogram name="GPU.DirectComposition.OverlaysSupported"
    enum="BooleanOverlaySupported">
  <owner>jbauman@chromium.org</owner>
  <summary>True if Chrome will try to use DirectComposition overlays.</summary>
</histogram>

<histogram name="GPU.DirectComposition.OverlaySupportFlags"
    enum="OverlaySupportFlag">
  <obsolete>
    Replaced by format specific histograms under OverlaySupportFlags2.
  </obsolete>
  <owner>sunnyps@chromium.org</owner>
  <summary>
    These are the flags explaining how well overlays are supported on the
    current display. The is recorded for every connected display when creating a
    DirectComposition view context.
  </summary>
</histogram>

<histogram base="true" name="GPU.DirectComposition.OverlaySupportFlags2"
    enum="OverlaySupportFlag">
<!-- Name completed by histogram_suffixes name="GPU.DirectComposition.OverlayFormat" -->

  <owner>sunnyps@chromium.org</owner>
  <summary>
    Flags that indicate if overlays are supported, and if additional features
    such as scaling are supported for some common pixel formats.
  </summary>
</histogram>

<histogram name="GPU.DirectComposition.OverlaysUsed" enum="BooleanOverlayUsage">
  <owner>jbauman@chromium.org</owner>
  <summary>Whether or not a frame displays an overlay.</summary>
</histogram>

<histogram name="GPU.DirectComposition.SwapBuffersFailed" enum="BooleanHit">
  <owner>sunnyps@chromium.org</owner>
  <summary>Emitted on direct composition surface swap buffers failure.</summary>
</histogram>

<histogram name="GPU.DirectComposition.SwapBuffersLastError" enum="Hresult">
  <obsolete>
    Deprecated 05/2018. GetLastError returns error for last successful or failed
    win32 call so this doesn't work as expected.
  </obsolete>
  <owner>sunnyps@chromium.org</owner>
  <summary>Last error when presentation using DirectComposition fails.</summary>
</histogram>

<histogram name="GPU.DirectComposition.SwapchainFormat" enum="SwapchainFormat">
  <owner>jbauman@chromium.org</owner>
  <summary>What type of swapchain was actually created for an overlay.</summary>
</histogram>

<histogram name="GPU.DisplayCompositorLifetimeEvents"
    enum="GPUProcessLifetimeEvent">
  <obsolete>
    Deprecated 05/2018. Moved to GPU.ProcessLifetimeEvents.DisplayCompositor.
  </obsolete>
  <owner>mohsen@chromium.org</owner>
  <summary>
    Counts of the number of gpu process crashes when it only has display
    compositor (no hardware acceleration and software compositing).
  </summary>
</histogram>

<histogram name="GPU.DisplayLinkInstallationStatus"
    enum="DisplayLinkInstallationStatus">
  <obsolete>
    Deprecated 2/2017. The values hadn't been updated since it was created, and
    the code gathering the installation status has been removed in Chrome CL
    2679773002.
  </obsolete>
  <owner>vmiura@chromium.org</owner>
  <summary>
    Whether a version of DisplayLink is installed that crashes the GPU process.
    This information is collected at statup. It applies only to Windows. See
    http://crbug.com/177611.
  </summary>
</histogram>

<histogram name="GPU.DoLinkProgramTime" units="ms">
  <owner>jmadill@chromium.org</owner>
  <summary>
    The time we spend in GLES2DecoderImpl::DoLinkProgram. Related to how much
    time we spend compiling shaders during startup.
  </summary>
</histogram>

<histogram name="GPU.DriverBugTestResultsPerEntry"
    enum="GpuDriverBugWorkaroundEntry">
  <owner>jbauman@chromium.org</owner>
  <owner>vmiura@chromium.org</owner>
  <owner>kbr@chromium.org</owner>
  <owner>zmo@chromium.org</owner>
  <summary>
    For every entry in the gpu driver bug list that is hit on a machine, this
    records the id. Entry 0 is the total number of times that data is recorded.
    It should be recorded whenever new GPU information is received: on startup,
    whenever a GPU process launches, and whenever the active GPU changes.
  </summary>
</histogram>

<histogram name="GPU.EGLDisplayType" enum="EGLDisplayType">
  <owner>jbauman@chromium.org</owner>
  <summary>The display type used to ask for an EGLDisplay.</summary>
</histogram>

<histogram name="GPU.Error" enum="GLError">
  <owner>junov@chromium.org</owner>
  <owner>piman@chromium.org</owner>
  <summary>The error states generated by OpenGL calls.</summary>
</histogram>

<histogram name="GPU.FenceSupport" enum="BooleanAvailable">
  <owner>reveman@chromium.org</owner>
  <summary>
    Whether GLFence support is available. Recorded each time a new context group
    is initialized and extensions are detected.
  </summary>
</histogram>

<histogram name="GPU.GPUProcessDetailedExitStatus"
    enum="ProcessDetailedExitStatus">
  <owner>wnwen@chromium.org</owner>
  <summary>
    Breakdown of exit status for gpu processes. Only recorded on Android.
  </summary>
</histogram>

<histogram name="GPU.GPUProcessExitCode" enum="GPUProcessExitCode">
  <owner>jbauman@chromium.org</owner>
  <summary>
    Counts for the exit codes returned by the GPU process when it terminated.
  </summary>
</histogram>

<histogram name="GPU.GPUProcessInitialized" enum="BooleanSuccess">
  <owner>vmiura@chromium.org</owner>
  <summary>
    Whether the GPU process successfully initialized or failed and then exitted
    normally.
  </summary>
</histogram>

<histogram name="GPU.GPUProcessLaunchCause" enum="GPUProcessLaunchCauses">
  <obsolete>
    Deprecated 08/2016.
  </obsolete>
  <owner>piman@chromium.org</owner>
  <summary>
    Counts enumerating the initial cause for the GPU Process to be launched.
  </summary>
</histogram>

<histogram name="GPU.GPUProcessLaunchTime" units="ms">
  <owner>piman@chromium.org</owner>
  <summary>
    Startup time of the GPU process as measured by the GPU process host.
  </summary>
</histogram>

<histogram name="GPU.GPUProcessLifetimeEvents" enum="GPUProcessLifetimeEvent">
  <obsolete>
    Deprecated 05/2018. Moved to GPU.ProcessLifetimeEvents.HardwareAccelerated.
  </obsolete>
  <owner>vmiura@chromium.org</owner>
  <summary>
    Counts of the number of process launches and crashes (when running on h/w).
  </summary>
</histogram>

<histogram name="GPU.GPUProcessSoftwareRendering" enum="GPUProcessType">
  <owner>vmiura@chromium.org</owner>
  <summary>
    A boolean indicating whether the gpu process that was launched uses software
    or hardware 3d rendering.
  </summary>
</histogram>

<histogram name="GPU.GPUProcessTerminationStatus" enum="TerminationStatus">
  <obsolete>
    Deprecated April 2018. Replaced by GPU.GPUProcessTerminationStatus2.
  </obsolete>
  <owner>vmiura@chromium.org</owner>
  <summary>
    Counts for each time the GPU Process Host detects the process dies.
  </summary>
</histogram>

<histogram name="GPU.GPUProcessTerminationStatus2" enum="GpuTerminationStatus">
  <owner>vmiura@chromium.org</owner>
  <summary>
    Counts for each time the GPU Process Host detects the process dies.
  </summary>
</histogram>

<histogram name="GPU.InForceCompositingModeFieldTrial" enum="BooleanEnabled">
  <obsolete>
    Deprecated 10/2013.
  </obsolete>
  <owner>vmiura@chromium.org</owner>
  <summary>
    Records whether a client was selected for the force compositing mode field
    trial or not.
  </summary>
</histogram>

<histogram name="GPU.InitializeOneOffMediumTime" units="ms">
  <owner>jmadill@chromium.org</owner>
  <summary>
    The time that the GPU process spends in initializing the GL surface, and
    collecting graphics information. Records times up to three minutes.
  </summary>
</histogram>

<histogram name="GPU.InitializeOneOffTime" units="microseconds">
  <obsolete>
    Deprecated 4/2015.
  </obsolete>
  <owner>vmiura@chromium.org</owner>
  <summary>
    The time that the GPU process spends in initializing the GL surface, and
    collecting graphics information.
  </summary>
</histogram>

<histogram name="GPU.IOSurface.CATransactionTime" units="ms">
  <owner>ccameron@chromium.org</owner>
  <summary>
    The time that it took to update the CALayer tree and commit the transaction.
    This is often affected by IOSurface paging.
  </summary>
</histogram>

<histogram name="GPU.IOSurface.CreateTime" units="ms">
  <owner>ccameron@chromium.org</owner>
  <summary>
    The time that it took for a call to IOSurfaceCreate to complete.
  </summary>
</histogram>

<histogram name="GPU.IOSurface.GLFlushTime" units="ms">
  <owner>ccameron@chromium.org</owner>
  <summary>
    The time that it took for a call to glFlush to complete. This is often
    affected by IOSurface paging.
  </summary>
</histogram>

<histogram name="GPU.IOSurface.TexImageTime" units="ms">
  <owner>ccameron@chromium.org</owner>
  <summary>
    The time that it took for a call to CGLTexImageIOSurface2D to complete.
  </summary>
</histogram>

<histogram name="GPU.MaxMSAASampleCount" units="samples">
  <owner>senorblanco@chromium.org</owner>
  <summary>
    The maximum number of multisampled anti-aliasing (MSAA) samples per pixel
    that the user's GPU can render.
  </summary>
</histogram>

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

<histogram name="GPU.Output.ColorSpace" enum="DXGI_COLOR_SPACE_TYPE">
  <owner>hubbe@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Records the output color space of the monitor as reported by Windows.
    Recorded once for each monitor when the gpu process starts. If monitor
    enumeration fails, this metric will not be provided.
  </summary>
</histogram>

<histogram name="GPU.Output.HDR" enum="Boolean">
  <owner>hubbe@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Records if any connected monitor is HDR capable. Recorded when the gpu
    process starts. Only recorded on Windows as of M-61. If monitor enumeration
    fails, this metric will not be provided.
  </summary>
</histogram>

<histogram name="GPU.Output.MaxLuminance" units="lumens">
  <owner>hubbe@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Records the display maximum lumens as reported by Windows. Recorded once for
    each monitor when the gpu process starts. If monitor enumeration fails, this
    metric will not be provided.
  </summary>
</histogram>

<histogram name="GPU.ProcessLifetimeEvents.DisplayCompositor"
    enum="GPUProcessLifetimeEvent">
  <owner>vmiura@chromium.org</owner>
  <summary>
    Recorded once for every GPU process launch and crash when GPU process is
    started for the display compositor with software compositing. Crash buckets
    are based on crash count for disabling features. No hardware acceleration
    and no SwiftShader WebGL will be run.
  </summary>
</histogram>

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

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

<histogram name="GPU.ProgramCache.BinaryCacheHitTime" units="microseconds">
  <owner>vmiura@chromium.org</owner>
  <summary>
    The time to load a gpu program from the program cache.

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

<histogram name="GPU.ProgramCache.BinaryCacheMissTime" units="microseconds">
  <owner>vmiura@chromium.org</owner>
  <summary>
    The time to link a gpu program.

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

<histogram name="GPU.ProgramCache.CacheHit" enum="BooleanSuccess">
  <owner>jmadill@chromium.org</owner>
  <summary>
    If a successfully linked program was found in the GPU program cache during a
    program link call.
  </summary>
</histogram>

<histogram name="GPU.ProgramCache.CompilationCacheHitTime" units="microseconds">
  <owner>vmiura@chromium.org</owner>
  <summary>
    The time to check the program cache that we've already compiled the shader.

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

<histogram name="GPU.ProgramCache.CompilationCacheMissTime"
    units="microseconds">
  <owner>vmiura@chromium.org</owner>
  <summary>
    The time to compile a shader.

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

<histogram name="GPU.ProgramCache.CompressDataSuccess" units="BooleanSuccess">
  <owner>ericrk@chromium.org</owner>
  <summary>
    Whether we succeeded in compressing program data. Expected to always be
    true.
  </summary>
</histogram>

<histogram name="GPU.ProgramCache.CompressDataTime" units="microseconds">
  <owner>ericrk@chromium.org</owner>
  <summary>
    The time to compress a program's binary data during insertion into the
    program cache.

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

<histogram name="GPU.ProgramCache.CompressionPercentage" units="%">
  <owner>ericrk@chromium.org</owner>
  <summary>
    The percentage of raw size that a program binary takes after compression.
  </summary>
</histogram>

<histogram name="GPU.ProgramCache.DecompressDataSuccess" units="BooleanSuccess">
  <owner>ericrk@chromium.org</owner>
  <summary>
    Whether we succeeded in decompressing program data. Failure indicates disk
    or memory corruption.
  </summary>
</histogram>

<histogram name="GPU.ProgramCache.DecompressDataTime" units="microseconds">
  <owner>ericrk@chromium.org</owner>
  <summary>
    The time to decompress a program's binary data during retrieval from the
    program cache.

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

<histogram name="GPU.ProgramCache.LoadBinarySuccess" enum="BooleanSuccess">
  <owner>vmiura@chromium.org</owner>
  <summary>
    Records if the call to glProgramBinary was successful.  This can
    legitimately fail if the driver wants chrome to re-link and re-cache the gpu
    program.
  </summary>
</histogram>

<histogram name="GPU.ProgramCache.MemoryReleasedOnPressure" units="KB">
  <owner>ssid@chromium.org</owner>
  <summary>
    Amount of memory released from the program cache on memory pressure.
  </summary>
</histogram>

<histogram name="GPU.ProgramCache.MemorySizeAfterKb" units="KB">
  <owner>vmiura@chromium.org</owner>
  <summary>
    Records the total in-memory cache size, before a program is cached.  Can be
    used with GPU.ProgramCache.MemorySizeBeforeKb to find the maximum cache size
    distribution.
  </summary>
</histogram>

<histogram name="GPU.ProgramCache.MemorySizeBeforeKb" units="KB">
  <owner>vmiura@chromium.org</owner>
  <summary>
    Records the total in-memory cache size, after a program is cached.  Can be
    used with GPU.ProgramCache.MemorySizeAfterKb to find the maximum cache size
    distribution.
  </summary>
</histogram>

<histogram name="GPU.ProgramCache.ProgramBinarySizeBytes" units="bytes">
  <owner>vmiura@chromium.org</owner>
  <summary>
    The size of program binaries loaded into the gpu program cache.
  </summary>
</histogram>

<histogram name="GPU.Sandbox.InitializedSuccessfully" enum="BooleanSuccess">
  <owner>piman@chromium.org</owner>
  <summary>
    Whether or not the GPU sandbox properly initialized. Failures are typically
    platform- and driver-specific (e.g. driver creating threads on Linux).
  </summary>
</histogram>

<histogram name="GPU.setIsAcceleratedCompositingActive"
    enum="GPUsetIsAcceleratedCompositingActive">
  <owner>vmiura@chromium.org</owner>
  <summary>
    Counts activation and deactivation of accelerated compositing.
  </summary>
</histogram>

<histogram name="GPU.ShaderLoadPrefixOK" enum="BooleanMatched">
  <owner>ericrk@chromium.org</owner>
  <summary>
    Whether or not the shader prefix loaded from disk matched the expected
    prefix for the data and system configuration. False indicates either disk
    corruption or a system configuration change, and should be rare.
  </summary>
</histogram>

<histogram name="GPU.SoftwareRendererLifetimeEvents"
    enum="GPUProcessLifetimeEvent">
  <obsolete>
    Never used.
  </obsolete>
  <owner>vmiura@chromium.org</owner>
  <summary>
    Counts of the number of gpu process crashes when the software rasterizer is
    enabled.
  </summary>
</histogram>

<histogram name="GPU.Stage3DFieldTrial" enum="BooleanEnabled">
  <owner>vmiura@chromium.org</owner>
  <summary>
    Records whether a client was selected for the Stage3D on XP field trial or
    not.
  </summary>
</histogram>

<histogram name="GPU.SupportsDX12" enum="BooleanSupported">
  <owner>vmiura@chromium.org</owner>
  <owner>magchen@chromium.org</owner>
  <summary>
    This metric shows whether the GPU supports D3D12. It is recorded 15 seconds
    after the browser launch.
  </summary>
</histogram>

<histogram name="GPU.SupportsVulkan" enum="BooleanSupported">
  <owner>vmiura@chromium.org</owner>
  <owner>magchen@chromium.org</owner>
  <summary>
    This metric shows whether the GPU supports Vulkan. It is recorded 15 seconds
    after the browser launch.
  </summary>
</histogram>

<histogram name="GPU.SurfaceCountAtExit">
  <obsolete>
    Deprecated 12/2012. Moved to GPU.AtExitSurfaceCount.
  </obsolete>
  <owner>vmiura@chromium.org</owner>
  <summary>
    The number of surfaces that the GPU process was rendering to right before
    exiting. This should be equal to the number of tabs (both visible and
    hidden) rendering via the compositor.
  </summary>
</histogram>

<histogram name="GPU.SwiftShaderLifetimeEvents" enum="GPUProcessLifetimeEvent">
  <obsolete>
    Deprecated 05/2018. Moved to GPU.ProcessLifetimeEvents.SwiftShader.
  </obsolete>
  <owner>capn@chromium.org</owner>
  <summary>
    Counts of the number of process launches and crashes (when running on s/w).
  </summary>
</histogram>

<histogram name="GPU.TextureR16Ext_LuminanceF16" enum="GpuTextureResultR16_L16">
  <owner>hubbe@chromium.org</owner>
  <owner>rijubrata.bhaumik@intel.com</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Whether LUMINANCE_F16 and/or R16_EXT texture support is available. Recorded
    each time a new context group is initialized and extensions are detected.
  </summary>
</histogram>

<histogram name="GPU.TextureRG" enum="BooleanAvailable">
  <owner>reveman@chromium.org</owner>
  <summary>
    Whether RG texture support is available. Recorded each time a new context
    group is initialized and extensions are detected.
  </summary>
</histogram>

<histogram name="GPU.ThreeDAPIInfoBarDismissal"
    enum="GPUThreeDAPIInfoBarDismissal">
  <obsolete>
    Deprecated 04/2018. Infobar has been removed.
  </obsolete>
  <owner>vmiura@chromium.org</owner>
  <summary>Counts user actions when a 3D API info bar is raised.</summary>
</histogram>

<histogram name="GPU.VulkanExtSupport.VK_KHR_external_memory_win32"
    enum="BooleanSupported">
  <owner>vmiura@chromium.org</owner>
  <owner>magchen@chromium.org</owner>
  <summary>
    Whether the Vulkan extension VK_KHR_external_memory_win32 is supported in
    the GPU drivers. It is recorded 15 seconds after the browser launch.
  </summary>
</histogram>

<histogram name="GPU.VulkanExtSupport.VK_KHR_external_semaphore_win32"
    enum="BooleanSupported">
  <owner>vmiura@chromium.org</owner>
  <owner>magchen@chromium.org</owner>
  <summary>
    Whether the Vulkan extension VK_KHR_external_semaphore_win32 is supported in
    the GPU drivers. It is recorded 15 seconds after the browser launch.
  </summary>
</histogram>

<histogram name="GPU.VulkanExtSupport.VK_KHR_win32_keyed_mutex"
    enum="BooleanSupported">
  <owner>vmiura@chromium.org</owner>
  <owner>magchen@chromium.org</owner>
  <summary>
    Whether the Vulkan extension VK_KHR_win32_keyed_mutex is supported in the
    GPU drivers. It is recorded 15 seconds after the browser launch.
  </summary>
</histogram>

<histogram name="GPU.VulkanVersion" enum="VulkanVersion">
  <owner>vmiura@chromium.org</owner>
  <owner>magchen@chromium.org</owner>
  <summary>
    The maximum Vulkan API version supported in the gpu drivers. It is recorded
    15 seconds after the browser launch.
  </summary>
</histogram>

<histogram name="GPU.WaitForVBlankErrorCode" enum="WaitForVBlankErrorCode">
  <owner>stanisc@chromium.org</owner>
  <summary>
    Whether WaitForVBlank operation has been successful or failed with one of
    the errors prompting a backup delay based v-sync mechanism. Recorded each
    time a new GPU v-sync signal is generated.
  </summary>
</histogram>

<histogram name="GPU.WebGraphicsContext3D_Init_CanLoseContext"
    enum="GPUWebGraphicsContext3D_Init_CanLoseContext">
  <owner>vmiura@chromium.org</owner>
  <summary>
    Counts of context initialization that succeed or fail based on combinations
    of attributes requiring canRecoverFromContextLoss and devices that report
    can_lose_context. Failing Init is desired when a device can not guarantee it
    won't fail for a user that can not handle failures, e.g. DX9 on WinXP used
    by Canvas2D'
  </summary>
</histogram>

<histogram name="GPU.WinSAT.GamingScore">
  <owner>vmiura@chromium.org</owner>
  <summary>
    The WinSAT (Windows System Assessment Tool) gaming graphics score. It is in
    the range 1.0-5.9 on Vista, 1.0-7.9 on Win7 and 1.0-9.9 on Win8. 0
    represents a failure to get the score. This is collected each time Chrome is
    launched.
  </summary>
</histogram>

<histogram name="GPU.WinSAT.GamingScore2">
  <owner>vmiura@chromium.org</owner>
  <summary>
    The WinSAT (Windows System Assessment Tool) gaming graphics score, scaled by
    10x. It is in the range 10-59 on Vista, 10-79 on Win7 and 10-99 on Win8. 0
    represents a failure to get the score. This is collected each time Chrome is
    launched.
  </summary>
</histogram>

<histogram name="GPU.WinSAT.GraphicsScore">
  <owner>vmiura@chromium.org</owner>
  <summary>
    The WinSAT (Windows System Assessment Tool) graphics score. It is in the
    range 1.0-5.9 on Vista, 1.0-7.9 on Win7 and 1.0-9.9 on Win8. 0 represents a
    failure to get the score. This is collected each time Chrome is launched.
  </summary>
</histogram>

<histogram name="GPU.WinSAT.GraphicsScore2">
  <owner>vmiura@chromium.org</owner>
  <summary>
    The WinSAT (Windows System Assessment Tool) graphics score, scaled by 10x.
    It is in the range 10-59 on Vista, 10-79 on Win7 and 10-99 on Win8. 0
    represents a failure to get the score. This is collected each time Chrome is
    launched.
  </summary>
</histogram>

<histogram name="GPU.WinSAT.HasResults" enum="BooleanSuccess">
  <owner>vmiura@chromium.org</owner>
  <summary>
    A boolean representing whether or not we succeeded in getting the system's
    WinSAT scores. This is collected each time Chrome is launched.
  </summary>
</histogram>

<histogram name="GPU.WinSAT.OverallScore">
  <owner>vmiura@chromium.org</owner>
  <summary>
    The WinSAT (Windows System Assessment Tool) overall system score. This is
    the minimum of all the individual subscores. It is in the range 1.0-5.9 on
    Vista, 1.0-7.9 on Win7 and 1.0-9.9 on Win8. 0 represents a failure to get
    the score. This is collected each time Chrome is launched.
  </summary>
</histogram>

<histogram name="GPU.WinSAT.OverallScore2">
  <owner>vmiura@chromium.org</owner>
  <summary>
    The WinSAT (Windows System Assessment Tool) overall system score, scaled by
    10x. This is the minimum of all the individual subscores. It is in the range
    10-59 on Vista, 10-79 on Win7 and 10-99 on Win8. 0 represents a failure to
    get the score. This is collected each time Chrome is launched.
  </summary>
</histogram>

<histogram name="GPU.WinSAT.ReadResultsFileTime" units="microseconds">
  <owner>vmiura@chromium.org</owner>
  <summary>
    The amount of time it takes to read the WinSAT results. This is collected
    each time Chrome is launched.

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

<histogram name="Hardware.Display.Count.OnChange">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The number of displays present right after the user has attached or detached
    a new display. Excludes mirrored displays, but includes sleeping displays.
  </summary>
</histogram>

<histogram name="Hardware.Display.Count.OnStartup">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The number of displays present at start up. Excludes mirrored displays, but
    includes sleeping displays.
  </summary>
</histogram>

<histogram name="Hardware.Drive.HasSeekPenalty" enum="BooleanHasSeekPenalty">
  <owner>dbeam@chromium.org</owner>
  <summary>
    Whether a drive has a seek penalty (i.e. is a spinning disk). Emitted 0-2
    times shortly after startup when constructing the initial UMA log.
  </summary>
</histogram>

<histogram name="Hardware.Drive.HasSeekPenalty_Success" enum="BooleanSuccess">
  <owner>dbeam@chromium.org</owner>
  <summary>
    Whether it was possible to determine if a drive has a seek penalty. This can
    fail for various reasons (device drivers don't offer this information, the
    drive is still mounting, lack of access, etc.). Emitted twice shortly after
    startup when constructing the initial UMA log.

    Seek penalty detection is disabled on XP/Vista as of 9/24/2015 because it
    crashes too much. http://crbug.com/514822
  </summary>
</histogram>

<histogram name="Hardware.Drive.HasSeekPenalty_Time" units="ms">
  <owner>dbeam@chromium.org</owner>
  <summary>
    The amount of time it takes to determine whether a drive has a seek penalty.
    Emitted twice shortly after startup when constructing the initial UMA log.
  </summary>
</histogram>

<histogram name="Hardware.Serial.NewMinusOldDeviceListSize">
  <owner>charliea@chromium.org</owner>
  <summary>
    On Windows and Mac, we're implementing new methods to enumerate serial
    devices that provide us more information about the actual devices. This
    metric measures the difference between the number of devices that the new
    and old enumeration methods find. Once this metric gives us confidence that
    the new and old methods are at parity, we can cut out the old method
    altogether.
  </summary>
</histogram>

<histogram name="HeavyPageCapping.BlacklistReason" enum="OptOutBlacklistReason"
    expires_after="M75">
  <owner>ryansturm@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records that the capping heavy pages InfoBar was allowed or the specific
    reason that the feature was blacklisted from heavy page capping. Recorded
    when the triggering threshold is met for users with capping heavy pages
    enabled. Reasons are ordered in the same order they are checked.
  </summary>
</histogram>

<histogram name="HeavyPageCapping.InfoBarInteraction"
    enum="HeavyPageCappingInfoBarInteraction" expires_after="M75">
  <owner>ryansturm@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the details of user interaction with the heavy page capping InfoBar.
  </summary>
</histogram>

<histogram name="HeavyPageCapping.RecordedDataSavings" units="KB"
    expires_after="M75">
  <owner>ryansturm@chromium.org</owner>
  <summary>
    Records the data savings due to heavy page capping. This is recorded when
    the page is being terminated. This is not recorded when the tab is
    backgrounded, so android fast shutdown may result in this metric not being
    recorded. This is only recorded for page loads that were still paused when
    the page was terminated.
  </summary>
</histogram>

<histogram name="HIDDetection.OOBEDevicesDetectedOnContinuePressed"
    enum="HIDContinueScenarioType">
  <owner>merkulova@chromium.org</owner>
  <summary>
    Which HID were detected when user pressed Continue on OOBE dialog. This
    metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="HIDDetection.OOBEDialogShown">
  <owner>merkulova@chromium.org</owner>
  <summary>
    Whether HID detection dialog was shown on OOBE. Logged on screen show or on
    screen skip respectively. This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="HIDDetection.TimesDialogShownPerOOBECompleted">
  <owner>merkulova@chromium.org</owner>
  <summary>
    Records number of times the dialog was shown by the time OOBE is completed.
    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="Histogram.BadConstructionArguments" enum="HistogramNameHash">
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    The hash codes of histograms that were found to have bad construction
    arguments. These would be DCHECK exceptions in debug builds but have simply
    been logged and corrected as best as possible rather than crash.
  </summary>
</histogram>

<histogram name="Histogram.InconsistenciesBrowser" enum="Inconsistencies">
  <obsolete>
    Deprecated 7/2017.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The number of inconsistency events found when examining a single histogram's
    data in a browser for transmission via UMA.  Inconsistent data is NOT
    transmitted via UMA.  Each type of inconsistency is a bit, and all bits
    found in one histogram examination are added together to summarize the
    inconsistent event.  Note that the same inconsistency MAY appear time and
    again as the same corrupt histogram is examined for each potenital UMA
    upload.
  </summary>
</histogram>

<histogram name="Histogram.InconsistenciesBrowserUnique" enum="Inconsistencies">
  <obsolete>
    Deprecated 7/2017.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The number of inconsistency events found when examining a single histogram's
    data in a browser for transmission via UMA.  Inconsistent data is NOT
    transmitted via UMA.  Each type of inconsistency is a bit, and all bits
    found in one histogram examination are added together to summarize the
    inconsistent event.  Note that the same inconsistency will only appear at
    most one time for each histogram in a single process (i.e., duplicate
    corruption in a single histogram is not noted in this chart.)
  </summary>
</histogram>

<histogram name="Histogram.InconsistenciesChildProcess" enum="Inconsistencies">
  <obsolete>
    Deprecated 7/2017.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The number of inconsistency events found when examining a single histogram's
    data in a child process for transmission via UMA.  Inconsistent data is NOT
    transmitted via UMA.  Each type of inconsistency is a bit, and all bits
    found in one histogram examination are added together to summarize the
    inconsistent event.  Note that the same inconsistency MAY appear time and
    again as the same corrupt histogram is examined for each potenital UMA
    upload.
  </summary>
</histogram>

<histogram name="Histogram.InconsistenciesChildProcessUnique"
    enum="Inconsistencies">
  <obsolete>
    Deprecated 7/2017.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The number of inconsistency events found when examining a single histogram's
    data in a child process for transmission via UMA.  Inconsistent data is NOT
    transmitted via UMA.  Each type of inconsistency is a bit, and all bits
    found in one histogram examination are added together to summarize the
    inconsistent event.  Note that the same inconsistency will only appear at
    most one time for each histogram in a single process (i.e., duplicate
    corruption in a single histogram is not noted in this chart.)
  </summary>
</histogram>

<histogram name="Histogram.InconsistenciesRenderer" enum="Inconsistencies">
  <obsolete>
    Deprecated 7/2012.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The number of inconsistency events found when examining a single histogram's
    data in a renderer for transmission to the browser.  Inconsistent data is
    NOT transmitted to the browser.  Each type of inconsistency is a bit, and
    all bits found in one histogram examination are added together to summarize
    the inconsistent event.  Note that the same inconsistency MAY appear time
    and again as the same corrupt histogram is examined for each potenital UMA
    upload.
  </summary>
</histogram>

<histogram name="Histogram.InconsistenciesRendererUnique"
    enum="Inconsistencies">
  <obsolete>
    Deprecated 7/2012.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The number of inconsistency events found when examining a single histogram's
    data in a renderer for transmission to the browser.  Inconsistent data is
    NOT transmitted to the browser.  Each type of inconsistency is a bit, and
    all bits found in one histogram examination are added together to summarize
    the inconsistent event.  Note that the same inconsistency will only appear
    at most one time for each histogram in a single renderer process (i.e.,
    duplicate corruption in a single histogram is not noted in this chart.)
  </summary>
</histogram>

<histogram name="Histogram.InconsistentCountHigh">
  <obsolete>
    Deprecated 7/2017.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The number of extra samples counted in the redundant_count in a histogram
    that were not found by summing the samples in the buckets.
  </summary>
</histogram>

<histogram name="Histogram.InconsistentCountLow">
  <obsolete>
    Deprecated 7/2017.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The number of missing samples in the redundant_count in a histogram that
    were found by summing the samples in the buckets.
  </summary>
</histogram>

<histogram name="Histogram.InconsistentSnapshotBrowser">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The amount of discrepancy found when examining a single histogram's data in
    the browser process for transmission via UMA.  Inconsistent data is NOT
    transmitted via UMA.
  </summary>
</histogram>

<histogram name="Histogram.InconsistentSnapshotChildProcess">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The amount of discrepancy found when examining a single histogram's data in
    a child process for transmission via UMA.  Inconsistent data is NOT
    transmitted via UMA.
  </summary>
</histogram>

<histogram name="Histogram.InconsistentSnapshotRenderer">
  <obsolete>
    Deprecated 7/2012.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The amount of discrepancy found when examining a single histogram's data in
    a renderer process for transmission via UMA. Inconsistent data is NOT
    transmitted via UMA.
  </summary>
</histogram>

<histogram name="Histogram.MismatchedConstructionArguments"
    enum="HistogramNameHash">
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    The hash codes of histograms that were found to have construction arguments
    different from a previous instantiation of the same name. Entries here have
    conflicting definitions and should be investigated. Data collected for the
    secondary definitions will be silently dropped.
  </summary>
</histogram>

<histogram name="Histogram.PermanentNameChanged" enum="HistogramNameHash">
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    The hash codes of histograms of which the external name storage was altered
    after the histogram was created.
  </summary>
</histogram>

<histogram name="History.AttemptedToFixProfileError">
  <owner>brettw@chromium.org</owner>
  <summary>
    Logged whenever history database initialization fails. The frequency of
    logging will tell you the total failure rate. True indicate that we think
    the database is non-recoverable and it will be deleted. It should be
    re-created the next time Chrome is started. False indicates we think the
    error is temporary (like out of disk space or file locked). Chrome will run
    with no history database and nothing will be done to try to fix the error.
    See History.InitializationFailureStep for which particular step of history
    initialization failed.
  </summary>
</histogram>

<histogram
    name="History.ClearBrowsingData.HistoryNoticeShownInFooterWhenUpdated"
    enum="BooleanShown">
  <owner>msramek@chromium.org</owner>
  <summary>
    Whether a notice about other forms of browsing history was shown in the
    footer of the Clear Browsing Data dialog. This is recorded every time the
    dialog is opened.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.ImportantDeselectedNum">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Recorded when the user presses the 'clear' button when presented with the
    list of important sites they might want to exclude from clearing browsing
    data. We record the number of sites the user deselected, or protected, from
    clearing. The default has all sites selected.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.ImportantDeselectedPercent"
    units="%/5">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Recorded when the user presses the 'clear' button when presented with the
    list of important sites they might want to exclude from clearing browsing
    data. We record the percent of sites the user deselected, or protected, from
    clearing. The default has all sites selected, which is 0%. Note: To reduce
    the number of empty buckets, the percent is divided by 5.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.ImportantDialogShown"
    enum="BooleanShown">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Recorded when the user presses the 'clear' button in the clear browsing
    dialog. We record 'true' if the important sites dialog is shown.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.NumImportant">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Recorded when we successfuly fetched important sites in the clear browsing
    data screen. This is the number of sites that we think are important to the
    user.
  </summary>
</histogram>

<histogram
    name="History.ClearBrowsingData.PasswordsDeletion.AdditionalDatatypesCount">
  <owner>msramek@chromium.org</owner>
  <summary>
    Recorded when the user deletes their passwords in the ClearBrowsingData
    dialog. Counts how many other data types were selected for deletion.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.ShownHistoryNoticeAfterClearing"
    enum="BooleanShown">
  <owner>msramek@chromium.org</owner>
  <summary>
    Whether a dialog with a notice about other forms of browsing history was
    shown after the user deleted data from the Clear Browsing Data dialog.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.SpannableStringAppliedCorrectly"
    enum="Boolean">
  <owner>dullweber@chromium.org</owner>
  <owner>msramek@chromium.org</owner>
  <summary>
    Track whether the SpannableString is applied correctly in
    ClearBrowsingDataCheckbox.java. (crbug.com/783866)
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.TaskQueueAtShutdown">
  <owner>dullweber@chromium.org</owner>
  <owner>msramek@chromium.org</owner>
  <summary>
    The number of tasks that are in the task queue when the BrowsingDataRemover
    is destroyed.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.TimeSpentInDialog" units="ms">
  <owner>dullweber@chromium.org</owner>
  <owner>msramek@chromium.org</owner>
  <summary>
    Time spent in Clear Browsing Data dialog. From opening the dialog until data
    is cleared. This does not record users who exit the dialog without clearing.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.UserDeletedCookieOrCache"
    enum="CookieOrCacheDeletion">
  <owner>msramek@chromium.org</owner>
  <summary>
    Recorded when the user deletes their browsing data. Shows whether cookies
    and/or cache were among the selected data types.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.UserDeletedCookieOrCacheFromDialog"
    enum="CookieOrCacheDeletion">
  <owner>msramek@chromium.org</owner>
  <summary>
    Recorded when the user deletes their browsing data manually from the
    ClearBrowsingData dialog. Shows whether cookies and/or cache were among the
    selected data types.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.UserDeletedFromTab"
    enum="ClearBrowsingDataTab">
  <owner>dullweber@chromium.org</owner>
  <owner>msramek@chromium.org</owner>
  <summary>
    Recorded when the user deletes their browsing data. Shows which tab was used
    to perform the deletion.
  </summary>
</histogram>

<histogram name="History.DatabaseAdvancedMetricsTime" units="ms">
  <owner>shess@chromium.org</owner>
  <summary>
    Time spent on advanced History DB metrics calculation (weekly and monthly
    URL, host, and category counts). Advanced metrics are logged on
    initialization of the History DB on 0.3% of starts.
  </summary>
</histogram>

<histogram name="History.DatabaseBasicMetricsTime" units="ms">
  <owner>shess@chromium.org</owner>
  <summary>
    Time spent on basic History DB metrics calculation (file size and table
    counts). Basic metrics are logged on initialization of the History DB on 1%
    of starts.
  </summary>
</histogram>

<histogram name="History.DatabaseFileMB" units="MB">
  <owner>shess@chromium.org</owner>
  <summary>
    Size of History DB file. Duplicate of Profile.HistorySize and
    Sqlite.SizeKB.History. Logged on initialization of the History DB on 1% of
    starts.
  </summary>
</histogram>

<histogram name="History.DeleteFTSIndexDatabases" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Count of &quot;History Index *&quot; databases deleted.  These databases
    stored the full-text-search data for history, which was removed at r213442,
    this histogram tracks cleanup.
  </summary>
</histogram>

<histogram name="History.ExpireVisits.GetRedirectsDurationPercentage" units="%">
  <owner>calamity@chromium.org</owner>
  <summary>
    The percentage of time taken in ExpireHistoryBackend::ExpireVisits for
    calculating the redirect parent.
  </summary>
</histogram>

<histogram name="History.ExpireVisits.TotalDuration" units="ms">
  <owner>calamity@chromium.org</owner>
  <summary>
    The time taken to expire a list of visits. This is not scaled to the number
    of visits deleted, but gives an idea of how long a single request to
    ExpireHistoryBackend::ExpireVisits takes.
  </summary>
</histogram>

<histogram name="History.FaviconDatabaseAdvancedMetricsTime" units="ticks">
  <owner>rogerm@chromium.org</owner>
  <summary>
    The wall-clock time taken to gather favicon database metrics. Metrics are
    logged on initialization of the Favicon DB on 1% of starts.
  </summary>
</histogram>

<histogram name="History.FaviconDatabaseSizeMB" units="MB">
  <owner>rogerm@chromium.org</owner>
  <summary>
    Size of the Favicons database in MB. This is calculated as the number of
    pages consumed by the database multiplied by the page size. Logged on
    initialization of the Favicon DB on 1% of starts.
  </summary>
</histogram>

<histogram name="History.FaviconsRecoveredPercentage" units="%">
  <obsolete>
    No longer tracked as of March 2017.
  </obsolete>
  <owner>rpop@google.com</owner>
  <summary>
    Size of the recovered Favicons database relative to the original corrupt
    database.  Recovery is VACUUM-like, so the resulting database should always
    be smaller.  Substantial 100% results would indicate empty databases being
    recovered, substantial low% results would indicate very little data being
    recovered.
  </summary>
</histogram>

<histogram name="History.FaviconsRecoveredRowsFaviconBitmaps">
  <obsolete>
    No longer tracked as of March 2017.
  </obsolete>
  <owner>rpop@google.com</owner>
  <summary>
    Rows recovered from [favicon_bitmaps] table in Favicons recovery.
  </summary>
</histogram>

<histogram name="History.FaviconsRecoveredRowsFavicons">
  <obsolete>
    No longer tracked as of March 2017.
  </obsolete>
  <owner>rpop@google.com</owner>
  <summary>Rows recovered from [favicons] table in Favicons recovery.</summary>
</histogram>

<histogram name="History.FaviconsRecoveredRowsIconMapping">
  <obsolete>
    No longer tracked as of March 2017.
  </obsolete>
  <owner>rpop@google.com</owner>
  <summary>
    Rows recovered from [icon_mapping] table in Favicons recovery.
  </summary>
</histogram>

<histogram name="History.FaviconsRecovery" enum="HistoryFaviconsRecoveryEnum">
  <obsolete>
    No longer tracked as of March 2017.
  </obsolete>
  <owner>rpop@google.com</owner>
  <summary>
    Track results of SQLite database recovery code in thumbnail_database.cc.
  </summary>
</histogram>

<histogram name="History.FirstSetTopSitesDeltaSize">
  <owner>yiyaoliu@chromium.org</owner>
  <summary>
    The count of differences between cached top sites and up-to-date top sites
    when function TopSitesImpl::SetTopSites is firstly called at startup.
  </summary>
</histogram>

<histogram name="History.FirstUpdateTime" units="ms">
  <owner>yiyaoliu@chromium.org</owner>
  <summary>
    The amount of time for function
    history::TopSitesBackend::UpdateTopSitesOnDBThread to execute when this
    function is called during startup. Excludes the case where local
    TopSitesDatabase db_ is unavailable, i.e. where the update doesn't really
    happen.
  </summary>
</histogram>

<histogram name="History.HistoryPageView" enum="HistoryPageView">
  <owner>calamity@chromium.org</owner>
  <summary>
    The page of the MD History page shown to the user. Logged each time the user
    loads the MD History page or switches pages.
  </summary>
</histogram>

<histogram name="History.HistoryServiceInitTime" units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during HistoryService::Init.
  </summary>
</histogram>

<histogram name="History.InitializationFailureStep" enum="HistoryInitStep">
  <owner>brettw@chromium.org</owner>
  <summary>
    The phase of history initialization that failed. This histogram is only
    logged on database initialization failure.
    History.AttemptedToFixProfileError will tell how often initialization fails
    overall.
  </summary>
</histogram>

<histogram name="History.InMemoryDBItemCount">
  <owner>gab@chromium.org</owner>
  <summary>
    The number of typed URLs in the history database that are read into the
    &quot;in memory&quot; history database. This in memory copy of the typed
    URLs is used for synchronous inline autocomplete on the UI thread, while the
    larger slower service is run off of disk on a background thread. Recorded on
    profile open.
  </summary>
</histogram>

<histogram name="History.InMemoryDBKeywordTermsCount">
  <owner>gab@chromium.org</owner>
  <summary>
    Number of items in in-memory keyword_search_terms table. Recorded on profile
    open.
  </summary>
</histogram>

<histogram name="History.InMemoryDBKeywordTermsPopulate" units="ms"
    expires_after="2018-08-30">
  <owner>gab@chromium.org</owner>
  <summary>
    Time to load in-memory keyword_search_terms table from disk. Recorded on
    profile open.
  </summary>
</histogram>

<histogram name="History.InMemoryDBKeywordURLItemCount">
  <owner>gab@chromium.org</owner>
  <summary>
    Number of items in in-memory urls table. Recorded on profile open.
  </summary>
</histogram>

<histogram name="History.InMemoryDBKeywordURLPopulate" units="ms"
    expires_after="2018-08-30">
  <owner>gab@chromium.org</owner>
  <summary>
    Time to load in-memory urls table from disk urls table. Recorded on profile
    open.
  </summary>
</histogram>

<histogram name="History.InMemoryDBPopulate">
  <owner>gab@chromium.org</owner>
  <summary>
    The time it takes to read the typed URLs from the main history database into
    the &quot;in memory&quot; history database. This in memory copy of the typed
    URLs is used for synchronous inline autocomplete on the UI thread, while the
    larger slower service is run off of disk on a background thread. Recorded on
    profile open.
  </summary>
</histogram>

<histogram name="History.InMemoryTypedUrlVisitCount">
  <owner>gab@chromium.org</owner>
  <summary>
    The sum of the visit_count fields for all URLs in the &quot;in memory&quot;
    history database. This corresponds to the number of times the user has
    visited the typed URLs in the last 30 days (excluding page reloads, since
    the history database does not increment the visit_count in that case).
    Recorded on profile open.
  </summary>
</histogram>

<histogram name="History.InMemoryURLCacheSize" units="bytes">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Size of on-disk cache for in-memory url index. Recorded on profile open when
    restoring from a cache file.
  </summary>
</histogram>

<histogram name="History.InMemoryURLChars">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Number of items in the in-memory url index char_word_map_. Recorded on
    profile open when restoring from a cache file and again shortly after
    profile open when rebuilding the in-memory url index from history.
  </summary>
</histogram>

<histogram name="History.InMemoryURLHistoryItems">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Number of history items in the in-memory url index. Recorded on profile open
    when restoring from a cache file and again shortly after profile open when
    rebuilding the in-memory url index from history.
  </summary>
</histogram>

<histogram name="History.InMemoryURLIndexingTime" units="ms"
    expires_after="2018-08-30">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Time to rebuild in-memory url index from main history database. Recorded
    once shortly after profile open.
  </summary>
</histogram>

<histogram name="History.InMemoryURLIndexRestoreCacheTime" units="ms">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Time to restore the in-memory url index from disk cache. Recorded on profile
    open.
  </summary>
</histogram>

<histogram name="History.InMemoryURLIndexSaveCacheTime" units="ms"
    expires_after="2018-08-30">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Time to write in-memory url index to disk cache. Recorded once shortly after
    profile open (after rebuilding the in-memory url index from history) and
    again upon (clean) shutdown.
  </summary>
</histogram>

<histogram name="History.InMemoryURLWords">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Number of items in in-memory url index word_map_. Recorded on profile open
    when restoring from a cache file and again shortly after profile open when
    rebuilding the in-memory url index from history.
  </summary>
</histogram>

<histogram name="History.MigrateFailureFromVersion">
  <owner>brettw@chromium.org</owner>
  <summary>
    History database version from which history migration failed. If there are
    higher than normal migration failures, this histogram will indicate which
    migration step failed.
  </summary>
</histogram>

<histogram name="History.MonthlyHostCount">
  <owner>shess@chromium.org</owner>
  <summary>
    Unique hostnames in History database urls table with last-visit times in the
    last 30 days. Metrics are logged on initialization of the History DB on 0.3%
    of starts.
  </summary>
</histogram>

<histogram name="History.MonthlyURLCount">
  <owner>shess@chromium.org</owner>
  <summary>
    Unique URLs in History database urls table with last-visit times in the last
    30 days. Metrics are logged on initialization of the History DB on 0.3% of
    starts.
  </summary>
</histogram>

<histogram name="History.MonthlyVisitCount">
  <owner>shess@chromium.org</owner>
  <summary>
    Number of rows in History visits table with visit times in the last 30 days.
    Metrics are logged on initialization of the History DB on 1% of starts.
  </summary>
</histogram>

<histogram name="History.NumFaviconBitmapsInDB">
  <owner>rogerm@chromium.org</owner>
  <summary>
    The total number of favicon bitmaps (of all sizes) cached in a user's
    Favicon database. A given favicon URL may be associated with multiple
    bitmaps (of different sizes). Logged on initialization of the Favicon DB on
    1% of starts.
  </summary>
</histogram>

<histogram name="History.NumFaviconMappingsInDB">
  <owner>rogerm@chromium.org</owner>
  <summary>
    The number of page URL (e.g., http://www.google.com) to favicon URL (e.g.,
    http://www.google.com/favicon.ico) mappings stored in a user's Favicon
    database. Logged on initialization of the Favicon DB on 1% of starts.
  </summary>
</histogram>

<histogram name="History.NumFaviconsInDB">
  <owner>rogerm@chromium.org</owner>
  <summary>
    The total number of favicon URLs (e.g. http://www.google.com/favicon.ico)
    tracked in a user's Favicon database. This metric tracks knowledge of a
    favicon URL not whether there are cached bitmaps for that favicon URL. See
    History.NumFaviconBitmapsInDB for that. Logged on initialization of the
    Favicon DB on 1% of starts.
  </summary>
</histogram>

<histogram name="History.NumLargeFaviconBitmapsInDB">
  <owner>rogerm@chromium.org</owner>
  <summary>
    The total number of large (&gt;= 64 pixels wide) favicons being tracked in a
    user's Favicon database. This is a subset of History.NumFaviconBitmapsInDB,
    which includes all sizes in its count. Logged on initialization of the
    Favicon DB on 1% of starts.
  </summary>
</histogram>

<histogram name="History.NumTouchIconsInDB">
  <owner>rogerm@chromium.org</owner>
  <summary>
    The total number of touch icons being tracked in a user's Favicon database.
    This is a subset of History.NumFaviconsInDB, which includes all icon types
    in its count. Logged on initialization of the Favicon DB on 1% of starts.
  </summary>
</histogram>

<histogram name="History.QueryMostVisitedURLsTime" units="ms">
  <owner>chengx@chromium.org</owner>
  <summary>
    The amount of time for function HistoryBackend::QueryMostVisitedURLs to
    execute. Excludes the case where local HistoryDatabase db_ is unavailable,
    i.e. where the query doesn't really happen.
  </summary>
</histogram>

<histogram name="History.ResultsRenderedTime" units="ms">
  <owner>tsergeant@chromium.org</owner>
  <summary>
    Records the time taken to load the history Web UI and render (at least) a
    screen full of items. This is roughly equivalent to 'time to first
    meaningful paint' for the history page.
  </summary>
</histogram>

<histogram name="History.ShownHeaderAboutOtherFormsOfBrowsingHistory"
    enum="BooleanShown">
  <owner>msramek@chromium.org</owner>
  <summary>
    Whether the notice about other forms of browsing history was shown in the
    header of the History page when the header was displayed. The header is
    refreshed with every history query.
  </summary>
</histogram>

<histogram name="History.TopHostsVisitsByRank" units="rank">
  <owner>twifkak@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Page visits to each of a user's top 50 hosts. The bucket is the 1-based rank
    of the host. Visits to all other hosts go into the 51st bucket.
    Android-only. Only counts the last URL in a redirect chain. The list of top
    hosts is computed approximately nightly. This means that a given day will
    likely include a recalculation of top hosts, and therefore a given bucket
    may represent two different hosts at different times of day.
  </summary>
</histogram>

<histogram name="History.TopSitesRecoveredPercentage" units="%">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Size of the recovered TopSites database relative to the original corrupt
    database.  Recovery is VACUUM-like, so the resulting database should always
    be smaller.  Substantial 100% results would indicate empty databases being
    recovered, substantial low% results would indicate very little data being
    recovered.
  </summary>
</histogram>

<histogram name="History.TopSitesRecoveredRowsThumbnails">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Rows recovered from [thumbnails] table in TopSites recovery.
  </summary>
</histogram>

<histogram name="History.TopSitesRecovery" enum="HistoryTopSitesRecoveryEnum"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The TopSites recovery code is written conservatively, with successful
    recovery committed and any failure leading to rollback. This tracks the
    outcomes to determine which cases are high-frequency enough to warrant
    adding additional code to handle them (versus simply deleting the data).
  </summary>
</histogram>

<histogram name="History.TopSitesVisitsByRank" units="rank">
  <obsolete>
    Deprecated as of 11/2014.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page visits to each of a user's top 50 sites. Visits to all other sites go
    into the 51st bucket. Only count the page visit if it came from user
    browsing and only count it once when cycling through a redirect chain.
  </summary>
</histogram>

<histogram name="History.UpdateTopSitesOnDBThreadTime" units="ms">
  <obsolete>
    Deprecated because only the execution time at startup is of interest. See
    histogram History.UpdateTopSitesOnDBThread_Startup_Time.
  </obsolete>
  <owner>yiyaoliu@chromium.org</owner>
  <summary>
    The amount of time for function
    history::TopSitesBackend::UpdateTopSitesOnDBThread to execute. Excludes the
    case where local TopSitesDatabase db_ is unavailable, i.e. where the update
    doesn't really happen.
  </summary>
</histogram>

<histogram name="History.URLTableCount">
  <owner>shess@chromium.org</owner>
  <summary>
    Number of rows in urls table in History DB. Metrics are logged on
    initialization of the History DB on 1% of starts.
  </summary>
</histogram>

<histogram name="History.VisitTableCount">
  <owner>shess@chromium.org</owner>
  <summary>
    Number of rows in visits table in History DB. Metrics are logged on
    initialization of the History DB on 1% of starts.
  </summary>
</histogram>

<histogram name="History.WeeklyHostCount">
  <owner>shess@chromium.org</owner>
  <summary>
    Unique hostnames in History database urls table with last-visit times in the
    last 7 days. Metrics are logged on initialization of the History DB on 0.3%
    of starts.
  </summary>
</histogram>

<histogram name="History.WeeklyURLCount">
  <owner>shess@chromium.org</owner>
  <summary>
    Unique URLs in History database urls table with last-visit times in the last
    7 days. Metrics are logged on initialization of the History DB on 0.3% of
    starts.
  </summary>
</histogram>

<histogram name="History.WeeklyVisitCount">
  <owner>shess@chromium.org</owner>
  <summary>
    Number of rows in History visits table with visit times in the last 7 days.
    Metrics are logged on initialization of the History DB on 1% of starts.
  </summary>
</histogram>

<histogram name="HistoryPage.ClickPosition">
  <owner>rpop@google.com</owner>
  <summary>
    Number of entries that the clicked entry is older than in History page. Last
    bucket is any entry of that value or higher.
  </summary>
</histogram>

<histogram name="HistoryPage.ClickPositionSubset">
  <owner>rpop@google.com</owner>
  <summary>
    Subset of the Click Position histogram. Contains only the first smaller
    subset of entries on the page. Number of entries that the clicked entry is
    older than in History page. Last bucket is entries of that value or higher.
  </summary>
</histogram>

<histogram name="HistoryPage.OtherDevicesMenu" enum="OtherSessionsActions">
  <owner>mad@chromium.org</owner>
  <owner>rpop@google.com</owner>
  <summary>
    Histogram for usage of the section in the history page that allows the user
    to access tabs from other devices.
  </summary>
</histogram>

<histogram name="HistoryPage.RemoveEntryPosition">
  <owner>rpop@google.com</owner>
  <summary>
    Number of entries that the deleted entry is older than in History page. Last
    bucket is any entry of that value or higher. Confirmed removal is not
    guaranteed, just an initiation of 'Remove selected items'.
  </summary>
</histogram>

<histogram name="HistoryPage.RemoveEntryPositionSubset">
  <owner>rpop@google.com</owner>
  <summary>
    Subset of Remove Entry Position histogram. Contains only the first smaller
    subset of entries on the page. Number of entries that the deleted entry is
    older than in History page. Last bucket is any entry of that value or
    higher. Confirmed removal is not guaranteed, just an initiation of 'Remove
    selected items'.
  </summary>
</histogram>

<histogram name="HostedAppFrame.ContentSettings.ImagePressed"
    enum="ContentSettingImageType">
  <owner>calamity@chromium.org</owner>
  <summary>
    Counts which content setting buttons in the hosted app frame are pressed by
    the user.
  </summary>
</histogram>

<histogram name="HostedAppFrame.WrenchMenu.MenuAction" enum="WrenchMenuAction">
  <owner>calamity@chromium.org</owner>
  <summary>
    Number of times that each menu item is clicked from the hosted app window
    menu button.
  </summary>
</histogram>

<histogram name="Hotword.AudioLoggingEnabled" enum="BooleanEnabled">
  <obsolete>
    Deprecated as of 10/2017. Feature removed with crbug/761426.
  </obsolete>
  <owner>rlp@chromium.org</owner>
  <summary>
    The state of the hotword audio logging preference. This value is emitted
    each time the hotword availability is requested by the extension if the user
    is also opted in to hotword voice search. This check typically happens each
    time a hotword search is initiated.
  </summary>
</histogram>

<histogram name="Hotword.Enabled" enum="HotwordPrefState">
  <obsolete>
    Deprecated as of 10/2017. Feature removed with crbug/761426.
  </obsolete>
  <owner>rlp@chromium.org</owner>
  <summary>
    The state of the hotword preference. This value is emitted during
    HotwordService initialization which happens during Profile initialization.
  </summary>
</histogram>

<histogram name="Hotword.ExtensionAvailability" enum="HotwordAvailability">
  <obsolete>
    Deprecated as of 10/2017. Feature removed with crbug/761426.
  </obsolete>
  <owner>rlp@chromium.org</owner>
  <summary>
    Whether the external component hotword extension exists (i.e., not pending
    download, disabled, etc.). This value is emitted each time the hotword
    availability is requested by the extension which typically happens each time
    a hotword search is initiated.
  </summary>
</histogram>

<histogram name="Hotword.HotwordError" enum="HotwordError">
  <obsolete>
    Deprecated as of 10/2017. Feature removed with crbug/761426.
  </obsolete>
  <owner>rlp@chromium.org</owner>
  <summary>
    Errors reported by the hotword service when determining if hotwording is
    available. Non-errors are also reported so that errors can be seen as a
    percentage of total requests.
  </summary>
</histogram>

<histogram name="Hotword.HotwordMediaStreamResult"
    enum="HotwordMediaStreamResult">
  <obsolete>
    Deprecated as of 10/2017. Feature removed with crbug/761426.
  </obsolete>
  <owner>amistry@chromium.org</owner>
  <owner>rlp@chromium.org</owner>
  <owner>somast@chromium.org</owner>
  <summary>
    Success or error when attempting to open a MediaStream for the microphone.
    At most one success or error will be logged for an attempt to open a stream.
  </summary>
</histogram>

<histogram name="Hotword.HotwordNaClMessageTimeout"
    enum="HotwordNaClMessageTimeout">
  <obsolete>
    Deprecated as of 10/2017. Feature removed with crbug/761426.
  </obsolete>
  <owner>amistry@chromium.org</owner>
  <owner>rlp@chromium.org</owner>
  <owner>somast@chromium.org</owner>
  <summary>
    Timeout occured while waiting for a message from the NaCl hotword detector
    plugin. This value is the message that was expected to be received from the
    plugin.
  </summary>
</histogram>

<histogram name="Hotword.HotwordNaClPluginLoadResult"
    enum="HotwordNaClPluginLoadResult">
  <obsolete>
    Deprecated as of 10/2017. Feature removed with crbug/761426.
  </obsolete>
  <owner>amistry@chromium.org</owner>
  <owner>rlp@chromium.org</owner>
  <owner>somast@chromium.org</owner>
  <summary>
    Success or error when attempting to load the NaCl hotword detector plugin.
  </summary>
</histogram>

<histogram name="Hotword.HotwordTriggerSource" enum="HotwordTriggerSource">
  <obsolete>
    Deprecated as of 10/2017. Feature removed with crbug/761426.
  </obsolete>
  <owner>amistry@chromium.org</owner>
  <owner>rlp@chromium.org</owner>
  <owner>somast@chromium.org</owner>
  <summary>
    Location of hotword trigger. Emitted every time the hotword is triggered by
    the user saying 'Ok Google'.
  </summary>
</histogram>

<histogram name="Hotword.SharedModuleReinstallLanguage" enum="LanguageCode">
  <obsolete>
    Deprecated as of 10/2017. Feature removed with crbug/761426.
  </obsolete>
  <owner>amistry@chromium.org</owner>
  <owner>rlp@chromium.org</owner>
  <owner>somast@chromium.org</owner>
  <summary>
    Language, switched to by the user, that triggered a hotword shared module
    reinstall.
  </summary>
</histogram>

<histogram name="HttpCache.AccessToDone" units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>
    For every http cache transaction with a pattern (see HttpCache.Pattern), the
    time from the first access to the disk cache until the transaction was done.
  </summary>
</histogram>

<histogram base="true" name="HttpCache.AfterSend" units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>
    For http cache transactions in which a network request was sent, the time
    elapsed between sending it over the network until the transaction was done.
  </summary>
</histogram>

<histogram name="HttpCache.AsyncValidationDuration" units="ms">
  <obsolete>
    Deprecated as of 3/2015.
  </obsolete>
  <owner>ricea@chromium.org</owner>
  <summary>
    The time spent performing an asynchronous revalidation that was triggered by
    a Cache-Control: stale-while-revalidate directive. This is recorded when the
    asynchronous revalidation completes, either after the response was
    completely read or an error occurred. One entry is recorded for each
    asynchronous revalidation that is performed.
  </summary>
</histogram>

<histogram name="HttpCache.BeforeSend" units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>
    For http cache transactions in which a network request was sent, the time
    elapsed between beginning the request and sending it over the network; this
    is the time spent accessing the disk cache.
  </summary>
</histogram>

<histogram name="HttpCache.CantConditionalizeCause"
    enum="HttpCacheValidationCause">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    For each request that results in an unconditionalizable network request, the
    cause for the request.
  </summary>
</histogram>

<histogram name="HttpCache.CantConditionalizeZeroFreshnessFromMemHint"
    enum="Boolean">
  <owner>morlovich@chromium.org</owner>
  <summary>
    For each request with HttpCache.CantConditionalizeCause == Zero Freshness,
    this is true iff the zero freshness status was determined by looking at
    in-memory hints in disk cache index, rather than by opening the entry and
    looking at headers.
  </summary>
</histogram>

<histogram name="HttpCache.EntryLockWait" units="ms">
  <owner>jkarlin@chromium.org</owner>
  <owner>morlovich@chromium.org</owner>
  <summary>
    The time spent waiting for write lock on a disk cache entry.
  </summary>
</histogram>

<histogram name="HttpCache.ExternallyConditionalized"
    enum="ExternallyConditionalizedType">
  <obsolete>
    stale-while-revalidate implementation removed for now, see
    https://crbug.com/700568.
  </obsolete>
  <owner>ricea@chromium.org</owner>
  <summary>
    Count of the number of external (ie. from Blink) conditionalized requests,
    and whether or not those requests could have been served from the browser
    cache.
  </summary>
</histogram>

<histogram name="HttpCache.OfflineStatus" enum="OfflineStatus">
  <obsolete>
    Deprecated 4/2015.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Result of a main page HttpCacheTransaction if offline mode had been enabled.
  </summary>
</histogram>

<histogram name="HttpCache.ParallelWritingPattern"
    enum="HttpCacheParallelWritingPattern">
  <owner>shivanisha@chromium.org</owner>
  <summary>
    Records whether a transaction either created a Writers object when one
    didn't exist, or joined an existing Writers object, or why it failed to do
    so (e.g., it's a range request, it's not a GET request, etc.).
  </summary>
</histogram>

<histogram name="HttpCache.Pattern" enum="HttpCachePattern">
  <owner>morlovich@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>For each http cache transaction, the recorded pattern.</summary>
</histogram>

<histogram name="HttpCache.PercentBeforeSend" units="%">
  <owner>morlovich@chromium.org</owner>
  <summary>
    For http cache transactions in which a network request was sent, the
    percentage of total request time that elapsed before sending the request
    over the network; this is the time spent accessing the disk cache.
  </summary>
</histogram>

<histogram name="HttpCache.ReadErrorNonRestartable" enum="NetErrorCodes">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Net error results from non-restartable cache read errors.</summary>
</histogram>

<histogram name="HttpCache.ReadErrorRestartable" enum="NetErrorCodes">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Net error results from restartable cache read errors.</summary>
</histogram>

<histogram name="HttpCache.StaleEntry.FreshnessPeriodsSinceLastUsed">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    For each http cache transaction for which a cache entry exists but it cannot
    be used because the entry's age is beyond its freshness: counts how many
    freshness periods have elapsed since the entry was last used (x1000).
  </summary>
</histogram>

<histogram name="HttpCache.StaleEntry.Updated.Age" units="seconds">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    For each http cache transaction for which a validation attempt is made due
    to a stale entry and is updated (e.g., 200), records the age of the entry in
    seconds.
  </summary>
</histogram>

<histogram name="HttpCache.StaleEntry.Updated.AgeInFreshnessPeriods" units="%">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    For each http cache transaction for which a validation attempt is made due
    to a stale entry and is updated (e.g., 200), records the age of the entry as
    percentage of freshness period.
  </summary>
</histogram>

<histogram name="HttpCache.StaleEntry.Validated.Age" units="seconds">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    For each http cache transaction for which a validation attempt is made due
    to a stale entry and is validated (304), records the age of the entry in
    seconds.
  </summary>
</histogram>

<histogram name="HttpCache.StaleEntry.Validated.AgeInFreshnessPeriods"
    units="%">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    For each http cache transaction for which a validation attempt is made due
    to a stale entry and is validated (304), records the age of the entry as
    percentage of freshness period.
  </summary>
</histogram>

<histogram name="HttpCache.ValidationCause" enum="HttpCacheValidationCause">
  <owner>jkarlin@chromium.org</owner>
  <summary>For each validation attempt, the cause for the validation.</summary>
</histogram>

<histogram name="HttpCache.Vary" enum="VaryType">
  <obsolete>
    Deprecated as of 11/2014.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The type of Vary header for a given GET response.</summary>
</histogram>

<histogram name="Hyphenation.Open" units="ms">
  <owner>kojii@chromium.org</owner>
  <summary>The time it takes to open a hyphenation dictionary.</summary>
</histogram>

<histogram name="Hyphenation.Open.File" units="ms">
  <owner>kojii@chromium.org</owner>
  <summary>The time it takes to open a hyphenation dictionary file.</summary>
</histogram>

<histogram name="Import.ImportedHistorySize.AutoImportFromIE" units="urls">
  <owner>gcomanici@chromium.org</owner>
  <summary>
    The size of the history on Auto Import from IE. This measure is only logged
    on a succesfull Auto Import.
  </summary>
</histogram>

<histogram name="Import.ImporterType.AutoImport" enum="ImporterType"
    expires_after="2018-08-30">
  <owner>gab@chromium.org</owner>
  <summary>The importer used on first run Auto Import.</summary>
</histogram>

<histogram name="Import.ImporterType.BookmarksAPI" enum="ImporterType">
  <owner>gab@chromium.org</owner>
  <summary>The importer used on import from the bookmarks file API.</summary>
</histogram>

<histogram name="Import.ImporterType.ImportDataHandler" enum="ImporterType"
    expires_after="2018-08-30">
  <owner>gab@chromium.org</owner>
  <summary>
    The importer used on import from the chrome://settings/importData UI.
  </summary>
</histogram>

<histogram name="Import.IncludesPasswords.Firefox" enum="BooleanChecked">
  <owner>vabr@chromium.org</owner>
  <owner>hurims@gmail.com</owner>
  <summary>
    Whether or not the password checkbox is checked when importing a profile of
    Firefox. Note that canceled imports could be counted also.
  </summary>
</histogram>

<histogram name="Import.NumberOfImportedPasswords.Firefox">
  <owner>vabr@chromium.org</owner>
  <owner>hurims@gmail.com</owner>
  <summary>
    The number of passwords that are imported from Firefox. This is recorded
    when importing a profile of Firefox with the password checkbox checked. Note
    that the reported number of password could be slightly bigger than the
    actual number of imported passwords because some incomplete or blacklisted
    passwords that are dropped while importing might be included in the reported
    value.
  </summary>
</histogram>

<histogram name="Import.ShowDialog.FromBookmarkBarView" units="seconds"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The amount of time from install time to time that user opens import dialog
    from BookmarkBarView.
  </summary>
</histogram>

<histogram name="Import.ShowDialog.FromFloatingBookmarkBarView" units="seconds"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The amount of time from install time to time that user opens import dialog
    from NTP floating BookmarkBarView.
  </summary>
</histogram>

<histogram name="Import_ShowDlg.FromBookmarkBarView" units="seconds">
  <obsolete>
    Deprecated and replaced by Import.ShowDialog.FromBookmarkBarView
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The amount of time from install time to time that user opens import dialog
    from BookmarkBarView.
  </summary>
</histogram>

<histogram name="Import_ShowDlg.FromFloatingBookmarkBarView" units="seconds">
  <obsolete>
    Deprecated and replaced by Import.ShowDialog.FromFloatingBookmarkBarView
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The amount of time from install time to time that user opens import dialog
    from NTP floating BookmarkBarView.
  </summary>
</histogram>

<histogram name="ImportantFile.FileCreateError" enum="PlatformFileError">
  <owner>xaerox@yandex-team.ru</owner>
  <summary>
    File error happened upon temporary file creation at ImportantFileWriter.
  </summary>
</histogram>

<histogram name="ImportantFile.FileDeleteError" enum="PlatformFileError">
  <owner>xaerox@yandex-team.ru</owner>
  <summary>
    File error happened upon temporary file deletion at ImportantFileWriter.
  </summary>
</histogram>

<histogram name="ImportantFile.FileOpenError" enum="PlatformFileError">
  <owner>xaerox@yandex-team.ru</owner>
  <summary>
    File error happened upon opening temporary file at ImportantFileWriter.
  </summary>
</histogram>

<histogram name="ImportantFile.FileRenameError" enum="PlatformFileError">
  <owner>xaerox@yandex-team.ru</owner>
  <summary>
    File error happened upon temporary file renaming at ImportantFileWriter.
  </summary>
</histogram>

<histogram name="ImportantFile.FileWriteError" enum="PlatformFileError">
  <owner>xaerox@yandex-team.ru</owner>
  <summary>
    File error happened upon writing data to temporary file at
    ImportantFileWriter.
  </summary>
</histogram>

<histogram name="ImportantFile.TempFileFailures" enum="TempFileFailure">
  <owner>rvargas@chromium.org</owner>
  <summary>
    Count of various failures in ImportantFileWrite when manipulating a temp
    file to write to before moving it into place (replacing another file).
  </summary>
</histogram>

<histogram name="ImportantFile.TimeToWrite" units="ms">
  <owner>mamir@chromium.org</owner>
  <summary>
    Time used to atomically write string into a file using ImportantFileWriter.
  </summary>
</histogram>

<histogram name="IncognitoModePrefs.WindowsParentalControlsInitThread"
    enum="ThreadType">
  <owner>robliao@chromium.org</owner>
  <summary>
    The thread used to initialize the Windows parental controls.
  </summary>
</histogram>

<histogram name="IncognitoModePrefs.WindowsParentalControlsInitTime" units="ms">
  <owner>robliao@chromium.org</owner>
  <summary>
    The amount of time that elapsed during a run of
    PlatformParentalControlsValue::IsParentalControlActivityLoggingOnImpl on
    Windows 7 and above.
  </summary>
</histogram>

<histogram name="IncompatibleApplicationsPage.AddedPostCrash"
    enum="BooleanShown">
  <owner>pmonette@chromium.org</owner>
  <summary>
    Records whether the user was automatically shown the
    chrome://settings/incompatibleApplications page following a Chrome crash.
  </summary>
</histogram>

<histogram name="IncompatibleApplicationsPage.NumApplications"
    units="applications">
  <owner>pmonette@chromium.org</owner>
  <summary>
    The number of incompatible applications detected by Chrome at the time the
    chrome://settings/incompatibleApplications page was opened.
  </summary>
</histogram>

<histogram name="InertialSensor.AccelerometerAndroidAvailable"
    enum="BooleanAvailable">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Whether the Sensor.TYPE_LINEAR_ACCELERATION was available at the start of
    Device Motion.
  </summary>
</histogram>

<histogram name="InertialSensor.AccelerometerIncGravityAndroidAvailable"
    enum="BooleanAvailable">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Whether the Sensor.TYPE_ACCELEROMETER was available at the start of Device
    Motion.
  </summary>
</histogram>

<histogram name="InertialSensor.AccelerometerWindowsAvailable"
    enum="BooleanAvailable">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Whether the SENSOR_TYPE_ACCELEROMETER_3D was available at the start of
    Device Motion on the Windows platform.
  </summary>
</histogram>

<histogram name="InertialSensor.DeviceOrientationSensorAndroid"
    enum="DeviceOrientationSensorTypeAndroid">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Provides a histogram of the base sensors (if any) that are used at the start
    of the Device Orientation API. Currently Sensor.TYPE_GAME_ROTATION_VECTOR is
    the default sensor for orientation, if it's not available fall-back options
    are provided by using either Sensor.TYPE_ROTATION_VECTOR or a combination of
    Sensor.TYPE_ACCELEROMETER and Sensor.TYPE_MAGNETIC_FIELD.
  </summary>
</histogram>

<histogram name="InertialSensor.GyrometerWindowsAvailable"
    enum="BooleanAvailable">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Whether the SENSOR_TYPE_GYROMETER_3D was available at the start of Device
    Motion on the Windows platform.
  </summary>
</histogram>

<histogram name="InertialSensor.GyroscopeAndroidAvailable"
    enum="BooleanAvailable">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Whether the Sensor.TYPE_GYROSCOPE was available at the start of Device
    Motion.
  </summary>
</histogram>

<histogram name="InertialSensor.InclinometerWindowsAvailable"
    enum="BooleanAvailable">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Whether the SENSOR_TYPE_INCLINOMETER_3D was available at the start of Device
    Orientation on the Windows platform.
  </summary>
</histogram>

<histogram name="InertialSensor.MotionDefaultAvailable" enum="BooleanAvailable">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    This histogram counts the number of Device Motion API invocations in the
    default implementation (Linux and CrOS). The default implementation does not
    provide any sensors so the result is always false.
  </summary>
</histogram>

<histogram name="InertialSensor.MotionMacAvailable" enum="BooleanAvailable">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Whether the sudden motion sensor was available at the start of Device Motion
    on the MacOS platform.
  </summary>
</histogram>

<histogram name="InertialSensor.OrientationDefaultAvailable"
    enum="BooleanAvailable">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    This histogram counts the number of Device Orientation API invocations in
    the default implementation (Linux and CrOS). The default implementation does
    not provide any sensors so the result is always false.
  </summary>
</histogram>

<histogram name="InertialSensor.OrientationMacAvailable"
    enum="BooleanAvailable">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Whether the sudden motion sensor was available at the start of Device
    Orientation on the MacOS platform.
  </summary>
</histogram>

<histogram name="InertialSensor.RotationVectorAndroidAvailable"
    enum="BooleanAvailable">
  <obsolete>
    Deprecated 11/2014 (crbug.com/347507). Replaced by
    InertialSensor.DeviceOrientationSensorAndroid.
  </obsolete>
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Whether the Sensor.TYPE_ROTATION_VECTOR was available at the start of Device
    Orientation.
  </summary>
</histogram>

<histogram name="InfoBar.Shown" enum="InfoBarIdentifier">
  <owner>dfalcantara@chromium.org</owner>
  <owner>rkaplow@chromium.org</owner>
  <summary>
    Records how many times a particular infobar was shown to the user. On
    Android, the infobar may be partially hidden due to stacking. On desktop, a
    tab with a visible infobar will increment this histogram every time the user
    switches away from the tab and back to it with the infobar still visible.
  </summary>
</histogram>

<histogram name="InfoBar.Shown.Hidden" enum="InfoBarIdentifier">
  <owner>dfalcantara@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    Records how many times a particular infobar was displayed in a hidden state
    due to at least one other infobar existing. If there are no existing
    infobars, but the user scrolls at the exact moment a new infobar is added,
    the infobar may be hidden, but not recorded in this metric. Reliably
    triggering and detecting this combination is tricky so it isn't done. Only
    recorded on Android.
  </summary>
</histogram>

<histogram name="InfoBar.Shown.Hiding" enum="InfoBarIdentifier">
  <owner>dfalcantara@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    Records how many times a particular infobar was visible and hiding a new
    infobar behind it. Only recorded on Android.
  </summary>
</histogram>

<histogram name="InfoBar.Shown.Visible" enum="InfoBarIdentifier">
  <owner>dfalcantara@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    Records how many times a particular infobar was displayed in a visible state
    due to no other infobars existing. If there are no existing infobars, but
    the user scrolls at the exact moment a new infobar is added, the infobar may
    be hidden, but recorded here as visible. Reliably triggering and detecting
    this combination is tricky so it isn't done. Only recorded on Android.
  </summary>
</histogram>

<histogram name="InProductHelp.Config.ParsingEvent" enum="ConfigParsingEvent">
  <owner>nyquist@chromium.org</owner>
  <owner>xingliu@chromium.org</owner>
  <summary>
    Records if in-product help configuration is parsed correctly, and the
    failure reasons for parsing failures.
  </summary>
</histogram>

<histogram base="true" name="InProductHelp.Db.Init" enum="BooleanSuccess">
  <owner>nyquist@chromium.org</owner>
  <owner>xingliu@chromium.org</owner>
<!-- Name completed by histogram_suffixes name="IPHDatabase" -->

  <summary>
    Records if database initialization succeeds for in-product help.
  </summary>
</histogram>

<histogram base="true" name="InProductHelp.Db.Load" enum="BooleanSuccess">
  <owner>nyquist@chromium.org</owner>
  <owner>xingliu@chromium.org</owner>
<!-- Name completed by histogram_suffixes name="IPHDatabase" -->

  <summary>
    Records if database successfully loads the data for in-product help.
  </summary>
</histogram>

<histogram name="InProductHelp.Db.TotalEvents" units="events">
  <owner>nyquist@chromium.org</owner>
  <owner>xingliu@chromium.org</owner>
  <summary>
    Records the total number of event records in the database for in-product
    help after the event model is loaded.
  </summary>
</histogram>

<histogram base="true" name="InProductHelp.Db.Update" enum="BooleanSuccess">
  <owner>nyquist@chromium.org</owner>
  <owner>xingliu@chromium.org</owner>
<!-- Name completed by histogram_suffixes name="IPHDatabase" -->

  <summary>
    Records if each database update succeeds for in-product help.
  </summary>
</histogram>

<histogram base="true" name="InProductHelp.NotifyEventReadyState"
    enum="BooleanSuccess">
  <owner>nyquist@chromium.org</owner>
  <owner>xingliu@chromium.org</owner>
<!-- Name completed by histogram_suffixes name="IPHFeatures" -->

  <summary>
    Records if the model is ready when in-product help event happens.
  </summary>
</histogram>

<histogram name="InProductHelp.ShouldTriggerHelpUI" enum="TriggerHelpUIResult">
  <owner>nyquist@chromium.org</owner>
  <owner>xingliu@chromium.org</owner>
<!-- Name completed by histogram_suffixes name="IPHFeatures" -->

  <summary>
    Records if in-product help is shown to the user, and the failure reasons if
    in-product help is not shown. Recorded on its own across all in-product help
    features, in addition to being a base name for feature-specific histograms.
  </summary>
</histogram>

<histogram name="InputMethod.ActiveCount">
  <owner>shuchen@chromium.org</owner>
  <summary>
    The number of active input methods. Recorded when the user logs in to Chrome
    OS or each cold start of Chrome on Android. The active input methods are
    selected by user in the language settings page on Chrome OS and in system
    language settings on Android.
  </summary>
</histogram>

<histogram name="InputMethod.AutoCorrectLevel" enum="IMECorrectionLevel">
  <owner>shuchen@chromium.org</owner>
  <summary>The auto-correction level for suggestion engine.</summary>
</histogram>

<histogram name="InputMethod.Category" enum="InputMethodCategory">
  <owner>shuchen@chromium.org</owner>
  <summary>
    The breakdown of input method usage by input method category. Recorded when
    the system changes the current input method.
  </summary>
</histogram>

<histogram name="InputMethod.Commit.Index">
  <owner>shuchen@chromium.org</owner>
  <summary>
    The suggestion index (1-based) of the suggestion list item which user
    chooses to commit.
  </summary>
</histogram>

<histogram name="InputMethod.Commit.Type" enum="IMECommitType">
  <obsolete>
    Deprecated 03/2015, and replaced by InputMethod.Commit.Type2.
  </obsolete>
  <owner>shuchen@chromium.org</owner>
  <summary>
    The suggestion accuracy type which the user chooses to commit.
  </summary>
</histogram>

<histogram name="InputMethod.Commit.Type2" enum="IMECommitType2">
  <owner>shuchen@chromium.org</owner>
  <summary>
    The suggestion accuracy type which the user chooses to commit.
  </summary>
</histogram>

<histogram name="InputMethod.CommitLength">
  <owner>shuchen@chromium.org</owner>
  <summary>The number of characters committed with composition text.</summary>
</histogram>

<histogram name="InputMethod.ID" enum="InputMethodID">
  <obsolete>
    This is deprecated since M46, InputMethod.ID2 is used since then.
  </obsolete>
  <owner>shuchen@chromium.org</owner>
  <summary>
    The breakdown of input method usage by input method IDs. Recorded when the
    user presses keys on physical or on-screen keyboard.
  </summary>
</histogram>

<histogram name="InputMethod.ID2" enum="InputMethodID2">
  <owner>shuchen@chromium.org</owner>
  <summary>
    The breakdown of input method usage by input method IDs. Recorded when the
    user presses keys on physical or on-screen keyboard.
  </summary>
</histogram>

<histogram name="InputMethod.ImeMenu.ActivationChanged"
    enum="BooleanActivation">
  <owner>azurewei@chromium.org</owner>
  <owner>shuchen@chromium.org</owner>
  <summary>
    Whether the opt-in IME menu in the shelf has been activated.
  </summary>
</histogram>

<histogram name="InputMethod.ImeMenu.EmojiHandwritingVoiceButton"
    enum="ImeMenuButtonType">
  <owner>azurewei@chromium.org</owner>
  <owner>shuchen@chromium.org</owner>
  <summary>
    The number of times users click emoji, handwriting or voice button in opt-in
    IME menu.
  </summary>
</histogram>

<histogram name="InputMethod.ImeSwitch" enum="IMESwitchType">
  <owner>shuchen@chromium.org</owner>
  <summary>The trigger type of input method switches by user.</summary>
</histogram>

<histogram name="InputMethod.MatchesSystemLanguage" enum="BooleanMatched">
  <owner>aurimas@chromium.org</owner>
  <summary>
    Whether the currently selected keyboard language matches the system
    language. Recorded once with every cold start of Chrome for Android.
  </summary>
</histogram>

<histogram name="InputMethod.PkCommit.Index">
  <owner>shuchen@chromium.org</owner>
  <summary>
    The suggestion index (1-based) of the suggestion list item which user
    chooses to commit for physical keyboard autocorrect.
  </summary>
</histogram>

<histogram name="InputMethod.PkCommit.Type" enum="IMECommitType2">
  <owner>shuchen@chromium.org</owner>
  <summary>
    The suggestion accuracy type which the user chooses to commit for physical
    keyboard autocorrect.
  </summary>
</histogram>

<histogram name="InputMethod.RegisterProxyView" enum="IMERegisterProxyView">
  <owner>changwan@chromium.org</owner>
  <summary>The result of registering proxy view to InputMethodManager.</summary>
</histogram>

<histogram name="InputMethod.VirtualKeyboard.BackspaceCount">
  <owner>shuchen@chromium.org</owner>
  <summary>
    The number of times the backspace key was pressed on the virtual keyboard,
    while the virtual keyboard was alive. Recorded when the virtual keyboard is
    closed.
  </summary>
</histogram>

<histogram name="InputMethod.VirtualKeyboard.BackspaceOnLayout"
    enum="IMEVKLayout">
  <owner>shuchen@chromium.org</owner>
  <summary>
    The layout type of the virtual keyboard, recorded when backspace is pressed.
  </summary>
</histogram>

<histogram name="InputMethod.VirtualKeyboard.BackwardsMovesPerSwipe"
    units="moves">
  <owner>rsadam@chromium.org</owner>
  <summary>
    Chrome OS histogram that counts the number of times the cursor was moved to
    the previous word by swiping backwards on the selection track. The count is
    initialized when the user starts swiping from any side of the virtual
    keyboard, incremented based on how far they swipe backwards on the selection
    track, and recorded when they release their finger.
  </summary>
</histogram>

<histogram name="InputMethod.VirtualKeyboard.CharactersBetweenBackspaces">
  <owner>rsadam@chromium.org</owner>
  <summary>
    Counts the length of text typed by the virtual keyboard between each
    backspace. This metric provides a rough approximation of an error rate for
    the virtual keyboard.
  </summary>
</histogram>

<histogram name="InputMethod.VirtualKeyboard.CharactersCommitted">
  <owner>rsadam@chromium.org</owner>
  <summary>
    The total number of characters committed. Recorded when the virtual keyboard
    is closed.
  </summary>
</histogram>

<histogram name="InputMethod.VirtualKeyboard.ContainerBehavior"
    enum="VirtualKeyboardContainerType">
  <owner>yhanada@chromium.org</owner>
  <summary>
    Chrome OS histogram that counts the number of times each virtual keyboard
    display mode is used. Recorded when the virtual keyboard is opened or a user
    changes the keyboard mode from UI in the virtual keyboard.
  </summary>
</histogram>

<histogram name="InputMethod.VirtualKeyboard.Duration" units="seconds">
  <owner>shuchen@chromium.org</owner>
  <summary>How long the virtual keyboard was visible.</summary>
</histogram>

<histogram name="InputMethod.VirtualKeyboard.GestureTypingEvent"
    enum="IMEGestureTypingEvent">
  <owner>girard@chromium.org</owner>
  <summary>Text input events related to gesture typing.</summary>
</histogram>

<histogram name="InputMethod.VirtualKeyboard.InitLatency" units="ms">
  <owner>shuchen@chromium.org</owner>
  <summary>
    The on-screen keyboard initialization latency in milliseconds.
  </summary>
</histogram>

<histogram name="InputMethod.VirtualKeyboard.Layout" enum="IMEVKLayout">
  <owner>shuchen@chromium.org</owner>
  <summary>
    The layout of the on-screen keyboard. Logged when the specific layout is
    shown.
  </summary>
</histogram>

<histogram name="InputMethod.VirtualKeyboard.LayoutSwitch">
  <owner>shuchen@chromium.org</owner>
  <summary>
    The count of layout switching actions while virtual keyboard is alive.
    Recorded when the virtual keyboard window is hidden or destroyed.
  </summary>
</histogram>

<histogram name="InputMethod.VirtualKeyboard.MovesPerSwipe" units="moves">
  <owner>rsadam@chromium.org</owner>
  <summary>
    Chrome OS histogram that counts the number of times the cursor was moved to
    the next word by swiping forward on the selection track. The count is
    initialized when the user starts swiping from any side of the virtual
    keyboard, incremented based on how far they swipe forwards on the selection
    track, and recorded when they release their finger.
  </summary>
</histogram>

<histogram name="InputMethod.VirtualKeyboard.TapCount">
  <owner>girard@chromium.org</owner>
  <summary>
    The number of times the virtual keyboard was tapped while the virtual
    keyboard was alive. Recorded when the virtual keyboard is closed.
  </summary>
</histogram>

<histogram name="InputMethod.VirtualKeyboard.WordsDeletedPerSwipe"
    units="words">
  <owner>rsadam@chromium.org</owner>
  <summary>
    Chrome OS histogram that tracks the total number of words that were deleted
    by swiping forward on the deletion track. The count is initialized when the
    user starts swiping on the backspace key, incremented based on how far they
    swipe forwards on the deletion track, and recorded when they release their
    finger.
  </summary>
</histogram>

<histogram name="InputMethod.VirtualKeyboard.WordsPerMinute">
  <owner>rsadam@chromium.org</owner>
  <summary>
    The number of words typed per minute. Recorded when the virtual keyboard is
    closed.
  </summary>
</histogram>

<histogram name="InputMethod.VirtualKeyboard.WordsRestoredPerSwipe"
    units="words">
  <owner>rsadam@chromium.org</owner>
  <summary>
    Chrome OS histogram that tracks the total number of words that were restored
    by swiping backwards on the deletion track. The count is initialized when
    the user starts swiping on the backspace key, incremented based on how far
    they swipe backwards on the deletion track, and recorded when they release
    their finger.
  </summary>
</histogram>

<histogram name="Installer.AttemptsCount.Total" units="count">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The number of update attempts until the update has been applied. This is
    reported every time the device has completed an update.
  </summary>
</histogram>

<histogram name="Installer.DevModeErrorCodes" enum="UpdateEngineErrorCode">
  <owner>zeuthen@chromium.org</owner>
  <summary>Errors from update_engine process when running in dev mode.</summary>
</histogram>

<histogram name="Installer.DownloadOverheadPercentage" units="%">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The overhead in downloading extra bytes due to errors/interruptions.
    Expressed as a percentage of the bytes that are actually needed to be
    downloaded for the update to be successful.
  </summary>
</histogram>

<histogram name="Installer.DownloadSourcesUsed"
    enum="UpdateEngineDownloadSources">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The combinations of protocol and source server that were used to complete a
    successful update.
  </summary>
</histogram>

<histogram name="Installer.FullPayloadAttemptNumber" units="count">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The number of update attempts with a full update payload until the update
    has been applied. This is reported on every update attempt.
  </summary>
</histogram>

<histogram name="Installer.InstallDateProvisioningSource"
    enum="UpdateEngineInstallDateProvisioningSource">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The source used to provision the install-date-days value sent to Omaha with
    every request. This is reported when OOBE completes (M34 or later) or when
    upgrading to a version with install-date-days support.
  </summary>
</histogram>

<histogram name="Installer.NormalErrorCodes" enum="UpdateEngineErrorCode">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    Errors from update_engine process when running in normal mode.
  </summary>
</histogram>

<histogram name="Installer.OSAgeDays" units="days">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The age of the OS, defined as the age of the /etc/lsb-release file. This is
    reported on every update check but at most once a day.
  </summary>
</histogram>

<histogram name="Installer.PayloadAttemptNumber" units="count">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The number of update attempts until the update has been applied. This is
    reported on every update attempt.
  </summary>
</histogram>

<histogram name="Installer.PayloadFormat" enum="UpdateEnginePayloadFormat">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The type of update payload used to update the device. The difference between
    &quot;Full&quot; and &quot;Forced Full&quot; is that in the latter, the
    request sent to Omaha included a directive saying that a delta payload
    wasn't accepted. A &quot;Full&quot; payload is one where a delta payload was
    accepted but Omaha provided a full payload. This is reported every time the
    device has completed an update.
  </summary>
</histogram>

<histogram name="Installer.RebootToNewPartitionAttempt" units="count">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The number of consecutive times a device has failed to boot an update that
    successfully applied. This metric is reported every time the firmware fails
    to boot the slot with the update and fell back to the slot it originally
    updated from.
  </summary>
</histogram>

<histogram name="Installer.Recovery.Count" units="count">
  <obsolete>
    Superseded by Installer.Recovery.Reason in 8/2017.
  </obsolete>
  <owner>ahassani@chromium.org</owner>
  <summary>
    The number of times the device has been recovered.

    This is reported on reboot after a successful recovery. Cleared only when
    switching to dev mode or on factory reset.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="Installer.Recovery.Reason" enum="ChromeOSRecoveryReason">
  <owner>lannm@chromium.org</owner>
  <summary>
    The reason for entering recovery mode immediately prior to a recovery.

    This is reported on reboot after a successful recovery.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="Installer.SuccessfulMBsDownloadedFrom" units="MB">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    Number of MBs downloaded from during an update that completed successfully.
  </summary>
</histogram>

<histogram name="Installer.TimeToRebootMinutes" units="Minutes">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    Wall-clock duration between when an update has successfully completed (and
    the user is presented with the &quot;reboot arrow&quot;) and when the system
    has booted into the new update. This is reported every time the device is
    rebooted after an update has been applied.
  </summary>
</histogram>

<histogram name="Installer.TotalMBsDownloadedFrom" units="MB">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    Total number of MBs downloaded since the last successful update. This also
    includes all the bytes downloaded during any prior failed attempts.
  </summary>
</histogram>

<histogram name="Installer.UpdateDurationMinutes" units="Minutes">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    Absolute wall-clock time duration it took for the update to complete from
    the time an update first began.  It includes not just the time the device
    was up, but also includes the time the device spent sleeping.
  </summary>
</histogram>

<histogram name="Installer.UpdateDurationUptimeMinutes" units="Minutes">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    Uptime duration it took for the update to complete from the time an update
    first began.  It does not include the time the device spent sleeping, but it
    does include the uptime spent in waiting for the hourly update checks to
    happen.
  </summary>
</histogram>

<histogram name="Installer.UpdateNumReboots" units="count">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    Number of times the device was rebooted by the user since an update began
    and until it completed successfully.
  </summary>
</histogram>

<histogram name="Installer.UpdatesAbandonedCount" units="count">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The number of update attempts that didn't complete because a newer update
    was detected during the update operation. This is reported every time the
    device has completed an update.
  </summary>
</histogram>

<histogram name="Installer.UpdatesAbandonedEventCount" units="count">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The number of consecutive different abandoned update payloads since the last
    successful update. This is reported every time an update payload is
    abandoned because a newer update payload is available.
  </summary>
</histogram>

<histogram name="Installer.UpdateURLSwitches" units="count">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    Number of times the download URLs were switched due to failures.
  </summary>
</histogram>

<histogram name="InstallSigner.InvalidCount">
  <obsolete>
    Deprecated 4/2015. It appears the code at some point changed to use the
    histogram name 'ExtensionInstallSigner.InvalidCount' and we forgot to update
    this histogram name.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    This is a count of the number of ids that we asked to be signed which the
    server response indicated were not in the webstore.
  </summary>
</histogram>

<histogram name="InstallSigner.InvalidSignature">
  <obsolete>
    Deprecated 1/2014 (crbug.com/333934). Replaced by
    ExtensionInstallSigner.ResultWasValid.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The extensions install signer got a well-formed result from the server but
    the signature check on it failed.
  </summary>
</histogram>

<histogram name="InstallVerifier.CallbackInvalidSignature">
  <obsolete>
    Deprecated 1/2014 (crbug.com/333934). Replaced by
    ExtensionInstallVerifier.GetSignatureResult.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The extension install verifier tried to get a new signature and received a
    response but it wasn't properly signed.
  </summary>
</histogram>

<histogram name="InstallVerifier.CallbackNoSignature">
  <obsolete>
    Deprecated 1/2014 (crbug.com/333934). Replaced by
    ExtensionInstallVerifier.GetSignatureResult.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The extension install verifier tried to get a new signature but was unable
    to (network error contacting the server, response from server was malformed,
    etc.).
  </summary>
</histogram>

<histogram name="InstallVerifier.CallbackValidSignature">
  <obsolete>
    Deprecated 1/2014 (crbug.com/333934). Replaced by
    ExtensionInstallVerifier.GetSignatureResult.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The extension install verifier got a new signature from the server that was
    valid.
  </summary>
</histogram>

<histogram name="InstallVerifier.InitGoodSignature">
  <obsolete>
    Deprecated 1/2014 (crbug.com/333934). Replaced by
    ExtensionInstallVerifier.InitResult.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The extension install verifier found a valid signature at startup, and this
    is a count of the number of signed ids it contained.
  </summary>
</histogram>

<histogram name="InstallVerifier.InitInvalidSignature">
  <obsolete>
    Deprecated 1/2014 (crbug.com/333934). Replaced by
    ExtensionInstallVerifier.InitResult.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The extension install verifier found a signature in the prefs at startup,
    and it parsed properly, but it was invalid (some ids may have been
    added/removed, could not verify it was signed with the correct private key,
    etc.).
  </summary>
</histogram>

<histogram name="InstallVerifier.InitNoSignature">
  <obsolete>
    Deprecated 1/2014 (crbug.com/333934). Replaced by
    ExtensionInstallVerifier.InitResult.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The extension install verifier did not find any signature in the prefs at
    startup.
  </summary>
</histogram>

<histogram name="InstallVerifier.InitUnparseablePref">
  <obsolete>
    Deprecated 1/2014 (crbug.com/333934). Replaced by
    ExtensionInstallVerifier.InitResult.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The extension install verifier found a signature in the prefs at startup,
    but it wasn't parseable (missing/wrong format of required keys, etc.).
  </summary>
</histogram>

<histogram name="InstallVerifier.SignatureFailedButNotEnforcing">
  <obsolete>
    Deprecated 1/2014 (crbug.com/333934). Replaced by
    ExtensionInstallVerifier.MustRemainDisabled.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The extension install verifier would have disabled an extension but is not
    in enforcement mode.
  </summary>
</histogram>

<histogram name="InstanceID.DeleteToken.CompleteTime" units="ms">
  <owner>jianli@chromium.org</owner>
  <summary>
    Length of time taken to complete the DeleteToken request successfully. If
    the request is retried multiple times, the length of time is counted for the
    last successful retry.
  </summary>
</histogram>

<histogram name="InstanceID.DeleteToken.RequestStatus"
    enum="GCMUnregistrationRequestStatus">
  <owner>juyik@chromium.org</owner>
  <summary>Status code of the outcome of DeleteToken request.</summary>
</histogram>

<histogram name="InstanceID.DeleteToken.RetryCount">
  <owner>jianli@chromium.org</owner>
  <summary>Number of retries before DeleteToken succeeds.</summary>
</histogram>

<histogram name="InstanceID.Enabled" enum="BooleanEnabled">
  <owner>jianli@chromium.org</owner>
  <summary>
    Whether the Instance ID API is enabled. Checked when a chrome.instanceID
    function is called.
  </summary>
</histogram>

<histogram name="InstanceID.GetToken.CompleteTime" units="ms">
  <owner>jianli@chromium.org</owner>
  <summary>
    Length of time taken to complete the GetToken request successfully. If the
    request is retried multiple times, the length of time is counted for the
    last successful retry.
  </summary>
</histogram>

<histogram name="InstanceID.GetToken.RequestStatus"
    enum="GCMRegistrationRequestStatus">
  <owner>juyik@chromium.org</owner>
  <summary>Status code of the outcome of GetToken request.</summary>
</histogram>

<histogram name="InstanceID.GetToken.RetryCount">
  <owner>jianli@chromium.org</owner>
  <summary>Number of retries before GetToken succeeds.</summary>
</histogram>

<histogram name="InstanceID.RestoredIDCount">
  <owner>jianli@chromium.org</owner>
  <summary>
    Number of Instance IDs restored from the persistent store at startup.
  </summary>
</histogram>

<histogram name="InstanceID.RestoredTokenCount">
  <owner>jianli@chromium.org</owner>
  <summary>
    Number of InstanceID tokens restored from the persistent store at startup.
  </summary>
</histogram>

<histogram name="Instant.InstantControllerEvent" enum="InstantControllerEvent">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Records various events of interest in the InstantController. E.g. When URLs
    are blacklisted.
  </summary>
</histogram>

<histogram name="Instant.SessionsStorageNamespace"
    enum="InstantSessionStorageNamespace">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    How often an Instant preview is committed onto a different tab than it was
    created from.
  </summary>
</histogram>

<histogram name="Instant.TimeToFirstShow" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time between the first Omnibox interaction and when the Instant preview
    shows. If the instant preview was already showing when the user interacted
    with the omnibox, this histogram is not recorded.
  </summary>
</histogram>

<histogram name="InstantExtended.CacheableNTPLoad"
    enum="InstantExtended_CacheableNTPLoad">
  <owner>beaudoin@chromium.org</owner>
  <summary>
    Records a histogram for how often the Cacheable NTP fails to load.
  </summary>
</histogram>

<histogram name="InstantExtended.FallbackToLocalOverlay"
    enum="InstantExtended_FallbackCause">
  <obsolete>
    Depcreated as of 10/2013. No longer relevant since the HTML overlay was
    abandoned.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Records the cause for falling back to a local overlay at the time of
    fallback.
  </summary>
</histogram>

<histogram name="InstantExtended.InstantNavigation"
    enum="InstantExtended_InstantNavigation">
  <obsolete>
    Deprecated as of 10/2013. This histogram is no longer relevant since the
    HTML overlay went away.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Records a histogram for instant extended (Local NTP and Online NTP) and
    non-extended navigations.
  </summary>
</histogram>

<histogram name="InstantExtended.NewOptInState"
    enum="InstantExtended_NewOptInState">
  <obsolete>
    Deprecated as of 11/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Records, on startup, whether the user has chosen to opt-in to or opt-out of
    InstantExtended via chrome://flags.
  </summary>
</histogram>

<histogram name="InstantExtended.OptInState" enum="InstantExtended_OptInState">
  <obsolete>
    Deprecated 2013-06. As of m30 use InstantExtended.NewOptInState.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Records, on startup, whether the user has chosen to opt-in to or opt-out of
    InstantExtended via chrome://flags.
  </summary>
</histogram>

<histogram name="InstantExtended.PercentageMatchQuerytoQuery" units="%">
  <obsolete>
    Deprecated 2013-07. Please see
    InstantExtended.PercentageMatchV2_QuerytoQuery instead.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Records the number of matching characters at the start of the user's text as
    a percentage of average length between the old and new text when the user
    navigates from a search query to another search query.
  </summary>
</histogram>

<histogram name="InstantExtended.PercentageMatchQuerytoURL" units="%">
  <obsolete>
    Deprecated 2013-07. Please see InstantExtended.PercentageMatchV2_QuerytoURL
    instead.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Records the number of matching characters at the start of the user's text as
    a percentage of average length between the old and new text when the user
    navigates from a search query to a url. Example: Accidental search for
    google.con, then navigation to google.com.
  </summary>
</histogram>

<histogram name="InstantExtended.PercentageMatchURLtoQuery" units="%">
  <obsolete>
    Deprecated 2013-07. Please see InstantExtended.PercentageMatchV2_URLtoQuery
    instead.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Records the number of matching characters at the start of the user's text as
    a percentage of average length between the old and new text when the user
    navigates from a url to a search query.
  </summary>
</histogram>

<histogram name="InstantExtended.PercentageMatchURLtoURL" units="%">
  <obsolete>
    Deprecated 2013-07. Please see InstantExtended.PercentageMatchV2_URLtoURL
    instead.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Records the number of matching characters at the start of the user's text as
    a percentage of average length between the old and new text when the user
    navigates from a url to another url.
  </summary>
</histogram>

<histogram name="InstantExtended.PercentageMatchV2_QuerytoQuery" units="%">
  <obsolete>
    Removed in August 2016 with the removal of query in the omnibox code.
  </obsolete>
  <owner>mpearson@chromium.org</owner>
  <summary>
    Records the number of matching characters at the start of the user's text as
    a percentage of average length between the old and new text when the user
    navigates from a search query to another search query.
  </summary>
</histogram>

<histogram name="InstantExtended.PercentageMatchV2_QuerytoURL" units="%">
  <obsolete>
    Removed in August 2016 with the removal of query in the omnibox code.
  </obsolete>
  <owner>mpearson@chromium.org</owner>
  <summary>
    Records the number of matching characters at the start of the user's text as
    a percentage of average length between the old and new text when the user
    navigates from a search query to a url. Example: Accidental search for
    google.con, then navigation to google.com.
  </summary>
</histogram>

<histogram name="InstantExtended.PercentageMatchV2_URLtoQuery" units="%">
  <obsolete>
    Removed in September 2016 because (i) this measurement was somewhat wrong,
    (ii) it's difficult to understand the data, and (iii) there are better ways
    to answer the same question.  The measurement is somewhat wrong because
    reloads, link drops, and pasting URLs and pressing enter are all incorrectly
    logged to the URLtoQuery histogram, not the URLtoURL histogram.  Futhermore,
    this histogram is difficult to analyze because it's not broken up by input
    length.  Short URLs can by random chance have a sizable percentage match
    with a query.  Finally, there are better source for data like this; ask
    mpearson for details.
  </obsolete>
  <owner>mpearson@chromium.org</owner>
  <summary>
    Records the number of matching characters at the start of the user's text as
    a percentage of average length between the old and new text when the user
    navigates from a url to a search query.
  </summary>
</histogram>

<histogram name="InstantExtended.PercentageMatchV2_URLtoURL" units="%">
  <obsolete>
    Removed in September 2016 because (i) this measurement was somewhat wrong,
    and (ii) there are better ways to answer the same question.  The measurement
    is somewhat wrong because reloads, link drops, and pasting URLs and pressing
    enter are all incorrectly logged to the URLtoQuery histogram, not the
    URLtoURL histogram.  Furthermore, there are better source for data like
    this; ask mpearson for details.
  </obsolete>
  <owner>mpearson@chromium.org</owner>
  <summary>
    Records the number of matching characters at the start of the user's text as
    a percentage of average length between the old and new text when the user
    navigates from a url to another url.
  </summary>
</histogram>

<histogram name="InstantExtended.PrefValue" enum="BooleanEnabled">
  <obsolete>
    Deprecated 2013-06. This preference has not been exposed or used for months,
    and we do not plan to use it in the future.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Records, on startup, the value of the &quot;Allow your search engine to
    provide Instant result&quot; preference setting for the first profile
    loaded.
  </summary>
</histogram>

<histogram name="InstantSearchClicks.PreviewScrollState"
    enum="InstantSearchClicks_PreviewScrollState">
  <obsolete>
    Deprecated as of 7/2015.
  </obsolete>
  <owner>ksimbili@chromium.org</owner>
  <summary>
    Records the scroll state on the preview page when instant search clicks
    feature is triggered.
  </summary>
</histogram>

<histogram name="InstantSearchClicks.ReasonForSwap"
    enum="InstantSearchClicks_ReasonForSwap">
  <obsolete>
    Deprecated as of 7/2015.
  </obsolete>
  <owner>ksimbili@chromium.org</owner>
  <summary>
    Records the reason that triggered the page swap when instant search clicks
    feature is triggered.
  </summary>
</histogram>

<histogram name="InstantSearchClicks.TimeInPreview" units="ms">
  <obsolete>
    Deprecated as of 7/2015.
  </obsolete>
  <owner>ksimbili@chromium.org</owner>
  <summary>
    The time spent by the user in preview page before swapping to original or
    navigating out of preview page.
  </summary>
</histogram>

<histogram name="InstantSearchClicks.TimeToSwap" units="ms">
  <obsolete>
    Deprecated as of 7/2015.
  </obsolete>
  <owner>ksimbili@chromium.org</owner>
  <summary>
    The time it took for swap to trigger for all swaps. The is the time between
    preview page load start to preview page swap with the original page.
  </summary>
</histogram>

<histogram name="InstantTethering.BluetoothAdvertisementRegistrationResult"
    enum="InstantTethering_BluetoothAdvertisementResult">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Provides a breakdown of how many times each possible Bluetooth advertisement
    registration result occurs.

    The bucket &quot;Unknown result&quot; indicates that the Bluetooth platform
    returned an unknown error code; if it has any counts, the client code should
    be changed to account for the new error code.
  </summary>
</histogram>

<histogram name="InstantTethering.BluetoothAdvertisementUnregistrationResult"
    enum="InstantTethering_BluetoothAdvertisementResult">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Provides a breakdown of how many times each possible Bluetooth advertisement
    unregistration result occurs.

    The bucket &quot;Unknown result&quot; indicates that the Bluetooth platform
    returned an unknown error code; if it has any counts, the client code should
    be changed to account for the new error code.
  </summary>
</histogram>

<histogram name="InstantTethering.BluetoothDiscoverySessionStarted"
    enum="BooleanSuccess">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Provides the success rate of starting a Bluetooth discovery session.
  </summary>
</histogram>

<histogram name="InstantTethering.BluetoothDiscoverySessionStopped"
    enum="BooleanSuccess">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Provides the success rate of stopping a Bluetooth discovery session.
  </summary>
</histogram>

<histogram name="InstantTethering.ConnectionToHostResult.Failure"
    enum="InstantTethering_ConnectionToHostResult_Failure">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Provides a top-level breakdown of the times a connection to a host has
    failed.

    An &quot;unknown error&quot; is caused by the host returning an
    &quot;unknown error&quot; response code. Tethering timing out and client
    connection error are both broken down further in
    InstantTethering.ConnectionToHostResult.Failure.TetheringTimeout and
    InstantTethering.ConnectionToHostResult.Failure.ClientConnection,
    respectively.
  </summary>
</histogram>

<histogram
    name="InstantTethering.ConnectionToHostResult.Failure.ClientConnection"
    enum="InstantTethering_ConnectionToHostResult_Failure_ClientConnection">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Breaks down the reasons why the client failed to connect to the hotspot, and
    the number of times they occurred.

    Note that a client connection can be canceled by a user either via pressing
    the Disconnect button or beginning a connection attempt to another host. The
    &quot;internal error&quot; case is a general bucket that captures client
    errors we don't expect to be significant failure causes.

    This histogram breaks down the &quot;client connection error&quot; count of
    InstantTethering.ConnectionToHostResult.Failure.
  </summary>
</histogram>

<histogram
    name="InstantTethering.ConnectionToHostResult.Failure.TetheringTimeout"
    enum="InstantTethering_ConnectionToHostResult_Failure_TetheringTimeout">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Captures the number of times of whether or not first-time setup was required
    when tethering timed out.

    Starting tethering on the host works like so: if first-time setup is
    required on the host, a first-time setup UI is shown on the host; once the
    user interacts with it, the provisioning app is called. If first-time setup
    is not required, then the provisioning app is directly called. To be clear:
    the provisioning app is always run.

    There are two possible ways for tethering to time out: either the
    provisioning app flaked (crashed or hung, and never called back to Instant
    Tethering), or the user never interacted with the first-time setup UI flow
    (assuming first-time setup was required).

    Because it's very unlikely for the provisioning app to flake, we can read
    the &quot;was first-time setup&quot; count as almost always indicative of
    the user not interacting with the first-time setup UI. We expect the
    &quot;was not first-time setup&quot; count to be low (because, as mentioned,
    it's very unlikely for the provisioning app to flake).

    This histogram breaks down the &quot;tethering timed out&quot; count of
    InstantTethering.ConnectionToHostResult.Failure.
  </summary>
</histogram>

<histogram
    name="InstantTethering.ConnectionToHostResult.ProvisioningFailureRate"
    enum="InstantTethering_ConnectionToHostResult_ProvisioningFailureRate">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Provides a breakdown of the times a connection to a host was either
    unsuccessful due to provisioning failure (the carrier disallows tethering)
    or &quot;other&quot; (this is captured under
    InstantTethering.ConnectionToHostResult.SuccessRate).

    This metric captures the rough percentage of connections which are
    unsuccessful due to provisioning failure. It is separate from
    InstantTethering.ConnectionToHostResult.SuccessRate and the metrics related
    to it because provisioning failure is neither truly a success nor an error.
  </summary>
</histogram>

<histogram name="InstantTethering.ConnectionToHostResult.SuccessRate"
    enum="InstantTethering_ConnectionToHostResult_SuccessRate">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Captures the count of successful and failed connection attempts.

    This metric counts the top-level user action from beginning to connect, all
    the way through success or failure of the connection (excluding any
    programmatic retries within the connection attempt).

    This metric provides an immediate understanding of the Instant Tethering
    connection success rate. The counts of failure are broken down in
    InstantTethering.ConnectionToHostResult.Failure.
  </summary>
</histogram>

<histogram
    name="InstantTethering.ConnectionToHostResult.SuccessRate.Background"
    enum="InstantTethering_ConnectionToHostResult_SuccessRate">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Captures the count of successful and failed connection attempts.

    This metric counts the top-level user action from beginning to connect, all
    the way through success or failure of the connection (excluding any
    programmatic retries within the connection attempt).

    This histogram is the background advertisement analog of
    InstantTethering.Performance.ConnectionToHostResult.SuccessRate.
  </summary>
</histogram>

<histogram name="InstantTethering.FeatureState"
    enum="InstantTethering_FeatureState">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Breaks down the state of Instant Tethering during user sessions. All states,
    except for 'Enabled', indicate that the feature was not active. This
    histogram is emitted to each time a condition affecting Instant Tethering's
    state, e.g. the user enabling or disabling the feature, or Bluetooth
    becoming enabled or disabled.

    Note: The &quot;Screen locked&quot; bucket is obsolete, and should not have
    any reports.
  </summary>
</histogram>

<histogram
    name="InstantTethering.GattConnectionAttempt.EffectiveSuccessRateWithRetries"
    enum="BooleanSuccess">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Captures the effective count of successful and failed GATT connection
    attempts, including retries. This means that if a GATT connection attempt
    fails but then succeeds on a future retry, this is counted as a single
    success. In the context of this metric, a failure represents a GATT failure
    in all retry attempts.

    An individual attempt is considered successful if a GATT connection was
    created and authenticated successfully (i.e., the connection was ready for
    Instant Tethering to exchange protocol messages).
  </summary>
</histogram>

<histogram
    name="InstantTethering.GattConnectionAttempt.EffectiveSuccessRateWithRetries.Background"
    enum="BooleanSuccess">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Captures the effective count of successful and failed GATT connection
    attempts, including retries. This means that if a GATT connection attempt
    fails but then succeeds on a future retry, this is counted as a single
    success. In the context of this metric, a failure represents a GATT failure
    in all retry attempts.

    An individual attempt is considered successful if a GATT connection was
    created and authenticated successfully (i.e., the connection was ready for
    Instant Tethering to exchange protocol messages).

    This metric is the background advertisement analog of
    InstantTethering.GattConnectionAttempt.EffectiveSuccessRateWithRetries.
  </summary>
</histogram>

<histogram name="InstantTethering.GattConnectionAttempt.SuccessRate"
    enum="BooleanSuccess">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Captures the count of successful and failed GATT connection attempts.

    An attempt is considered successful if a GATT connection was created and
    authenticated successfully (i.e., the connection was ready for Instant
    Tethering to exchange protocol messages).
  </summary>
</histogram>

<histogram name="InstantTethering.GattConnectionAttempt.SuccessRate.Background"
    enum="BooleanSuccess">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Captures the count of successful and failed GATT connection attempts.

    An attempt is considered successful if a GATT connection was created and
    authenticated successfully (i.e., the connection was ready for Instant
    Tethering to exchange protocol messages).

    This metric is the background advertisement analog of
    InstantTethering.GattConnectionAttempt.SuccessRate.
  </summary>
</histogram>

<histogram name="InstantTethering.HostScanBatchDuration" units="ms">
  <owner>hansberry@chromium.org</owner>
  <summary>
    The duration of a batch of host scans. A batch is defined as a series of one
    or host scans separated by no more than one minute.

    For example, if a scan occurs then stops and does not start back up again,
    the metric logged would be the amount of time taken for that scan. However,
    if a scan finishes and a new scan starts up again less than a minute after
    the previous scan finished, the metric logged would be the time difference
    between the start of the first scan and the finish of the second scan.
  </summary>
</histogram>

<histogram name="InstantTethering.HostScanResult"
    enum="InstantTethering_HostScanResult">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Provides a breakdown of the results of each host scan. This metric is
    recorded after each host scan.

    Comparing the number of times no hosts were found against the other buckets
    can help determine how often a host scan is useful.

    The sum of the buckets capturing that a notification was shown can be used
    as a baseline of comparison against
    InstantTethering.ConnectionToHostResult.ProvisioningFailureRate to roughly
    measure engagement with the notification.
  </summary>
</histogram>

<histogram name="InstantTethering.HotspotUsageDuration" units="ms">
  <owner>hansberry@chromium.org</owner>
  <summary>
    The duration of time between the start and end of a Tether connection.
    Timing starts when the device connects to the Wi-Fi hotspot and ends when
    the device becomes disconnected from the Wi-Fi hotspot.
  </summary>
</histogram>

<histogram name="InstantTethering.NotificationInteractionType"
    enum="InstantTethering_NotificationInteractionType">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Counts the number of interactions a user has with each of the Instant
    Tethering notifications.
  </summary>
</histogram>

<histogram
    name="InstantTethering.Performance.AdvertisementToConnectionDuration"
    units="ms">
  <owner>hansberry@chromium.org</owner>
  <summary>
    The duration of time between when a client begins to scan and advertise, and
    connects to a host (before authentication).

    This histogram only considers the time from when the client *sends* an
    advertisement, and not when the client *receives* an advertisement. See
    InstantTethering.Performance.StartScanToReceiveAdvertisementDuration and
    InstantTethering.Performance.ReceiveAdvertisementToConnectionDuration for
    histograms that consider when the client receives an advertisement.

    This histogram is the foreground advertisement analog of
    InstantTethering.Performance.StartScanToConnectionDuration.Background.
  </summary>
</histogram>

<histogram
    name="InstantTethering.Performance.ConnectionToAuthenticationDuration"
    units="ms">
  <owner>hansberry@chromium.org</owner>
  <summary>
    The duration of time between when a client connects to a host, and
    authenticates with that host.
  </summary>
</histogram>

<histogram
    name="InstantTethering.Performance.ConnectionToAuthenticationDuration.Background"
    units="ms">
  <owner>hansberry@chromium.org</owner>
  <summary>
    The duration of time between when a client connects to a host, and
    authenticates with that host.

    This histogram is the background advertisement analog of
    InstantTethering.Performance.ConnectionToAuthenticationDuration.
  </summary>
</histogram>

<histogram name="InstantTethering.Performance.ConnectTetheringResponseDuration"
    units="ms">
  <owner>hansberry@chromium.org</owner>
  <summary>
    The duration of time between when a client authenticates with a host, and
    receives a ConnectTetheringResponse.
  </summary>
</histogram>

<histogram name="InstantTethering.Performance.ConnectToHostDuration" units="ms">
  <owner>hansberry@chromium.org</owner>
  <summary>
    The duration of time it takes for the client to connect to the host, from
    the moment the user taps 'Connect', until the client connects to the host's
    hotspot. This does not include timeouts.
  </summary>
</histogram>

<histogram name="InstantTethering.Performance.ConnectToHostDuration.Background"
    units="ms">
  <owner>hansberry@chromium.org</owner>
  <summary>
    The duration of time it takes for the client to connect to the host, from
    the moment the user taps 'Connect', until the client connects to the host's
    hotspot. This does not include timeouts.

    This histogram is the background advertisement analog of
    InstantTethering.Performance.ConnectToHostDuration.Background.
  </summary>
</histogram>

<histogram name="InstantTethering.Performance.ConnectToHotspotDuration"
    units="ms">
  <owner>hansberry@chromium.org</owner>
  <summary>
    The duration of time it takes for the client to connect to the provided
    hotspot after receiving a ConnectTetheringResponse. This does not include
    timeouts.
  </summary>
</histogram>

<histogram
    name="InstantTethering.Performance.DisconnectTetheringRequestDuration"
    units="ms">
  <owner>hansberry@chromium.org</owner>
  <summary>
    The duration of time it takes for the client to send off a
    DisconnectTetheringRequest.
  </summary>
</histogram>

<histogram name="InstantTethering.Performance.KeepAliveTickleResponseDuration"
    units="ms">
  <owner>hansberry@chromium.org</owner>
  <summary>
    The duration of time between when a client authenticates with a host, and
    receives a KeepAliveTickleResponse.
  </summary>
</histogram>

<histogram
    name="InstantTethering.Performance.ReceiveAdvertisementToConnectionDuration"
    units="ms">
  <owner>hansberry@chromium.org</owner>
  <summary>
    The duration of time between when a client received a foreground
    advertisement from a host, and connected to that host (before
    authentication).
  </summary>
</histogram>

<histogram
    name="InstantTethering.Performance.ReceiveAdvertisementToConnectionDuration.Background"
    units="ms">
  <owner>hansberry@chromium.org</owner>
  <summary>
    The duration of time between when a client received a background
    advertisement from a host, and connected to that host (before
    authentication).

    This histogram is the background advertisement analog of
    InstantTethering.Performance.ReceiveAdvertisementToConnectionDuration.
  </summary>
</histogram>

<histogram
    name="InstantTethering.Performance.StartScanToConnectionDuration.Background"
    units="ms">
  <owner>hansberry@chromium.org</owner>
  <summary>
    The duration of time between when a client begins to scan, and connects to a
    host (before authentication).

    This histogram is the background advertisement analog of
    InstantTethering.Performance.AdvertisementToConnectionDuration.
  </summary>
</histogram>

<histogram
    name="InstantTethering.Performance.StartScanToReceiveAdvertisementDuration"
    units="ms">
  <owner>hansberry@chromium.org</owner>
  <summary>
    The duration of time between when a client begins to scan and advertise, and
    receives a foreground advertisement from a host.
  </summary>
</histogram>

<histogram
    name="InstantTethering.Performance.StartScanToReceiveAdvertisementDuration.Background"
    units="ms">
  <owner>hansberry@chromium.org</owner>
  <summary>
    The duration of time between when a client begins to scan, and receives a
    background advertisement from a host.

    This histogram is the background advertisement analog of
    InstantTethering.Performance.AdvertisementToConnectionDuration.
  </summary>
</histogram>

<histogram
    name="InstantTethering.Performance.TetherAvailabilityResponseDuration"
    units="ms">
  <owner>hansberry@chromium.org</owner>
  <summary>
    The duration of time between when a client authenticates with a host, and
    receives a TetherAvailabilityResponse.
  </summary>
</histogram>

<histogram name="InstantTethering.SessionCompletionReason"
    enum="InstantTethering_SessionCompletionReason">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Provides a breakdown of how each Tether session ended. A session begins when
    a device is first connected to a host's hotspot, and ends when the device is
    no longer connected to the hotspot. This metric is recorded at the end of
    each session.
  </summary>
</histogram>

<histogram name="InstantTethering.UserPreference.OnStartup"
    enum="BooleanEnabled">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Provides the count of the number of users who have the Instant Tethering
    toggle enabled vs. disabled on startup. This metric is logged each time a
    user logs into a Chromebook.
  </summary>
</histogram>

<histogram name="InstantTethering.UserPreference.OnToggle"
    enum="BooleanEnabled">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Provides the count of the number of times users have enabled or disabled the
    user preference for Mobile data. This metric is logged each time the value
    is toggled.
  </summary>
</histogram>

<histogram name="interstitial.authority_invalid_time" units="ms">
  <obsolete>
    Removed on 8/1/13.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    The time between the SSL interstitial display and the user decision, which
    may be either accept or deny.  This is only recorded for overridable SSL
    warnings with a CERT_AUTHORITY_INVALID warning. Timing begins when user
    first focuses on the page.
  </summary>
</histogram>

<histogram name="interstitial.captive_portal"
    enum="CaptivePortalBlockingPageEvent">
  <owner>meacer@chromium.org</owner>
  <summary>
    User action when the user is shown a captive portal error page.
  </summary>
</histogram>

<histogram name="interstitial.common_name_invalid_time" units="ms">
  <obsolete>
    Removed on 8/1/13.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    The time between the SSL interstitial display and the user decision, which
    may be either accept or deny.  This is only recorded for overridable SSL
    warnings with a CERT_COMMON_NAME_INVALID warning. Timing begins when user
    first focuses on the page.
  </summary>
</histogram>

<histogram name="interstitial.date_invalid_time" units="ms">
  <obsolete>
    Removed on 8/1/13.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    The time between the SSL interstitial display and the user decision, which
    may be either accept or deny.  This is only recorded for overridable SSL
    warnings with a CERT_DATE_INVALID warning.  Timing begins when user first
    focuses on the page.
  </summary>
</histogram>

<histogram name="interstitial.decision" enum="SecurityInterstitialDecision">
  <owner>felt@chromium.org</owner>
  <summary>
    User decision when presented with a security interstitial. As of M44,
    subresource interstitials were split into their own entries. As of M52,
    social_engineering_ads* and social_engineering_landing* interstitial reasons
    are split into their own entries from phishing*.
  </summary>
</histogram>

<histogram name="interstitial.decision.repeat_visit"
    enum="SecurityInterstitialDecision">
  <owner>felt@chromium.org</owner>
  <summary>
    User decision when presented with a security interstitial, on a site that
    the user had previously visited.  As of M44, subresource interstitials were
    split into their own entries. As of M52, social_engineering_ads* and
    social_engineering_landing* interstitial reasons are split into their own
    entries from phishing*.
  </summary>
</histogram>

<histogram name="interstitial.interaction"
    enum="SecurityInterstitialInteraction">
  <owner>felt@chromium.org</owner>
  <summary>
    User interactions with a security interstitial.  As of M44, subresource
    interstitials were split into their own entries. As of M52,
    social_engineering_ads* and social_engineering_landing* interstitial reasons
    are split into their own entries from phishing*.
  </summary>
</histogram>

<histogram name="interstitial.ssl" enum="SSLResponseTypesV2">
  <obsolete>
    Replaced by interstitial.ssl_overridable.* and
    interstitial.ssl_nonoverridable.* in Jan 2015 (M42).
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    User action when the user is shown a SSL interstitial. SHOW_ALL and MORE
    refer to the total number of SSL errors; all of the other numbers pertain to
    the number of actions related to SSL errors that are overridable. The counts
    do not sum to 100%; SHOW_ALL is a superset of SHOW_OVERRIDABLE, which in
    turn will be a supserset of the PROCEED/DONT_PROCEED variables.
    SHOW_UNDERSTAND is only being used by an experimental field trial. The
    interstitials due to captive portals are now recorded in the
    &quot;SSLCaptivePortal&quot;.
  </summary>
</histogram>

<histogram name="interstitial.ssl.captive_portal" enum="SSLCaptivePortal">
  <owner>meacer@chromium.org</owner>
  <summary>
    Record possible states of captive portals. This histogram is emitted
    (possibly multiple times to different buckets) whenever a ssl interstitial
    page is displayed and captive portal detection is enabled. The captive
    portal technique forces a client on a network to see a special web page
    (usually for authentication purposes) before using the internet normally.
  </summary>
</histogram>

<histogram name="interstitial.ssl.cause.nonoverridable" enum="SSLErrorCauses">
  <owner>felt@chromium.org</owner>
  <summary>
    Possible non-attack causes of the non-overridable SSL interstitial. Many
    errors are not reported in this histogram and new errors may be added over
    time, therefore one should not look at the breakdown of this histogram (one
    bucket divided by the sum) because that will be inaccurate. Instead, one
    should look at each bucket count divided by the count of the ssl errors of
    that type. E.g. WWW mismatch is recorded only when the ssl error is
    CERT_COMMON_NAME_INVALID, so one should look at the bucket count of WWW
    mismatch divided by the bucket count of CERT_COMMON_NAME_INVALID in the
    histogram interstitial.ssl_error_type.
  </summary>
</histogram>

<histogram name="interstitial.ssl.cause.overridable" enum="SSLErrorCauses">
  <owner>felt@chromium.org</owner>
  <summary>
    Possible non-attack causes of the overridable SSL interstitial. Many errors
    are not reported in this histogram and new errors may be added over time,
    therefore one should not look at the breakdown of this histogram (one bucket
    divided by the sum) because that will be inaccurate. Instead, one should
    look at each bucket count divided by the count of the ssl errors of that
    type. E.g. WWW mismatch is recorded only when the ssl error is
    CERT_COMMON_NAME_INVALID, so one should look at the bucket count of WWW
    mismatch divided by the bucket count of CERT_COMMON_NAME_INVALID in the
    histogram interstitial.ssl_error_type.
  </summary>
</histogram>

<histogram name="interstitial.ssl.clockstate.build_time" enum="ClockStates">
  <owner>mab@chromium.org</owner>
  <summary>
    State of the system clock, as inferred from the build timestamp, when an SSL
    CERT_INVALID_DATE error is seen.
  </summary>
</histogram>

<histogram name="interstitial.ssl.clockstate.network" enum="ClockStates">
  <obsolete>
    Deprecated August 2016. Replaced with interstitial.ssl.clockstate.network2,
    which records reasons why network time might be unavailable.
  </obsolete>
  <owner>mab@chromium.org</owner>
  <summary>
    State of the system clock, relative to network time, when an SSL
    CERT_INVALID_DATE error is seen.
  </summary>
</histogram>

<histogram name="interstitial.ssl.clockstate.network2"
    enum="NetworkClockStates">
  <obsolete>
    Deprecated October 2016. Due to a bug, data in this histogram is mislabelled
    and should be disregarded. Replaced with
    interstitial.ssl.clockstate.network3.
  </obsolete>
  <owner>estark@chromium.org</owner>
  <owner>mab@chromium.org</owner>
  <summary>
    State of the system clock, relative to network time, when an SSL
    CERT_INVALID_DATE error is seen.
  </summary>
</histogram>

<histogram name="interstitial.ssl.clockstate.network3"
    enum="NetworkClockStates">
  <owner>estark@chromium.org</owner>
  <owner>mab@chromium.org</owner>
  <summary>
    State of the system clock, relative to network time, when an SSL
    CERT_INVALID_DATE error is seen.
  </summary>
</histogram>

<histogram name="interstitial.ssl.connection_type"
    enum="ResourcePrefetchPredictorNetworkType">
  <owner>felt@chromium.org</owner>
  <summary>
    The histogram shows the connection types associated with SSL warnings. E.g.,
    do more warnings occur on WiFi?
  </summary>
</histogram>

<histogram name="interstitial.ssl.did_user_revoke_decisions"
    enum="BooleanRevoked">
  <obsolete>
    Deprecated September 13 2017.
  </obsolete>
  <owner>jww@chromium.org</owner>
  <summary>
    Specifies when a user enters the page info menu whether or not the user
    pressed the SSL decisions revoke button. This can only by done if the user
    is in the &quot;Remember Certificate Error Decisions&quot; experiment. This
    is logged when the page info UI is closed. Replaced by
    .did_user_revoke_decisions2 to keep data separate after changing
    functionality to only log when button was visible.
  </summary>
</histogram>

<histogram name="interstitial.ssl.did_user_revoke_decisions2"
    enum="BooleanRevoked">
  <owner>carlosil@chromium.org</owner>
  <summary>
    Specifies when a user enters the page info menu whether or not the user
    pressed the SSL decisions revoke button. This is logged when the page info
    UI is closed, only if the button was visible in the page info.
  </summary>
</histogram>

<histogram name="interstitial.ssl.expiration_and_decision.nonoverridable"
    enum="SSLIsExpiredAndDecision">
  <obsolete>
    Deprecated Dec 2017 (M65).
  </obsolete>
  <owner>jww@chromium.org</owner>
  <summary>
    Records when a user has made a decision to proceed on a nonoverridable SSL
    interstitial. Also records whether a prior decision had been made but the
    decision expired.
  </summary>
</histogram>

<histogram name="interstitial.ssl.expiration_and_decision.overridable"
    enum="SSLIsExpiredAndDecision">
  <obsolete>
    Deprecated Dec 2017 (M65).
  </obsolete>
  <owner>jww@chromium.org</owner>
  <summary>
    Records when a user has made a decision to proceed on an overridable SSL
    interstitial. Also records whether a prior decision had been made but the
    decision expired.
  </summary>
</histogram>

<histogram name="interstitial.ssl.good_cert_seen" enum="SSLGoodCertSeenEvent">
  <obsolete>
    Deprecated Nov 2017 (M64).
  </obsolete>
  <owner>jww@chromium.org</owner>
  <summary>
    Emitted when a good certificate is seen, specifying whether the user already
    gave an exception for a bad certificate for the same host.
  </summary>
</histogram>

<histogram name="interstitial.ssl.good_cert_seen_type_is_frame" enum="Boolean">
  <obsolete>
    Deprecated December 2017 (M65).
  </obsolete>
  <owner>jam@chromium.org</owner>
  <summary>
    Whether the resource type for a request that succeeded with a good cert and
    revoked a certificate exception is for a frame (as opposed to subresource).
  </summary>
</histogram>

<histogram name="interstitial.ssl.severity_score.authority_invalid" units="%">
  <obsolete>
    Deprecated Jan 2015 (M42).
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    The likelihood of a |CERT_AUTHORITY_INVALID| error being an attack.
  </summary>
</histogram>

<histogram name="interstitial.ssl.severity_score.common_name_invalid" units="%">
  <obsolete>
    Deprecated Jan 2015 (M42).
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    The likelihood of a |CERT_COMMON_NAME_INVALID| error being an attack.
  </summary>
</histogram>

<histogram name="interstitial.ssl.severity_score.date_invalid" units="%">
  <obsolete>
    Deprecated Jan 2015 (M42).
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    The likelihood of a |CERT_DATE_INVALID| error being an attack.
  </summary>
</histogram>

<histogram name="interstitial.ssl.visited_site_after_warning" enum="Boolean">
  <owner>carlosil@chromium.org</owner>
  <summary>
    Records when a user visits a site after clicking through a certificate
    warning.
  </summary>
</histogram>

<histogram name="interstitial.ssl_accept_time" units="ms">
  <obsolete>
    Removed on 8/1/13.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    The time between the SSL interstitial display and the user decision, when
    the user accepts the SSL warning.  This is only recorded for overridable SSL
    warnings.  Timing begins when user first focuses on the page.
  </summary>
</histogram>

<histogram name="interstitial.ssl_error_handler" enum="SSLErrorHandlerEvent">
  <owner>meacer@chromium.org</owner>
  <summary>The type of action that the SSL error handler takes.</summary>
</histogram>

<histogram name="interstitial.ssl_error_handler.cert_date_error_delay"
    units="ms">
  <owner>estark@chromium.org</owner>
  <summary>
    When handling a certificate date error, Chrome (under certain Variations
    Service experiments) will delay displaying the warning interstitial for up
    to 3 seconds while querying a network time service. This histogram records
    the amount of time for which the interstitial was delayed on this check. The
    histogram is recorded even when a time query is not sent (for example,
    because Chrome already had an up-to-date network timestamp that it could
    use, or because the client is not in the experimental group that enables
    network time queries).
  </summary>
</histogram>

<histogram name="interstitial.ssl_error_handler.superfish" enum="Boolean">
  <owner>estark@chromium.org</owner>
  <summary>
    When encountering a certificate error, Chrome looks for the well-known
    Superfish certificate in the certificate chain and records this histogram as
    true if the Superfish certificate is present and false otherwise. The
    Superfish certificate is an indication that the user is vulnerable to
    man-in-the-middle attacks because of software installed on their computer.
  </summary>
</histogram>

<histogram name="interstitial.ssl_error_type" enum="SSLErrorTypes">
  <owner>felt@chromium.org</owner>
  <summary>
    The type of SSL error that the user encounters.  This is recorded for all
    SSL warnings, regardless of whether they are overridable.
  </summary>
</histogram>

<histogram name="interstitial.ssl_nonoverridable.is_recurrent_error"
    enum="BooleanRecurrentError" expires_after="M71">
  <owner>estark@chromium.org</owner>
  <summary>
    Recorded when a non-overridable SSL interstitial is shown. The value is true
    if the user has seen the same error multiple times (in which case a special
    message is added to the interstitial).
  </summary>
</histogram>

<histogram name="interstitial.ssl_nonoverridable.is_recurrent_error.ct_error"
    enum="BooleanRecurrentError" expires_after="M71">
  <owner>estark@chromium.org</owner>
  <summary>
    Recorded when a non-overridable SSL interstitial is shown for a Certificate
    Transparency error. The value is true if the user has seen the same error
    multiple times (in which case a special message is added to the
    interstitial).
  </summary>
</histogram>

<histogram name="interstitial.ssl_overridable.is_recurrent_error"
    enum="BooleanRecurrentError" expires_after="M71">
  <owner>estark@chromium.org</owner>
  <summary>
    Recorded when an overridable SSL interstitial is shown. The value is true if
    the user has seen the same error multiple times (in which case a special
    message is added to the interstitial).
  </summary>
</histogram>

<histogram name="interstitial.ssl_overridable.is_recurrent_error.ct_error"
    enum="BooleanRecurrentError" expires_after="M71">
  <owner>estark@chromium.org</owner>
  <summary>
    Recorded when an overridable SSL interstitial is shown for a Certificate
    Transparency error. The value is true if the user has seen the same error
    multiple times (in which case a special message is added to the
    interstitial).
  </summary>
</histogram>

<histogram name="interstitial.ssl_recurrent_error.action"
    enum="RecurrentErrorAction" expires_after="M71">
  <owner>estark@chromium.org</owner>
  <summary>
    Recorded whenever the user sees or proceeds through an SSL interstitial for
    an error that the user has seen multiple times (in which case a special
    message is added to the interstitial).
  </summary>
</histogram>

<histogram name="interstitial.ssl_recurrent_error.ct_error.action"
    enum="RecurrentErrorAction" expires_after="M71">
  <owner>estark@chromium.org</owner>
  <summary>
    Recorded whenever the user sees or proceeds through an SSL interstitial for
    a Certificate Transparency error that the user has seen multiple times (in
    which case a special message is added to the interstitial).
  </summary>
</histogram>

<histogram name="interstitial.ssl_reject_time" units="ms">
  <obsolete>
    Removed on 8/1/13.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    The time between the SSL interstitial display and the user decision, when
    the user rejects the SSL warning.  This is only recorded for overridable SSL
    warnings.  Timing begins when user first focuses on the page.
  </summary>
</histogram>

<histogram name="Invalidations.GCMUpstreamRequest"
    enum="GCMUpstreamMessageStatus">
  <owner>nyquist@chromium.org</owner>
  <owner>khushalsagar@chromium.org</owner>
  <summary>
    Status of sending outgoing invalidation message through GCM upsteam.
  </summary>
</histogram>

<histogram name="Invalidations.NetworkChannel"
    enum="InvalidationNetworkChannel">
  <owner>pavely@chromium.org</owner>
  <summary>Network channel used for invalidations.</summary>
</histogram>

<histogram name="IOS.CanonicalURLResult" enum="CanonicalURLResult">
  <obsolete>
    Deprecated 2018-01. As of M65 use Mobile.CanonicalURLResult.
  </obsolete>
  <owner>gchatz@chromium.org</owner>
  <summary>
    The result of the operation to retrieve the page's canonical URL.
  </summary>
</histogram>

<histogram name="IOS.CommittedURLMatchesCurrentItem" enum="Boolean">
  <owner>danyao@chromium.org</owner>
  <summary>
    When a navigation is committed, the web view URL is expected to match that
    of the current back-forward item. WKWebView seems to break this assumption
    at times. This histogram counts the frequency of this invariant violation at
    the time when a new navigation is committed. True means the URL matches the
    current back-forward item.
  </summary>
</histogram>

<histogram name="IOS.ContentExtension.DisplayCount" units="count">
  <owner>olivierrobin@chromium.org</owner>
  <summary>
    The number of times the Content Extension was displayed since last Chrome
    foregrounding. Reported when Chrome is put in foregrounded.
  </summary>
</histogram>

<histogram name="IOS.ContentExtension.Index" units="index">
  <owner>olivierrobin@chromium.org</owner>
  <summary>
    The index of the URL selected by the user in the Content Extension.
  </summary>
</histogram>

<histogram name="IOS.DragAndDrop.DragContent" enum="DragContent">
  <owner>jif@chromium.org</owner>
  <summary>
    The type of content that the user is dragging into Chrome. Because a drag
    can contain multiple types of objects, multiple DragContent values may be
    recorded for a single drag event.
  </summary>
</histogram>

<histogram name="IOS.FinishedURLMatchesCurrentItem" enum="Boolean">
  <owner>danyao@chromium.org</owner>
  <summary>
    When a navigation is finished, the web view URL is expected to match that of
    the current back-forward item. WKWebView seems to break this assumption at
    times. This histogram counts the frequency of this invariant violation at
    the time when a new navigation is finished. True means the URL matches the
    current back-forward item.
  </summary>
</histogram>

<histogram name="IOS.Handoff.Origin" enum="IOSHandoffOrigin">
  <owner>erikchen@chromium.org</owner>
  <summary>
    This event is recorded each time a Handoff is received by Chrome on iOS. The
    enumeration indicates the source of the Handoff.
  </summary>
</histogram>

<histogram name="IOS.IPHBubbleDismissalReason" enum="BubbleDismissalReason">
  <owner>gchatz@chromium.org</owner>
  <summary>
    Tracks the reason for why the In Product Help bubble was dismissed.
  </summary>
</histogram>

<histogram name="IOS.MailtoURLRewritten" enum="Boolean">
  <owner>pkl@chromium.org</owner>
  <summary>
    Counts the times when a mailto: URL is tapped by user and whether the URL
    has been rewritten for an available native Mail client app or not.
  </summary>
</histogram>

<histogram name="IOS.NTP.Impression" enum="IOSNTPImpression">
  <owner>gambard@chromium.org</owner>
  <summary>
    The type of NTP impressions on iOS, split by type of suggestions shown
    (local vs remote vs remote_collapsed).
  </summary>
</histogram>

<histogram name="IOS.PageLoadCount.Counts"
    enum="IOSPageLoadCountNavigationType">
  <owner>danyao@chromium.org</owner>
  <summary>The number of navigation started events by navigation type.</summary>
</histogram>

<histogram name="IOS.PageLoadCount.LoadingStarted">
  <owner>danyao@chromium.org</owner>
  <summary>
    The &quot;true&quot; value of this boolean histogram counts the number of
    page loading started events. The &quot;false&quot; value will never be seen.
  </summary>
</histogram>

<histogram name="IOS.PageLoadCountMigration.Counts"
    enum="IOSPageLoadCountNavigationType">
  <obsolete>
    Deprecated 2017-11.
  </obsolete>
  <owner>danyao@chromium.org</owner>
  <summary>
    Counts different types of navigation and loading events that are relevant to
    counting page loads.
  </summary>
</histogram>

<histogram name="IOS.PageLoadTiming.OmnibarToPageLoaded" units="ms">
  <owner>danyao@chromium.org</owner>
  <summary>
    Measures the time from the end of user input in the omnibox to when the page
    is fully loaded. Only measures page loads initiated by user typing a URL or
    selecting a suggested entry from the URL bar.
  </summary>
</histogram>

<histogram name="IOS.RepeatedExternalAppPromptResponse"
    enum="IOSRepeatedExternalAppPromptResponse">
  <owner>mrefaat@chromium.org</owner>
  <summary>
    The user reaction to the prompt that appears when a website tries to open an
    external application repeatedly.
  </summary>
</histogram>

<histogram name="IOS.SearchExtension.Action" enum="IOSSearchExtensionAction">
  <owner>olivierrobin@chromium.org</owner>
  <summary>The action selected by the user in the Search Extension.</summary>
</histogram>

<histogram name="IOS.SearchExtension.DisplayCount" units="count">
  <owner>olivierrobin@chromium.org</owner>
  <summary>
    The number of times the Search Extension was displayed since last Chrome
    foregrounding. Reported when Chrome is put in foreground.
  </summary>
</histogram>

<histogram name="IOS.ShareExtension.ReceivedEntriesCount" units="files">
  <owner>olivierrobin@chromium.org</owner>
  <summary>
    The number of items received simultaneously in Chrome from the IOS share
    extension.
  </summary>
</histogram>

<histogram name="IOS.ShareExtension.ReceivedEntry"
    enum="IOSShareExtensionReceivedEntryType">
  <owner>olivierrobin@chromium.org</owner>
  <summary>Type of the item received from the iOS share extension.</summary>
</histogram>

<histogram name="IOS.ShareExtension.ReceivedEntryDelay" units="ms">
  <owner>olivierrobin@chromium.org</owner>
  <summary>
    The delay in milliseconds between the item creation in the extension and its
    processing in Chrome.
  </summary>
</histogram>

<histogram name="IOS.ShareExtension.Source"
    enum="IOSShareExtensionReceivedEntrySource">
  <owner>olivierrobin@chromium.org</owner>
  <summary>
    The source application that sent the external command to Chrome.
  </summary>
</histogram>

<histogram name="IOS.SharePageLatency" units="ms">
  <owner>gchatz@chromium.org</owner>
  <summary>
    The latency in milliseconds between the start of the Share Page operation
    and when the UI is ready to be presented.
  </summary>
</histogram>

<histogram name="IOS.ShowTabSwitcherSnapshotResult"
    enum="ShowTabSwitcherSnapshotResult" expires_after="2019-08-01">
  <owner>edchin@chromium.org</owner>
  <summary>
    Tracks the result of snapshotting when the user enters the tab switcher.
    Recorded whenever the user enters the tab switcher.
  </summary>
</histogram>

<histogram name="IOS.Spotlight.Action" enum="IOSSpotlightAction">
  <owner>olivierrobin@chromium.org</owner>
  <summary>The Spotlight Action pressed by the user.</summary>
</histogram>

<histogram name="IOS.Spotlight.Availability" enum="IOSSpotlightAvailability">
  <owner>olivierrobin@chromium.org</owner>
  <summary>
    Tracks the availability of the Spotlight indexation on the device. It is
    logged once at each cold start. Note: Spotlight may be available on the
    device but disabled by the user.
  </summary>
</histogram>

<histogram name="IOS.Spotlight.BookmarksIndexingDuration" units="ms">
  <owner>olivierrobin@chromium.org</owner>
  <summary>Time spent in Spotlight initial indexation of bookmarks.</summary>
</histogram>

<histogram name="IOS.Spotlight.BookmarksInitialIndexSize">
  <owner>olivierrobin@chromium.org</owner>
  <summary>Number of bookmarks indexed during initial indexation.</summary>
</histogram>

<histogram name="IOS.Spotlight.Origin" enum="IOSSpotlightOrigin">
  <owner>olivierrobin@chromium.org</owner>
  <summary>
    This event is recorded each time a Chrome Spotlight entry is selected by the
    user. The enumeration indicates the nature of the Spotlight entry.
  </summary>
</histogram>

<histogram name="IOS.StoreKit.ITunesURLsHandlingResult"
    enum="IOSITunesURLsStoreKitHandlingResult">
  <owner>mrefaat@chromium.org</owner>
  <owner>eugenebut@chromium.org</owner>
  <summary>
    The result of StoreKit handling for a specific iTunes URL. Not Handled will
    be logged when the LinksHandler didn't handle a specific URL on purpose (not
    supported), and Failure will be logged when a URL that should have been
    handled wasn't handled.
  </summary>
</histogram>

<histogram name="IOS.StoreKitLoadedSuccessfully" enum="BooleanSuccess">
  <owner>mrefaat@chromium.org</owner>
  <summary>
    Whether the StoreKit loaded the required iTunes product successfully or not.
  </summary>
</histogram>

<histogram name="IOS.WKWebViewFinishBeforeCommit" enum="Boolean">
  <owner>danyao@chromium.org</owner>
  <summary>
    WKWebView should notify navigation commit before navigation finish, but
    exceptions have been observed. This histogram counts the frequency of this
    invariant violation at the time when a new navigation is finished. True
    means navigation finish callback happened before navigation commit.
  </summary>
</histogram>

<histogram name="IPC.AttachmentBrokerPrivileged.BrokerAttachmentError"
    enum="IPCAttachmentBrokerPrivilegedBrokerAttachmentError">
  <owner>erikchen@chromium.org</owner>
  <summary>
    Errors that the privileged attachment broker encounters while trying to
    broker attachments.
  </summary>
</histogram>

<histogram name="IPC.AttachmentBrokerUnprivileged.BrokerAttachmentError"
    enum="IPCAttachmentBrokerUnprivilegedBrokerAttachmentError">
  <owner>erikchen@chromium.org</owner>
  <summary>
    Errors that an unprivileged attachment broker encounters while trying to
    broker attachments.
  </summary>
</histogram>

<histogram name="JSDialogs.CharacterCount" units="characters">
  <owner>avi@chromium.org</owner>
  <summary>
    The count of the number of characters in JavaScript dialog messages.
  </summary>
</histogram>

<histogram name="JSDialogs.CharacterCountUserSuppressed" units="characters">
  <obsolete>
    Deprecated 2018-06.
  </obsolete>
  <owner>avi@chromium.org</owner>
  <summary>
    The count of the number of characters in JavaScript dialog messages that
    were suppressed by the user. Compare with
    JSDialogs.CountOfJSDialogMessageCharacters.
  </summary>
</histogram>

<histogram name="JSDialogs.CountOfJSDialogMessageCharacters" units="characters">
  <obsolete>
    Deprecated 2018-06.
  </obsolete>
  <owner>avi@chromium.org</owner>
  <summary>
    The count of the number of characters in JavaScript dialog messages.
  </summary>
</histogram>

<histogram name="JSDialogs.CountOfJSDialogMessageNewlines">
  <obsolete>
    Deprecated 2018-06.
  </obsolete>
  <owner>avi@chromium.org</owner>
  <summary>
    The count of the number of newlines in JavaScript dialog messages. (This
    does not count breaks inserted by the UI toolkit in wrapping the messages.)
  </summary>
</histogram>

<histogram name="JSDialogs.CountOfOnBeforeUnloadMessageCharacters"
    units="characters">
  <obsolete>
    Deprecated 2016-02.
  </obsolete>
  <owner>avi@chromium.org</owner>
  <summary>
    The count of the number of characters in onbeforeunload messages.
  </summary>
</histogram>

<histogram name="JSDialogs.CountOfOnBeforeUnloadMessageNewlines">
  <obsolete>
    Deprecated 2016-02.
  </obsolete>
  <owner>avi@chromium.org</owner>
  <summary>
    The count of the number of newlines in onbeforeunload messages. (This does
    not count breaks inserted by the UI toolkit in wrapping the messages.)
  </summary>
</histogram>

<histogram base="true" name="JSDialogs.DismissalCause"
    enum="JavaScriptDialogDismissalCause">
  <owner>avi@chromium.org</owner>
  <summary>The cause of dismissal of JavaScript dialogs.</summary>
</histogram>

<histogram
    name="JSDialogs.FineTiming.TimeBetweenDialogClosedAndNextDialogCreated"
    units="ms">
  <owner>joenotcharles@chromium.org</owner>
  <summary>
    Fine-grained (in msec) time between closing a Javascript dialog and opening
    another, to track very frequent dialogs.
  </summary>
</histogram>

<histogram
    name="JSDialogs.FineTiming.TimeBetweenDialogCreatedAndNextDialogCreated"
    units="ms">
  <owner>joenotcharles@chromium.org</owner>
  <summary>
    Fine-grained (in msec) time between opening a Javascript dialog and opening
    another, to track very frequent dialogs.
  </summary>
</histogram>

<histogram
    name="JSDialogs.FineTiming.TimeBetweenDialogCreatedAndSameDialogClosed"
    units="ms">
  <owner>joenotcharles@chromium.org</owner>
  <summary>
    Fine-grained (in msec) time between opening a Javascript dialog and closing
    it, to track very short-lived dialogs.
  </summary>
</histogram>

<histogram base="true" name="JSDialogs.IsForemost" enum="BooleanForemost">
  <owner>avi@chromium.org</owner>
  <summary>
    For dialogs, whether or not they were spawned by a tab that was foremost.
  </summary>
</histogram>

<histogram name="JSDialogs.OnBeforeUnloadStayVsLeave" enum="StayVsLeave">
  <owner>avi@chromium.org</owner>
  <summary>
    For onbeforeunload dialogs, the user's choice between staying on the page
    and leaving it.
  </summary>
</histogram>

<histogram base="true" name="JSDialogs.OriginRelationship"
    enum="DialogOriginRelationship">
  <owner>avi@chromium.org</owner>
  <summary>
    For dialogs, the relationship of the origins of the main frame vs the
    alerting frame.
  </summary>
</histogram>

<histogram base="true" name="JSDialogs.Scheme" enum="NavigationScheme">
  <owner>avi@chromium.org</owner>
  <summary>The scheme of the URL showing a JavaScript dialog.</summary>
</histogram>

<histogram name="JSDialogs.SiteEngagementOfBeforeUnload" units="%">
  <obsolete>
    Deprecated 2017-10.
  </obsolete>
  <owner>avi@chromium.org</owner>
  <summary>
    The site engagement values of sites showing onbeforeunload dialogs. Logged
    once per dialog, whether shown or suppressed.
  </summary>
</histogram>

<histogram base="true" name="JSDialogs.SiteEngagementOfDialogs" units="%">
  <obsolete>
    Deprecated 2016-10. Site engagement needed to be measured in small buckets
    anyway so it was never high-resolution enough for use.
  </obsolete>
  <owner>avi@chromium.org</owner>
  <summary>
    The site engagement values of sites showing dialogs. Logged once per dialog,
    whether shown or suppressed.
  </summary>
</histogram>

<histogram name="Keyboard.KeystrokeDeltas" units="ms">
  <obsolete>
    Deprecated 07/2016 in crbug.com/631204 with KeyboardUmaEventFilter removal.
  </obsolete>
  <owner>girard@chromium.org</owner>
  <summary>
    The time between keystrokes in Aura text fields. The only keystrokes that
    are measured are ones that produce a printable character and are not over 5
    seconds apart.
  </summary>
</histogram>

<histogram name="Keyboard.Shortcuts.CrosSearchKeyDelay" units="ms">
  <owner>xiaohuic@chromium.org</owner>
  <owner>zalcorn@chromium.org</owner>
  <summary>
    The time between a user pressing the Chrome OS &quot;Search&quot; key and
    the second key being pressed down to active a shortcut. e.g. Search + L
    would record the time between Search key down and L key down. If the user
    pressed multiple keys after Search, we only record the first key down.
  </summary>
</histogram>

<histogram name="Keyboard.ShortcutViewer.StartupTime" units="ms">
  <owner>jamescook@chromium.org</owner>
  <owner>msw@chromium.org</owner>
  <owner>wutao@chromium.org</owner>
  <summary>
    Time delay between the user gesture that triggered the keyboard shortcut
    viewer dialog (e.g. pressing Ctrl-Alt-/) and the dialog widget being shown,
    including layout time for the views::Views.
  </summary>
</histogram>

<histogram name="KeyboardAccessory.AccessoryActionImpression"
    enum="AccessoryAction">
  <owner>fhorschig@chromium.org</owner>
  <summary>
    Android only. Records whenever users faces an action in the accessory bar or
    one of its sheets.
  </summary>
</histogram>

<histogram name="KeyboardAccessory.AccessoryActionSelected"
    enum="AccessoryAction">
  <owner>fhorschig@chromium.org</owner>
  <summary>
    Android only. Records whenever users select an action in the accessory bar
    or one of its sheets.
  </summary>
</histogram>

<histogram name="KeyboardAccessory.AccessoryBarShown"
    enum="AccessoryBarContents">
  <owner>fhorschig@chromium.org</owner>
  <summary>
    Android only. Records how often users encounter the keyboard accessory bar.
    Its buckets show the contents when it came up. Every bucket may be logged up
    to one time per impression.
  </summary>
</histogram>

<histogram name="KeyboardAccessory.AccessorySheetSuggestionCount" units="count">
  <owner>fhorschig@chromium.org</owner>
  <summary>
    Android only. Records how many suggestions a user faced when opening a
    sheet. The base histogram counts impressions across all sheets.
  </summary>
</histogram>

<histogram name="KeyboardAccessory.AccessorySheetSuggestionsSelected"
    enum="AccessorySuggestionType">
  <owner>fhorschig@chromium.org</owner>
  <summary>
    Android only. Records which type of suggestion was selected from an open
    sheet.
  </summary>
</histogram>

<histogram name="KeyboardAccessory.AccessorySheetTriggered"
    enum="AccessorySheetTrigger">
  <owner>fhorschig@chromium.org</owner>
  <summary>
    Android only. Records how often the bottom sheet was opened or closed by a
    user and the overall count of closures. Closing buckets may be logged up to
    one time per trigger. There are suffixes for each specific sheet type.
  </summary>
</histogram>

<histogram name="Kiosk.Launch.CryptohomeFailure" enum="LoginFailureReason">
  <owner>xiyuan@chromium.org</owner>
  <summary>Tracks cryptohome failure during kiosk launch.</summary>
</histogram>

<histogram name="Kiosk.Launch.Error" enum="KioskLaunchError">
  <owner>xiyuan@chromium.org</owner>
  <summary>Tracks kiosk launch errors.</summary>
</histogram>

<histogram name="Kiosk.LaunchType" enum="KioskLaunchType">
  <owner>xiyuan@chromium.org</owner>
  <owner>blumberg@chromium.org</owner>
  <summary>
    Records kiosk launches, whether it is an enterprise or consumer kiosk and
    whether it is an auto launch or manual launch.
  </summary>
</histogram>

<histogram name="LanguageSettings.Actions" enum="LanguageSettingsActionType">
  <owner>googleo@chromium.org</owner>
  <summary>
    The actions taken on languages settings, recorded every time they happen.
    This histogram will record every single event that happens separately.
  </summary>
</histogram>

<histogram name="LanguageSettings.PageImpression"
    enum="LanguageSettingsPageType">
  <owner>googleo@chromium.org</owner>
  <summary>The type of panes which language settings loads.</summary>
</histogram>

<histogram name="LanguageUsage.AcceptLanguage" enum="LanguageCode"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Accept languages.</summary>
</histogram>

<histogram name="LanguageUsage.ApplicationLanguage" enum="LanguageCode"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Application languages used for UI.</summary>
</histogram>

<histogram name="Launch.FlagsAtStartup" enum="LoginCustomFlags">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Logs which Chrome flags from about:flags were active on start up.
  </summary>
</histogram>

<histogram name="Launch.HomeScreen" enum="LaunchFromHomeScreen">
  <owner>dfalcantara@chromium.org</owner>
  <summary>
    Records how Chrome handled a launch from an Android Home screen shortcut.
  </summary>
</histogram>

<histogram name="Launch.HomeScreenSource" enum="LaunchFromHomeScreenSource">
  <owner>dominickn@chromium.org</owner>
  <summary>
    Records the source of an Android homescreen launch intent used to launch
    Chrome.

    The Menu item bucket is deprecated as of M57, and will only contain records
    for shortcuts added to the homescreen until M56.

    For M57+, the Menu item (standalone) bucket contains all launch intents
    originating from the add to homescreen menu item that launch to standalone
    mode and *are not* WebAPKs. These are sites which do not meet the PWA
    eligibility criteria, but have an app manifest that specifies either
    standalone or fullscreen display. This bucket also contains PWA *and*
    non-PWA intents that were added to the homescreen *prior* to M57, as we
    cannot distinguish between them after they are added.

    For M57+, the Menu item (shortcut) bucket contains all launch intents
    originating from the add to homescreen menu item that launch to a browser
    tab, regardless of when the intent was added.
  </summary>
</histogram>

<histogram name="Launch.IntentFlags" enum="LaunchIntentFlags">
  <owner>dfalcantara@chromium.org</owner>
  <summary>
    Records flags (and combinations of flags) that were attached to the Intent
    that started ChromeLauncherActivity.
  </summary>
</histogram>

<histogram name="Launch.InvalidIntent" enum="BooleanHit">
  <obsolete>
    Deprecated 2016-06 -- hit rate is neglible.
  </obsolete>
  <owner>dfalcantara@chromium.org</owner>
  <summary>
    Records whether or not an invalid Android Intent was fired to launch Chrome.
    (http://crbug.com/445136)
  </summary>
</histogram>

<histogram name="Launch.MashService" enum="MashService">
  <owner>jamescook@chromium.org</owner>
  <summary>
    Records when a mojo ash UI service is started, for example the mojo app
    version of the keyboard shortcut viewer.
  </summary>
</histogram>

<histogram name="Launch.Modes" enum="LaunchMode">
  <owner>calamity@chromium.org</owner>
  <summary>The different ways Chrome is launched.</summary>
</histogram>

<histogram name="Launch.WebAppDisplayMode" enum="WebAppDisplayMode">
  <owner>piotrs@chromium.org</owner>
  <summary>
    Records the display mode (as defined in the Web App Manifest spec) at the
    launch of the Added to Home screen or installed Web App (including WebAPKs).
  </summary>
</histogram>

<histogram name="Layout.MicroSecondsPerComplexText" units="microseconds">
  <owner>benjhayden@chromium.org</owner>
  <summary>
    For layouts that considered at least 100 nodes, at least half of which were
    complex text fragments, the average number of microseconds spent laying out
    each node.

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

<histogram name="Layout.MicroSecondsPerFloat" units="microseconds">
  <owner>benjhayden@chromium.org</owner>
  <summary>
    For layouts that considered at least 100 nodes, at least half of which were
    floats, the average number of microseconds spent laying out each node.

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

<histogram name="Layout.MicroSecondsPerNode" units="microseconds">
  <owner>benjhayden@chromium.org</owner>
  <summary>
    For layouts that considered at least 100 nodes, the average number of
    microseconds spent laying out each node.

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

<histogram name="Layout.MicroSecondsPerPositioned" units="microseconds">
  <owner>benjhayden@chromium.org</owner>
  <summary>
    For layouts that considered at least 100 nodes, at least half of which were
    fixed or absolute positioned, the average number of microseconds spent
    laying out each node.

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

<histogram name="Layout.MicroSecondsPerSimpleText" units="microseconds">
  <owner>benjhayden@chromium.org</owner>
  <summary>
    For layouts that considered at least 100 nodes, at least half of which were
    simple text fragments, the average number of microseconds spent laying out
    each node.

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

<histogram name="Layout.MicroSecondsPerTD" units="microseconds">
  <owner>benjhayden@chromium.org</owner>
  <summary>
    For layouts that considered at least 100 nodes, at least half of which were
    table cells, the average number of microseconds spent laying out each node.

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

<histogram name="Layout.ScrollAnchor.AdjustedScrollOffset" enum="BooleanHit">
  <owner>skobes@chromium.org</owner>
  <summary>
    Records the number of times ScrollAnchor adjusts the scroll offset.
  </summary>
</histogram>

<histogram name="Layout.ScrollAnchor.RestorationStatus"
    enum="ScrollAnchorRestorationStatus">
  <owner>pnoland@chromium.org</owner>
  <summary>
    Records the status of attempts to restore a serialized scroll anchor.
  </summary>
</histogram>

<histogram name="Layout.ScrollAnchor.SerializedAnchorSelectorLength"
    units="characters">
  <owner>pnoland@chromium.org</owner>
  <summary>
    The number of characters in the selector computed for a serialized scroll
    anchor. Recorded when a scroll anchor is serialized.
  </summary>
</histogram>

<histogram name="Layout.ScrollAnchor.SuppressedBySanaclap" enum="BooleanHit">
  <owner>ymalik@chromium.org</owner>
  <summary>
    Records the number of times scroll anchoring is suppressed because of the
    SANACLAP bit being set on an ancestor (see bit.ly/sanaclap).
  </summary>
</histogram>

<histogram name="Layout.ScrollAnchor.TimeToComputeAnchorNodeSelector"
    units="microseconds">
  <owner>pnoland@chromium.org</owner>
  <summary>
    The time it took to compute the selector of a serialized anchor element.

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

<histogram name="Layout.ScrollAnchor.TimeToFindAnchor" units="microseconds">
  <owner>ymalik@chromium.org</owner>
  <summary>
    The time it took to find a suitable anchor element.

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

<histogram name="Layout.ScrollAnchor.TimeToRestoreAnchor" units="microseconds">
  <owner>pnoland@chromium.org</owner>
  <summary>
    The time it took to restore the scroll anchor using the serialized anchor
    element.

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

<histogram name="Layout.ScrollRestoration.PrecededByJsScroll"
    enum="BooleanPrecededByJsScroll">
  <owner>chaopeng@chromium.org</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    We are considering allowing JS scrolling to prevent browser scroll position
    restoration. This histogram measures the impact of that change, in terms of
    how often restoration would be prevented by JS Scroll. Recorded after each
    successful scroll restoration attempt.
  </summary>
</histogram>

<histogram name="LevelDB.Open" enum="LevelDBStatus">
  <owner>cmumford@chromium.org</owner>
  <summary>The result of an open attempt of a leveldb.</summary>
</histogram>

<histogram name="LevelDB.SharedCache.BytesUsed" units="Bytes">
  <obsolete>
    Deprecated 2017-10. Superceded by LevelDB.SharedCache.KBUsed.
  </obsolete>
  <owner>cmumford@chromium.org</owner>
  <summary>
    The estimated size (in bytes) of the leveldb shared cache. Recorded once per
    UMA ping.
  </summary>
</histogram>

<histogram name="LevelDB.SharedCache.DBCount" units="count">
  <owner>cmumford@chromium.org</owner>
  <summary>
    The number of databases currently using the shared block cache. Recorded
    once per UMA ping.
  </summary>
</histogram>

<histogram name="LevelDB.SharedCache.KBUsed" units="KB">
  <owner>cmumford@chromium.org</owner>
  <summary>
    The estimated size (in kilobytes) of the leveldb shared cache. Recorded once
    per UMA ping.
  </summary>
</histogram>

<histogram name="LevelDBEnv.All.SafeThreadAccess" units="accesses">
  <obsolete>
    Deprecated 2013-10. No thread-unsafety was found.
  </obsolete>
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Linux and CrOS use unlocked_stdio(3). If it is used unsafely, record it
    here. If there is no record of unsafety after chrome 29 has been in the
    stable channel for a few weeks then revert this change.
  </summary>
</histogram>

<histogram name="LevelDBEnv.DeleteTableBackupFile" enum="BooleanSuccess">
  <owner>cmumford@chromium.org</owner>
  <summary>
    Tracks the success rate of deleting an unused leveldb table backup file.
  </summary>
</histogram>

<histogram name="LevelDBEnv.IOError" enum="LevelDBIOErrorMethods">
  <owner>dgrogan@chromium.org</owner>
  <summary>Methods where leveldb's Chromium environment has IO errors.</summary>
</histogram>

<histogram name="LevelDBEnv.IOError." enum="PlatformFileError">
  <obsolete>
    Deprecated 2015-05. As of M43 use LevelDBEnv.IOError.BFE.
  </obsolete>
  <owner>dgrogan@chromium.org</owner>
  <summary>PlatformFileErrors encountered by a single leveldb method.</summary>
</histogram>

<histogram name="LevelDBEnv.IOError.BFE" enum="PlatformFileError">
  <owner>cmumford@chromium.org</owner>
  <summary>
    Errors (base::File::Error) encountered by a single leveldb method.
  </summary>
</histogram>

<histogram name="LevelDBEnv.IOError.NewLogger" enum="PopularOSErrno">
  <obsolete>
    Deprecated 2015-05. As of M43 use LevelDBEnv.IOError.BFE.NewLogger.
  </obsolete>
  <owner>dgrogan@chromium.org</owner>
  <summary>Errno of errors encountered in NewLogger.</summary>
</histogram>

<histogram name="LevelDBEnv.IOError.NewSequentialFile" enum="PopularOSErrno">
  <obsolete>
    Deprecated 2015-05. As of M43 use LevelDBEnv.IOError.BFE.NewSequentialFile.
  </obsolete>
  <owner>dgrogan@chromium.org</owner>
  <summary>Errno of errors encountered in NewSequentialFile.</summary>
</histogram>

<histogram name="LevelDBEnv.IOError.RandomAccessFile" enum="PlatformFileError">
  <obsolete>
    Deprecated 2013-04. As of m28 use LevelDBEnv.IOError.NewRandomAccessFile.
  </obsolete>
  <owner>dgrogan@chromium.org</owner>
  <summary>
    File errors in leveldb ChromiumEnv's NewRandomAccessFile method.
  </summary>
</histogram>

<histogram name="LevelDBEnv.IOError.WritableFileAppend" enum="PopularOSErrno">
  <obsolete>
    Deprecated 2015-05. As of M43 use LevelDBEnv.IOError.BFE.WritableFileAppend.
  </obsolete>
  <owner>dgrogan@chromium.org</owner>
  <summary>Errno of errors encountered in WritableFileAppend.</summary>
</histogram>

<histogram name="LevelDBEnv.IOError.WritableFileFlush" enum="PopularOSErrno">
  <obsolete>
    Deprecated 2015-05. As of M43 use LevelDBEnv.IOError.BFE.WritableFileFlush.
  </obsolete>
  <owner>dgrogan@chromium.org</owner>
  <summary>Errno of errors encountered in WritableFileFlush.</summary>
</histogram>

<histogram name="LevelDBEnv.LockFileAncestorsNotFound" units="directories">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Number of directories missing when Non-IDB LevelDBEnv tries to create a Lock
    file.
  </summary>
</histogram>

<histogram name="LevelDBEnv.MaxFDs" units="files">
  <obsolete>
    Deprecated as of September 20, 2017.
  </obsolete>
  <owner>cmumford@chromium.org</owner>
  <summary>
    File descriptor limit recorded every time LevelDB calls NewRandomAccessFile
    for clients other than IndexedDB.
  </summary>
</histogram>

<histogram name="LevelDBEnv.MissingFiles" units="files">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Number of backup files found without corresponding ldb files. As measured by
    GetChildren when used in LevelDB clients other than IndexedDB.
  </summary>
</histogram>

<histogram name="LevelDBEnv.RetryRecoveredFromErrorIn" enum="PlatformFileError">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    When Non-IDB LevelDBEnv successfully retries an operation that had failed,
    record the error from the most recent failed attempt.
  </summary>
</histogram>

<histogram name="LevelDBEnv.Table" enum="BooleanSuccess">
  <obsolete>
    As of M54 no longer creating or using table backup files.
  </obsolete>
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Success indicates a successful backup or restore operation for .ldb table
    files when used by LevelDB clients other than IndexedDB.
  </summary>
</histogram>

<histogram name="LevelDBEnv.TimeTo" units="ms">
  <obsolete>
    Deprecated 2013-04. As of m28 use LevelDBEnv.TimeUntilSuccessFor.
  </obsolete>
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Time Non-IDB LevelDBEnv slept before successfully completing this operation.
    0 means success on the first try.
  </summary>
</histogram>

<histogram name="LevelDBEnv.TimeUntilSuccessFor" units="ms">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Time Non-IDB LevelDBEnv slept before successfully completing this operation.
    0 means success on the first try, as LevelDBEnv only sleeps when retries are
    needed.
  </summary>
</histogram>

<histogram name="LevelDBWrapper.CommitDelay" units="ms">
  <owner>mek@chromium.org</owner>
  <summary>
    Delay between the browser process receiving changes and those changes being
    written to the DB.
  </summary>
</histogram>

<histogram name="LibraryLoader.LoadNativeLibraryWindows"
    enum="LoadLibraryResultCategory">
  <owner>chengx@chromium.org</owner>
  <summary>
    This metric records the LoadLibraryExW and LoadLibraryW Windows API call
    results, which are used in native_library_win.cc.
  </summary>
</histogram>

<histogram name="LibraryLoader.NativeLibraryHack" enum="BooleanUsage">
  <obsolete>
    Deprecated as of 11/2014, removed from code.
  </obsolete>
  <owner>feng@chromium.org</owner>
  <summary>
    A boolean that indicates whether the workaround of a Sony framework bug was
    used. The metric is Android-specific, and is logged when the browser starts.
    See more details at http://crbug.com/311644.
  </summary>
</histogram>

<histogram name="LibraryLoader.PercentageOfResidentCodeBeforePrefetch"
    units="%">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Percentage of the native library code pages resident in memory. Recorded
    immediately before the library prefetching kicks in, only on Android.
  </summary>
</histogram>

<histogram name="LibraryLoader.PrefetchDetailedStatus"
    enum="LibraryLoaderPrefetchDetailedStatus">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Detailed status of the library prefetch final status. This is an expanded
    version of LibraryLoader.PrefetchStatus. Android only, recorded at most once
    per browser startup.
  </summary>
</histogram>

<histogram name="LibraryLoader.PrefetchStatus" enum="BooleanSuccess">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Indicates whether the forking of a child process to prefetch the native
    library succeeded. Android only, recorded at most once per browser startup.
  </summary>
</histogram>

<histogram name="Linux.Distro" enum="LinuxDistro">
  <owner>timbrown@chromium.org</owner>
  <owner>thomasanderson@chromium.org</owner>
  <summary>The Linux distro used. Logged on each start up.</summary>
</histogram>

<histogram name="Linux.GlibcVersion" enum="LinuxGlibcVersion">
  <owner>thestig@chromium.org</owner>
  <summary>
    The version of glibc used. (Linux only) Logged on each start up.
  </summary>
</histogram>

<histogram name="Linux.SandboxStatus" enum="LinuxSandboxStatus">
  <owner>rickyz@chromium.org</owner>
  <summary>
    The Linux sandbox status. This describes what sandboxing features are
    enabled (such as the suid/namespace sandboxes, various namespaces, seccomp
    bpf, ...). Emitted once at startup.
  </summary>
</histogram>

<histogram name="Linux.WindowManager" enum="LinuxWindowManagerName">
  <owner>pkotwicz@chromium.org</owner>
  <summary>
    The window manager used. (Linux only) Logged on each start up.
  </summary>
</histogram>

<histogram name="Linux.X11.ServerRTT" units="microseconds">
  <owner>thomasanderson@chromium.org</owner>
  <summary>
    RTT between Chrome and the X11 server.  Tracked in X11EventSource by
    measuring the latency to receive a property event after changing a property.

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

<histogram name="LoadingPredictor.PreconnectCount" units="origins">
  <owner>alexilin@chromium.org</owner>
  <summary>
    The number of origins that were preconnected for a page load. It includes
    preconnect attempts that don't result in new opened connection. Logged after
    the preconnect manager completes all jobs attached to the page load.
  </summary>
</histogram>

<histogram name="LoadingPredictor.PreconnectHitsPercentage" units="%">
  <owner>alexilin@chromium.org</owner>
  <summary>
    The percentage of origins that were preconnected and requested by a page
    load to the total number of origins that were preconnected for a page load.
    Logged after the preconnect manager completes all jobs attached to the page
    load.
  </summary>
</histogram>

<histogram name="LoadingPredictor.PreconnectLearningCount" units="origins">
  <owner>alexilin@chromium.org</owner>
  <summary>
    When the loading predictor has origins in the local database for a given
    navigation to preconnect and preresolve, the count of predicted origins.
  </summary>
</histogram>

<histogram name="LoadingPredictor.PreconnectLearningPrecision" units="%">
  <owner>alexilin@chromium.org</owner>
  <summary>
    When the loading predictor has origins in the local database for a given
    navigation to preconnect and preresolve, the precision of the predictions in
    percentage. This is computed as 100 \times \frac{correct
    predictions}{predictions}.
  </summary>
</histogram>

<histogram name="LoadingPredictor.PreconnectLearningRecall" units="%">
  <owner>alexilin@chromium.org</owner>
  <summary>
    When the loading predictor has origins in the local database for a given
    navigation to preconnect and preresolve, the recall of the predictions, in
    percentage. This is computed as 100 \times \frac{correct predictions}{all
    prefetchable subresources}.
  </summary>
</histogram>

<histogram name="LoadingPredictor.PreconnectLearningRedirectStatus"
    enum="ResourcePrefetchPredictorRedirectStatus">
  <owner>alexilin@chromium.org</owner>
  <summary>
    When the prefetch predictor has origins in the local database for a given
    navigation to preconnect and preresolve, records stats about whether
    redirect was predicted correctly or incorrectly.
  </summary>
</histogram>

<histogram name="LoadingPredictor.PreresolveCount" units="hosts">
  <owner>alexilin@chromium.org</owner>
  <summary>
    The number of hosts that were preresolved for a page load. It includes only
    successful DNS lookups. Logged after the preconnect manager completes all
    jobs attached to the page load.
  </summary>
</histogram>

<histogram name="LoadingPredictor.PreresolveHitsPercentage" units="%">
  <owner>alexilin@chromium.org</owner>
  <summary>
    The percentage of hosts that were preresolved and requested by a page load
    to the total number of hosts that were preresolved for a page load. Logged
    after the preconnect manager completes all jobs attached to the page load.
  </summary>
</histogram>

<histogram name="LoadingPredictor.SubresourceConnectDuration" units="ms">
  <obsolete>
    Deprecated at M66. No longer recorded.
  </obsolete>
  <owner>alexilin@chromium.org</owner>
  <summary>
    Records the time measured before starting DNS lookup until after the
    connection is complete for main frame subresources observed by the
    LoadingPredictor. Only resources that required network connection and
    happened before the first contentful paint are recorded.
  </summary>
</histogram>

<histogram name="LocalDiscovery.ClientRestartAttempts">
  <owner>noamsml@chromium.org</owner>
  <owner>vitalybuka@chromium.org</owner>
  <summary>Records number of attempts to start local discovery.</summary>
</histogram>

<histogram name="LocalDiscovery.DetectorRestartTime" units="ms">
  <owner>noamsml@chromium.org</owner>
  <owner>vitalybuka@chromium.org</owner>
  <summary>Time between detector restarts.</summary>
</histogram>

<histogram name="LocalDiscovery.DetectorTriggerTime" units="ms">
  <owner>noamsml@chromium.org</owner>
  <owner>vitalybuka@chromium.org</owner>
  <summary>Time before detector trigger notifications.</summary>
</histogram>

<histogram name="LocalDiscovery.DevicesPage" enum="DevicesPageEvents">
  <owner>noamsml@chromium.org</owner>
  <owner>vitalybuka@chromium.org</owner>
  <summary>Records events related to devices page.</summary>
</histogram>

<histogram name="LocalDiscovery.FirewallAccessTime" units="ms">
  <owner>noamsml@chromium.org</owner>
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    Windows only histogram that reports request time spend accessing firewall
    rules. It's logged once per browser process lifetime, when local discovery
    is used first time.
  </summary>
</histogram>

<histogram name="LocalDiscovery.IsFirewallReady" enum="BooleanEnabled">
  <owner>noamsml@chromium.org</owner>
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    Windows only histogram that reports, whether a firewall is set, so we can
    bind inbound sockets. It's logged once per browser process lifetime, when
    local discovery is used first time.
  </summary>
</histogram>

<histogram name="LocalDiscovery.PrivetNotificationsEvent"
    enum="PrivetNotificationsEvent">
  <owner>noamsml@chromium.org</owner>
  <owner>vitalybuka@chromium.org</owner>
  <summary>Records events related to local discovery notifications.</summary>
</histogram>

<histogram base="true" name="LocalNetworkRequests.PrivatePage" units="requests">
  <owner>uthakore@chromium.org</owner>
  <owner>invernizzi@chromium.org</owner>
  <summary>
    Number of requests made by a private page to resources besides itself.
  </summary>
</histogram>

<histogram base="true" name="LocalNetworkRequests.PublicPage" units="requests">
  <owner>uthakore@chromium.org</owner>
  <owner>invernizzi@chromium.org</owner>
  <summary>
    Number of requests made by a public page to resources with reserved IP
    addresses.
  </summary>
</histogram>

<histogram name="LocalStorage.BrowserLocalStorageCachePurgedInKB" units="KB">
  <owner>ssid@chromium.org</owner>
  <summary>
    Total size of the HTML5 LocalStorage browser-side cache purged in KB when
    memory pressure signal was triggered or cache size hit the limits.
  </summary>
</histogram>

<histogram name="LocalStorage.BrowserLocalStorageCacheSizeInKB" units="KB">
  <owner>ssid@chromium.org</owner>
  <summary>
    Total size of the HTML5 LocalStorage databases in KB in the browser-side
    cache recorded each time a new database is opened in memory.
  </summary>
</histogram>

<histogram name="LocalStorage.BrowserLocalStorageSizeInKB" units="KB">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Size of the HTML5 LocalStorage DB in KB in the browser-side cache.
  </summary>
</histogram>

<histogram name="LocalStorage.BrowserTimeToPrimeLocalStorage">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Time to load HTML5 LocalStorage into the browser-side cache.
  </summary>
</histogram>

<histogram name="LocalStorage.CommitDelay" units="ms">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Delay between a page making changes and those changes being written to the
    DB.
  </summary>
</histogram>

<histogram name="LocalStorage.MojoSizeInKB" units="KB">
  <owner>jam@chromium.org</owner>
  <summary>
    Size of the HTML5 LocalStorage DB in KB in the renderer-side cache using
    Mojo implementation.
  </summary>
</histogram>

<histogram name="LocalStorage.MojoTimeToPrime" units="ms">
  <owner>jam@chromium.org</owner>
  <summary>
    Time (in ms) to load HTML5 LocalStorage into the renderer-side cache using
    Mojo implementation.
  </summary>
</histogram>

<histogram name="LocalStorage.MojoTimeToPrimeFor" units="ms">
  <owner>jam@chromium.org</owner>
  <summary>
    Time (in ms) to load HTML5 LocalStorage into the renderer-side cache using
    Mojo implementation, split by size.
  </summary>
</histogram>

<histogram name="LocalStorage.RendererAreaCacheHit"
    enum="LocalStorageRendererAreaCacheHitEnum">
  <owner>ssid@chromium.org</owner>
  <summary>
    The renderer side cache hit rate metrics for new HTML5 LocalStorage DB
    opened.
  </summary>
</histogram>

<histogram name="LocalStorage.RendererLocalStorageSizeInKB" units="KB">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Size of the HTML5 LocalStorage DB in KB in the renderer-side cache.
  </summary>
</histogram>

<histogram name="LocalStorage.RendererTimeToPrimeLocalStorage">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Time to load HTML5 LocalStorage into the renderer-side cache.
  </summary>
</histogram>

<histogram name="LocalStorage.TimeToPrimeLocalStorage">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Time to load HTML5 LocalStorage into the renderer-side cache. Note that the
    name is not 'Renderer' prefixed for continuity with the old naming.
  </summary>
</histogram>

<histogram name="LocalStorageContext.CachePurgedInKB" units="KB">
  <owner>mek@chromium.org</owner>
  <summary>
    Total size of the HTML5 LocalStorage browser-side cache purged in KB when
    memory pressure signal was triggered or cache size hit the limits.
  </summary>
</histogram>

<histogram name="LocalStorageContext.CacheSizeInKB" units="KB">
  <owner>mek@chromium.org</owner>
  <summary>
    Total size of the HTML5 LocalStorage databases in KB in the browser-side
    cache. Recorded each time a new database is opened in memory.
  </summary>
</histogram>

<histogram name="LocalStorageContext.CommitResult" enum="LevelDBStatus">
  <owner>mek@chromium.org</owner>
  <summary>
    The result of an attempt to commit localstorage data to the database.
  </summary>
</histogram>

<histogram name="LocalStorageContext.DatabaseOpenError" enum="LevelDBStatus">
  <owner>mek@chromium.org</owner>
  <summary>
    The result of a failed attempt to open a LevelDB database for LocalStorage.
  </summary>
</histogram>

<histogram name="LocalStorageContext.DatabaseOpenError.Disk"
    enum="LevelDBStatus">
  <owner>mek@chromium.org</owner>
  <summary>
    The result of a failed attempt to open a LevelDB database for LocalStorage
    on disk.
  </summary>
</histogram>

<histogram name="LocalStorageContext.DatabaseOpenError.Memory"
    enum="LevelDBStatus">
  <owner>mek@chromium.org</owner>
  <summary>
    The result of a failed attempt to open a LevelDB database for LocalStorage
    in memory.
  </summary>
</histogram>

<histogram name="LocalStorageContext.DestroyDBResult" enum="LevelDBStatus">
  <owner>mek@chromium.org</owner>
  <summary>
    The result of attempting to delete the LocalStorage database.
  </summary>
</histogram>

<histogram name="LocalStorageContext.DirectoryOpenError"
    enum="PlatformFileError">
  <owner>mek@chromium.org</owner>
  <summary>
    The reason opening a directory for the LevelDB database that backs
    LocalStorage failed.
  </summary>
</histogram>

<histogram name="LocalStorageContext.MapLoadError" enum="LevelDBStatus">
  <owner>mek@chromium.org</owner>
  <summary>
    The reason loading an initial snapshot of the localstorage data for an
    origin failed.
  </summary>
</histogram>

<histogram name="LocalStorageContext.MigrationFixUpNeeded" enum="Boolean">
  <owner>mek@chromium.org</owner>
  <summary>
    Whether or not any fixes needed to be made to localstorage data, as a result
    of bugs in the migration code in M61/M62. Recorded every time the browser
    loads an initial snapshot of the localstorage data for an origin.
  </summary>
</histogram>

<histogram name="LocalStorageContext.OpenError" enum="LocalStorageOpenError">
  <owner>mek@chromium.org</owner>
  <summary>
    The reason opening the LevelDB database that backs LocalStorage failed.
  </summary>
</histogram>

<histogram base="true" name="LocalStorageContext.OpenResultAfter"
    enum="LocalStorageOpenError">
<!-- Name completed by histogram_suffixes name="LocalStorageContextOpenReasons" -->

  <owner>mek@chromium.org</owner>
  <summary>
    The result of opening the LevelDB database that backs LocalStorage.
  </summary>
</histogram>

<histogram name="LocalStorageContext.ReadVersionError" enum="LevelDBStatus">
  <owner>mek@chromium.org</owner>
  <summary>
    The reason reading the schema version of the LocalStorage database failed.
  </summary>
</histogram>

<histogram name="Login.ConsumerNewUsersAllowed" enum="LoginConsumerWhitelist">
  <owner>cmasone@chromium.org</owner>
  <owner>sumit@chromium.org</owner>
  <summary>
    Chrome OS histogram tracking, per consumer sign-in, whether the device owner
    is allowing arbitrary accounts to be used on the device, or only those on a
    specific whitelist.
  </summary>
</histogram>

<histogram name="Login.CustomFlags" enum="LoginCustomFlags">
  <owner>alemate@chromium.org</owner>
  <summary>
    A set of chrome flags that required browser restart on Chrome OS user sign
    in.
  </summary>
</histogram>

<histogram name="Login.FailureReason" enum="LoginFailureReason">
  <owner>achuith@chromium.org</owner>
  <summary>Chrome OS login failure reason.</summary>
</histogram>

<histogram name="Login.LeastUsedAccountDays" units="days">
  <owner>achuith@chromium.org</owner>
  <owner>omrilio@chromium.org</owner>
  <summary>
    Chrome OS histogram that keeps track of the days since the least frequently
    used account signed in. Reported on every boot and once a day after that.
  </summary>
</histogram>

<histogram name="Login.NewUserPriorityPrefsSyncResult"
    enum="NewUserPriorityPrefsSyncResult">
  <owner>alemate@chromeos.org</owner>
  <summary>Records whether a new user's priority prefs sync timed out.</summary>
</histogram>

<histogram name="Login.NewUserPriorityPrefsSyncTime" units="ms">
  <owner>alemate@chromeos.org</owner>
  <summary>
    Time spent waiting for priority preferences to sync after new user sign in.
    The operation will time out after 10s.
  </summary>
</histogram>

<histogram name="Login.OfflineFailure.IsKnownUser" enum="LoginIsKnownUser">
  <owner>glevin@chromium.org</owner>
  <summary>
    On offline login failure, records whether it is for an existing user.
  </summary>
</histogram>

<histogram name="Login.OfflineSuccess.Attempts">
  <owner>glevin@chromium.org</owner>
  <summary>
    On offline login success, records number of attempts, including success.
  </summary>
</histogram>

<histogram name="Login.PasswordChangeFlow" enum="LoginPasswordChangeFlow">
  <owner>xiyuan@chromium.org</owner>
  <owner>omrilio@chromium.org</owner>
  <summary>
    Records the UI flow after a possible password change is detected.
  </summary>
</histogram>

<histogram name="Login.PolicyFilesStatePerBoot" enum="LoginPolicyFilesState">
  <owner>cmasone@chromium.org</owner>
  <summary>The state of Chrome OS owner key and device policy files.</summary>
</histogram>

<histogram name="Login.PromptToCompleteLoginTime" units="ms">
  <owner>achuith@chromium.org</owner>
  <summary>
    Time from first display of the login prompt until the user completes signing
    in.
  </summary>
</histogram>

<histogram name="Login.PromptToLoginTime" units="ms">
  <owner>elijahtaylor@google.com</owner>
  <owner>yusukes@chromium.org</owner>
  <summary>
    Time from first display of the login prompt until the existing user
    completes signing in.
  </summary>
</histogram>

<histogram name="Login.ReauthReason" enum="LoginReauthReasons">
  <owner>achuith@chromium.org</owner>
  <summary>
    Tracks the reason why a user was sent through the GAIA re-auth flow.
  </summary>
</histogram>

<histogram name="Login.StateKeyGenerationStatus"
    enum="LoginStateKeyGenerationStatus">
  <owner>mnissler@chromium.org</owner>
  <summary>Result of a state key generation operation.</summary>
</histogram>

<histogram name="Login.SuccessReason" enum="LoginSuccessReason">
  <owner>achuith@chromium.org</owner>
  <summary>Chrome OS login success reason.</summary>
</histogram>

<histogram name="Login.TokenCheckResponseTime" units="ms">
  <owner>glevin@chromium.org</owner>
  <summary>
    Time between sending a request to, and receiving a reply from, GAIA token
    endpoint to validate TokenInfo.
  </summary>
</histogram>

<histogram name="Login.TokenObtainResponseTime" units="ms">
  <owner>glevin@chromium.org</owner>
  <summary>
    Time between sending a request to, and receiving a reply from, GAIA token
    endpoint to obtain TokenInfo.
  </summary>
</histogram>

<histogram name="Login.UsersActiveWeekly" units="users">
  <owner>alemate@chromium.org</owner>
  <owner>achuith@chromium.org</owner>
  <summary>
    Chrome OS histogram that keeps track of number of users who have logged in
    in the last 7 days. Reported on every boot and once a day after that.
  </summary>
</histogram>

<histogram name="Login.UsersActiveWeekly.Percent" units="%">
  <owner>alemate@chromium.org</owner>
  <owner>achuith@chromium.org</owner>
  <summary>
    Chrome OS histogram that keeps track of percentage of local users who have
    logged in in the last 7 days. Reported on every boot and once a day after
    that.
  </summary>
</histogram>

<histogram name="Login.UserType" enum="LoginUserType">
  <owner>cmasone@chromium.org</owner>
  <summary>
    Chrome OS histogram that keeps track of the way a user logs in and whether
    Chrome OS is running normal or developer mode.
  </summary>
</histogram>

<histogram name="LowPriorityIframes.IframeRequestPriority"
    enum="WebURLRequestPriority">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Original Blink priority of the request that belongs to an iframe.  Recorded
    for every request fetched via Blink, but only when the experiment to lower
    the priority of iframes is enabled.
  </summary>
</histogram>

<histogram name="LowPriorityIframes.MainFrameRequestPriority"
    enum="WebURLRequestPriority">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Original Blink priority of the request that belongs to the main frame.
    Recorded for every request fetched via Blink, but only when the experiment
    to lower the priority of iframes is enabled.
  </summary>
</histogram>

<histogram name="ManagedUsers.ChromeOS.PasswordChange"
    enum="ManagedUserPasswordChange">
  <owner>achuith@chromium.org</owner>
  <summary>
    Chrome OS histogram that keeps track of supervised user password change
    result.
  </summary>
</histogram>

<histogram name="ManagedUsers.FilteringResult"
    enum="SupervisedUserSafetyFilterResult">
  <owner>treib@chromium.org</owner>
  <owner>pam@chromium.org</owner>
  <summary>
    The counts of results from supervised user URL filtering. Each entry
    includes the outcome of the filter (i.e. allowed, blocked, or unknown) and
    the page transition type (how the user got there, e.g. typed URL, clicked
    link).
  </summary>
</histogram>

<histogram name="ManagedUsers.SafeSitesDelay" units="ms">
  <owner>treib@chromium.org</owner>
  <owner>pam@chromium.org</owner>
  <summary>
    The extra page load delays introduced by network requests due to the
    supervised user SafeSites feature, measured once per page load.
  </summary>
</histogram>

<histogram name="ManagedUsers.SafetyFilter"
    enum="SupervisedUserSafetyFilterResult">
  <owner>treib@chromium.org</owner>
  <owner>pam@chromium.org</owner>
  <summary>
    The counts of results from the supervised user safety filter. Each entry
    includes the outcome of the filter (i.e. allowed, blocked, or unknown) and
    the page transition type (how the user got there, e.g. typed URL, clicked
    link). This only includes URL requests that were handled by the SafeSites
    filter (both online and the static blacklist).
  </summary>
</histogram>

<histogram name="ManagedUsers.Whitelist.Count" units="whitelists">
  <owner>bauerb@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <owner>pam@chromium.org</owner>
  <summary>
    The number of whitelists installed for a supervised user. Recorded at every
    profile startup.
  </summary>
</histogram>

<histogram name="ManagedUsers.Whitelist.JsonParseDuration" units="ms">
  <owner>bauerb@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <owner>pam@chromium.org</owner>
  <summary>
    The total amount of time taken to parse the JSON contents of a whitelist out
    of process.
  </summary>
</histogram>

<histogram name="ManagedUsers.Whitelist.ReadDuration" units="ms">
  <owner>bauerb@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <owner>pam@chromium.org</owner>
  <summary>
    The amount of time taken to read a whitelist file from disk.
  </summary>
</histogram>

<histogram name="ManagedUsers.Whitelist.TotalLoadDuration" units="ms">
  <owner>bauerb@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <owner>pam@chromium.org</owner>
  <summary>
    The total amount of time taken to load a whitelist from disk and parse it,
    including jumps to the blocking thread.
  </summary>
</histogram>

<histogram name="Manifest.FetchResult" enum="ManifestFetchResultType">
  <owner>mlamouri@chromium.org</owner>
  <summary>
    Tracks whether the Manifest fetch succeed and why it failed if it failed.
  </summary>
</histogram>

<histogram name="Manifest.HasProperty" enum="Boolean">
  <owner>mlamouri@chromium.org</owner>
  <summary>
    Tracks which properties of a Manifest were present when it was parsed. If a
    property can't be parsed, it will be recorded as not present. These
    histograms will only be used if the Manifest was correctly fetched and
    parsed and the parsed manifest is not empty.
  </summary>
</histogram>

<histogram name="Manifest.IsEmpty" enum="Boolean">
  <owner>mlamouri@chromium.org</owner>
  <summary>Tracks whether the parsed Manifest is the empty Manifest.</summary>
</histogram>

<histogram name="Manifest.ParseSuccess" enum="Boolean">
  <owner>mlamouri@chromium.org</owner>
  <summary>
    Tracks the Manifest parsing result. A failure will be recorded if the
    Manifest was incorrectly structured. This doesn't take into account parse
    failures for each individual properties.
  </summary>
</histogram>

<histogram name="Media.AcceleratedCompositingActive" enum="BooleanSuccess">
  <obsolete>
    Deprecated as of July 21, 2014.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Whether accelerated compositing was used for HTML5 media rendering.
  </summary>
</histogram>

<histogram name="Media.AImageReaderGLOwner.AcquireImageResult"
    enum="MediaStatus" expires_after="2018-11-25">
  <owner>vikassoni@chromium.org</owner>
  <summary>Error codes to handle AImage and AImageReader api calls.</summary>
</histogram>

<histogram name="Media.Android.BackgroundVideoTime" units="ms">
  <owner>avayvod@chromium.org</owner>
  <owner>mlamouri@chromium.org</owner>
  <owner>zhiqiang@chromium.org</owner>
  <summary>
    Android-specific metric. The time between the moment the backgrounded video
    playback is started (meaning the user just resumed the backgrounded video
    allowing playback) and the moment it stops being background playback by the
    current playing video either going foreground or being paused by the user.
    Note: on Android, videos are suspended when backgrounded.
  </summary>
</histogram>

<histogram name="Media.Android.IsHttpLiveStreamingMedia" enum="MediaUrlType">
  <obsolete>
    Deprecated as of 08/2017
  </obsolete>
  <owner>qinmin@chromium.org</owner>
  <summary>
    Android: Records whether a regular media URL is HLS (HTTP Live Streaming)
    media or not.
  </summary>
</histogram>

<histogram name="Media.Android.IsHttpLiveStreamingMediaPredictionResult"
    enum="MediaTypePredictionResult">
  <obsolete>
    Deprecated as of 08/2017
  </obsolete>
  <owner>sandersd@chromium.org</owner>
  <summary>
    Android: Records which HLS prediction based on the original URL was best.
  </summary>
</histogram>

<histogram name="Media.Android.MediaPlayerSuccess" enum="MediaPlayerExitStatus">
  <owner>timav@chromium.org</owner>
  <summary>Android: Whether MediaPlayer exited without errors.</summary>
</histogram>

<histogram name="Media.Android.NumMediaServerCrashes">
  <obsolete>
    Deprecated as of 04/2017
  </obsolete>
  <owner>qinmin@chromium.org</owner>
  <summary>
    Android: Number of consecutive media server crashes monitored before it is
    reset to 0. Reset happens if there are no crashes in a minute, or if user
    hits the &quot;try again&quot; button on the media throttle info bar.
  </summary>
</histogram>

<histogram name="Media.Android.ThrottleInfobarResponse"
    enum="ThrottleInfobarResponse">
  <obsolete>
    Deprecated as of 04/2017
  </obsolete>
  <owner>qinmin@chromium.org</owner>
  <summary>
    Android: The distribution of responses to the media throttle infobar prompt.
  </summary>
</histogram>

<histogram name="Media.ArcGpuVideoDecodeAccelerator.InitializeResult"
    enum="ArcVideoDecodeAcceleratorResult">
  <obsolete>
    Deprecated as of June 12, 2017. Replaced by
    Media.ChromeArcVideoDecodeAccelerator.InitializeResult.
  </obsolete>
  <owner>johnylin@chromium.org</owner>
  <summary>
    Counts of status values returned from calls to
    ArcGpuVideoDecodeAccelerator::Initialize().
  </summary>
</histogram>

<histogram name="Media.Audible.ConcurrentTabsTime" units="ms">
  <owner>mlamouri@chromium.org</owner>
  <summary>
    Records how long more than one tab is audible at the same time. The
    concurrent tabs might change during this period. The time recorded starts
    when the browser goes from one to two audbile tabs and stops when it is back
    below two.
  </summary>
</histogram>

<histogram name="Media.Audible.ConcurrentTabsWhenStarting">
  <owner>mlamouri@chromium.org</owner>
  <summary>
    Records how many tabs were audible when a new tab started to be audible.
  </summary>
</histogram>

<histogram name="Media.Audible.MaxConcurrentTabsInSession">
  <owner>mlamouri@chromium.org</owner>
  <summary>
    Records how many tabs are audible at the same time during the session. It is
    recording the maximum audible tab count everytime it increases. In other
    words, a session with N concurrent audible tabs will record entries from 1
    through N exactly once.
  </summary>
</histogram>

<histogram name="Media.Audio.ActualInputBufferFrameSizeMac">
  <owner>henrika@chromium.org</owner>
  <summary>
    Size (in audio frames) of native I/O buffers that is set by the audio
    manager when calling AUAudioInputStream::Open(). I.e., it is the actual
    buffer size and it can differ from the one that the client requested. Only
    sampled when Media.Audio.InputStartupSuccessMac reports 'Failure'.
  </summary>
</histogram>

<histogram name="Media.Audio.AudioUnitRenderHasWorkedMac"
    enum="BooleanEverWorked">
  <owner>henrika@chromium.org</owner>
  <summary>
    Stored in combination with Media.Audio.RenderFailsWhenBufferSizeChangesMac.
    It is set to true if calls to AudioUnitRender has ever worked, i.e., we did
    not start to see kAudioUnitErr_CannotDoInCurrentContext error messages
    directly from start but there has been at least on successful call to
    AudioUnitRender.
  </summary>
</histogram>

<histogram name="Media.Audio.AutomaticGainControlMac" enum="BooleanEnabled"
    expires_after="2018-08-30">
  <owner>henrika@chromium.org</owner>
  <summary>
    Indicates if the Automatic Gain Control (AGC) is enabled or not. Only
    sampled when Media.Audio.InputStartupSuccessMac reports 'Failure'.
  </summary>
</histogram>

<histogram name="Media.Audio.Autoplay" enum="AutoplaySource">
  <owner>mlamouri@chromium.org</owner>
  <owner>avayvod@chromium.org</owner>
  <owner>zqzhang@chromium.org</owner>
  <summary>Records the autoplay source of audios.</summary>
</histogram>

<histogram name="Media.Audio.Autoplay.Attribute.WaitTime" units="ms">
  <owner>hubbe@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Records time from load starts until audio starts based on autoplay
    attribute.
  </summary>
</histogram>

<histogram name="Media.Audio.Autoplay.PlayMethod.WaitTime" units="ms">
  <owner>hubbe@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Records time from load starts until audio starts based on play method.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.CallbackError" enum="BooleanError">
  <obsolete>
    Deprecated as of 02/2017.
  </obsolete>
  <owner>tommi@chromium.org</owner>
  <summary>
    A boolean that reflects whether or not an error was reported during audio
    capture.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.DetectedMissingCallbacks"
    enum="BooleanMissingCallbacks">
  <owner>grunell@chromium.org</owner>
  <summary>
    Whether missing callbacks where detected during audio capture. Logged when
    AudioInputDevice is stopped.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.DeviceLatency" units="ms">
  <owner>grunell@chromium.org</owner>
  <summary>
    The audio input device latency. The time from when a frame was captured
    until it reaches Chrome's platform audio implementation. Sampled for every
    buffer received from the device, and reports the latency for the first frame
    in the buffer.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.FramesProvided" units="frames">
  <owner>grunell@chromium.org</owner>
  <summary>
    The number of captured audio frames that is provided by the operating system
    in each callback. Typically, Chrome will want to use a 10 ms buffer (e.g.
    480 frames for a sample rate of 48 kHz), but the OS may decide to capture
    e.g. 256 frames of audio at a time. If the desired frame size is used, the
    emitted value is special-cased to be 0. This histogram then shows how
    frequent it is that the desired number of frames is used and if not, the
    number of frames used in practice. The number of frames per callback is
    normally constant or very rarely changed throughout the lifetime of the
    audio stream. The first value that differs from the desired value is stored
    and logged when an audio input stream is closed. Any further differences
    during the lifetime will be ignored.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.Glitches" units="glitches">
  <owner>grunell@chromium.org</owner>
  <summary>
    The number of glitches that were detected at the OS level while an audio
    stream was active. A glitch is detected if the OS has to skip providing a
    set of frames. This value is logged when an audio input stream is closed.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.HighLatencyCallbackError"
    enum="BooleanError">
  <owner>maxmorin@chromium.org</owner>
  <summary>
    A boolean that reflects whether or not an error was reported during audio
    capture for a high latency stream.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.InputStreamDuration" units="ms">
  <owner>maxmorin@chromium.org</owner>
  <summary>
    This histogram measures the duration of every input stream, as seen from the
    renderer. It counts from when it has been successfully started, until it is
    stopped. Streams that fail to start are not logged.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.LargestGlitchMs" units="ms">
  <owner>grunell@chromium.org</owner>
  <summary>
    The length in milliseconds of the largest audio glitch that was detected at
    the OS level. This value is logged when an audio input stream that has
    suffered glitches is closed.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.LostFramesInMs" units="ms">
  <owner>grunell@chromium.org</owner>
  <summary>
    The combined length in milliseconds of audio glitches that was detected at
    the OS level. This is useful to know in particular for audio processing such
    as echo cancellation. This value is logged when an audio input stream that
    has suffered glitches is closed.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.LowLatencyCallbackError"
    enum="BooleanError">
  <owner>maxmorin@chromium.org</owner>
  <summary>
    A boolean that reflects whether or not an error was reported during audio
    capture for a low latency stream.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.StreamBrokerDisconnectReason"
    enum="AudioInputStreamDisconnectReason" expires_after="2019-02-01">
  <owner>jonasolsson@chromium.org</owner>
  <owner>maxmorin@chromium.org</owner>
  <owner>olka@chromium.org</owner>
  <summary>
    Error codes from AudioInputStreamBroker::ObserverBindingLost. They describe
    why an audio input stream ended.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.StreamCallbackError" enum="BooleanError">
  <obsolete>
    Replaced by Media.Audio.Capture.StreamCallbackError2
  </obsolete>
  <owner>maxmorin@chromium.org</owner>
  <summary>
    When AudioInputDevice is stopped, this stat is recorded with whether an
    error callback was ever received over IPC.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.StreamCallbackError2"
    enum="AudioCaptureDeviceError" expires_after="2019-06-01">
  <owner>maxmorin@chromium.org</owner>
  <summary>
    When AudioInputDevice is stopped, this stat is recorded with whether an
    error callback was ever received over IPC, and in that case whether the
    error occurred during or after stream creation.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.VirtualCallbackError" enum="BooleanError">
  <owner>maxmorin@chromium.org</owner>
  <summary>
    A boolean that reflects whether or not an error was reported during audio
    capture for a virtual stream.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.Win.ConcurrentGlitchAndDiscontinuities"
    units="occurrences">
  <owner>grunell@chromium.org</owner>
  <summary>
    The number of times a glitch was detected by detecting skipped frames (as
    with Media.Audio.Capture.Glitches) and disconituity was flagged by the OS at
    the same time (as with Media.Audio.Capture.Win.Discontinuities). Sometimes
    these indications are not consistent with each other so this metric helps
    understanding how often they aren't. This value is logged when an audio
    input stream is closed.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.Win.DevicePeriod" units="ms">
  <owner>grunell@chromium.org</owner>
  <summary>
    The audio engine's period between processing passes. See
    IAudioClient::GetDevicePeriod. This value is logged when an audio input
    stream is opened.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.Win.DevicePositionLessThanExpected"
    units="occurrences">
  <owner>grunell@chromium.org</owner>
  <summary>
    The number of times the device position was less than expected during the
    lifetime of an audio stream. This value is logged when an audio input stream
    is closed.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.Win.Discontinuities"
    units="discontinuities">
  <owner>grunell@chromium.org</owner>
  <summary>
    The number of glitches that were detected at the OS level on Windows while
    an audio stream was active, as reported by the OS via the discontinuity flag
    (see IAudioCaptureClient::GetBuffer). This value is logged when an audio
    input stream is closed.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.Win.EndpointBufferSize" units="ms">
  <owner>grunell@chromium.org</owner>
  <summary>
    The endpoint buffer size for input audio. This value is logged when an audio
    input stream is opened.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.Win.InitError" enum="Hresult">
  <owner>tommi@chromium.org</owner>
  <summary>
    Error codes from IAudioClient::Initialize() in
    WASAPIAudioInputStream::InitializeAudioEngine on Windows.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.Win.InitError.FormatRelated"
    enum="AudioStreamFormatRelatedInitError">
  <owner>grunell@chromium.org</owner>
  <summary>
    Errors from IAudioClient::Initialize() in
    WASAPIAudioInputStream::InitializeAudioEngine on Windows that are related to
    the audio format. Each error is split by whether format conversion was used
    or not.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.Win.Open" enum="AudioStreamOpenResult">
  <owner>tommi@chromium.org</owner>
  <summary>
    Success/error cases for opening an audio input stream on Windows.
  </summary>
</histogram>

<histogram name="Media.Audio.Capture.Win.StreamLatency" units="ms">
  <owner>grunell@chromium.org</owner>
  <summary>
    The maximum stream latency as reported by the OS. See
    IAudioClient::GetStreamLatency. This value is logged when an audio input
    stream is opened.
  </summary>
</histogram>

<histogram name="Media.Audio.CoreAudioDispatchOverrideInitResult"
    enum="CoreAudioDispatchOverrideInitResult">
  <owner>ossu@chromium.org</owner>
  <summary>
    Tracks support and initialization success/failure of the CoreAudio dispatch
    override hotfix. Logged during initialization of AudioManagerMac. The fix is
    not supported on macOS earlier than version 10.10.
  </summary>
</histogram>

<histogram name="Media.Audio.CoreAudioDispatchOverrideLookupEvent"
    enum="CoreAudioDispatchOverrideLookupEvent">
  <owner>ossu@chromium.org</owner>
  <summary>
    Logged whenever the CoreAudio dispatch override hotfix needs to look up the
    calling function using dladdr(). Once ResumeIO and PauseIO have been
    identified, no more lookups should be performed during the session.
  </summary>
</histogram>

<histogram name="Media.Audio.InputBufferSizeWasChangedAudioWorkedMac"
    enum="BooleanChanged" expires_after="2018-08-30">
  <owner>henrika@chromium.org</owner>
  <summary>
    Indicates if the size of the audio unit's IO buffer was changed when
    starting an input audio stream. Sampled each time an AUAudioInputStream
    instance is closed, i.e., we know that input audio has started as it should
    when this value is stored. Can be compared with
    Media.Audio.InputBufferSizeWasChangedMac which is only added when input
    audio fails to start.
  </summary>
</histogram>

<histogram name="Media.Audio.InputBufferSizeWasChangedMac"
    enum="BooleanSuccess">
  <owner>henrika@chromium.org</owner>
  <summary>
    Indicates if the size of the audio unit's IO buffer was changed when
    starting an input audio stream. Only sampled when
    Media.Audio.InputStartupSuccessMac reports 'Failure'.
  </summary>
</histogram>

<histogram name="Media.Audio.InputDevicePropertyChangedMac"
    enum="AudioDevicePropertyResult">
  <obsolete>
    Deprecated Feb 2018. Was put in place to debug missing callback issues that
    have since been resolved.
  </obsolete>
  <owner>henrika@chromium.org</owner>
  <summary>
    Lists device properties that have been changed during an audio input stream
    session. We update a map of different property changes during a session and
    all these values are recorded when an AUAudioInputStream object is closed,
    hence multiple enum values can be emitted when the histogram is stored.
  </summary>
</histogram>

<histogram name="Media.Audio.InputDevicePropertyChangedStartupFailedMac"
    enum="AudioDevicePropertyResult">
  <obsolete>
    Deprecated Feb 2018. Was put in place to debug missing callback issues that
    have since been resolved.
  </obsolete>
  <owner>henrika@chromium.org</owner>
  <summary>
    Lists device properties that have been changed during an audio input stream
    session. Only sampled when Media.Audio.InputStartupSuccessMac reports
    'Failure' and multiple enum values can be emitted each time that happens.
  </summary>
</histogram>

<histogram name="Media.Audio.InputRestartAttemptsMac">
  <obsolete>
    Deprecated May 2017. Restart mechanism is removed.
  </obsolete>
  <owner>henrika@chromium.org</owner>
  <summary>
    Counts the total number of times an attempt to restart input audio has been
    done. The value is stored once when a stream is closed and updated when it
    has been detected that input audio callbacks are not generated as expected.
  </summary>
</histogram>

<histogram name="Media.Audio.InputStartupSuccessMac" enum="BooleanSuccess">
  <owner>henrika@chromium.org</owner>
  <summary>
    Indicates if audio capturing did start after stream startup was requested.
    Sampled once, a few seconds after a stream has been asked to start.
  </summary>
</histogram>

<histogram name="Media.Audio.InputStartWasDeferredAudioWorkedMac"
    enum="BooleanDeferred" expires_after="2018-08-30">
  <owner>henrika@chromium.org</owner>
  <summary>
    Indicates if audio capturing started with a small delay or not. Sampled each
    time an AUAudioInputStream instance is closed, i.e., we know that input
    audio has started as it should when this value is stored. Can be compared
    with Media.Audio.InputStartWasDeferredMac which is only added when input
    audio fails to start.
  </summary>
</histogram>

<histogram name="Media.Audio.InputStartWasDeferredMac" enum="BooleanDeferred"
    expires_after="2018-08-30">
  <owner>henrika@chromium.org</owner>
  <summary>
    Indicates if audio capturing started with a small delay or not. Only sampled
    when Media.Audio.InputStartupSuccessMac reports 'Failure'.
  </summary>
</histogram>

<histogram name="Media.Audio.IsOnBatteryPowerMac" enum="BooleanOnBattery"
    expires_after="2018-08-30">
  <owner>henrika@chromium.org</owner>
  <summary>
    Indicates if the Mac OSX device is on battery power or not. Only sampled
    when Media.Audio.InputStartupSuccessMac reports 'Failure'.
  </summary>
</histogram>

<histogram name="Media.Audio.LogicalProcessorsMac">
  <owner>henrika@chromium.org</owner>
  <summary>
    The number of logical processors/cores available on the Mac OSX device. Only
    sampled when Media.Audio.InputStartupSuccessMac reports 'Failure'.
  </summary>
</histogram>

<histogram name="Media.Audio.NumberOfBasicInputStreamsMac"
    expires_after="2018-08-30">
  <owner>henrika@chromium.org</owner>
  <summary>
    Number of created default input audio streams. Only sampled when
    Media.Audio.InputStartupSuccessMac reports 'Failure'.
  </summary>
</histogram>

<histogram name="Media.Audio.NumberOfLowLatencyInputStreamsMac"
    expires_after="2018-08-30">
  <owner>henrika@chromium.org</owner>
  <summary>
    Number of created low-latency input audio streams. Only sampled when
    Media.Audio.InputStartupSuccessMac reports 'Failure'.
  </summary>
</histogram>

<histogram name="Media.Audio.NumberOfOutputStreamsMac"
    expires_after="2018-08-30">
  <owner>henrika@chromium.org</owner>
  <summary>
    Number of created output audio streams. Only sampled when
    Media.Audio.InputStartupSuccessMac reports 'Failure'.
  </summary>
</histogram>

<histogram name="Media.Audio.OutputDeviceAuthorizationTime" units="ms">
  <owner>olka@chromium.org</owner>
  <summary>
    Time delta between the moment output device authorization request is
    received by the browser and the moment its processessing is finished (and
    reply is to be sent back to the renderer if IPC is not closed yet).
  </summary>
</histogram>

<histogram name="Media.Audio.OutputStreamsCanceledByBrowser" units="streams">
  <owner>maxmorin@chromium.org</owner>
  <summary>
    When a mojo audio stream factory is destructed, the streams it created are
    also destructed. This is a potential source of stat differences between the
    new mojo code and the old Chrome IPC code, where streams could potentially
    stick around until the destruction of the owning RenderProcessHost. This
    histogram measures how many output streams are destructed each time a mojo
    output stream factory is destructed.
  </summary>
</histogram>

<histogram name="Media.Audio.PhysicalProcessorsMac">
  <owner>henrika@chromium.org</owner>
  <summary>
    The number of physical processors/cores available on the Mac OSX device.
    Only sampled when Media.Audio.InputStartupSuccessMac reports 'Failure'.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.AudioInputsPerMixer.LatencyExact"
    units="inputs">
  <owner>olka@chromium.org</owner>
  <summary>
    Number of simultaneous inputs coming to the AudioRendererMixer which renders
    audio with user specified latency. The value is logged each time it reaches
    a new maximum for the mixer. It is useful for evaluating how mixing audio in
    renderer reduces the number of output audio streams going from the renderer
    to the browser.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.AudioInputsPerMixer.LatencyInteractive"
    units="inputs">
  <owner>olka@chromium.org</owner>
  <summary>
    Number of simultaneous inputs coming to the AudioRendererMixer which renders
    audio with interactive latency. The value is logged each time it reaches a
    new maximum for the mixer. It is useful for evaluating how mixing audio in
    renderer reduces the number of output audio streams going from the renderer
    to the browser.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.AudioInputsPerMixer.LatencyPlayback"
    units="inputs">
  <owner>olka@chromium.org</owner>
  <summary>
    Number of simultaneous inputs coming to the AudioRendererMixer which renders
    audio with playback latency. The value is logged each time it reaches a new
    maximum for the mixer. It is useful for evaluating how mixing audio in
    renderer reduces the number of output audio streams going from the renderer
    to the browser.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.AudioInputsPerMixer.LatencyRtc"
    units="inputs">
  <owner>olka@chromium.org</owner>
  <summary>
    Number of simultaneous inputs coming to the AudioRendererMixer which renders
    audio with real time latency. The value is logged each time it reaches a new
    maximum for the mixer. It is useful for evaluating how mixing audio in
    renderer reduces the number of output audio streams going from the renderer
    to the browser.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.AudioMixing.LatencyMap" units="subsets">
  <owner>olka@chromium.org</owner>
  <summary>
    Subset of audio output latencies encountered by the renderer so far. Logged
    each time an audio output with a new latency starts playing. The values are
    bitsets where each bit represents corresponding latency according to
    AudioLatency::LatencyType. Useful for understanding usecases for audio
    output mixing in renderer.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.BrowserCallbackRegularity">
  <owner>olka@chromium.org</owner>
  <summary>
    Reflects how regularly browser issues audio requests to renderer. Depends on
    how well the system buffer size the browser side renders audio at and the
    buffer size it requests from renderer are aligned.  When zero, it means
    renderer buffer size is a multiple of system buffer size, and render calls
    from browser to renderer are issued evenly. When -1, it means the renderer
    buffer size is larger than system buffer size, but is not an exact multiple
    of it; in this case browser periodically skips a call to renderer. When
    positive, floor(value/2) reflects the number of extra consecutive render
    requests issued by browser to renderer each time to fulfill the system audio
    render request; if (value/2) is not integer, then plus one more extra call
    is issued periodically.   The metric is recorded on the edge between browser
    and renderer. On Mac the system buffer size may vary dynamically, the metric
    does not capture that: only the buffer size mismatch introduced by audio
    output device configuration is captured.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.FramesRequested" units="frames">
  <owner>tommi@chromium.org</owner>
  <summary>
    The number of frames audio is actually rendered at if the number is
    different from the desired number of frames.  If the desired frame size is
    used, this value will be 0. Typically, Chrome will want to use a 10ms buffer
    (e.g. 480 frames for a sample rate of 48kHz), but we might have to render
    audio 256 frames at a time. This histogram gives us an indication as to how
    frequent that is and what buffer sizes are used in practice. This value is
    logged when an audio output stream is stopped.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.GetSourceDataTime.WebRTC"
    units="microseconds">
  <owner>grunell@chromium.org</owner>
  <summary>
    The time spent to get audio data from the source. For WebRTC, it's the time
    spent in WebRtcAudioRenderer::SourceCallback. Logged every function call,
    which is every 10 ms.

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

<histogram name="Media.Audio.Render.GetSourceDataTimeMax.WebRTC"
    units="microseconds">
  <owner>grunell@chromium.org</owner>
  <summary>
    The maximum time spent to get audio data from the source during a session.
    For WebRTC, it's the time spent in WebRtcAudioRenderer::SourceCallback. A
    session is between Start() and Stop() of WebRtcAudioRenderer.

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

<histogram name="Media.Audio.Render.Glitches" units="glitches">
  <owner>tommi@chromium.org</owner>
  <summary>
    The number of glitches that were detected at the OS level while an audio
    stream was active. A glitch is detected if the OS has to skip rendering a
    set of frames. This value is logged when an audio output stream is stopped.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.InputDeviceStartTime" units="ms">
  <owner>jonasolsson@chromium.org</owner>
  <owner>maxmorin@chromium.org</owner>
  <owner>olka@chromium.org</owner>
  <summary>
    The time delta from an AudioInputDevice sending a RecordStream message to it
    getting its first data callback.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.InputDeviceStreamCreationTime" units="ms">
  <owner>jonasolsson@chromium.org</owner>
  <owner>maxmorin@chromium.org</owner>
  <owner>olka@chromium.org</owner>
  <summary>
    The time delta between the moment a MojoAudioInputIPC instance on the
    renderer process requests a new stream from the browser to the moment it
    receives a response.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.LargestGlitchMs" units="ms">
  <owner>tommi@chromium.org</owner>
  <summary>
    The length in milliseconds of the largest glitch that was detected at the OS
    level. This value is logged when an audio output stream that has suffered
    glitches is stopped.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.LostFramesInMs" units="ms">
  <owner>tommi@chromium.org</owner>
  <summary>
    The combined length in milliseconds of audio glitches. This is useful to
    know in particular for audio processing such as echo cancellation. This
    value is logged when an audio output stream that has suffered glitches is
    stopped.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.OutputDeviceAuthorizationTime" units="ms">
  <owner>maxmorin@chromium.org</owner>
  <summary>
    Similar to Media.Audio.OutputDeviceAuthorizationTime, this histogram
    measures the time required for device authorization, but it is measured on
    the renderer side when AudioOutputDevice calls RequestDeviceAuthorization on
    the IO thread until it receives OnDeviceAuthorized, also on the IO thread.
    Note that an authorization timeout will cause OnDeviceAuthorized to be
    called, so for platforms that use a timeout, very few times will be above
    the timeout value.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.OutputDeviceAuthorizationTimedOut"
    enum="BooleanTimedOut">
  <owner>olka@chromium.org</owner>
  <summary>
    Whether audio output device timed out waiting for authorization reply from
    the browser side.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.OutputDeviceStartTime" units="ms">
  <owner>jonasolsson@chromium.org</owner>
  <owner>maxmorin@chromium.org</owner>
  <owner>olka@chromium.org</owner>
  <summary>
    The time delta from an AudioOutputDevice sending its first PlayStream
    message to it getting its first data callback.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.OutputDeviceStatus"
    enum="OutputDeviceStatus">
  <owner>olka@chromium.org</owner>
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Device status received in response to device authorization request.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.OutputDeviceStreamCreationTime" units="ms">
  <owner>jonasolsson@chromium.org</owner>
  <owner>maxmorin@chromium.org</owner>
  <owner>olka@chromium.org</owner>
  <summary>
    The time delta between the moment a MojoAudioOutputIPC instance on the
    renderer process requests a new stream from the browser to the moment it
    receives a response.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.OutputStreamDuration" units="ms">
  <owner>maxmorin@chromium.org</owner>
  <summary>
    This histogram measures the duration of every output stream, as seen from
    the renderer. It counts from when it has been successfully started, until it
    is stopped. Streams that fail to start are not logged.
  </summary>
</histogram>

<histogram
    name="Media.Audio.Render.SinkCache.GetOutputDeviceInfoCacheUtilization"
    enum="GetOutputDeviceInfoCacheHit">
  <owner>olka@chromium.org</owner>
  <summary>
    Whether a cached sink was used to get audio output device information, or a
    new sink was created for that.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.SinkCache.InfoSinkReusedForOutput"
    enum="BooleanReused">
  <owner>olka@chromium.org</owner>
  <summary>
    When a new sink is created to get output device information, it is cached.
    This metric shows if such a sink is later reused for audio output (can
    happen no more than once) or deleted unused after timeout expires. Logged
    when one of the abovementioned events takes place.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.SinkCache.UsedForSinkCreation"
    enum="BooleanUsage">
  <owner>olka@chromium.org</owner>
  <summary>
    Whether a sink was created through the sink cache or directly.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.StreamBrokerDisconnectReason"
    enum="AudioOutputStreamDisconnectReason" expires_after="2019-02-01">
  <owner>jonasolsson@chromium.org</owner>
  <owner>maxmorin@chromium.org</owner>
  <owner>olka@chromium.org</owner>
  <summary>
    Error codes from AudioOutputStreamBroker::ObserverBindingLost. They describe
    why an audio output stream ended.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.StreamCallbackError" enum="BooleanError">
  <obsolete>
    Replaced by Media.Audio.Render.StreamCallbackError2
  </obsolete>
  <owner>maxmorin@chromium.org</owner>
  <summary>
    When AudioOutputDevice is stopped, this stat is recorded with whether an
    error callback was ever received over IPC.
  </summary>
</histogram>

<histogram name="Media.Audio.Render.StreamCallbackError2"
    enum="AudioRenderDeviceError" expires_after="2019-06-01">
  <owner>maxmorin@chromium.org</owner>
  <summary>
    When AudioOutputDevice is stopped, this stat is recorded with whether an
    error callback was ever received over IPC, and in that case whether the
    error occurred during or after stream creation.
  </summary>
</histogram>

<histogram name="Media.Audio.RenderFailsWhenBufferSizeChangesMac"
    enum="BooleanChanged">
  <owner>henrika@chromium.org</owner>
  <summary>
    True if a call to AudioUnitRender failed with an error code of
    kAudioUnitErr_CannotDoInCurrentContext (-10863) and the call was preceded
    with a change in the native I/O buffer size. This value is logged while
    input audio is active but it should be a very rare event.
  </summary>
</histogram>

<histogram name="Media.Audio.RequestedInputBufferFrameSizeMac">
  <owner>henrika@chromium.org</owner>
  <summary>
    Size (in audio frames) the client has asked for when creating an
    AUAudioInputStream object. It might not be able to fulfill this request. The
    actual size is given by Media.Audio.ActualInputBufferFrameSizeMac. Only
    sampled when Media.Audio.InputStartupSuccessMac reports 'Failure'.
  </summary>
</histogram>

<histogram name="Media.Audio.ResumeEventsMac" expires_after="2018-08-30">
  <owner>henrika@chromium.org</owner>
  <summary>
    Counts the number of times the system has resumed from power suspension.
    Counting is reset each time Chrome restarts. Only sampled when
    Media.Audio.InputStartupSuccessMac reports 'Failure'.
  </summary>
</histogram>

<histogram name="Media.Audio.UptimeMac" units="hours"
    expires_after="2018-08-30">
  <owner>henrika@chromium.org</owner>
  <summary>
    Reports the system uptime in hours for Mac OS X devices. Only sampled when
    Media.Audio.InputStartupSuccessMac reports 'Failure'.
  </summary>
</histogram>

<histogram name="Media.AudioBitsPerChannel">
  <owner>dalecurtis@chromium.org</owner>
  <summary>Bits per channel of HTML5 audio sample data.</summary>
</histogram>

<histogram name="Media.AudioCapturerAudioGlitches" enum="AudioGlitchResult">
  <owner>grunell@chromium.org</owner>
  <summary>
    Whether there is input audio glitches due to dropped input audio data or
    not. Sampled when a low-latency input audio stream is destructed.
  </summary>
</histogram>

<histogram name="Media.AudioCapturerDroppedData" units="%">
  <owner>grunell@chromium.org</owner>
  <summary>
    The percentage of input audio data that was dropped at the browser/renderer
    boundary due to for example buffer overflow in the writer side buffer or in
    the socket. Reported at the destruction of low-latency audio input stream.
  </summary>
</histogram>

<histogram name="Media.AudioCapturerMissedReadDeadline" units="%">
  <owner>grunell@chromium.org</owner>
  <summary>
    The percentage of input audio data blocks that had to be buffered because
    there was not room in the shared memory ring buffer on the browser/renderer
    boundary. This happens if the reading side hasn't read data in time.
    Reported at the destruction of low-latency audio input stream.
  </summary>
</histogram>

<histogram name="Media.AudioCapturerRepetition" units="ms">
  <obsolete>
    Deprecated as of Jan 2018.
  </obsolete>
  <owner>minyue@chromium.org</owner>
  <summary>
    Captures bit-exact audio repetitions with pre-defined look back time. As
    soon as a repetition is detected, its look back time is reported. Ideally,
    no reports should be generated.
  </summary>
</histogram>

<histogram name="Media.AudioChannelLayout" enum="ChannelLayout">
  <owner>dalecurtis@chromium.org</owner>
  <summary>Audio channel layout in HTML5 media.</summary>
</histogram>

<histogram name="Media.AudioCodec" enum="AudioCodec">
  <owner>dalecurtis@chromium.org</owner>
  <summary>Audio codec used in HTML5 media.</summary>
</histogram>

<histogram name="Media.AudioInputCbErrorMac" units="OSStatus">
  <owner>henrika@chromium.org</owner>
  <summary>
    Error codes that AudioUnitRender() returns in AUAudioInputStream on Mac.
  </summary>
</histogram>

<histogram name="Media.AudioInputController" units="ms">
  <owner>dalecurtis@chromium.org</owner>
  <summary>Measures the time taken for AudioInputController::</summary>
</histogram>

<histogram name="Media.AudioInputControllerCaptureStartupSuccess"
    enum="CaptureStartupResult">
  <obsolete>
    Deprecated as of 02/2017.
  </obsolete>
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Whether capture started successfully after an input stream startup was
    requested.
  </summary>
</histogram>

<histogram name="Media.AudioInputControllerSessionSilenceReport"
    enum="AudioInputSilenceReport">
  <owner>grunell@chromium.org</owner>
  <summary>
    Every 15 seconds during the lifetime of an audio input stream, the sound
    level is measured, see AudioInputController::CheckAudioPower(). If the level
    is below a certain threshold, it's considered &quot;silence&quot;. Otherwise
    it's considered &quot;audio&quot;. This metric shows whether there was only
    silence, only audio, or both, during the lifetime of a stream. If logged
    before the first measurement, i.e. if the lifetime is less than 15 seconds,
    &quot;no measurement&quot; is reported. If there is no audio data provided
    by the OS during the lifetime of the stream, for example because of a bug,
    measurements will not be performed and &quot;no measurement&quot; is
    reported.
  </summary>
</histogram>

<histogram name="Media.AudioInputDeviceManager" units="ms">
  <owner>dalecurtis@chromium.org</owner>
  <summary>Measures the time taken for AudioInputDeviceManager::</summary>
</histogram>

<histogram name="Media.AudioOutputController" units="ms">
  <owner>dalecurtis@chromium.org</owner>
  <summary>Measures the time taken for AudioOutputController::</summary>
</histogram>

<histogram name="Media.AudioOutputController.CallbackError" enum="BooleanError">
  <owner>maxmorin@chromium.org</owner>
  <summary>
    A boolean that reflects whether or not an error was reported during audio
    rendering, reported after a stream has stopped, if it was started.
  </summary>
</histogram>

<histogram name="Media.AudioOutputController.ProxyStreamCreationResult"
    enum="AudioOutputStreamCreationResult">
  <owner>maxmorin@chromium.org</owner>
  <summary>
    Whether an AudioOutputController succeeded in creating and opening an output
    stream proxy. Only logged for the initial creation, subsequent re-creations
    due to device change events are logged in the
    Media.AudioOutputController.ProxyStreamCreationResultForDeviceChange
    histogram.
  </summary>
</histogram>

<histogram
    name="Media.AudioOutputController.ProxyStreamCreationResultForDeviceChange"
    enum="AudioOutputStreamCreationResult">
  <owner>maxmorin@chromium.org</owner>
  <summary>
    Whether an AudioOutputController succeeded in creating and opening an output
    stream proxy after receiving a default device change event.
  </summary>
</histogram>

<histogram name="Media.AudioOutputControllerDataNotReady" units="ms">
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Time spent waiting in AudioOutputController::WaitTillDataReady() if the data
    was not initially available.
  </summary>
</histogram>

<histogram name="Media.AudioOutputControllerPlaybackStartupSuccess"
    enum="BooleanSuccess">
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Whether playback started successfully after stream startup was requested.
  </summary>
</histogram>

<histogram name="Media.AudioOutputResampler.OpenLowLatencyStream"
    enum="AudioOutputResamplerLowLatencyOpenStreamResult">
  <owner>olka@chromium.org</owner>
  <summary>
    Whether a low latency stream to be rendered through the resampler was opened
    successfully or which type of fallback stream was used instead. In case a
    fake fallback stream is used it means audio rendered through the resampler
    will be muted. In case fallback fails entirely, renderer callback error will
    be signalled.
  </summary>
</histogram>

<histogram
    name="Media.AudioOutputStreamProxy.GetPreferredOutputStreamParametersWin.CreateClientResult"
    enum="Hresult">
  <owner>marinaciocea@chromium.org</owner>
  <summary>
    This histogram is the 3nd potential failure step in
    CoreAudioUtil::GetPreferredAudioParameters. The success% of this histogram
    is input for
    Media.AudioOutputStreamProxy.GetPreferredOutputStreamParametersWin.GetMixFormatResult
    histogram.
  </summary>
</histogram>

<histogram
    name="Media.AudioOutputStreamProxy.GetPreferredOutputStreamParametersWin.CreateDeviceEnumeratorResult"
    enum="Hresult">
  <owner>marinaciocea@chromium.org</owner>
  <summary>
    This histogram is the 1st potential failure step in
    CoreAudioUtil::GetPreferredAudioParameters. The success% of this histogram
    is input for
    Media.AudioOutputStreamProxy.GetPreferredOutputStreamParametersWin.CreateDeviceResult
    histogram.
  </summary>
</histogram>

<histogram
    name="Media.AudioOutputStreamProxy.GetPreferredOutputStreamParametersWin.CreateDeviceResult"
    enum="Hresult">
  <owner>marinaciocea@chromium.org</owner>
  <summary>
    This histogram is the 2nd potential failure step in
    CoreAudioUtil::GetPreferredAudioParameters. The success% of this histogram
    is input for
    Media.AudioOutputStreamProxy.GetPreferredOutputStreamParametersWin.CreateClientResult
    histogram.
  </summary>
</histogram>

<histogram
    name="Media.AudioOutputStreamProxy.GetPreferredOutputStreamParametersWin.GetDevicePeriodResult"
    enum="Hresult">
  <owner>marinaciocea@chromium.org</owner>
  <summary>
    This histogram is the last potential failure step in
    CoreAudioUtil::GetPreferredAudioParameters.
  </summary>
</histogram>

<histogram
    name="Media.AudioOutputStreamProxy.GetPreferredOutputStreamParametersWin.GetMixFormatResult"
    enum="Hresult">
  <owner>marinaciocea@chromium.org</owner>
  <summary>
    This histogram is the 4nd potential failure step in
    CoreAudioUtil::GetPreferredAudioParameters. The success% of this histogram
    is input for
    Media.AudioOutputStreamProxy.GetPreferredOutputStreamParametersWin.GetDevicePeriodResult
    histogram.
  </summary>
</histogram>

<histogram name="Media.AudioOutputStreamProxy.StreamFormat"
    enum="AudioOutputProxyStreamFormat">
  <owner>olka@chromium.org</owner>
  <summary>
    Records format used by AudioManager to create audio output stream proxy. If
    a fake stream is created it results in muted audio playback.

    On Windows, the failure reasons that can lead to fake stream creation are
    tracked with the following histograms:
    Media.AudioOutputStreamProxy.GetPreferredOutputStreamParametersWin.CreateDeviceEnumeratorResult
    Media.AudioOutputStreamProxy.GetPreferredOutputStreamParametersWin.CreateDeviceResult
    Media.AudioOutputStreamProxy.GetPreferredOutputStreamParametersWin.CreateClientResult
    Media.AudioOutputStreamProxy.GetPreferredOutputStreamParametersWin.GetMixFormatResult
    Media.AudioOutputStreamProxy.GetPreferredOutputStreamParametersWin.GetDevicePeriodResult
  </summary>
</histogram>

<histogram name="Media.AudioRendererAudioGlitches" enum="AudioGlitchResult">
  <owner>henrika@chromium.org</owner>
  <summary>
    Captures if render-side audio glitches are detected or not. Sampled when a
    low-latency output audio stream is destructed.
  </summary>
</histogram>

<histogram name="Media.AudioRendererEvents" enum="AudioRendererEvents">
  <obsolete>
    Deprecated Mar 2016 in favor of a new PipelineStatus code.
  </obsolete>
  <owner>scherkus@chromium.org</owner>
  <summary>Captures statistics for various AudioRendererImpl events.</summary>
</histogram>

<histogram name="Media.AudioRendererIpcStreams">
  <obsolete>
    Deprecated 02/2017. No longer needed.
  </obsolete>
  <owner>grunell@chromium.org</owner>
  <summary>
    The maximum number of simultaneous audio render streams over IPC created in
    AudioRendererHost for a render process. Logged at render process shutdown.
  </summary>
</histogram>

<histogram name="Media.AudioRendererIpcStreamsTotal">
  <obsolete>
    Deprecated 02/2017. No longer needed.
  </obsolete>
  <owner>grunell@chromium.org</owner>
  <summary>
    The maximum number of simultaneous audio render streams over IPC created in
    AudioRendererHost for all render processes. Logged at render process
    shutdown.
  </summary>
</histogram>

<histogram name="Media.AudioRendererMissedDeadline" units="%">
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Percentage of AudioSyncReader::Read() calls where the renderer missed its
    realtime deadline.
  </summary>
</histogram>

<histogram name="Media.AudioSampleFormat" enum="AudioSampleFormat">
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Audio sample format in HTML5 media. Logged when Audio Decoder initializes.
  </summary>
</histogram>

<histogram name="Media.AudioSamplesPerSecond" enum="AudioSampleRate">
  <owner>dalecurtis@chromium.org</owner>
  <summary>Audio samples per second in HTML5 media.</summary>
</histogram>

<histogram name="Media.AudioSamplesPerSecondUnexpected" units="Hz">
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Audio samples per second in HTML5 media (atypical values, in Hz).
  </summary>
</histogram>

<histogram name="Media.AudioService.AudioManagerStartupTime" units="ms">
  <owner>marinaciocea@chromium.org</owner>
  <owner>maxmorin@chromium.org</owner>
  <owner>olka@chromium.org</owner>
  <summary>
    How long it take for the audio manager instance to be created by the audio
    service, in case the audio service owns the audio manager.
  </summary>
</histogram>

<histogram name="Media.AudioService.HasConnectionsDuration" units="ms">
  <owner>marinaciocea@chromium.org</owner>
  <owner>maxmorin@chromium.org</owner>
  <owner>olka@chromium.org</owner>
  <summary>
    The time interval when the audio service has connections, computed from the
    moment the first bind request is received to the moment when the last
    connection is closed.
  </summary>
</histogram>

<histogram name="Media.AudioService.HasNoConnectionsDuration" units="ms">
  <owner>marinaciocea@chromium.org</owner>
  <owner>maxmorin@chromium.org</owner>
  <owner>olka@chromium.org</owner>
  <summary>
    The time interval when the audio service has no connections, computed from
    the moment the last connection is closed until quit closure is called or a
    new bind request is received.
  </summary>
</histogram>

<histogram name="Media.AudioService.ObservedDowntime" units="ms">
  <obsolete>
    Deprecated 06/2018. Split into Media.AudioService.ObservedInitialDowntime
    and Media.AudioService.ObservedDowntime2.
  </obsolete>
  <owner>marinaciocea@chromium.org</owner>
  <owner>maxmorin@chromium.org</owner>
  <owner>olka@chromium.org</owner>
  <summary>
    The audio service downtime, observed from the browser process. The downtime
    interval is measured either from when the audio service listener is
    initialized to the first audio service start, or from the audio service
    shutdown to the next startup.
  </summary>
</histogram>

<histogram name="Media.AudioService.ObservedDowntime2" units="ms">
  <owner>marinaciocea@chromium.org</owner>
  <owner>maxmorin@chromium.org</owner>
  <owner>olka@chromium.org</owner>
  <summary>
    The audio service downtime, observed from the browser process. The downtime
    interval is measured from the audio service shutdown to the next startup.
  </summary>
</histogram>

<histogram name="Media.AudioService.ObservedInitialDowntime" units="ms">
  <owner>marinaciocea@chromium.org</owner>
  <owner>maxmorin@chromium.org</owner>
  <owner>olka@chromium.org</owner>
  <summary>
    The audio service downtime, observed from the browser process. The downtime
    interval is measured from when the audio service listener is initialized to
    the first audio service start.
  </summary>
</histogram>

<histogram name="Media.AudioService.ObservedProcessTerminationStatus"
    enum="AudioServiceProcessTerminationStatus">
  <owner>marinaciocea@chromium.org</owner>
  <owner>maxmorin@chromium.org</owner>
  <owner>olka@chromium.org</owner>
  <summary>
    The termination status of the audio service process, observed from the
    browser process.
  </summary>
</histogram>

<histogram name="Media.AudioService.ObservedStartStatus"
    enum="AudioServiceStartStatus">
  <owner>marinaciocea@chromium.org</owner>
  <owner>maxmorin@chromium.org</owner>
  <owner>olka@chromium.org</owner>
  <summary>
    The start result of the audio service, observed from the browser process.
  </summary>
</histogram>

<histogram name="Media.AudioService.ObservedStartupTime" units="ms">
  <owner>marinaciocea@chromium.org</owner>
  <owner>maxmorin@chromium.org</owner>
  <owner>olka@chromium.org</owner>
  <summary>
    The startup time of the audio service, observed from the browser process.
    The startup time interval is measured from when a connect request results in
    the audio service being created to the moment when the audio service is
    started.
  </summary>
</histogram>

<histogram name="Media.AudioService.ObservedUptime" units="ms">
  <owner>marinaciocea@chromium.org</owner>
  <owner>maxmorin@chromium.org</owner>
  <owner>olka@chromium.org</owner>
  <summary>
    The uptime of the audio service, observed from the browser process. The
    uptime interval is measured from when the audio service starts to when it is
    shut down (either normally or through kill/crash). This metric includes
    Media.AudioService.Uptime measurements, logged by the audio service on
    normal shutdown. A difference between Media.AudioService.ObservedUptime and
    Media.AudioService.Uptime indicates buggy audio service behavior.
  </summary>
</histogram>

<histogram name="Media.AudioService.SystemInfoClient" units="ms">
<!-- Name completed by histogram_suffixes name="AudioSystemInfoRequest" -->

  <owner>marinaciocea@chromium.org</owner>
  <owner>maxmorin@chromium.org</owner>
  <owner>olka@chromium.org</owner>
  <summary>
    The time interval between the moment when a client issues a system
    information request to the audio service, and the moment it receives the
    responce. Logged individually for each request type.
  </summary>
</histogram>

<histogram name="Media.AudioService.Uptime" units="ms">
  <owner>marinaciocea@chromium.org</owner>
  <owner>maxmorin@chromium.org</owner>
  <owner>olka@chromium.org</owner>
  <summary>
    The uptime of the audio service, observed from the audio service. The uptime
    interval is measured from the audio service start to the audio service stop.
  </summary>
</histogram>

<histogram name="Media.AudioThreadStatus" enum="AudioThreadStatus">
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    State of the audio thread. A value of &quot;started&quot; is emitted once
    the hang monitor has been initialized. If the thread is detected as hung
    later, a value of &quot;hung&quot; is emitted. If the hung thread later
    recovers a value of &quot;recovered&quot; is emitted.
  </summary>
</histogram>

<histogram name="Media.AudioTrackProcessingStates"
    enum="AudioTrackProcessingStates">
  <owner>grunell@chromium.org</owner>
  <summary>
    State of the media stream audio track processing, sampled once during the
    life time of a MediaStreamAudioProcessor.
  </summary>
</histogram>

<histogram name="Media.Autoplay.CrossOrigin.Result"
    enum="CrossOriginAutoplayResult">
  <owner>avayvod@chromium.org</owner>
  <owner>mlamouri@chromium.org</owner>
  <owner>zqzhang@chromium.org</owner>
  <summary>
    The result of autoplaying video elements in cross-origin iframes.
  </summary>
</histogram>

<histogram name="Media.AVDA.FrameInformation" enum="AVDAFrameInformation">
  <owner>liberato@chromium.org</owner>
  <summary>
    Record a count for each frame sent to the client by AVDA, separated by what
    type of frame it is: Non Overlay, secure overlay, etc.
  </summary>
</histogram>

<histogram name="Media.AVDA.FrameSentAsOverlay" enum="BooleanFrameAsOverlay">
  <owner>liberato@chromium.org</owner>
  <summary>
    Record a count for each frame sent to the client by AVDA.  True counts
    indicate that the frame was an overlay (SurfaceView).  False counts are for
    Non Overlay frames.  This will be deprecated in favor of
    Media.AVDA.FrameInformation in M63.
  </summary>
</histogram>

<histogram name="Media.AVDA.InputQueueTime" units="ms">
  <obsolete>
    Deprecated 03/2016. No longer needed.
  </obsolete>
  <owner>watk@chromium.org</owner>
  <summary>
    The time that a bitstream buffer spends in AVDA's pending bitstream buffer
    queue before it is fed to MediaCodec.
  </summary>
</histogram>

<histogram name="Media.AVDA.MissingFormatChanged" enum="BooleanFormatChanged">
  <obsolete>
    Deprecated 10/2016. No longer needed.
  </obsolete>
  <owner>liberato@chromium.org</owner>
  <summary>
    Number of times that AVDA stopped decoding because MediaCodec failed to
    provide a FORMAT_CHANGED message before sending decoded frames back.  True
    counts indicate instances where FORMAT_CHANGE was missed, while false
    instances indicate any MediaCodec initialization by AVDA.
  </summary>
</histogram>

<histogram name="Media.AVDA.NumAVDAInstances" units="AVDA instances">
  <obsolete>
    Deprecated 10/2016. No longer needed.
  </obsolete>
  <owner>watk@chromium.org</owner>
  <summary>
    The number of concurrently running AndroidVideoDecodeAccelerators. Logged
    during each AVDA initialization.
  </summary>
</histogram>

<histogram name="Media.AVDA.VirtualContext" enum="BooleanVirtualContext">
  <obsolete>
    Deprecated 10/2016. No longer needed.
  </obsolete>
  <owner>liberato@chromium.org</owner>
  <summary>
    Number of times that AVDA's deferred rendering encountered a virtual GL
    context.  True counts indicate virtual, false counts indicate not.
  </summary>
</histogram>

<histogram name="Media.AvdaCodecImage.WaitTimeForFrame" units="ms">
  <obsolete>
    Deprecated 06/2018. This has been renamed to
    Media.CodecImage.SurfaceTextureGLOwner.WaitTimeForFrame and
    Media.CodecImage.ImageReaderGLOwner.WaitTimeForFrame.
  </obsolete>
  <owner>liberato@chromium.org</owner>
  <summary>
    Time spent waiting for a frame to become available in a Non Overlay after
    requesting that MediaCodec renders it.
  </summary>
</histogram>

<histogram name="Media.BytesReadFromCache" units="KB">
  <owner>hubbe@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>Kb read by media demuxer from MultiBuffer cache.</summary>
</histogram>

<histogram name="Media.BytesReadFromNetwork" units="KB">
  <owner>hubbe@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>Kb read by from network into MultiBuffer cache.</summary>
</histogram>

<histogram name="Media.CacheUseful" enum="BooleanSuccess">
  <owner>scherkus@chromium.org</owner>
  <summary>
    Whether a media response might be used to satisfy a future request.
  </summary>
</histogram>

<histogram name="Media.ChromeArcVideoDecodeAccelerator.InitializeResult"
    enum="ArcVideoDecodeAcceleratorResult">
  <obsolete>
    Deprecated as of Dec 18, 2017. Replaced by
    Media.GpuArcVideoDecodeAccelerator.InitializeResult.
  </obsolete>
  <owner>johnylin@chromium.org</owner>
  <summary>
    Counts of status values returned from calls to
    ChromeArcVideoDecodeAccelerator::Initialize().
  </summary>
</histogram>

<histogram name="Media.ChromeCast.DelayedAndDroppedFramesPer5Sec"
    units="frames/5s">
  <owner>mfoltz@chromium.org</owner>
  <summary>
    The average number of delayed and dropped frames for the ChromeCast
    application.  Reported every 5 seconds.
  </summary>
</histogram>

<histogram name="Media.ChromeCast.DisplayedFramesPerSecond" units="frames/s">
  <obsolete>
    Deprecated 07/2015 in issue 508534.
  </obsolete>
  <owner>mfoltz@chromium.org</owner>
  <summary>
    The average number of displayed frames for the ChromeCast application.
    Reported every 5 seconds.
  </summary>
</histogram>

<histogram name="Media.ChromeCast.TimeToBufferAv" units="ms">
  <owner>mfoltz@chromium.org</owner>
  <summary>
    Time needed to pre-buffer A/V data before the actual playback for the
    ChromeCast application.
  </summary>
</histogram>

<histogram name="Media.ChromeCast.TimeToBufferAvAfterAbort" units="ms">
  <owner>mfoltz@chromium.org</owner>
  <summary>
    Time needed to buffer A/V data after an abort for the ChromeCast
    application.
  </summary>
</histogram>

<histogram name="Media.ChromeCast.TimeToBufferAvAfterUnderrun" units="ms">
  <owner>mfoltz@chromium.org</owner>
  <summary>
    Time needed to buffer A/V data after an underrun for the ChromeCast
    application.
  </summary>
</histogram>

<histogram name="Media.CodecImage.ImageReaderGLOwner.WaitTimeForFrame"
    units="ms">
  <owner>vikassoni@chromium.org</owner>
  <summary>
    Time spent waiting for a frame to become available in a Non Overlay
    (AImageReader mode) so that MediaCodec can render it. This time is recorded
    before the frame is rendered.
  </summary>
</histogram>

<histogram name="Media.CodecImage.SurfaceTextureGLOwner.WaitTimeForFrame"
    units="ms">
  <owner>liberato@chromium.org</owner>
  <summary>
    Time spent waiting for a frame to become available in a Non Overlay
    (SurfaceTexture mode) so that MediaCodec can render it. This time is
    recorded before the frame is rendered.
  </summary>
</histogram>

<histogram name="Media.Controls.CTR" enum="MediaControlsCTREvent">
  <owner>mlamouri@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Records events related to click through rate (CTR) calculation.

    The CTR can be calculated by computing &quot;Interacted&quot; /
    &quot;Displayed&quot;. &quot;Interacted&quot;, for buttons, means that they
    were clicked. For sliders, it will reflect any change in the internal state
    and includes other events in addition to clicks. &quot;Displayed&quot; means
    that the control element was meant to be displayed in the controls. It does
    not mean that the user have seen the element so is not to be confused with
    visibility. Furthermore, because the controls UI changes while loading,
    &quot;Displayed&quot; is only computed when metadata are available unless
    preloading was disabled on the element or the browser.
  </summary>
</histogram>

<histogram name="Media.Controls.Download" enum="MediaControlsDownloadReason">
  <obsolete>
    Deprecated July 2017 in favor of Media.Controls.CTR.DownloadButton.
  </obsolete>
  <owner>mlamouri@chromium.org</owner>
  <owner>nyquist@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Records events and user interactions related to the download button shown on
    media elements.
  </summary>
</histogram>

<histogram name="Media.Controls.Overflow.TimeToAction" units="seconds">
  <owner>beccahughes@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Records the amount of time the overflow menu is displayed until the user
    clicked on a menu item. The overflow menu is shown by clicking the three
    dots on the media controls and is used to show more controls when there is
    not enough space. This histogram will record up to 100 seconds with accuracy
    to the second.
  </summary>
</histogram>

<histogram name="Media.Controls.Overflow.TimeToDismiss" units="seconds">
  <owner>beccahughes@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Records the amount of time the overflow menu is displayed until the user
    dismissed the menu without clicking on a menu item. The overflow menu is
    shown by clicking the three dots on the media controls and is used to show
    more controls when there is not enough space. This histogram will record up
    to 100 seconds with accuracy to the second.
  </summary>
</histogram>

<histogram name="Media.Controls.Show" enum="MediaControlsShowReason">
  <obsolete>
    Deprecated May 19 2016 in favor of Media.Controls.Show.{Audio,Video}
  </obsolete>
  <owner>mlamouri@chromium.org</owner>
  <summary>
    Record whether the default media controls were shown and why every time they
    could be shown.
  </summary>
</histogram>

<histogram name="Media.Controls.Show.Audio" enum="MediaControlsShowReason">
  <owner>mlamouri@chromium.org</owner>
  <summary>
    Record whether the default media controls of an audio element were shown and
    why every time they could be shown. Note that audio elements that were not
    insterted to the DOM and do not have a controls attribute are not taken into
    account.
  </summary>
</histogram>

<histogram name="Media.Controls.Show.Video" enum="MediaControlsShowReason">
  <owner>mlamouri@chromium.org</owner>
  <summary>
    Record whether the default media controls of a video element were shown and
    why every time they could be shown.
  </summary>
</histogram>

<histogram name="Media.CrosBeamformingDeviceState"
    enum="CrosBeamformingDeviceState">
  <owner>ajm@chromium.org</owner>
  <summary>
    The state of the user selected virtual beamforming audio device on CrOS.
    It's logged whenever the format of the audio input stream is queried, which
    at least happens on stream startup, but could happen at other times as well.
  </summary>
</histogram>

<histogram name="Media.D3D11.WasVideoSupported"
    enum="D3D11VideoNotSupportedReason" expires_after="M70">
  <owner>liberato@chromium.org</owner>
  <owner>sandersd@chromium.org</owner>
  <owner>tmathmeyer@chromium.org</owner>
  <summary>
    This enum measures whether or not d3d11 is supported and if not, what the
    reason is.
  </summary>
</histogram>

<histogram name="Media.DetectedAudioCodec" enum="FFmpegCodecs">
  <obsolete>
    Deprecated Sep 15 2015 in favor of Media.DetectedAudioCodecHash
  </obsolete>
  <owner>jrummell@chromium.org</owner>
  <summary>Audio codec used in HTML5 media.</summary>
</histogram>

<histogram name="Media.DetectedAudioCodecHash" enum="FFmpegCodecHashes">
  <owner>jrummell@chromium.org</owner>
  <summary>
    Audio codec used in HTML5 media. Reporting corrected in M51 to include all
    detected audio codecs, not just those up to and including the first one
    supported.
  </summary>
</histogram>

<histogram name="Media.DetectedContainer" enum="MediaContainers">
  <owner>jrummell@chromium.org</owner>
  <summary>
    Container used for HTML5 media. Views that include pre-M34 data will
    categorize dash (38) and smooth streaming (39) in the &quot;Other&quot;
    bucket.
  </summary>
</histogram>

<histogram name="Media.DetectedTrackCount.Audio">
  <owner>wolenetz@chromium.org</owner>
  <summary>
    Number of detected audio tracks in HTML5 media. Not all may be usable by the
    player.
  </summary>
</histogram>

<histogram name="Media.DetectedTrackCount.Text">
  <owner>wolenetz@chromium.org</owner>
  <summary>
    Number of detected text tracks in HTML5 media. Not all may be usable by the
    player.
  </summary>
</histogram>

<histogram name="Media.DetectedTrackCount.Video">
  <owner>wolenetz@chromium.org</owner>
  <summary>
    Number of detected video tracks in HTML5 media. Not all may be usable by the
    player.
  </summary>
</histogram>

<histogram name="Media.DetectedVideoCodec" enum="FFmpegCodecs">
  <obsolete>
    Deprecated Sep 15 2015 in favor of Media.DetectedVideoCodecHash
  </obsolete>
  <owner>jrummell@chromium.org</owner>
  <summary>Video codec used in HTML5 media.</summary>
</histogram>

<histogram name="Media.DetectedVideoCodecHash" enum="FFmpegCodecHashes">
  <owner>jrummell@chromium.org</owner>
  <summary>
    Video codec used in HTML5 media. Reporting corrected in M51 to include all
    detected video codecs, not just those up to and including the first one
    supported.
  </summary>
</histogram>

<histogram name="Media.DevicePermissionActions" enum="DevicePermissionActions">
  <obsolete>
    Removed 10/2015 in favor of Permissions.Action.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures the actions taken in the media infobar, which prompts the users for
    device permission.
  </summary>
</histogram>

<histogram name="Media.DroppedFrameCount">
  <owner>prabhur@chromium.org</owner>
  <summary>
    Count of dropped frames between pipeline start and stop. Media pipeline
    starts/stops when an HTML5 video is loaded/unloaded respectively in the
    browser.
  </summary>
</histogram>

<histogram name="Media.Duration" units="ms">
  <obsolete>
    Removed 03/2017 in favor of Media.Duration2 with larger max bucket.
  </obsolete>
  <owner>scherkus@chromium.org</owner>
  <summary>Duration in milliseconds of HTML5 media (when known).</summary>
</histogram>

<histogram name="Media.Duration2" units="ms">
  <owner>dalecurtis@chromium.org</owner>
  <summary>Duration in milliseconds of HTML5 media (when known).</summary>
</histogram>

<histogram name="Media.DXVAVDA.ErrorLine">
  <owner>jbauman@chromium.org</owner>
  <owner>sandersd@chromium.org</owner>
  <summary>
    Whenever an error is logged from the DXVAVDA, this records the line in
    dxva_video_decode_accelerator.cc where the failure occurred.
  </summary>
</histogram>

<histogram name="Media.DXVAVDA.PictureBufferErrorLine">
  <owner>jbauman@chromium.org</owner>
  <owner>sandersd@chromium.org</owner>
  <summary>
    Whenever an error is logged from the DXVAVDA picture buffer code, this
    records the line in dxva_picture_buffer_win.cc where the failure occurred.
    This histogram can only meaningfully be compared between different versions
    of Chromium if no line numbers in that file changed between those versions.
  </summary>
</histogram>

<histogram name="Media.DXVAVDA.PictureBufferMechanism"
    enum="PictureBufferMechanism">
  <owner>liberato@chromium.org</owner>
  <owner>sandersd@chromium.org</owner>
  <summary>
    This enum measures how often each of the various DXVAVDA PictureBuffer
    display mechanisms are used.  Each count represents the mechanism selected
    at the end of DXVA::Initialize; i.e., there is one count per decoder.
  </summary>
</histogram>

<histogram base="true" name="Media.EME" enum="CdmPromiseResult">
  <owner>sandersd@chromium.org</owner>
  <summary>Result of EME promises that were handled by Chromium code.</summary>
</histogram>

<histogram base="true" name="Media.EME.addKey" enum="MediaKeyException">
  <obsolete>
    Deprecated 02/2016 with removal of prefixed EME.
  </obsolete>
  <owner>xhwang@chromium.org</owner>
  <summary>addKey result</summary>
</histogram>

<histogram base="true" name="Media.EME.cancelKeyRequest"
    enum="MediaKeyException">
  <obsolete>
    Deprecated 02/2016 with removal of prefixed EME.
  </obsolete>
  <owner>xhwang@chromium.org</owner>
  <summary>cancelKeyRequest result.</summary>
</histogram>

<histogram name="Media.EME.CdmFileIO.FileSizeKBOnError" units="KB">
  <owner>xhwang@chromium.org</owner>
  <summary>
    Size in KB of the last file successfully read by the CDM through CDM FileIO
    before a specific error happens. This is reported only when the error
    happens, which should be rare.
  </summary>
</histogram>

<histogram name="Media.EME.CdmFileIO.FileSizeKBOnFirstRead" units="KB">
  <owner>xhwang@chromium.org</owner>
  <summary>
    Size in KB of the first file successfully read by the CDM through CDM
    FileIO. This is recorded once per CDM instance.
  </summary>
</histogram>

<histogram name="Media.EME.CdmFileIO.ReadTime" units="ms">
  <owner>media-dev@chromium.org</owner>
  <summary>The actual time spent by the CDM reading a file.</summary>
</histogram>

<histogram name="Media.EME.CdmFileIO.WriteTime" units="ms">
  <owner>media-dev@chromium.org</owner>
  <summary>The actual time spent by the CDM writing a file.</summary>
</histogram>

<histogram name="Media.EME.CdmHostVerificationStatus"
    enum="CdmHostVerificationStatus">
  <owner>media-dev@chromium.org</owner>
  <summary>
    The status of CDM host verification. This is reported per CDM load.
  </summary>
</histogram>

<histogram name="Media.EME.CdmInterfaceVersion">
  <owner>xhwang@chromium.org</owner>
  <summary>
    Chromium could support multiple versions of CDM interface. This metric
    records the CDM interface version that the CDM created by Chromium uses.
    This is recorded once per CDM instance.
  </summary>
</histogram>

<histogram name="Media.EME.CdmLoadErrorCode" enum="WinGetLastError">
  <owner>media-dev@chromium.org</owner>
  <summary>
    The error code of a library CDM load failure. Only reported on Windows.
  </summary>
</histogram>

<histogram name="Media.EME.CdmLoadResult" enum="CdmLoadResult">
  <owner>media-dev@chromium.org</owner>
  <summary>The result from an attempt to load a library CDM.</summary>
</histogram>

<histogram name="Media.EME.CdmLoadTime" units="ms">
  <owner>media-dev@chromium.org</owner>
  <summary>The time spent to load a library CDM.</summary>
</histogram>

<histogram base="true" name="Media.EME.CreateCdm" enum="BooleanSuccess">
  <owner>xhwang@chromium.org</owner>
  <summary>
    Whether the CDM instance is created successfully. Reported each time a CDM
    instance creation is attempted, usually as a result of Javascript call of
    createMediaKeys().
  </summary>
</histogram>

<histogram base="true" name="Media.EME.CreateCdmTime" units="ms">
  <owner>xhwang@chromium.org</owner>
  <summary>The time it takes to create the CDM instance.</summary>
</histogram>

<histogram name="Media.EME.EncryptedEvent" enum="BooleanEncryptedEvent">
  <owner>xhwang@chromium.org</owner>
  <summary>
    Whether EME encrypted event has been fired. Every time a WebMediaPlayerImpl
    object is created a &quot;false&quot; value is reported to provide a
    baseline. Every time an encrypted event is fired, a &quot;true&quot; value
    will be reported. Note that it is possible to have multiple encrypted events
    during the lifetime of a WebMediaPlayerImpl object.
  </summary>
</histogram>

<histogram name="Media.EME.EncryptedMediaEnabled" enum="BooleanEnabled">
  <owner>xhwang@chromium.org</owner>
  <summary>
    Whether encrypted media is enabled when requestMediaKeySystemAccess() is
    called. User can enable and disable encrypted media in content settings.
    Recorded when requestMediaKeySystemAccess() is called but will be reported
    at most once per renderer process.
  </summary>
</histogram>

<histogram name="Media.EME.EncryptionScheme.Initial.Audio"
    enum="MediaEncryptionScheme">
  <owner>jrummell@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    The encryption scheme used by the audio stream in an HTML5 video. Reported
    when metadata is available if the initial config is encrypted.
  </summary>
</histogram>

<histogram name="Media.EME.EncryptionScheme.Initial.Video"
    enum="MediaEncryptionScheme">
  <owner>jrummell@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    The encryption scheme used by the video stream in an HTML5 video. Reported
    when metadata is available if the initial config is encrypted.
  </summary>
</histogram>

<histogram base="true" name="Media.EME.generateKeyRequest"
    enum="MediaKeyException">
  <obsolete>
    Deprecated 02/2016 with removal of prefixed EME.
  </obsolete>
  <owner>xhwang@chromium.org</owner>
  <summary>generateKeyRequest result.</summary>
</histogram>

<histogram name="Media.EME.IsIncognito" enum="BooleanIncognito">
  <owner>xhwang@chromium.org</owner>
  <summary>
    Whether a given WebMediaPlayer instance, with a CDM attached, is played in
    an incognito window or in Chrome OS guest mode. Players that never started
    playback are excluded. Recorded once at time of player destruction.
  </summary>
</histogram>

<histogram base="true" name="Media.EME.KeyAdded">
  <obsolete>
    Deprecated 02/2016 with removal of prefixed EME.
  </obsolete>
  <owner>xhwang@chromium.org</owner>
  <summary>KeyAdded event count.</summary>
</histogram>

<histogram base="true" name="Media.EME.KeyError" enum="MediaKeyError">
  <obsolete>
    Deprecated 02/2016 with removal of prefixed EME.
  </obsolete>
  <owner>xhwang@chromium.org</owner>
  <summary>KeyError event count.</summary>
</histogram>

<histogram base="true" name="Media.EME.KeyStatusSystemCode"
    enum="CdmSystemCode">
  <owner>media-dev@chromium.org</owner>
  <summary>System code count associated with key status.</summary>
</histogram>

<histogram name="Media.EME.KeySystemSupport.Widevine"
    enum="MediaKeySystemSupportStatus">
  <obsolete>
    Deprecated 02/2016 with removal of prefixed EME.
  </obsolete>
  <owner>xhwang@chromium.org</owner>
  <summary>
    Key system support query status and result. Each enum value will be reported
    at most once per renderer process.
  </summary>
</histogram>

<histogram base="true" name="Media.EME.LibraryCdmAvailable"
    enum="BooleanAvailable">
  <owner>media-dev@chromium.org</owner>
  <summary>
    Whether the CDM is available for the key system or not. In normal cases,
    this is reported once per render process if the EME API is used. In rare
    cases it could be reported more than once if the CDM is not available and
    then is component updated.
  </summary>
</histogram>

<histogram name="Media.EME.MediaCryptoAvailable" enum="BooleanAvailable">
  <owner>media-dev@chromium.org</owner>
  <summary>
    Whether MediaCrypto is available on a MediaDrm-based CDM. Reported once per
    MediaDrmBridge creation. In normal cases it should always be available.
  </summary>
</histogram>

<histogram name="Media.EME.MediaDrmBridge.KeySystemSupport"
    enum="BooleanSupported">
  <owner>media-dev@chromium.org</owner>
  <summary>
    Whether MediaDrmBridge supports the key system. Reported once per
    MediaDrmBridge creation. In normal cases it should always be supported.
  </summary>
</histogram>

<histogram name="Media.EME.MojoCdm.ConnectionError"
    enum="BooleanConnectionError">
  <owner>media-dev@chromium.org</owner>
  <summary>
    Whether connection error has happened for MojoCdm. Every time a MojoCdm
    object is created a &quot;false&quot; value is reported to provide a
    baseline. Every time a mojo connection error happened, a &quot;true&quot;
    value will be reported, which typically means a remote CDM process crash.
  </summary>
</histogram>

<histogram name="Media.EME.NeedKey">
  <obsolete>
    Renamed to Media.EME.EncryptedEvent in 10/2017.
  </obsolete>
  <owner>xhwang@chromium.org</owner>
  <summary>EME NeedKey event count.</summary>
</histogram>

<histogram name="Media.EME.OutputProtection" enum="MediaOutputProtectionStatus">
  <owner>xhwang@chromium.org</owner>
  <summary>
    Output protection query status and result. One query and one positive (no
    unprotected external links) result (if any) are reported per CDM instance.
  </summary>
</histogram>

<histogram name="Media.EME.RequestMediaKeySystemAccess"
    enum="RequestMediaKeySystemAccessStatus">
  <owner>sandersd@chromium.org</owner>
  <summary>
    Key system support query status and result, as reported by
    RequestMediaKeySystemAccess. Each value will be reported at most once per
    renderer process.
  </summary>
</histogram>

<histogram base="true" name="Media.EME.SystemCode" enum="CdmSystemCode">
  <owner>xhwang@chromium.org</owner>
  <summary>System code count in promise rejection.</summary>
</histogram>

<histogram base="true" name="Media.EME.TimeTo" units="ms">
  <owner>xhwang@chromium.org</owner>
  <summary>The time it takes to resolve a EME promise.</summary>
</histogram>

<histogram name="Media.EME.Widevine.VideoCapability.HasEmptyRobustness"
    enum="BooleanEmpty">
  <owner>xhwang@chromium.org</owner>
  <summary>
    Whether the robustness level of any video capability in the supported
    configuration passed into requestMediaKeySystemAccess() is empty. This is
    specific to the Widevine key system.
  </summary>
</histogram>

<histogram name="Media.Engagement.Clear" enum="MediaEngagementClearReason">
  <owner>mlamouri@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Records the reason why the Media Engagement data was cleared. Partial
    changes and full wipeout will both be recorded as one event.
  </summary>
</histogram>

<histogram name="Media.Engagement.PreloadedList.CheckResult"
    enum="PreloadedListCheckResult">
  <owner>beccahughes@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Recorded when the Media Engagement Preloaded List is checked whether a
    string is present on that list. If the check was successful then the result
    of the check is recorded in this histogram. If the check was not successful
    then the reason for the check failing is recorded.
  </summary>
</histogram>

<histogram name="Media.Engagement.PreloadedList.LoadResult"
    enum="PreloadedListLoadResult">
  <owner>beccahughes@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Recorded when data is loaded into the Media Engagement Preloaded List. If
    the load is successful then &quot;loaded&quot; is recorded to this
    histogram. If the load was not successful then the reason why is recorded to
    this histogram.
  </summary>
</histogram>

<histogram name="Media.Engagement.PreloadedList.LoadTime" units="ms">
  <owner>mlamouri@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Time taken to load the Media Engagement Preloaded List. It should be
    recorded once per load of the list which will be once per start up with
    additional loads when the list is updated while running.
  </summary>
</histogram>

<histogram name="Media.Engagement.PreloadedList.LookupTime" units="ms">
  <owner>mlamouri@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Time taken to lookup an entry in the Media Engagement Preloaded List. This
    is recorded for every lookup, regardless of its success.
  </summary>
</histogram>

<histogram name="Media.Engagement.ScoreAtPlayback" units="%">
  <owner>beccahughes@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    The media engagement score recorded at the time of playback. It is converted
    to a percentage so should be divided by 100 to get the actual score. It is
    only recorded for playback that is either lacking an audio track or not
    muted.
  </summary>
</histogram>

<histogram name="Media.Engagement.ScoreAtStartup" units="%">
  <owner>beccahughes@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Media engagement scores for each origin, recorded at Chrome startup. It is
    converted to a percentage so should be divided by 100 to get the actual
    score.
  </summary>
</histogram>

<histogram name="Media.Engagement.Session" enum="MediaEngagementSessionEvent">
  <owner>mlamouri@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Records creation and playback status of a Media Engagement Session. This is
    recorded at the same time as the data is commited into the content settings
    database.
  </summary>
</histogram>

<histogram name="Media.Engagement.Session.Restored"
    enum="MediaEngagementSessionEvent">
  <owner>mlamouri@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Records creation and playback status of a restored Media Engagement Session.
    This is recorded at the same time as the data is commited into the content
    settings database. Restored information are recorded in addition of regular
    ones (Media.Engagement.Session).
  </summary>
</histogram>

<histogram
    name="Media.Engagement.SignificantPlayers.PlayerNotAdded.AfterFirstTime"
    enum="InsignificantPlaybackReason">
  <owner>beccahughes@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Recorded when the Media Engagement service doesn't determine a player to be
    significant. If a player is not significant the reasons why will be
    individually recorded to this histogram each time except for the first time
    which is recorded to a different histogram.

    The significant state of a player is reevaluated any time the state of the
    player changes (e.g. muted, playing/paused). If the player was not
    considered signficiant and still is not then we will record the reasons why
    in this histogram.
  </summary>
</histogram>

<histogram name="Media.Engagement.SignificantPlayers.PlayerNotAdded.FirstTime"
    enum="InsignificantPlaybackReason">
  <owner>beccahughes@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Recorded when the Media Engagement service doesn't determine a player to be
    significant. If a player is not significant the reasons why will be
    individually recorded to this histogram the first time only.

    The significant state of a player is reevaluated any time the state of the
    player changes (e.g. muted, playing/paused). If the player was not
    considered signficiant and still is not then we will record the reasons why
    in this histogram.
  </summary>
</histogram>

<histogram name="Media.Engagement.SignificantPlayers.PlayerRemoved"
    enum="InsignificantPlaybackReason">
  <owner>beccahughes@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Recorded when the Media Engagement service no longer determines a player to
    be significant. If a player is no longer significant, the reasons why will
    be individually recorded to this histogram.

    The significant state of a player is re-evaluted any time the state of the
    player changes (e.g. muted, playing/paused). If the player was previously
    considered significant and is no longer considered that we will record the
    reasons why in this histogram.
  </summary>
</histogram>

<histogram name="Media.Engagement.URLsDeletedScoreReduction" units="%">
  <owner>beccahughes@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Recorded when the history is cleared and the media engagement data are
    similarly cleared. It records the reduction in score for each affected
    origin. The algorithm is made to reduce the score by 0.0 as much as possible
    and if it fails, the score will actually become 0.0 so every reduction also
    represent the value of the previous score.
  </summary>
</histogram>

<histogram name="Media.FallbackHardwareAudioBitsPerChannel">
  <obsolete>
    Deprecated May 2018; has been 32-bit for years now.
  </obsolete>
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Bits per channel of the hardware audio device which failed to open in low
    latency mode and required high latency fallback.
  </summary>
</histogram>

<histogram name="Media.FallbackHardwareAudioChannelCount">
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Channel count of the hardware audio device which failed to open in low
    latency mode and required high latency fallback.
  </summary>
</histogram>

<histogram name="Media.FallbackHardwareAudioChannelLayout" enum="ChannelLayout">
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Channel layout of the hardware audio device which failed to open in low
    latency mode and required high latency fallback.
  </summary>
</histogram>

<histogram name="Media.FallbackHardwareAudioSamplesPerSecond"
    enum="AudioSampleRate">
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Samples per second of the hardware audio device which failed to open in low
    latency mode and required high latency fallback.
  </summary>
</histogram>

<histogram name="Media.FallbackHardwareAudioSamplesPerSecondUnexpected"
    units="Hz">
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Samples per second of the hardware audio device (atypical values, in Hz)
    which failed to open in low latency mode and required high latency fallback.
  </summary>
</histogram>

<histogram name="Media.FallbackToHighLatencyAudioPath"
    enum="BooleanDidFallBack">
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Whether Chrome had to fallback to the high latency audio path or not.
  </summary>
</histogram>

<histogram name="Media.Fling.DelayedAndDroppedFramesPer5Sec" units="frames/5s">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The average number of delayed and dropped frames for the Fling application.
    Reported every 5 seconds.
  </summary>
</histogram>

<histogram name="Media.Fling.DisplayedFramesPerSecond" units="frames/s">
  <obsolete>
    Deprecated 07/2015 in issue 508534.
  </obsolete>
  <owner>halliwell@chromium.org</owner>
  <summary>
    The average number of displayed frames for the Fling application.  Reported
    every 5 seconds.
  </summary>
</histogram>

<histogram name="Media.Fling.TimeToBufferAv" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time needed to pre-buffer A/V data before the actual playback for the Fling
    application.
  </summary>
</histogram>

<histogram name="Media.Fling.TimeToBufferAvAfterAbort" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time needed to buffer A/V data after an abort for the Fling application.
  </summary>
</histogram>

<histogram name="Media.Fling.TimeToBufferAvAfterUnderrun" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time needed to buffer A/V data after an underrun for the Fling application.
  </summary>
</histogram>

<histogram name="Media.GPU.HasEverLostContext" enum="ContextProviderPhase">
  <owner>dcastagna@chromium.org</owner>
  <summary>
    Records when a context provider is acquired in media, and when it's released
    because a context loss has been detected.
  </summary>
</histogram>

<histogram name="Media.GpuArcVideoDecodeAccelerator.InitializeResult"
    enum="ArcVideoDecodeAcceleratorResult">
  <owner>hiroh@chromium.org</owner>
  <summary>
    Counts of status values returned from calls to
    GpuArcVideoDecodeAccelerator::Initialize().
  </summary>
</histogram>

<histogram name="Media.GpuMemoryBufferVideoFramePool.UnsupportedFormat"
    enum="VideoPixelFormatUnion">
  <owner>dcastagna@chromium.org</owner>
  <owner>mcasas@chromium.org</owner>
  <summary>
    GpuMemoryBufferVideoFramePool is called with an unsupported VideoFrame pixel
    format. Emitted on VideoFrame arrival.
  </summary>
</histogram>

<histogram name="Media.GpuVideoDecoderError" enum="VideoDecodeAcceleratorError">
  <owner>sandersd@chromium.org</owner>
  <summary>Counts of video decode errors reported to GpuVideoDecoder.</summary>
</histogram>

<histogram name="Media.GpuVideoDecoderInitializeStatus" enum="PipelineStatus">
  <owner>posciak@chromium.org</owner>
  <summary>Results of attempts to GpuVideoDecoder::Initialize().</summary>
</histogram>

<histogram name="Media.HardwareAudioBitsPerChannel">
  <obsolete>
    Deprecated May 2018; has been 32-bit for years now.
  </obsolete>
  <owner>dalecurtis@chromium.org</owner>
  <summary>Bits per channel of the hardware audio device.</summary>
</histogram>

<histogram name="Media.HardwareAudioChannelCount">
  <owner>dalecurtis@chromium.org</owner>
  <summary>Channel count of the hardware audio device.</summary>
</histogram>

<histogram name="Media.HardwareAudioChannelLayout" enum="ChannelLayout">
  <owner>dalecurtis@chromium.org</owner>
  <summary>Channel layout of the hardware audio device.</summary>
</histogram>

<histogram name="Media.HardwareAudioSamplesPerSecond" enum="AudioSampleRate">
  <owner>dalecurtis@chromium.org</owner>
  <summary>Samples per second of the hardware audio device.</summary>
</histogram>

<histogram name="Media.HardwareAudioSamplesPerSecondUnexpected" units="Hz">
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Samples per second of the hardware audio device (atypical values, in Hz).
  </summary>
</histogram>

<histogram name="Media.HasEverPlayed" enum="BooleanHasPlayed">
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Whether a given WebMediaPlayer instance, after preload, started playback;
    recorded once at time of player destruction.
  </summary>
</histogram>

<histogram name="Media.HighLatencyAudioCaptureStartupSuccess"
    enum="AudioCaptureStartupResult">
  <owner>maxmorin@chromium.org</owner>
  <summary>
    Whether capture started successfully after a high-latency input stream
    startup was requested.
  </summary>
</histogram>

<histogram name="Media.InfoLoadDelay" units="ms">
  <obsolete>
    Deprecated June 2017. Found that the MediaInfoLoader class (the only user of
    this histogram) is no longer used by anyone.
  </obsolete>
  <owner>qinmin@chromium.org</owner>
  <summary>
    The time it takes to perform redirect tracking and a CORS access check while
    preparing to play a media file.
  </summary>
</histogram>

<histogram name="Media.Initialize.Windows" enum="WinGetLastError">
  <obsolete>
    Deprecated 05/2015 in Issue 1141703002. FFmpeg is now statically linked.
  </obsolete>
  <owner>scherkus@chromium.org</owner>
  <summary>
    Errors returned by LoadLibraryEx on Windows while attempting to load
    ffmpegsumo.dll.
  </summary>
</histogram>

<histogram name="Media.InputErrorMac" units="OSStatus">
  <owner>tommi@chromium.org</owner>
  <summary>
    Error codes that we encounter while setting up an AUAudioInputStream on Mac.
  </summary>
</histogram>

<histogram name="Media.InputInvalidSampleRateMac" units="Hz">
  <obsolete>
    Deprecated and removed from code as of 02/2016.
  </obsolete>
  <owner>henrika@chromium.org</owner>
  <summary>
    Invalid input sample rate when calling AUAudioInputStream::Open on Mac.
  </summary>
</histogram>

<histogram name="Media.InputStreamDuration" units="ms">
  <owner>henrika@chromium.org</owner>
  <summary>
    Duration in milliseconds of low-latency audio input streams. Sampled when
    the stream is closed by the AudioInputController.
  </summary>
</histogram>

<histogram name="Media.InputStreamDurationWithoutCallback" units="ms">
  <owner>maxmorin@chromium.org</owner>
  <summary>
    Duration in milliseconds of low-latency audio input streams which never got
    any callbacks.
  </summary>
</histogram>

<histogram name="Media.IsStreaming" enum="Boolean">
  <owner>sandersd@chromium.org</owner>
  <summary>
    Whether the WMPI data source is streaming (does not support range requests).
  </summary>
</histogram>

<histogram name="Media.LinuxAudioIO" enum="LinuxAudioIO">
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Audio IO layer used by the Linux OS, sampled once at startup of the browser.
  </summary>
</histogram>

<histogram name="Media.LoadType" enum="MediaLoadType">
  <owner>xhwang@chromium.org</owner>
  <summary>
    Load type of HTML5 media, such as URL, MediaSource and MediaStream.
  </summary>
</histogram>

<histogram name="Media.LocalRendererSinkStates" enum="LocalRendererSinkStates"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    State of the WebRtc local renderer, sampled once during the lifetime of a
    local renderer.
  </summary>
</histogram>

<histogram name="Media.LowLatencyAudioCaptureStartupSuccess"
    enum="AudioCaptureStartupResult">
  <owner>maxmorin@chromium.org</owner>
  <summary>
    Whether capture started successfully after a low-latency input stream
    startup was requested.
  </summary>
</histogram>

<histogram name="Media.MeanTimeBetweenRebuffers" units="ms">
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    The total watch time (see Media.WatchTime) of a given playback divided by
    the number of rebuffering events that occured during that playback.
  </summary>
</histogram>

<histogram name="Media.MediaElement.ContentTypeParseable"
    enum="ContentTypeParseableResult">
  <owner>jrummell@chromium.org</owner>
  <summary>
    Whether the content type provided to HTMLMediaElement would parse with
    ParsedContentType or not.
  </summary>
</histogram>

<histogram name="Media.MediaElement.PlaybackPositionIsInfinity"
    enum="BooleanInfinity" expires_after="2019-01-01">
  <owner>ossu@chromium.org</owner>
  <owner>grunell@chromium.org</owner>
  <summary>
    Whether or not the MediaElement is at a playback position of infinity when
    checking if playback has ended.
  </summary>
</histogram>

<histogram name="Media.MediaElement.PlayPromiseReject"
    enum="PlayPromiseRejectReason">
  <owner>mlamouri@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Recorded when an HTMLMediaElement play() promise is rejected (handled or
    not) with the type of rejection.
  </summary>
</histogram>

<histogram name="Media.MediaRecorder.VEAError"
    enum="VideoDecodeAcceleratorError">
  <owner>shenghao@chromium.org</owner>
  <owner>mcasas@chromium.org</owner>
  <summary>The errors HW video encode encounters in MediaRecorder.</summary>
</histogram>

<histogram name="Media.MediaRecorder.VEAUsed" enum="MediaRecorderVEAUsed">
  <owner>shenghao@chromium.org</owner>
  <owner>mcasas@chromium.org</owner>
  <summary>Whether HW video encode is used in MediaRecorder.</summary>
</histogram>

<histogram name="Media.MicrophoneMuted" enum="MicrophoneMuteResult"
    expires_after="2018-08-30">
  <owner>henrika@chromium.org</owner>
  <summary>
    Heuristically detects if the user has muted the microphone or not. Measured
    approximately four times per minute.
  </summary>
</histogram>

<histogram name="Media.MicrophoneVolume" units="%" expires_after="2018-08-30">
  <owner>henrika@chromium.org</owner>
  <summary>
    Level of the microphone volume measured in percent. This value can be larger
    than 100% on Linux. Measured approximately four times per minute.
  </summary>
</histogram>

<histogram name="Media.Midi.InputPorts" units="devices">
  <owner>toyoshim@chromium.org</owner>
  <summary>Connected input port numbers on the initialization.</summary>
</histogram>

<histogram name="Media.Midi.OutputPorts" units="devices">
  <owner>toyoshim@chromium.org</owner>
  <summary>Connected output port numbers on the initialization.</summary>
</histogram>

<histogram name="Media.Midi.ResultOnShutdown" enum="MidiResult">
  <owner>toyoshim@chromium.org</owner>
  <summary>
    The final status of MidiManager on destruction. This can monitor unexpected
    failures on initializing platform dependent MIDI stuff.
  </summary>
</histogram>

<histogram name="Media.Midi.SendReceiveUsage" enum="MidiSendReceiveUsage">
  <owner>toyoshim@chromium.org</owner>
  <summary>
    Reports whether any data was sent or received by a MidiManager. Recorded
    once per MidiManager instantiation, upon destruction. MidiManager is
    instantiated when the first Web MIDI client starts a session, and destroyed
    when the last client ends the session.
  </summary>
</histogram>

<histogram name="Media.Midi.SysExMessageSizeUpTo1MB" units="bytes">
  <owner>toyoshim@chromium.org</owner>
  <summary>Reports sysex message size.</summary>
</histogram>

<histogram name="Media.Midi.Usage" enum="MidiUsage">
  <owner>toyoshim@chromium.org</owner>
  <summary>
    The MidiManager instance use count, but this is not intended to understand
    the real API usage because this can be counted by feature scanning scripts
    that are often used for footprinting. You may want to track SendReceiveUsage
    to monitor only instances that actually send or receive MIDI messages.
  </summary>
</histogram>

<histogram name="Media.MojoVideoDecoder.ActiveInstances">
  <owner>sandersd@chromium.org</owner>
  <summary>
    Records the number of active MojoVideoDecoderService instances that are
    alive each time an instance becomes active. An instance is active if
    Decode() has been called at least once. This provides an estimate of the
    concurrent hardware resource requirements.
  </summary>
</histogram>

<histogram name="Media.MSE.AudioCodec" enum="MSECodec">
  <owner>acolwell@chromium.org</owner>
  <summary>
    Audio codec used in Media Source Extensions playback. Set when AddId() is
    called during playback.
  </summary>
</histogram>

<histogram name="Media.MSE.AudioSpliceDurationType"
    enum="StreamParserBufferDurationType">
  <obsolete>
    Deprecated 05/2018. Splicing no longer performed on buffers with estimated
    duration. See https://crbug.com/396634.
  </obsolete>
  <owner>chcunningham@chromium.org</owner>
  <summary>
    Categorizes MSE audio splicing by the type of duration used in the
    overlapped buffer.
  </summary>
</histogram>

<histogram name="Media.MSE.DemuxerDestructionTime" units="ms">
  <owner>wolenetz@chromium.org</owner>
  <summary>
    Amount of time taken to destroy one ChunkDemuxer object, not including
    initial background task scheduling delay.
  </summary>
</histogram>

<histogram name="Media.MSE.DetectedTrackCount.Audio">
  <owner>wolenetz@chromium.org</owner>
  <summary>
    Number of detected audio tracks in Media Source Extensions playback. Not all
    may be usable by the player.
  </summary>
</histogram>

<histogram name="Media.MSE.DetectedTrackCount.Text">
  <owner>wolenetz@chromium.org</owner>
  <summary>
    Number of detected text tracks in Media Source Extensions playback. Not all
    may be usable by the player. This count includes only explicitly signalled
    tracks in MSE initialization segments parsed from WebM or ISO BMFF
    bytestreams.
  </summary>
</histogram>

<histogram name="Media.MSE.DetectedTrackCount.Video">
  <owner>wolenetz@chromium.org</owner>
  <summary>
    Number of detected video tracks in Media Source Extensions playback. Not all
    may be usable by the player.
  </summary>
</histogram>

<histogram name="Media.MSE.LateAudioFrames"
    units="late frames per million frames">
  <obsolete>
    Deleted along with browser side MSE implementation.
  </obsolete>
  <owner>qinmin@chromium.org</owner>
  <owner>timav@chromium.org</owner>
  <summary>
    Relative number of late audio frames wrt total number of audio frames in MSE
    playback, multiplied by one million. The audio frame is considered late if
    it might cause an underrun, i.e. comes from decoder when audio buffer is
    already depleted.
  </summary>
</histogram>

<histogram name="Media.MSE.LateVideoFrames"
    units="late frames per million frames">
  <obsolete>
    Deleted along with browser side MSE implementation.
  </obsolete>
  <owner>qinmin@chromium.org</owner>
  <owner>timav@chromium.org</owner>
  <summary>
    Relative number of late video frames wrt total number of video frames in MSE
    playback, multiplied by one million. The video frame is late if it missed
    its presentation time as determined by PTS when it comes from decoder. The
    rendering policy (i.e. render or skip) does not affect it.
  </summary>
</histogram>

<histogram name="Media.MSE.NumberOfTracks">
  <owner>acolwell@chromium.org</owner>
  <summary>
    Number of tracks specified to AddId() for Media Source Extensions playback.
    May be called multiple times per element if playback is dynamically altered.
  </summary>
</histogram>

<histogram name="Media.MSE.Playback" enum="BooleanSuccess">
  <obsolete>
    Renamed to Media.LoadType.
  </obsolete>
  <owner>acolwell@chromium.org</owner>
  <summary>
    Whether Media Source Extensions is specified for playback of Media elements.
    Sampled when media pipeline starts.
  </summary>
</histogram>

<histogram name="Media.MSE.PlaybackDuration" units="ms">
  <obsolete>
    Deleted along with browser side MSE implementation.
  </obsolete>
  <owner>qinmin@chromium.org</owner>
  <owner>timav@chromium.org</owner>
  <summary>
    Duration of an uninterrupted MSE playback. This is the time interval between
    the playback starts or resumes and the moment when user stops the playback
    by pressing pause, initiating a seek etc. Measured in media time in
    milliseconds.
  </summary>
</histogram>

<histogram name="Media.MSE.Starvations" units="starvations per million frames">
  <obsolete>
    Deleted along with browser side MSE implementation.
  </obsolete>
  <owner>qinmin@chromium.org</owner>
  <owner>timav@chromium.org</owner>
  <summary>
    Relative number of starvations wrt total number of frames in MSE playback,
    multiplied by one million. Starvation happens when the player interrupts the
    regular playback and asks for more data, conditions are player-specific.
  </summary>
</histogram>

<histogram name="Media.MSE.VideoCodec" enum="MSECodec">
  <owner>acolwell@chromium.org</owner>
  <summary>
    Video codec used in Media Source Extensions playback. Set when AddId() is
    called during playback.
  </summary>
</histogram>

<histogram name="Media.MSE.VideoCodec.MP4" enum="MSECodec">
  <owner>media-dev@chromium.org</owner>
  <summary>
    Video codec used in Media Source Extensions playback if the media container
    is MP4. Set when AddId() is called during playback.
  </summary>
</histogram>

<histogram name="Media.MSE.VideoCodec.WebM" enum="MSECodec">
  <owner>media-dev@chromium.org</owner>
  <summary>
    Video codec used in Media Source Extensions playback if the media container
    is WebM. Set when AddId() is called during playback.
  </summary>
</histogram>

<histogram name="Media.Netflix.AudioBitrate" units="kbps">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The audio bit rate as reported by the Netflix application.  May be reported
    multiple times as network conditions change during playback.
  </summary>
</histogram>

<histogram name="Media.Netflix.AudioNumChannels" units="channels">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of audio channels as reported by the Netflix application. May be
    reported multiple times as network conditions change during playback.
  </summary>
</histogram>

<histogram name="Media.Netflix.DelayedAndDroppedFramesPer5Sec"
    units="frames/5s">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The average number of delayed and dropped frames for the Netflix
    application.  Reported every 5 seconds.
  </summary>
</histogram>

<histogram name="Media.Netflix.DisplayedFramesPerSecond" units="frames/s">
  <obsolete>
    Deprecated 07/2015 in issue 508534.
  </obsolete>
  <owner>halliwell@chromium.org</owner>
  <summary>
    The average number of displayed frames for the Netflix application. Reported
    every 5 seconds.
  </summary>
</histogram>

<histogram name="Media.Netflix.VideoBitrate" units="kbps">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Video bit rate as reported by the Netflix application.  May be reported
    multiple times as network conditions change during playback.
  </summary>
</histogram>

<histogram name="Media.Netflix.VideoHeight" units="pixels">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Video height as reported by the Netflix application.  May be reported
    multiple times as network conditions change during playback.
  </summary>
</histogram>

<histogram name="Media.Notification.Click" enum="MediaNotificationClickSource">
  <owner>mlamouri@chromium.org</owner>
  <owner>avayvod@chromium.org</owner>
  <owner>zqzhang@chromium.org</owner>
  <summary>
    The type of media notification the user clicked to go back to Chrome.
  </summary>
</histogram>

<histogram name="Media.OutputStreamDuration" units="ms">
  <owner>maxmorin@chromium.org</owner>
  <summary>
    Duration of an audio output stream. Measured in AudioOutputController from
    when a stream is started until it is stopped. A stream is stopped when it is
    paused, closed (i.e. destructed), or when a device change event causes it to
    be restarted.
  </summary>
</histogram>

<histogram name="Media.Pepper.PlayedSound" enum="Boolean">
  <owner>avayvod@chromium.org</owner>
  <owner>mlamouri@chromium.org</owner>
  <owner>zqzhang@chromium.org</owner>
  <summary>
    Whether Pepper players have played sound through its lifetime.
  </summary>
</histogram>

<histogram name="Media.PepperVideoDecoderError"
    enum="VideoDecodeAcceleratorError">
  <owner>ihf@chromium.org</owner>
  <owner>posciak@chromium.org</owner>
  <summary>Counts of video decode errors reported to plugin.</summary>
</histogram>

<histogram name="Media.PepperVideoDecoderPictureCount">
  <owner>ihf@chromium.org</owner>
  <owner>posciak@chromium.org</owner>
  <summary>
    Number of PictureBuffers/textures requested per hardware decoder creation.
    This value varies by platform and video. A user visible video may trigger
    multiple decoder creations (sometimes every 5 seconds) but would normally
    not hold more than 2 sets of buffers at any given time in memory.
  </summary>
</histogram>

<histogram name="Media.PepperVideoDecoderPictureHeight">
  <owner>ihf@chromium.org</owner>
  <owner>posciak@chromium.org</owner>
  <summary>
    Vertical video resolution rounded to the nearest bucket. (Corresponds
    roughly to the number in 720p.)
  </summary>
</histogram>

<histogram name="Media.PipelineStatus" enum="PipelineStatus">
  <owner>prabhur@chromium.org</owner>
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Status of the media pipeline at the end of its lifecycle suffixed by stream
    and video decoder type.
  </summary>
</histogram>

<histogram name="Media.PipelineStatus.Start" enum="PipelineStatus">
  <owner>xhwang@chromium.org</owner>
  <summary>
    Status of the media pipeline starting process (including demuxer and
    renderer initialization). If the media pipeline is destroyed during the
    starting process nothing will be reported, but this should relatively rare.
  </summary>
</histogram>

<histogram name="Media.PlayMovies.DelayedAndDroppedFramesPer5Sec"
    units="frames/5s">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The average number of delayed and dropped frames for the PlayMovies
    application.  Reported every 5 seconds.
  </summary>
</histogram>

<histogram name="Media.PlayMovies.DisplayedFramesPerSecond" units="frames/s">
  <obsolete>
    Deprecated 07/2015 in issue 508534.
  </obsolete>
  <owner>halliwell@chromium.org</owner>
  <summary>
    The average number of displayed frames for the PlayMovies application.
    Reported every 5 seconds.
  </summary>
</histogram>

<histogram name="Media.PreloadMetadataSuspendWasIdeal" enum="Boolean">
  <owner>media-dev@chromium.org</owner>
  <summary>
    Indicates if a suspend initiated for preload=metadata was ideal. I.e. we did
    not immediately resume after completing the suspend when signaling
    ReadyState::HAVE_FUTURE_DATA.
  </summary>
</histogram>

<histogram name="Media.RebuffersCount" units="rebuffers">
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Indicates the number of rebuffers a given watch time session had.
  </summary>
</histogram>

<histogram name="Media.Remoting.AllowedByPage" enum="BooleanEnabled">
  <owner>miu@chromium.org</owner>
  <summary>Tracks whether a web page allows content to be remoted.</summary>
</histogram>

<histogram name="Media.Remoting.AudioBitrate" units="kbps">
  <owner>miu@chromium.org</owner>
  <summary>
    Measured audio content transfer bitrate while remoting content.
  </summary>
</histogram>

<histogram name="Media.Remoting.AudioChannelLayout" enum="ChannelLayout">
  <owner>miu@chromium.org</owner>
  <summary>Audio channel layout used while remoting content.</summary>
</histogram>

<histogram name="Media.Remoting.AudioCodec" enum="AudioCodec">
  <owner>miu@chromium.org</owner>
  <summary>Audio codec used while remoting content.</summary>
</histogram>

<histogram name="Media.Remoting.AudioSamplesPerSecond" enum="AudioSampleRate">
  <owner>miu@chromium.org</owner>
  <summary>Audio sampling rate while remoting audio content.</summary>
</histogram>

<histogram name="Media.Remoting.AudioSamplesPerSecondUnexpected" units="Hz">
  <owner>miu@chromium.org</owner>
  <summary>
    Audio sampling rate while remoting audio content (atypical values, in Hz).
  </summary>
</histogram>

<histogram name="Media.Remoting.CapacityOverMediaBitrate" units="kbps">
  <obsolete>
    Deprecated 11/2017 in issue 788940.
  </obsolete>
  <owner>miu@chromium.org</owner>
  <summary>
    The difference between the estimated transmission capacity and the media
    bitrate when capacity is higher.
  </summary>
</histogram>

<histogram name="Media.Remoting.MediaBitrateOverCapacity" units="kbps">
  <obsolete>
    Deprecated 11/2017 in issue 788940.
  </obsolete>
  <owner>miu@chromium.org</owner>
  <summary>
    The difference between the media bitrate and the estimated transmission
    capacity when media bitrate is higher.
  </summary>
</histogram>

<histogram name="Media.Remoting.PosterDownloadDuration.Fail" units="ms">
  <obsolete>
    Deprecated as no more poster image is being downloaded while remoting
    content.
  </obsolete>
  <owner>miu@chromium.org</owner>
  <summary>
    Measures the amount of time it took to ultimately fail to download a poster
    image for an HTML5 video while remoting content.
  </summary>
</histogram>

<histogram name="Media.Remoting.PosterDownloadDuration.Success" units="ms">
  <obsolete>
    Deprecated as no more poster image is being downloaded while remoting
    content.
  </obsolete>
  <owner>miu@chromium.org</owner>
  <summary>
    Measures the amount of time it took to successfully download a poster image
    for an HTML5 video while remoting content.
  </summary>
</histogram>

<histogram name="Media.Remoting.SessionDuration" units="ms">
  <owner>miu@chromium.org</owner>
  <summary>Measures the duration of each remoting session.</summary>
</histogram>

<histogram name="Media.Remoting.SessionStartTrigger"
    enum="RemotingStartTrigger">
  <owner>miu@chromium.org</owner>
  <summary>Tracks the trigger for starting a remoting session.</summary>
</histogram>

<histogram name="Media.Remoting.SessionStopTrigger" enum="RemotingStopTrigger">
<!-- Name completed by histogram_suffixes name="RemotingSessionDuration" -->

  <owner>miu@chromium.org</owner>
  <summary>Tracks the trigger for stopping a remoting session.</summary>
</histogram>

<histogram name="Media.Remoting.ShortSessionDuration" units="ms">
  <owner>miu@chromium.org</owner>
  <summary>
    Measures the duration of each remoting session shorter than 15 seconds.
  </summary>
</histogram>

<histogram name="Media.Remoting.StartMediaBitrate" units="kbps">
  <obsolete>
    Deprecated 11/2017 in issue 788940.
  </obsolete>
  <owner>miu@chromium.org</owner>
  <summary>
    The estimated content bitrate (including both audio and video) when starting
    a remoting session.
  </summary>
</histogram>

<histogram name="Media.Remoting.TimeUntilFirstPlayout" units="ms">
  <owner>miu@chromium.org</owner>
  <summary>
    Measures how long, from the start of a remoting session, until content began
    playing out on the remote device.
  </summary>
</histogram>

<histogram name="Media.Remoting.TimeUntilRemoteInitialized" units="ms">
  <owner>miu@chromium.org</owner>
  <summary>
    Measures how long, from the start of a remoting session, until a message was
    received from the remote device indicating initialization succeeded.
  </summary>
</histogram>

<histogram name="Media.Remoting.TrackConfiguration"
    enum="RemotingTrackConfiguration">
  <owner>miu@chromium.org</owner>
  <summary>Tracks whether audio or video or both are remoted.</summary>
</histogram>

<histogram name="Media.Remoting.TransmissionCapacity" units="kbps">
  <obsolete>
    Deprecated 11/2017 in issue 788940.
  </obsolete>
  <owner>miu@chromium.org</owner>
  <summary>
    The estimated transmission capacity when starting a remoting session.
  </summary>
</histogram>

<histogram name="Media.Remoting.VideoAspectRatio" units="%">
  <owner>miu@chromium.org</owner>
  <summary>Aspect ratio of video while remoting content.</summary>
</histogram>

<histogram name="Media.Remoting.VideoBitrate" units="kbps">
  <owner>miu@chromium.org</owner>
  <summary>
    Measured video content transfer bitrate while remoting content.
  </summary>
</histogram>

<histogram name="Media.Remoting.VideoCodec" enum="VideoCodec">
  <owner>miu@chromium.org</owner>
  <summary>Video codec used while remoting content.</summary>
</histogram>

<histogram name="Media.Remoting.VideoCodecProfile" enum="VideoCodecProfile">
  <owner>miu@chromium.org</owner>
  <summary>Video codec profile used while remoting content.</summary>
</histogram>

<histogram name="Media.Remoting.VideoNaturalWidth" units="pixels">
  <owner>miu@chromium.org</owner>
  <summary>Video width while remoting content.</summary>
</histogram>

<histogram name="Media.RTCVideoDecoderError" enum="VideoDecodeAcceleratorError">
  <owner>posciak@chromium.org</owner>
  <summary>Counts of video decode errors reported to RTCVideoDecoder.</summary>
</histogram>

<histogram name="Media.RTCVideoDecoderInitDecodeStatus" enum="BooleanSuccess">
  <obsolete>
    Renamed to Media.RTCVideoDecoderInitDecodeSuccess.
  </obsolete>
  <owner>posciak@chromium.org</owner>
  <summary>Results of attempts to RTCVideoDecoder::InitDecode().</summary>
</histogram>

<histogram name="Media.RTCVideoDecoderInitDecodeSuccess" enum="BooleanSuccess">
  <owner>posciak@chromium.org</owner>
  <summary>
    Indicates whether we were successful in initializing hardware video decoder
    for use in the RTC pipeline.
  </summary>
</histogram>

<histogram name="Media.RTCVideoEncoderInitEncodeSuccess" enum="BooleanSuccess">
  <owner>posciak@chromium.org</owner>
  <summary>
    Indicates whether we were successful in initializing hardware video encoder
    for use in the RTC pipeline.
  </summary>
</histogram>

<histogram name="Media.RTCVideoEncoderProfile" enum="VideoCodecProfile">
  <owner>posciak@chromium.org</owner>
  <summary>Video codec profile used in RTC video encoder.</summary>
</histogram>

<histogram name="Media.RTCVideoEncoderTimestampMatchSuccess"
    enum="BooleanSuccess">
  <owner>emircan@chromium.org</owner>
  <summary>
    Indicates whether we were successful in preserving timestamps in hardware
    video encoder session. It is tracked during the session and logged after it
    ends.
  </summary>
</histogram>

<histogram name="Media.Session.ActiveTime" units="ms">
  <owner>avayvod@chromium.org</owner>
  <owner>mlamouri@chromium.org</owner>
  <summary>
    Time during which a media session has been active, in other words, the time
    between an activation and deactivation, without counting time while it was
    suspended. If a session is activated after being deactivated, there will be
    two entries. For example, if a user plays a song but is interrupted by a
    phone call, it will only account for the song playing time.
  </summary>
</histogram>

<histogram name="Media.Session.Pause" enum="MediaSessionActionSource">
  <owner>avayvod@chromium.org</owner>
  <owner>mlamouri@chromium.org</owner>
  <summary>
    The number of times the user paused playback of a media session using other
    means than the pause button on the page.
  </summary>
</histogram>

<histogram name="Media.Session.Play" enum="MediaSessionActionSource">
  <owner>avayvod@chromium.org</owner>
  <owner>mlamouri@chromium.org</owner>
  <summary>
    The number of times the user started playback of a media session using other
    means than the play button on the page.
  </summary>
</histogram>

<histogram name="Media.Session.RequestAudioFocusResult" enum="BooleanSuccess">
  <owner>avayvod@chromium.org</owner>
  <owner>mlamouri@chromium.org</owner>
  <summary>
    Indicate whether the native requestAudioFocus() call was successful.
  </summary>
</histogram>

<histogram name="Media.Session.Stop" enum="MediaSessionActionSource">
  <owner>avayvod@chromium.org</owner>
  <owner>mlamouri@chromium.org</owner>
  <summary>
    The number of times the user stopped a media session using other means than
    the pause button on the page.
  </summary>
</histogram>

<histogram name="Media.Session.Suspended" enum="MediaSessionSuspendedSource">
  <owner>avayvod@chromium.org</owner>
  <owner>mlamouri@chromium.org</owner>
  <summary>
    The number of times a media session is suspended and why it has been
    suspended.
  </summary>
</histogram>

<histogram name="Media.Session.UserAction" enum="MediaSessionUserAction">
  <owner>media-dev@chromium.org</owner>
  <owner>zqzhang@chromium.org</owner>
  <summary>
    The number of times user interacts with MediaSession sorted by action type.
  </summary>
</histogram>

<histogram name="Media.SRC.PreloadAutoHasPoster" enum="Boolean">
  <owner>media-dev@chromium.org</owner>
  <summary>
    Whether a SRC= playback had a poster set at load() when the effective
    preload type is &quot;auto&quot;. Note that this includes audio playbacks,
    since we do not have track metadata at load(); audio elements never have
    posters.
  </summary>
</histogram>

<histogram name="Media.SRC.PreloadMetaDataHasPoster" enum="Boolean">
  <owner>media-dev@chromium.org</owner>
  <summary>
    Whether a SRC= playback had a poster set at load() when the effective
    preload type is &quot;metadata&quot;. Note that this includes audio
    playbacks, since we do not have track metadata at load(); audio elements
    never have posters.
  </summary>
</histogram>

<histogram name="Media.SRC.VideoCodec.MP4" enum="VideoCodec">
  <owner>media-dev@chromium.org</owner>
  <summary>
    Video codec used in plain src= (not MSE) HTML5 media if the media container
    is MP4.
  </summary>
</histogram>

<histogram name="Media.SRC.VideoCodec.WebM" enum="VideoCodec">
  <owner>media-dev@chromium.org</owner>
  <summary>
    Video codec used in plain src= (not MSE) HTML5 media if the media container
    is WebM.
  </summary>
</histogram>

<histogram base="true" name="Media.Timeline.DragGestureDuration" units="ms">
<!-- Name completed by histogram_suffixes name="MediaTimelineWidths" -->

  <owner>johnme@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    The duration of the user gesture (how long their finger is down), recorded
    at the end of each drag gesture. This histogram is split according to the
    width of the slider track in CSS px - see histogram name suffix.
  </summary>
</histogram>

<histogram base="true" name="Media.Timeline.DragPercent"
    enum="MediaTimelinePercent">
<!-- Name completed by histogram_suffixes name="MediaTimelineWidths" -->

  <owner>johnme@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    The net distance the media scrubber moved, recorded at the end of each drag
    gesture, as a percentage of the width of the slider track. This histogram is
    split according to the width of the slider track in CSS px - see histogram
    name suffix.
  </summary>
</histogram>

<histogram base="true" name="Media.Timeline.DragSumAbsTimeDelta"
    enum="MediaTimelineAbsTimeDelta">
<!-- Name completed by histogram_suffixes name="MediaTimelineWidths" -->

  <owner>johnme@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    The sum of absolute distances the media scrubber incrementally moved,
    recorded at the end of each drag gesture, each measured as the change in
    media current time. If the scrubber was dragged back and forth before being
    released, this will be larger than the value recorded for
    Media.Timeline.DragTimeDelta (and may even be larger than the media
    duration), otherwise it will be the same as DragTimeDelta. This histogram is
    split according to the width of the slider track in CSS px - see histogram
    name suffix.
  </summary>
</histogram>

<histogram base="true" name="Media.Timeline.DragTimeDelta"
    enum="MediaTimelineTimeDelta">
<!-- Name completed by histogram_suffixes name="MediaTimelineWidths" -->

  <owner>johnme@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    The net distance the media scrubber moved, recorded at the end of each drag
    gesture, measured as the change in media current time. This histogram is
    split according to the width of the slider track in CSS px - see histogram
    name suffix.
  </summary>
</histogram>

<histogram base="true" name="Media.Timeline.SeekType"
    enum="MediaTimelineSeekType">
<!-- Name completed by histogram_suffixes name="MediaTimelineWidths" -->

  <owner>johnme@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    The type of user gesture, recorded at the end of each input sequence. For
    example holding down the right arrow key with the scrubber focused will only
    be logged as a single event. This histogram is split according to the width
    of the slider track in CSS px - see histogram name suffix.
  </summary>
</histogram>

<histogram name="Media.Timeline.Width" units="CSS px">
<!-- Name completed by histogram_suffixes name="MediaElementConfigurations" -->

  <owner>johnme@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    The width of the media timeline track in CSS pixels, recorded the first time
    a media element with controls starts playing (strictly speaking, it's the
    width in CSS pixels ignoring CSS transforms, multiplied by pageZoomFactor,
    but deliberately ignoring pinch zoom's pageScaleFactor).
  </summary>
</histogram>

<histogram base="true" name="Media.TimeToFirstFrame" units="ms">
  <owner>dalecurtis@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Time in milliseconds from when WebMediaPlayerImpl starts loading until the
    first video frame has been shown.
  </summary>
</histogram>

<histogram base="true" name="Media.TimeToMetadata" units="ms">
  <owner>dalecurtis@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Time in milliseconds from when WebMediaPlayerImpl starts loading until
    metadata is known.
  </summary>
</histogram>

<histogram name="Media.TimeToPipelineStarted" units="ms">
  <obsolete>
    Removed from code 2014/6/18.
  </obsolete>
  <owner>scherkus@chromium.org</owner>
  <summary>
    Time in milliseconds from HTML5 media pipeline creation to playing event.
  </summary>
</histogram>

<histogram base="true" name="Media.TimeToPlayReady" units="ms">
  <owner>dalecurtis@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Time in milliseconds from when WebMediaPlayer starts loading until it has
    buffered enough to start playback.
  </summary>
</histogram>

<histogram name="Media.TotalMBytes" units="MB">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <owner>scherkus@chromium.org</owner>
  <summary>Size of HTML5 media (when known), in MB.</summary>
</histogram>

<histogram name="Media.UncacheableReason" enum="UncacheableReason">
  <owner>scherkus@chromium.org</owner>
  <summary>
    Reasons a media response won't be used to satisfy a future request.
  </summary>
</histogram>

<histogram name="Media.UnderflowCount">
  <obsolete>
    Removed Feb 2017. Media.UnderflowDuration provides more useful counts.
  </obsolete>
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    The number of times a src= playback has underflowed; i.e. ran out of data.
  </summary>
</histogram>

<histogram name="Media.UnderflowDuration" units="ms">
  <obsolete>
    Removed Aug 2017. Media.UnderflowDuration2.SRC removes zero-weighting so
    that we only report actual underflows.
  </obsolete>
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    The amount of time taken to leave the underflow state (i.e. resume playback)
    for src= playbacks.
  </summary>
</histogram>

<histogram name="Media.UnderflowDuration.EME" units="ms">
  <obsolete>
    Removed Aug 2017. Media.UnderflowDuration2.EME removes zero-weighting so
    that we only report actual underflows.
  </obsolete>
  <owner>media-dev@chromium.org</owner>
  <summary>
    The amount of time taken to leave the underflow state (i.e. resume playback)
    for Encrypted Media Extensions (EME) based playbacks.
  </summary>
</histogram>

<histogram name="Media.UnderflowDuration.MSE" units="ms">
  <obsolete>
    Removed Aug 2017. Media.UnderflowDuration2.MSE removes zero-weighting so
    that we only report actual underflows.
  </obsolete>
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    The amount of time taken to leave the underflow state (i.e. resume playback)
    for Media Source Extensions (MSE) based playbacks.
  </summary>
</histogram>

<histogram base="true" name="Media.UnderflowDuration2" units="ms">
<!-- Name completed by histogram_suffixes name="WebMediaPlayerImplTypes" -->

  <owner>dalecurtis@chromium.org</owner>
  <summary>
    The amount of time taken to leave the underflow state (i.e. resume playback)
    for playbacks. This doesn't report initial zero samples, which was
    previously used to compensate for playbacks that don't rebuffer.
  </summary>
</histogram>

<histogram name="Media.URLScheme" enum="URLSchemeForHistogram">
  <owner>scherkus@chromium.org</owner>
  <summary>
    URL scheme used with HTML5 media. (each URL provides one sample)
  </summary>
</histogram>

<histogram name="Media.VaapiWrapper.VADisplayStateInitializeSuccess"
    enum="BooleanSuccess">
  <owner>acourbot@chromium.org</owner>
  <owner>mcasas@chromium.org</owner>
  <summary>
    Whether the call to VaapiWrapper's VADisplayState::Initialize() succeeded or
    not.
  </summary>
</histogram>

<histogram name="Media.VAJDA.DecoderFailure" enum="VAJDADecoderFailure">
  <owner>kcwu@chromium.org</owner>
  <summary>
    Error codes reported by jpeg decode using VA-API hardware jpeg decoder.
  </summary>
</histogram>

<histogram name="Media.VAJEA.EncoderResult" enum="VAJEAEncoderResult">
  <owner>shenghao@chromium.org</owner>
  <summary>
    Result codes reported by jpeg encode using VA-API hardware jpeg encoder.
  </summary>
</histogram>

<histogram name="Media.VAVDA.DecoderFailure" enum="VAVDADecoderFailure">
  <owner>posciak@chromium.org</owner>
  <summary>
    Error codes reported by video decode using VA-API hardware video decoder.
  </summary>
</histogram>

<histogram name="Media.VAVDA.VaapiWrapperCreationSuccess" enum="BooleanSuccess">
  <owner>acourbot@chromium.org</owner>
  <owner>mcasas@chromium.org</owner>
  <summary>
    Whether the creation of VaapiWrapper succeeded or not inside VaVDA.
  </summary>
</histogram>

<histogram name="Media.VAVDAH264.DecoderFailure" enum="VAVDAH264DecoderFailure">
  <obsolete>
    Deprecated as of 4/2015, partially replaced by Media.VAVDA.DecoderFailure.
  </obsolete>
  <owner>posciak@chromium.org</owner>
  <summary>
    Error codes reported by video decode using VA-API hardware video decoder.
  </summary>
</histogram>

<histogram name="Media.VAVEA.EncoderFailure" enum="VAVEAEncoderFailure">
  <owner>posciak@chromium.org</owner>
  <summary>
    Error codes reported by video encode using VA-API hardware video encoder.
  </summary>
</histogram>

<histogram name="Media.Video.Autoplay" enum="AutoplaySource">
  <owner>avayvod@chromium.org</owner>
  <owner>mlamouri@chromium.org</owner>
  <owner>zqzhang@chromium.org</owner>
  <summary>
    Records the autoplay source of videos. This includes
    Media.Video.Autoplay.Muted.
  </summary>
</histogram>

<histogram name="Media.Video.Autoplay.Attribute.WaitTime" units="ms">
  <owner>hubbe@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Records time from load starts until video starts based on autoplay
    attribute.
  </summary>
</histogram>

<histogram name="Media.Video.Autoplay.Muted" enum="AutoplaySource">
  <owner>avayvod@chromium.org</owner>
  <owner>mlamouri@chromium.org</owner>
  <owner>zqzhang@chromium.org</owner>
  <summary>Records the autoplay source of muted videos.</summary>
</histogram>

<histogram name="Media.Video.Autoplay.Muted.Attribute.OffscreenDuration"
    units="ms">
  <obsolete>
    Deprecated as autoplay muted video by attributed is paused when going
    offscreen since https://crbug.com/683141.
  </obsolete>
  <owner>avayvod@chromium.org</owner>
  <owner>mlamouri@chromium.org</owner>
  <owner>zqzhang@chromium.org</owner>
  <summary>
    Records the offscreen playing duration of a muted video autoplaying from
    autoplay attribute.
  </summary>
</histogram>

<histogram name="Media.Video.Autoplay.Muted.Blocked"
    enum="AutoplayBlockedReason">
  <owner>avayvod@chromium.org</owner>
  <owner>mlamouri@chromium.org</owner>
  <owner>zqzhang@chromium.org</owner>
  <summary>
    Records the reason why autoplay of muted videos was blocked.
  </summary>
</histogram>

<histogram name="Media.Video.Autoplay.Muted.PlayMethod.BecomesVisible"
    enum="Boolean">
  <owner>avayvod@chromium.org</owner>
  <owner>mlamouri@chromium.org</owner>
  <owner>zqzhang@chromium.org</owner>
  <summary>
    Records muted video started playing with play() become visible at some
    point. The UMA for false is not complete since it is recorded in a
    destructor which is garbage-collected. Please subtract
    Media.Video.Autoplay.Muted &quot;play() method&quot; count with the true
    count of this histogram to obtain the real false count.
  </summary>
</histogram>

<histogram name="Media.Video.Autoplay.Muted.PlayMethod.OffscreenDuration"
    units="ms">
  <owner>avayvod@chromium.org</owner>
  <owner>mlamouri@chromium.org</owner>
  <owner>zqzhang@chromium.org</owner>
  <summary>
    Records the offscreen playing duration of a muted video autoplaying from
    play() method.
  </summary>
</histogram>

<histogram name="Media.Video.Autoplay.Muted.UnmuteAction" enum="BooleanSuccess">
  <owner>avayvod@chromium.org</owner>
  <owner>mlamouri@chromium.org</owner>
  <owner>zqzhang@chromium.org</owner>
  <summary>
    Status of the unmute action on a video that autoplayed because it was muted.
  </summary>
</histogram>

<histogram name="Media.Video.Autoplay.PlayMethod.WaitTime" units="ms">
  <owner>hubbe@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Records time from load starts until video starts based on play method.
  </summary>
</histogram>

<histogram name="Media.Video.FullscreenOrientationLock.AutoRotateEnabled"
    enum="BooleanEnabled">
  <owner>johnme@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Whether auto rotation of screen orientation is enabled by the user (if so
    the user has not locked the screen orientation at the OS level, though the
    orientation may still be locked by apps). Recorded each time
    MediaControlsOrientationLockDelegate locks the screen orientation in
    response to a video going fullscreen (or loading metadata whilst
    fullscreen).
  </summary>
</histogram>

<histogram name="Media.Video.FullscreenOrientationLock.LockResult"
    enum="VideoFullscreenOrientationLockResult">
  <owner>mlamouri@chromium.org</owner>
  <summary>
    Result of the orientation lock attempt when a video enters fullscreen.
  </summary>
</histogram>

<histogram name="Media.Video.FullscreenOrientationLock.MetadataAvailability"
    enum="VideoFullscreenOrientationLockMetadataAvailability">
  <owner>mlamouri@chromium.org</owner>
  <summary>
    Status of the metadata when attempting to lock the screen orientation for a
    fullscreen video.
  </summary>
</histogram>

<histogram name="Media.Video.KeyFrameDistance" units="ms">
  <owner>avayvod@chromium.org</owner>
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Records the time distance between consequent keyframes in a video. The new
    value is recorded for each video key frame decoded.
  </summary>
</histogram>

<histogram name="Media.Video.TimeFromForegroundToFirstFrame" units="ms">
  <obsolete>
    Deprecated as of 01/18/2017 in issue 670150. Replaced by
    Media.Video.TimeFromForegroundToFirstFrame.DisableTrack and
    Media.Video.TimeFromForegroundToFirstFrame.Paused.
  </obsolete>
  <owner>avayvod@chromium.org</owner>
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Records the time between the moment when the video element is brought to the
    foreground and when the video frame compositor outputs the next frame.
  </summary>
</histogram>

<histogram name="Media.Video.TimeFromForegroundToFirstFrame.DisableTrack"
    units="ms">
  <owner>avayvod@chromium.org</owner>
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Records the time between the moment when the video element that had video
    track disabled in the background is brought to the foreground and when the
    video frame compositor outputs the next frame. Recorded even if disabling
    video track in the background is turned off to collect data for the control
    group.
  </summary>
</histogram>

<histogram name="Media.Video.TimeFromForegroundToFirstFrame.Paused" units="ms">
  <owner>avayvod@chromium.org</owner>
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Records the time between the moment when the video element that was paused
    in the background is brought to the foreground and when the video frame
    compositor outputs the next frame. Recorded even if disabling pausing video
    in the background is turned off to collect data for the control group.
  </summary>
</histogram>

<histogram name="Media.VideoCapture.AspectRatio" units="%">
  <owner>mcasas@chromium.org</owner>
  <summary>
    Video Capture Device captured aspect ratio, as a rounded integer multiplied
    by 100. The collection is made in the VideoCaptureController upon reception
    of the first frame.
  </summary>
</histogram>

<histogram name="Media.VideoCapture.BlacklistedDevice"
    enum="BlacklistedVideoCaptureDeviceNames">
  <owner>mcasas@chromium.org</owner>
  <summary>
    Counts appearances of Blacklisted Video Capture devices during enumeration.
    This collection happens during first enumeration in the appropriate
    platforms' VideoCaptureDeviceFactory.
  </summary>
</histogram>

<histogram name="Media.VideoCapture.DelayUntilFirstFrame" units="ms">
  <owner>chfremer@chromium.org</owner>
  <summary>
    Time it takes from the moment that a VideoCaptureController is requested to
    start to the moment the first video frame arrives at
    VideoCaptureController::OnFrameReadyInBuffer().
  </summary>
</histogram>

<histogram name="Media.VideoCapture.FrameRate" units="fps">
  <owner>mcasas@chromium.org</owner>
  <summary>
    Video Capture Device frame rate requested by VideoCaptureManager on
    AllocateAndStart(). The collection is made in the VideoCaptureController
    upon reception of the first frame.
  </summary>
</histogram>

<histogram name="Media.VideoCapture.FramesReceived" enum="BooleanReceived">
  <obsolete>
    Deprecated as of 10/2014 in issue 422822. Replaced by
    Media.VideoCaptureManager.Event and the two new values 3 and 4 in the enum
    VideoCaptureEvent.
  </obsolete>
  <owner>grunell@chromium.org</owner>
  <owner>mcasas@chromium.org</owner>
  <summary>
    Whether any frames were received during a video capture session. This metric
    is recorded when a video source is stopped.
  </summary>
</histogram>

<histogram name="Media.VideoCapture.Height" units="pixels">
  <owner>mcasas@chromium.org</owner>
  <summary>
    Video Capture Device captured frame height in pixels. The collection is made
    in the VideoCaptureController upon reception of the first frame.
  </summary>
</histogram>

<histogram name="Media.VideoCapture.MacBook.HardwareVersionWhenNoCamera"
    enum="MacBookVersions">
  <owner>perkj@chromium.org</owner>
  <summary>
    MacBook hardware version used when Chrome cannot enumerate a video device.
    This is used for tracking http://crbug.com/582931.
  </summary>
</histogram>

<histogram name="Media.VideoCapture.MacBook.NumberOfDevices" units="devices">
  <owner>perkj@chromium.org</owner>
  <summary>
    Number of video capture devices detected by Chrome during device
    enumeration. Zero devices indicate a problem since all MacBooks should have
    a built-in camera. This is used for tracking http://crbug.com/582931.
  </summary>
</histogram>

<histogram name="Media.VideoCapture.PixelFormat" enum="CapturePixelFormat">
  <obsolete>
    Deprecated 10/2014 in Issue 660493002.
  </obsolete>
  <owner>mcasas@chromium.org</owner>
  <summary>
    Pixel format provided by a Video Capture Device. The collection is made in
    the VideoCaptureController upon reception of the first frame.
  </summary>
</histogram>

<histogram name="Media.VideoCapture.Width" units="pixels">
  <owner>mcasas@chromium.org</owner>
  <summary>
    Video Capture Device captured frame width in pixels. The collection is made
    in the VideoCaptureController upon reception of the first frame.
  </summary>
</histogram>

<histogram name="Media.VideoCapture.Windows.BackendUsed"
    enum="VideoCaptureWinBackendUsed">
  <owner>chfremer@chromium.org</owner>
  <summary>
    Indicates which video capture backend is used on Windows. A count is
    recorded each time a new VideoCaptureDeviceFactoryWin instance is created.
  </summary>
</histogram>

<histogram base="true" name="Media.VideoCapture.Windows.ImageCaptureOutcome"
    enum="ImageCaptureOutcome">
  <owner>chfremer@chromium.org</owner>
  <summary>
    Counts number of times taking a still image on Windows fails/succeeds.
  </summary>
</histogram>

<histogram
    name="Media.VideoCapture.Windows.NumberOfRetriesNeededForMFGetAvailableDeviceMediaType"
    units="retries">
  <owner>chfremer@chromium.org</owner>
  <summary>
    Counts how many retries are needed for calls to MediaFoundation function
    GetAvailableDeviceMediaType before getting a result different from
    MF_E_INVALIDREQUEST or giving up.
  </summary>
</histogram>

<histogram
    name="Media.VideoCapture.Windows.NumberOfRetriesNeededForMFGetDeviceStreamCategory"
    units="retries">
  <owner>chfremer@chromium.org</owner>
  <summary>
    Counts how many retries are needed for calls to MediaFoundation function
    GetDeviceStreamCategory before getting a result different from
    MF_E_INVALIDREQUEST or giving up.
  </summary>
</histogram>

<histogram
    name="Media.VideoCapture.Windows.NumberOfRetriesNeededForMFGetDeviceStreamCount"
    units="retries">
  <owner>chfremer@chromium.org</owner>
  <summary>
    Counts how many retries are needed for calls to MediaFoundation function
    GetDeviceStreamCount before getting a result different from
    MF_E_INVALIDREQUEST or giving up.
  </summary>
</histogram>

<histogram name="Media.VideoCaptureApi.Mac" enum="CaptureApiMac">
  <owner>mcasas@chromium.org</owner>
  <summary>
    Video Capture and device enumeration/monitoring API used for Mac OS Lion or
    later. Collection is made only once when the flags are parsed and the
    appropriate library selected and/or loaded, successfully or not.
  </summary>
</histogram>

<histogram name="Media.VideoCaptureGpuJpegDecoder.InitDecodeSuccess"
    enum="BooleanSuccess">
  <owner>henryhsu@chromium.org</owner>
  <summary>
    Indicates whether we were successful in initializing hardware jpeg decoder
    for attempts to VideoCaptureGpuJpegDecoder::Initialize().
  </summary>
</histogram>

<histogram name="Media.VideoCaptureManager" units="ms">
  <owner>mcasas@chromium.org</owner>
  <summary>Measures the time taken for VideoCaptureManager::</summary>
</histogram>

<histogram name="Media.VideoCaptureManager.Event" enum="VideoCaptureEvent">
  <owner>grunell@chromium.org</owner>
  <owner>mcasas@chromium.org</owner>
  <summary>
    Counts video capture event, such as start and stop capture. Note that the
    ideal case is 50% start events and 50% normal stop events.
  </summary>
</histogram>

<histogram
    name="Media.VideoCaptureService.DurationFromLastConnectToClosingConnection"
    units="ms">
  <obsolete>
    Deprecated 07/2017 in favor of the more differentiated durations.
  </obsolete>
  <owner>chfremer@chromium.org</owner>
  <summary>
    Measures the duration from the time the Browser connected to the video
    capture service to the time it closed the connection.
  </summary>
</histogram>

<histogram
    name="Media.VideoCaptureService.DurationFromLastConnectToClosingConnectionAfterCapture"
    units="ms">
  <owner>chfremer@chromium.org</owner>
  <summary>
    Measures the duration from the time the Browser connected to the video
    capture service to the time it closed the connection. Entries are only
    logged if the service was used for creating an actual capture session as
    opposed to enumerating devices only.
  </summary>
</histogram>

<histogram
    name="Media.VideoCaptureService.DurationFromLastConnectToClosingConnectionAfterEnumerationOnly"
    units="ms">
  <owner>chfremer@chromium.org</owner>
  <summary>
    Measures the duration from the time the Browser connected to the video
    capture service to the time it closed the connection. Entries are only
    logged if the service was used for enumerating devices only, but not for
    creating an actual capture session.
  </summary>
</histogram>

<histogram
    name="Media.VideoCaptureService.DurationFromLastConnectToConnectionLost"
    units="ms">
  <owner>chfremer@chromium.org</owner>
  <summary>
    Measures the duration from the time the Browser connected to the video
    capture service to the time the connection was lost.
  </summary>
</histogram>

<histogram name="Media.VideoCaptureService.DurationUntilReconnect" units="ms">
  <obsolete>
    Deprecated 07/2017 in favor of the more differentiated durations.
  </obsolete>
  <owner>chfremer@chromium.org</owner>
  <summary>
    Measures the duration from the time the Browser last closed or lost
    connection to the video capture service to the time it reconnects.
  </summary>
</histogram>

<histogram name="Media.VideoCaptureService.DurationUntilReconnectAfterCapture"
    units="ms">
  <owner>chfremer@chromium.org</owner>
  <summary>
    Measures the duration from the time the Browser last closed or lost
    connection to the video capture service to the time it reconnects. This
    duration only gets logged for reconnects after usage of the service for
    capture (as opposed to enumeration-only usage).
  </summary>
</histogram>

<histogram
    name="Media.VideoCaptureService.DurationUntilReconnectAfterEnumerationOnly"
    units="ms">
  <owner>chfremer@chromium.org</owner>
  <summary>
    Measures the duration from the time the Browser last closed or lost
    connection to the video capture service to the time it reconnects. This
    duration only gets logged for reconnects after enumeration-only usage of the
    service.
  </summary>
</histogram>

<histogram name="Media.VideoCaptureService.Event"
    enum="VideoCaptureServiceEvent">
  <owner>chfremer@chromium.org</owner>
  <summary>
    Counts video capture service events, such as startup, shutdown, and
    connection lost.
  </summary>
</histogram>

<histogram name="Media.VideoCodec" enum="VideoCodec">
  <owner>scherkus@chromium.org</owner>
  <summary>Video codec used in HTML5 media.</summary>
</histogram>

<histogram name="Media.VideoCodecProfile" enum="VideoCodecProfile">
  <owner>scherkus@chromium.org</owner>
  <summary>Video codec profile used in HTML5 media.</summary>
</histogram>

<histogram name="Media.VideoCodedAspectRatio" units="%">
  <obsolete>
    Deprecated 11/2016 in issue 2506533002.
  </obsolete>
  <owner>scherkus@chromium.org</owner>
  <summary>Coded aspect ratio of HTML5 video.</summary>
</histogram>

<histogram name="Media.VideoCodedWidth">
  <obsolete>
    Deprecated 11/2016 in issue 2506533002.
  </obsolete>
  <owner>scherkus@chromium.org</owner>
  <summary>Coded width of HTML5 video.</summary>
</histogram>

<histogram name="Media.VideoColorRange" enum="FFmpegColorRanges">
  <owner>scherkus@chromium.org</owner>
  <summary>
    Pixel format color range of HTML5 video. Emitted on video load.
  </summary>
</histogram>

<histogram name="Media.VideoDecoderFallback" enum="BooleanDidFallBack">
  <owner>watk@chromium.org</owner>
  <summary>
    Whether Chrome had to fall back to a secondary video decoder after the
    primary decoder failed reinitialization.
  </summary>
</histogram>

<histogram name="Media.VideoDecodeStatsDB.OpSuccess" enum="BooleanSuccess">
  <owner>chcunningham@chromium.org</owner>
  <summary>
    Indicates whether we were successful performing some database operation. See
    suffix VideoDecodeStatsDBOperations.
  </summary>
</histogram>

<histogram name="Media.VideoFormat" enum="VideoFormat">
  <obsolete>
    Replaced by Media.VideoFramePixelFormat 05/2015.
  </obsolete>
  <owner>mcasas@chromium.org</owner>
  <summary>Pixel format used in HTML5 video. Emitted on video load.</summary>
</histogram>

<histogram name="Media.VideoFrame.ColorSpace" enum="VideoFrameColorSpaceUMA">
  <owner>hubbe@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>Video frame color space. Emitted for each video frame.</summary>
</histogram>

<histogram name="Media.VideoFrameColorSpace" enum="VideoFrameColorSpace">
  <owner>mcasas@chromium.org</owner>
  <owner>watk@chromium.org</owner>
  <summary>
    Color space or range used in HTML5 video. Emitted on video load.
  </summary>
</histogram>

<histogram name="Media.VideoFramePixelFormat" enum="VideoFramePixelFormat">
  <obsolete>
    Replaced by Media.VideoPixelFormatUnion 08/2015.
  </obsolete>
  <owner>mcasas@chromium.org</owner>
  <owner>watk@chromium.org</owner>
  <summary>Pixel format used in HTML5 video. Emitted on video load.</summary>
</histogram>

<histogram base="true" name="Media.VideoHeight.Initial" units="pixels">
  <owner>media-dev@chromium.org</owner>
  <summary>
    The height of the first video frame in an HTML5 video. Reported when the
    first video frame is available.
  </summary>
</histogram>

<histogram name="Media.VideoPersistence.AttemptResult"
    enum="VideoPersistenceAttemptResult">
  <owner>mlamouri@chromium.org</owner>
  <owner>peconn@chromium.org</owner>
  <owner>zqzhang@chromium.org</owner>
  <summary>
    Every time a video persistence session could be triggered, it records the
    result of the attempt.
  </summary>
</histogram>

<histogram name="Media.VideoPersistence.ControlsType"
    enum="VideoPersistenceControlsType">
  <owner>mlamouri@chromium.org</owner>
  <owner>zqzhang@chromium.org</owner>
  <summary>
    Record the type of controls a persisted video is using. This is recorded
    every time a video enters persistence mode
  </summary>
</histogram>

<histogram name="Media.VideoPersistence.Duration" units="ms">
  <owner>mlamouri@chromium.org</owner>
  <owner>peconn@chromium.org</owner>
  <owner>zqzhang@chromium.org</owner>
  <summary>
    Records the length during which a video was in a persistent state. It is
    recorded once per video persistence session.
  </summary>
</histogram>

<histogram name="Media.VideoPersistence.EndReason"
    enum="VideoPersistenceEndReason">
  <owner>mlamouri@chromium.org</owner>
  <owner>peconn@chromium.org</owner>
  <owner>zqzhang@chromium.org</owner>
  <summary>
    Records the reason why a video persistence session has ended.
  </summary>
</histogram>

<histogram name="Media.VideoPixelFormat" enum="VideoPixelFormat">
  <obsolete>
    Replaced by Media.VideoFormat 05/2015.
  </obsolete>
  <owner>scherkus@chromium.org</owner>
  <summary>Pixel format used in HTML5 video. Emitted on video load.</summary>
</histogram>

<histogram name="Media.VideoPixelFormatUnion" enum="VideoPixelFormatUnion">
  <owner>mcasas@chromium.org</owner>
  <owner>emircan@chromium.org</owner>
  <summary>
    Pixel format used in capture and HTML5 video. Emitted on video load.
  </summary>
</histogram>

<histogram name="Media.VideoRenderer.CadenceChanges" units="changes">
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Indicates how many cadence changes have occurred during playback, a zero
    value is emitted at the beginning of playback. Subsequent values are emitted
    during video rendering for each cadence change (up to a maximum of 10).
  </summary>
</histogram>

<histogram name="Media.VideoRenderer.LowDelay" enum="Boolean">
  <owner>xhwang@chromium.org</owner>
  <summary>
    Indicates whether video is rendering in low delay mode. It's recorded when a
    video starts playing.
  </summary>
</histogram>

<histogram name="Media.VideoRotation" enum="VideoRotation">
  <owner>suderman@chromium.org</owner>
  <summary>Metadata rotation in mp4 videos. Emitted during demuxing.</summary>
</histogram>

<histogram name="Media.VideoTrackAdapter.FramesReceived" enum="BooleanReceived">
  <obsolete>
    Replaced by Media.VideoCapture.FramesReceived 09/2014.
  </obsolete>
  <owner>grunell@chromium.org</owner>
  <owner>mcasas@chromium.org</owner>
  <summary>
    If any frames were received during a video capture session. It's recorded
    when a video source is stopped.
  </summary>
</histogram>

<histogram name="Media.VideoVisibleAspectRatio" units="%">
  <owner>scherkus@chromium.org</owner>
  <summary>Visible aspect ratio of HTML5 video.</summary>
</histogram>

<histogram name="Media.VideoVisibleWidth">
  <owner>scherkus@chromium.org</owner>
  <summary>Visible width of HTML5 video.</summary>
</histogram>

<histogram name="Media.VirtualAudioCaptureStartupSuccess"
    enum="AudioCaptureStartupResult">
  <owner>maxmorin@chromium.org</owner>
  <summary>
    Whether capture started successfully after a high-latency input stream
    startup was requested.
  </summary>
</histogram>

<histogram name="Media.Vpx.VideoDecoderBuffersInUseByDecoder">
  <obsolete>
    Deprecated 05/2016.
  </obsolete>
  <owner>dcastagna@chromium.org</owner>
  <summary>Number of frame buffers used by Vpx decoder.</summary>
</histogram>

<histogram name="Media.Vpx.VideoDecoderBuffersInUseByDecoderAndVideoFrame">
  <obsolete>
    Deprecated 05/2016.
  </obsolete>
  <owner>dcastagna@chromium.org</owner>
  <summary>
    Number of frame buffers currently in use by both Vpx decoder and a
    VideoFrame.
  </summary>
</histogram>

<histogram name="Media.VpxVideoDecoder.Vp9DecodeTime" units="ms">
  <owner>dalecurtis@chromium.org</owner>
  <summary>Amount of time taken to decode one VP9 frame.</summary>
</histogram>

<histogram name="Media.VTVDA.HardwareAccelerated"
    enum="BooleanHardwareAccelerated">
  <owner>sandersd@chromium.org</owner>
  <summary>
    Whether a VTDecompressionSession is internally using hardware accelerated
    decoding.
  </summary>
</histogram>

<histogram name="Media.VTVDA.InitializationFailureReason"
    enum="VTVDAInitializationFailureType">
  <owner>sandersd@chromium.org</owner>
  <summary>
    Count of VideoToolbox initialization failure reasons. Successful
    initializations are counted as a special failure type. The sum of successes
    and failures gives a lower bound on the number of attempted initializations.
  </summary>
</histogram>

<histogram name="Media.VTVDA.SessionFailureReason"
    enum="VTVDASessionFailureType">
  <owner>sandersd@chromium.org</owner>
  <summary>
    Count of VTVDA session failure reasons. Successful initializations are
    counted as a special failure type. Since only successfully initialized
    session can fail, failures rates are computed as a simple ratio.
  </summary>
</histogram>

<histogram name="Media.WatchTime" units="ms">
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Watch time is defined as the amount of elapsed media time for audio+video
    media aggregated per player instance. A minimum of 7 seconds of unmuted,
    foreground media must be watched to start watch time monitoring. Watch time
    is checked on a regular basis and reported to UMA upon one of the stop
    events mentioned below or at player destruction if none occur prior.

    Any one of paused, hidden, or muted is sufficient to stop watch time metric
    reports. Each of these has a hysteresis where if the state change is undone
    within some time, the watch time will be counted as uninterrupted.

    Power events (on/off battery power) have a similar hysteresis, but unlike
    the aforementioned properties, will not stop metric collection.

    Each seek event will result in a new watch time metric being started and the
    old metric finalized as accurately as possible.
  </summary>
</histogram>

<histogram name="Media.WebAudioSourceProvider.SinkStatus"
    enum="OutputDeviceStatus">
  <owner>olka@chromium.org</owner>
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Status of audio sink provided to WebMediaPlayer. If not OK, null sink will
    be used for audio output instead.
  </summary>
</histogram>

<histogram base="true" name="Media.WebMediaPlayerImpl.Memory" units="KB">
  <owner>servolk@chromium.org</owner>
  <summary>
    Amount of memory used by the WebMediaPlayerImpl and its components.
  </summary>
</histogram>

<histogram name="Media.WebView.UnsupportedContainer"
    enum="UnsupportedContainers">
  <owner>dalecurtis@chromium.org</owner>
  <summary>
    Media container extensions seen by WebView that are not supported by the
    standard HTML5 playback path. This value is recorded every time a
    WebMediaPlayer is created with one of the unsupported containers.
  </summary>
</histogram>

<histogram name="Media.WindowsCoreAudioInput" enum="BooleanSuccess">
  <obsolete>
    Deprecated 01/2017 as Windows Core Audio is now the only audio input
    implementation on Windows.
  </obsolete>
  <owner>henrika@chromium.org</owner>
  <summary>
    Whether Chrome is using Windows Core Audio for audio input or not. Updated
    on Windows only when a low-latency audio input stream is created.
  </summary>
</histogram>

<histogram name="Media.YouTube.DelayedAndDroppedFramesPer5Sec"
    units="frames/5s">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The average number of delayed and dropped frames for the YouTube
    application.  Reported every 5 seconds.
  </summary>
</histogram>

<histogram name="Media.YouTube.DisplayedFramesPerSecond" units="frames/s">
  <obsolete>
    Deprecated 07/2015 in issue 508534.
  </obsolete>
  <owner>halliwell@chromium.org</owner>
  <summary>
    The average number of displayed frames for the YouTube application. Reported
    every 5 seconds.
  </summary>
</histogram>

<histogram name="Media.YouTube.TimeToBufferAv" units="ms">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time needed to pre-buffer A/V data before the actual playback for the
    YouTube application.
  </summary>
</histogram>

<histogram name="Media.YouTube.TimeToBufferAvAfterAbort" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time needed to buffer A/V data after an abort for the YouTube application.
  </summary>
</histogram>

<histogram name="Media.YouTube.TimeToBufferAvAfterUnderrun" units="ms">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time needed to buffer A/V data after an underrun for the YouTube
    application.
  </summary>
</histogram>

<histogram name="MediaGalleries.ScanCancelTime" units="ms">
  <owner>vandebo@chromium.org</owner>
  <summary>If a media scan was cancelled, the duration (in ms) it ran.</summary>
</histogram>

<histogram name="MediaGalleries.ScanDirectoriesFound">
  <owner>vandebo@chromium.org</owner>
  <summary>
    The number of directories with media files found during a scan.
  </summary>
</histogram>

<histogram name="MediaGalleries.ScanFinishedTime" units="ms">
  <owner>vandebo@chromium.org</owner>
  <summary>
    Duration in milliseconds taken to do a media scan that ran to completion.
  </summary>
</histogram>

<histogram name="MediaGalleries.ScanGalleriesGranted" units="%">
  <owner>vandebo@chromium.org</owner>
  <summary>
    The percentage of galleries accepted (not deselected) from the scan result
    dialog.
  </summary>
</histogram>

<histogram name="MediaGalleries.ScanGalleriesPopulated">
  <owner>vandebo@chromium.org</owner>
  <summary>
    The number of galleries added or updated in preferences after a scan.
  </summary>
</histogram>

<histogram name="MediaGalleries.Usage" enum="MediaGalleriesUsageType">
  <owner>vandebo@chromium.org</owner>
  <summary>Various usage counts for media galleries.</summary>
</histogram>

<histogram name="MediaLauncherActivity.MediaType"
    enum="MediaLauncherActivityMediaType">
  <owner>steimel@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    The type of media that a user is opening via the MediaLauncherActivity.
  </summary>
</histogram>

<histogram base="true" name="MediaRouter.Cast.App.Availability" units="ms">
<!-- Name completed by histogram_suffixes name="MediaRouterSuccess" -->

  <owner>imcheng@chromium.org</owner>
  <summary>
    Round trip time for a Cast app availability request. Can be suffixed with
    Success or Failure.
  </summary>
</histogram>

<histogram name="MediaRouter.Cast.Channel.ConnectResult" enum="BooleanSuccess">
  <owner>mfoltz@chromium.org</owner>
  <summary>
    Whether opening Cast channel succeeds or not. Recorded when all opening
    channel attempts (including retry attempts) finish.
  </summary>
</histogram>

<histogram name="MediaRouter.Cast.Channel.Error"
    enum="MediaRouterCastChannelError">
  <owner>mfoltz@chromium.org</owner>
  <summary>
    Errors encountered on a Cast channel. Recorded when a Cast channel fails to
    open, or when an opened channel fails to respond to keepalive ping request
    and times out.
  </summary>
</histogram>

<histogram name="MediaRouter.Cast.Discovery.CachedSinksAvailableCount"
    units="devices">
  <owner>btolsch@chromium.org</owner>
  <summary>
    The number of Cast devices available from the device cache at the time of a
    new network connection.
  </summary>
</histogram>

<histogram name="MediaRouter.Cast.Discovery.ConnectedDevicesCount"
    units="devices">
  <owner>mfoltz@chromium.org</owner>
  <summary>
    The number of connected Cast devices. Recorded when browser finishes
    discovering Cast devices. Recording happens roughly once per hour.
  </summary>
</histogram>

<histogram name="MediaRouter.Cast.Discovery.KnownDevicesCount" units="devices">
  <owner>mfoltz@chromium.org</owner>
  <summary>
    The number of known Cast devices. Recorded when browser finishes discovering
    Cast devices. Recording happens roughly once per hour.
  </summary>
</histogram>

<histogram name="MediaRouter.Cast.Discovery.SinkSource"
    enum="MediaRouterCastSinkSource">
  <owner>btolsch@chromium.org</owner>
  <summary>The source of discovery for a newly-created Cast sink.</summary>
</histogram>

<histogram name="MediaRouter.Cast.Mdns.Channel.Open_Failure" units="ms">
  <owner>mfoltz@chromium.org</owner>
  <summary>
    Duration in milliseconds taken to fail to open a cast channel. Recorded when
    one opening channel attempt fails.
  </summary>
</histogram>

<histogram name="MediaRouter.Cast.Mdns.Channel.Open_Success" units="ms">
  <owner>mfoltz@chromium.org</owner>
  <summary>
    Duration in milliseconds taken to successfully open a cast channel. Recorded
    when one opening channel attempt succeeds.
  </summary>
</histogram>

<histogram name="MediaRouter.Dial.AvailableDevicesCount" units="devices">
  <owner>mfoltz@chromium.org</owner>
  <summary>
    The number of available DIAL devices. Recorded when browser finishes
    discovering DIAL devices. Recording happens roughly once per hour.
  </summary>
</histogram>

<histogram name="MediaRouter.Dial.KnownDevicesCount" units="devices">
  <owner>mfoltz@chromium.org</owner>
  <summary>
    The number of known DIAL devices. Recorded when browser finishes discovering
    DIAL devices. Recording happens roughly once per hour.
  </summary>
</histogram>

<histogram name="MediaRouter.Dial.ParsingError"
    enum="MediaRouterDialParsingError">
  <owner>mfoltz@chromium.org</owner>
  <summary>
    Error encountered while parsing DIAL device description XML text. Recorded
    when utility process returns an invalid DIAL device description object to
    browser.
  </summary>
</histogram>

<histogram name="MediaRouter.Icon.Click.Location"
    enum="MediaRouterDialogOpenOrigin">
  <owner>takumif@chromium.org</owner>
  <summary>Location the user clicked to open the Media Router dialog.</summary>
</histogram>

<histogram name="MediaRouter.NetworkMonitor.ConnectionType"
    enum="DiscoveryNetworkMonitorConnectionType">
  <owner>btolsch@chromium.org</owner>
  <summary>
    Network connection type reported by DiscoveryNetworkMonitor whenever it
    detects a change in the set of networks connected to the host device which
    may affect local discovery.
  </summary>
</histogram>

<histogram name="MediaRouter.NetworkMonitor.NetworkChangeEventDelta" units="ms">
  <owner>btolsch@chromium.org</owner>
  <summary>
    Time between network change events reported by DiscoveryNetworkMonitor.
  </summary>
</histogram>

<histogram name="MediaRouter.PresentationRequest.AvailabilityUrlType"
    enum="PresentationUrlType">
  <owner>imcheng@chromium.org</owner>
  <summary>
    The type of Presentation URL used in a PresentationRequest by a web page.
  </summary>
</histogram>

<histogram name="MediaRouter.Provider.CreateRoute.Result"
    enum="MediaRouteProviderResult">
  <owner>imcheng@chromium.org</owner>
  <summary>
    Result of a request to the extension (or an unknown) MediaRouteProvider to
    create a route.
  </summary>
</histogram>

<histogram name="MediaRouter.Provider.CreateRoute.Result.WiredDisplay"
    enum="MediaRouteProviderResult">
  <owner>takumif@chromium.org</owner>
  <summary>
    Result of a request to the wired display MediaRouteProvider to create a
    route.
  </summary>
</histogram>

<histogram name="MediaRouter.Provider.JoinRoute.Result"
    enum="MediaRouteProviderResult">
  <owner>imcheng@chromium.org</owner>
  <summary>
    Result of a request to the extension (or an unknown) MediaRouteProvider to
    join a route.
  </summary>
</histogram>

<histogram name="MediaRouter.Provider.JoinRoute.Result.WiredDisplay"
    enum="MediaRouteProviderResult">
  <owner>takumif@chromium.org</owner>
  <summary>
    Result of a request to the wired display MediaRouteProvider to join a route.
  </summary>
</histogram>

<histogram name="MediaRouter.Provider.RouteControllerCreationOutcome"
    enum="BooleanSuccess">
  <owner>takumif@chromium.org</owner>
  <summary>
    Records whether the Media Route Provider succeeded or failed to create a
    controller for a media route.
  </summary>
</histogram>

<histogram name="MediaRouter.Provider.TerminateRoute.Result"
    enum="MediaRouteProviderResult">
  <owner>mfoltz@chromium.org</owner>
  <summary>
    Result of a request to the extension (or an unknown) MediaRouteProvider to
    terminate a route.
  </summary>
</histogram>

<histogram name="MediaRouter.Provider.TerminateRoute.Result.WiredDisplay"
    enum="MediaRouteProviderResult">
  <owner>takumif@chromium.org</owner>
  <summary>
    Result of a request to the wired display MediaRouteProvider to terminate a
    route.
  </summary>
</histogram>

<histogram name="MediaRouter.Provider.Version" enum="MediaRouteProviderVersion">
  <owner>mfoltz@chromium.org</owner>
  <summary>
    Records how the major version of the Media Router component extension
    compares to the major version of the browser.
  </summary>
</histogram>

<histogram name="MediaRouter.Provider.WakeReason"
    enum="MediaRouteProviderWakeReason">
  <owner>mfoltz@chromium.org</owner>
  <summary>
    Reason that the Media Router woke the Media Route Provider event page.
  </summary>
</histogram>

<histogram name="MediaRouter.Provider.Wakeup" enum="MediaRouteProviderWakeup">
  <owner>mfoltz@chromium.org</owner>
  <summary>
    Records the outcome of waking the Media Router component's event page.
  </summary>
</histogram>

<histogram name="MediaRouter.Route.CreationOutcome"
    enum="MediaRouterCreateRouteOutcome">
  <owner>takumif@chromium.org</owner>
  <summary>
    The number of times a Media Router create route response succeeds or fails.
    This breaks down the different failure types in to separate buckets.
  </summary>
</histogram>

<histogram name="MediaRouter.Sink.SearchOutcome" enum="BooleanSuccess">
  <owner>takumif@chromium.org</owner>
  <summary>
    The outcome of querying Media Route Providers for a sink by ID.
    &quot;Success&quot; indicates that a sink was found. This is recorded when
    the user attempts to cast to a sink with a manually entered ID.
  </summary>
</histogram>

<histogram name="MediaRouter.Sink.SelectedType" enum="MediaSinkType">
  <owner>takumif@chromium.org</owner>
  <summary>
    The type of the Media Sink that media is being Cast to. Recorded each time
    the user selects a Media Sink to start Casting.
  </summary>
</histogram>

<histogram name="MediaRouter.Source.CastingSource"
    enum="MediaRouterSourceTypes">
  <owner>takumif@chromium.org</owner>
  <summary>
    The source of a Media Router session. This is recorded to keep track of what
    kind of media is being streamed.
  </summary>
</histogram>

<histogram name="MediaRouter.Source.LocalFileFormat" enum="MediaContainers">
  <owner>takumif@chromium.org</owner>
  <summary>
    The file format of a local media Media Router session. This is recorded when
    a casting session begins to keep track of what kind of media is being
    streamed.
  </summary>
</histogram>

<histogram name="MediaRouter.Source.LocalFileSize" units="MB">
  <owner>takumif@chromium.org</owner>
  <summary>
    The file size of a local media Media Router session. This is recorded when a
    casting session begins to keep track of what kind of media is being
    streamed, specifically, whether it is a clip or a song, or a full length
    film or podcast.
  </summary>
</histogram>

<histogram name="MediaRouter.Ui.Action.CloseLatency" units="ms">
  <owner>takumif@chromium.org</owner>
  <summary>
    Duration in milliseconds taken from the user opening the Media Router dialog
    to the user closing the dialog. This is only recorded if closing the dialog
    is the first action the user takes.
  </summary>
</histogram>

<histogram name="MediaRouter.Ui.Action.StartLocal.Latency" units="ms">
  <owner>takumif@chromium.org</owner>
  <summary>
    Duration in milliseconds taken from the Media Router dialog showing the sink
    list and being populated with at least one device to the user selecting a
    device immediately after to create a new route.
  </summary>
</histogram>

<histogram name="MediaRouter.Ui.Action.StartLocalPosition"
    enum="MediaRouterSinkPositionLabel">
  <owner>takumif@chromium.org</owner>
  <summary>The index of the sink that was selected in the sink list.</summary>
</histogram>

<histogram name="MediaRouter.Ui.Action.StartLocalSessionSuccessful"
    enum="BooleanSuccess">
  <owner>takumif@chromium.org</owner>
  <summary>
    The number of times a session was successfully started versus failed.
  </summary>
</histogram>

<histogram name="MediaRouter.Ui.Action.StopRoute" enum="MediaRouteType">
  <owner>takumif@chromium.org</owner>
  <summary>The number of times a user stops different types of routes.</summary>
</histogram>

<histogram name="MediaRouter.Ui.Device.Count">
  <owner>takumif@chromium.org</owner>
  <summary>
    Counts the number of devices known and populated to the Media Router dialog
    three seconds after the dialog loads. Always expected to be non-negative.
  </summary>
</histogram>

<histogram name="MediaRouter.Ui.Dialog.LoadedWebUiRouteController" units="ms">
  <owner>takumif@chromium.org</owner>
  <summary>
    Duration in milliseconds it takes the WebUI route controls in the route
    details view to be populated after the view is opened.
  </summary>
</histogram>

<histogram name="MediaRouter.Ui.Dialog.LoadedWithData" units="ms">
  <owner>takumif@chromium.org</owner>
  <summary>
    Duration in milliseconds taken from the user click to open the Media Router
    dialog to initializing the dialog with data.
  </summary>
</histogram>

<histogram name="MediaRouter.Ui.Dialog.Paint" units="ms">
  <owner>takumif@chromium.org</owner>
  <summary>
    Duration in milliseconds taken from a user click to open the Media Router
    dialog to the initial paint.
  </summary>
</histogram>

<histogram name="MediaRouter.Ui.FirstAction" enum="MediaRouterUserAction">
  <owner>takumif@chromium.org</owner>
  <summary>
    The first action taken by the user after opening the Media Router dialog.
  </summary>
</histogram>

<histogram name="MediaRouter.Ui.InitialState" enum="MediaRouterInitialViews">
  <owner>takumif@chromium.org</owner>
  <summary>
    The view that was shown when the Media Router dialog is initially opened.
  </summary>
</histogram>

<histogram name="MediaRouter.Ui.Navigate.SourceSelection"
    enum="MediaRouterSourceTypes">
  <owner>takumif@chromium.org</owner>
  <summary>
    The number of times the user selects a specific cast source type.
  </summary>
</histogram>

<histogram name="MediaRouter.WiredDisplay.AvailableDevicesCount">
  <owner>takumif@chromium.org</owner>
  <summary>
    The number of Media Sinks available for Casting a Presentation API URL to
    local screens. Recorded at most once an hour, when the Wired Display Media
    Route Provider reports an update on the sink count.
  </summary>
</histogram>

<histogram name="MemCache.WriteResult" enum="MemCacheWriteResult">
  <owner>jkarlin@chromium.org</owner>
  <summary>The outcome of Entry::WriteData in the memory cache.</summary>
</histogram>

<histogram name="Memory.AudioService.PrivateMemoryFootprint" units="MB">
  <owner>marinaciocea@chromium.org</owner>
  <owner>maxmorin@chromium.org</owner>
  <owner>olka@chromium.org</owner>
  <summary>
    A rough estimate of the private memory footprint of the audio service
    process. Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.AudioService.PrivateSwapFootprint" units="MB">
  <owner>marinaciocea@chromium.org</owner>
  <owner>maxmorin@chromium.org</owner>
  <owner>olka@chromium.org</owner>
  <summary>
    An amount of private memory of the audio service process placed in swap
    (VmSwap). Available only on Android and Linux.
  </summary>
</histogram>

<histogram name="Memory.AudioService.SharedMemoryFootprint" units="MB">
  <owner>marinaciocea@chromium.org</owner>
  <owner>maxmorin@chromium.org</owner>
  <owner>olka@chromium.org</owner>
  <summary>
    A rough estimate of the shared memory footprint of the audio service
    process. Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.BackingStore">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>TBD.</summary>
</histogram>

<histogram name="Memory.Browser" units="KB">
  <obsolete>
    Deprecated 06/2016 Replaced with Memory.Browser.Large2.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The private working set used by the browser process.  Recorded once per UMA
    ping.  Note the existence of Memory.Browser.Large, which doesn't have
    overflow issues. TODO(rkaplow): This should be replaced with
    Memory.Browser.Large2 in M54.
  </summary>
</histogram>

<histogram name="Memory.Browser.Committed" units="MB">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>bashi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The total committed memory used by the browser process.  Recorded once per
    UMA ping.
  </summary>
</histogram>

<histogram name="Memory.Browser.Large" units="MB">
  <obsolete>
    Deprecated 07/2016 as it reports wrong numbers. crbug.com/629354. Replaced
    with Memory.Browser.Large2
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    The private working set used by the browser process.  Recorded once per UMA
    ping.
  </summary>
</histogram>

<histogram name="Memory.Browser.Large2" units="MB">
  <obsolete>
    Deprecated 11/2017 Replaced with Memory.Browser.PrivateMemoryFootprint.
  </obsolete>
  <owner>bashi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The private working set used by the browser process.  Recorded once per UMA
    ping.
  </summary>
</histogram>

<histogram name="Memory.Browser.PrivateMemoryFootprint" units="MB">
  <owner>erikchen@chromium.org</owner>
  <summary>
    A rough estimate of the private memory footprint of the browser process.
    Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.Browser.PrivateSwapFootprint" units="MB">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    An amount of private memory of the browser process placed in swap (VmSwap).
    Available only on Android and Linux.
  </summary>
</histogram>

<histogram name="Memory.Browser.SharedMemoryFootprint" units="MB">
  <owner>erikchen@chromium.org</owner>
  <summary>
    A rough estimate of the shared memory footprint of the browser process.
    Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.CachedFontAndDC">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>TBD.</summary>
</histogram>

<histogram name="Memory.Chrome" units="KB">
  <obsolete>
    Deprecated 11/2017. No direct replacement, but
    Memory.Renderer.PrivateMemoryFootprint is similar.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The private working set used by each chrome:// renderer process.  Each
    process provides one sample.  Recorded once per process per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.ChromeProcessCount" units="processes">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The count of active chrome:// renderer processes.  Recorded once per UMA
    ping.
  </summary>
</histogram>

<histogram name="Memory.CompressibleStringCount"
    enum="CompressibleStringCountType">
  <obsolete>
    Deprecated as of Aug 2016. CompressibleString has been reverted once at
    https://crrev.com/2227933002.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <summary>
    This records the frequency with which JavaScript source strings are
    compressed and decompressed in foreground and background tabs.  Compressing
    runs 10 seconds after the tab goes background and decompressing runs when
    JavaScript source string is required (e.g. V8 starts to compile). This
    measurement is a preparation to introduce CompressibleString class for
    JavaScript source strings to reduce Blink memory usage.
  </summary>
</histogram>

<histogram name="Memory.Coordinator.FreeMemoryUntilCritical" units="MB">
  <owner>bashi@chromium.org</owner>
  <summary>
    Available free memory until the system will be in a critical state. Critical
    is as defined by the OS (swapping will occur, or physical memory will run
    out, etc).
  </summary>
</histogram>

<histogram name="Memory.Coordinator.StateDuration" units="seconds">
  <obsolete>
    Obsolete as of 2/2017
  </obsolete>
  <owner>bashi@chromium.org</owner>
  <summary>Time elapsed between the global state changes.</summary>
</histogram>

<histogram name="Memory.Coordinator.StateOnCriticalNotificationReceived"
    enum="MemoryState">
  <obsolete>
    Obsolete as of 2/2017
  </obsolete>
  <owner>bashi@chromium.org</owner>
  <summary>
    The global state of memory coordinator when a critical pressure notification
    is received.
  </summary>
</histogram>

<histogram name="Memory.Coordinator.StateOnModerateNotificationReceived"
    enum="MemoryState">
  <obsolete>
    Obsolete as of 2/2017
  </obsolete>
  <owner>bashi@chromium.org</owner>
  <summary>
    The global state of memory coordinator when a moderate pressure notification
    is received.
  </summary>
</histogram>

<histogram name="Memory.Coordinator.TotalPrivate" units="MB">
  <obsolete>
    Obsolete as of 2/2017
  </obsolete>
  <owner>bashi@chromium.org</owner>
  <summary>
    The total private working set memory used by the browser and renderer
    processes when the memory coordinator changes the global memory state.
  </summary>
</histogram>

<histogram name="Memory.Coordinator.TrimMemoryLevel.Normal"
    enum="TrimMemoryLevel">
  <obsolete>
    Obsolete as of 2/2017
  </obsolete>
  <owner>bashi@chromium.org</owner>
  <summary>
    Android: Records trim memory level when the global state is NORMAL.
  </summary>
</histogram>

<histogram name="Memory.Coordinator.TrimMemoryLevel.Suspended"
    enum="TrimMemoryLevel">
  <obsolete>
    Obsolete as of 2/2017
  </obsolete>
  <owner>bashi@chromium.org</owner>
  <summary>
    Android: Records trim memory level when the global state is SUSPENDED.
  </summary>
</histogram>

<histogram name="Memory.Coordinator.TrimMemoryLevel.Throttled"
    enum="TrimMemoryLevel">
  <obsolete>
    Obsolete as of 2/2017
  </obsolete>
  <owner>bashi@chromium.org</owner>
  <summary>
    Android: Records trim memory level when the global state is THROTTLED.
  </summary>
</histogram>

<histogram name="Memory.DiscardableAllocationSize" units="KB">
  <owner>reveman@chromium.org</owner>
  <summary>
    The discardable memory allocation size in KB. Recorded each time a new
    discardable memory instance is created.
  </summary>
</histogram>

<histogram name="Memory.Experimental.Browser.EGLShaderCacheSize.Android"
    units="KB">
  <owner>ericrk@chromium.org</owner>
  <summary>
    The size of the EGL_ANDROID_blob_cache cache file on disk. Recorded once per
    Chrome launch, after the first page has loaded.
  </summary>
</histogram>

<histogram name="Memory.Experimental.Browser.PrivateMemoryFootprint.MacOS"
    units="MB">
  <obsolete>
    Deprecated 12/2017. Replaced by Memory.Browser.PrivateMemoryFootprint.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    A rough estimate of the private memory footprint of the browser process.
  </summary>
</histogram>

<histogram name="Memory.Experimental.Browser.PurgedMemory" units="MB">
  <obsolete>
    Deprecated 03/2018.
  </obsolete>
  <owner>bashi@chromium.org</owner>
  <summary>
    Amount of reclaimed memory (in terms of the private working set size) after
    a purge request on the browser process. Recorded 2 seconds after the purge
    request.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Browser2" units="MB">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocator2" -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    The browser process's memory usage reported by the memory instrumentation
    service in MB.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Browser2.Small" units="KB">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorSmall2" -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    The browser process's memory usage reported by the memory instrumentation
    service in KB.
  </summary>
</histogram>

<histogram name="Memory.Experimental.CompressedPagesPerSecond" units="pages/s">
  <owner>bashi@chromium.org</owner>
  <summary>
    The number of pages compressed per second. Recorded every 60 seconds. Only
    recorded on macOS.
  </summary>
</histogram>

<histogram name="Memory.Experimental.Debug.FailedProcessDumpsPerGlobalDump"
    units="failures">
  <owner>hjd@chromium.org</owner>
  <owner>primiano@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <summary>
    Records how many failed process dumps there were for a given global dump
    completed by the memory instrumentation service
    (resource_coordinator/memory_instrumentation/coordinator_impl.h). This is
    recorded once each time a global dump request is completed.
  </summary>
</histogram>

<histogram name="Memory.Experimental.Debug.GlobalDumpDuration" units="ms">
  <owner>hjd@chromium.org</owner>
  <owner>primiano@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <summary>
    Records how long it took the memory instrumentation service
    (resource_coordinator/memory_instrumentation/coordinator_impl.h) from
    starting working on a global memory dump request until complating that
    request. This does not include queuing time (requests are handled serially).
    This is recorded once each time a request is completed.
  </summary>
</histogram>

<histogram name="Memory.Experimental.Debug.GlobalDumpQueueLength"
    units="requests">
  <owner>hjd@chromium.org</owner>
  <owner>primiano@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <summary>
    Number of global memory dump requests queued in by the memory
    instrumentation service
    (resource_coordinator/memory_instrumentation/coordinator_impl.h). This
    includes the request currently being worked on if any. This is recorded once
    each time a new request is queued. This happens at least once per UMA ping
    to in order to compute Memory.Experimental.Renderer2,
    Memory.Experimental.Browser2 etc.
  </summary>
</histogram>

<histogram name="Memory.Experimental.DecompressedPagesPerSecond"
    units="pages/s">
  <owner>bashi@chromium.org</owner>
  <summary>
    The number of pages decompressed per second. Recorded every 60 seconds. Only
    recorded on macOS.
  </summary>
</histogram>

<histogram name="Memory.Experimental.Extension.PrivateMemoryFootprint.MacOS"
    units="MB">
  <obsolete>
    Deprecated 12/2017. Replaced by Memory.Extension.PrivateMemoryFootprint.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    A rough estimate of the private memory footprint of an extension process.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Extension2" units="MB">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocator2" -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    The extension process's memory usage reported by the memory instrumentation
    service in MB.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Extension2.Small" units="KB">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorSmall2" -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    The extension process's memory usage reported by the memory instrumentation
    service in KB.
  </summary>
</histogram>

<histogram name="Memory.Experimental.Gpu.PhysicalFootprint.MacOS" units="MB">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The physical footprint of the GPU process on macOS. Other measurements fail
    to correctly account for OpenGL memory usage.  This metric also has flaws
    and is not intended for permanent use.  It's an emergency measure added to
    help debug https://crbug.com/713854.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.Experimental.Gpu.PrivateMemoryFootprint.MacOS"
    units="MB">
  <obsolete>
    Deprecated 12/2017. Replaced by Memory.Gpu.PrivateMemoryFootprint.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    A rough estimate of the private memory footprint of the GPU process.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Gpu2" units="MB">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocator2" -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    The gpu process's memory usage reported by the memory instrumentation
    service in MB.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Gpu2.Small" units="KB">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorSmall2" -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    The gpu process's memory usage reported by the memory instrumentation
    service in KB.
  </summary>
</histogram>

<histogram name="Memory.Experimental.OomIntervention.BrowserMonitorStatus"
    enum="OomInterventionBrowserMonitorStatus" expires_after="M70">
  <owner>ssid@chromium.org</owner>
  <summary>
    Records the status of OOM intervention if the feature is turned on, with
    various reasons for failure, in the browser process. Recorded once at
    browser startup.
  </summary>
</histogram>

<histogram name="Memory.Experimental.OomIntervention.InterventionStateOnCrash"
    enum="OomInterventionUserDecision">
  <owner>bashi@chromium.org</owner>
  <summary>
    Records state of the intervention (accepted or declined) when the foreground
    renderer is crashed after near-OOM intervention is triggered.
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.OomIntervention.NavigationAfterDetectionTime"
    units="ms">
  <owner>bashi@chromium.org</owner>
  <summary>
    Records the time elapsed between a near-OOM detection and when a navigation
    is started.
  </summary>
</histogram>

<histogram name="Memory.Experimental.OomIntervention.NearOomDetectionEndReason"
    enum="NearOomDetectionEndReason">
  <owner>bashi@chromium.org</owner>
  <summary>
    Records the reason for stopping near-OOM detection. This isn't recorded when
    a near-OOM situation was detected.
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.OomIntervention.OomProtectedCrashAfterDetectionTime"
    units="ms">
  <owner>bashi@chromium.org</owner>
  <summary>
    Records the time elapsed between a near-OOM detection and when an OOM
    protected renderer was crashed.
  </summary>
</histogram>

<histogram name="Memory.Experimental.OomIntervention.RendererBlinkUsageAtOOM"
    units="MB">
  <owner>ssid@chromium.org</owner>
  <summary>
    The renderer process' Blink memory usage, as sum of V8, PartitionAlloc and
    BlinkGC allocations, when a foreground OOM occurs. This was last recorded
    metric by renderer a few seconds before getting killed.
  </summary>
</histogram>

<histogram name="Memory.Experimental.OomIntervention.RendererEnabledStatus"
    enum="OomInterventionRendererStatus" expires_after="M70">
  <owner>ssid@chromium.org</owner>
  <summary>
    Records the status of OOM intervention in renderer process if the feature is
    turned on, with various reasons for failure. Recorded at each navigation or
    reload.
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.OomIntervention.RendererGoneAfterDetectionTime"
    units="ms">
  <owner>bashi@chromium.org</owner>
  <summary>
    Records the time elapsed between a near-OOM detection and when a foreground
    renderer process was gone. This histogram does not contain OOM protected
    crashes.
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.OomIntervention.RendererPrivateMemoryFootprintAtOOM"
    units="MB">
  <owner>ssid@chromium.org</owner>
  <owner>bashi@chromium.org</owner>
  <summary>
    The renderer process' private memory footprint when a foreground OOM occurs.
    This was last recorded metric by renderer a few seconds before getting
    killed.
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.OomIntervention.RendererSwapFootprintAtOOM"
    units="MB">
  <owner>ssid@chromium.org</owner>
  <owner>bashi@chromium.org</owner>
  <summary>
    The renderer process' swap size when a foreground OOM occurs. This was last
    recorded metric by renderer a few seconds before getting killed.
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.OomIntervention.RendererTimeSinceLastNavigationAtOOM"
    units="seconds">
  <owner>ssid@chromium.org,haraken@chromium.org</owner>
  <summary>
    Records the time since last main frame navigation start on the renderer
    process when it OOMs in foreground visible state. Record 0 if no navigation
    was started.
  </summary>
</histogram>

<histogram name="Memory.Experimental.OomIntervention.RendererVmSizeAtOOM"
    units="MB" expires_after="2018-06-12">
  <obsolete>
    Replaced by Memory.Experimental.OomIntervention.RendererVmSizeAtOOMLarge.
  </obsolete>
  <owner>ssid@chromium.org</owner>
  <summary>
    The renderer process' virtual memory usage, when a foreground OOM occurs.
    This was last recorded metric by renderer a few seconds before getting
    killed.
  </summary>
</histogram>

<histogram name="Memory.Experimental.OomIntervention.RendererVmSizeAtOOMLarge"
    units="MB">
  <owner>ssid@chromium.org</owner>
  <owner>bashi@chromium.org</owner>
  <summary>
    The renderer process' virtual memory usage, when a foreground OOM occurs.
    This was last recorded metric by renderer a few seconds before getting
    killed.
  </summary>
</histogram>

<histogram name="Memory.Experimental.OomIntervention.UserDecision"
    enum="OomInterventionUserDecision">
  <owner>bashi@chromium.org</owner>
  <summary>Records user decisions on near-OOM intervention.</summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Renderer" units="MB">
<!-- Name completed by histogram_suffixes name="RendererMemoryAllocator" -->

  <owner>keishi@chromium.org</owner>
  <summary>
    The renderer process's memory usage at the specific timing, i.e. after a
    page load and 5/10/15minutes after backgrounded.
  </summary>
</histogram>

<histogram name="Memory.Experimental.Renderer.LoadsInMainFrameDuringUptime"
    units="loads">
  <owner>keishi@chromium.org</owner>
  <summary>
    The number of loads in a main frame during the lifetime of a render process
    (excludes extensions). Emitted when the processes quits.
  </summary>
</histogram>

<histogram name="Memory.Experimental.Renderer.PrivateMemoryFootprint.MacOS"
    units="MB">
  <obsolete>
    Deprecated 12/2017. Replaced by Memory.Renderer.PrivateMemoryFootprint.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    A rough estimate of the private memory footprint of a renderer process.
  </summary>
</histogram>

<histogram name="Memory.Experimental.Renderer.PurgedMemory" units="MB">
  <owner>bashi@chromium.org</owner>
  <summary>
    Amount of reclaimed memory (in terms of
    Memory.Experimental.Renderer.TotalAllocated) after a purge request on a
    renderer process. Recorded 2 seconds after the purge request.
  </summary>
</histogram>

<histogram name="Memory.Experimental.Renderer.Uptime" units="ms">
  <owner>keishi@chromium.org</owner>
  <summary>
    The uptime of a render process in time ticks (excludes extensions). Emitted
    when the processes quits.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Renderer2" units="MB">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocator2" -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    The renderer process's memory usage reported by the memory instrumentation
    service in MB.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Renderer2.Small" units="KB">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorSmall2" -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    The renderer process's memory usage reported by the memory instrumentation
    service in KB.
  </summary>
</histogram>

<histogram name="Memory.Experimental.SwapInPerSecond" units="swaps/s">
  <owner>bashi@chromium.org</owner>
  <summary>
    The number of swap-ins per second. Recorded every 60 seconds.
  </summary>
</histogram>

<histogram name="Memory.Experimental.SwapOutPerSecond" units="swaps/s">
  <owner>bashi@chromium.org</owner>
  <summary>
    The number of swap-outs per second. Recorded every 60 seconds.
  </summary>
</histogram>

<histogram name="Memory.Experimental.SwapThrashingLevel"
    enum="SwapThrashingLevel">
  <owner>sebmarchand@chromium.org</owner>
  <summary>
    The swap thrashing level, which is recorded periodically. This shows the
    cumulative number of seconds that systems spend in each of the swap
    thrashing states. Only available on Windows.
  </summary>
</histogram>

<histogram name="Memory.Experimental.SwapThrashingLevelChanges"
    enum="SwapThrashingLevelChanges">
  <owner>sebmarchand@chromium.org</owner>
  <summary>
    The number of swap-thrashing level state changes for each possible pairwise
    state change. Only available on Windows.
  </summary>
</histogram>

<histogram name="Memory.Experimental.Total2.PrivateMemoryFootprint" units="MB">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    A rough estimate of the private memory footprint of all processes.
  </summary>
</histogram>

<histogram name="Memory.Extension" units="KB">
  <obsolete>
    Deprecated 11/2017. Replaced by Memory.Extension.PrivateMemoryFootprint.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The private working set used by each extension process.  Each process
    provides one sample.  Recorded once per process per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.Extension.PrivateMemoryFootprint" units="MB">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    A rough estimate of the private memory footprint of the extension process.
    Recorded once per process per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.Extension.SharedMemoryFootprint" units="MB">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    A rough estimate of the shared memory footprint of the extension process.
    Recorded once per process per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.ExtensionProcessCount" units="processes">
  <owner>creis@chromium.org</owner>
  <owner>nasko@chromium.org</owner>
  <summary>
    The count of active extension processes.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.GlyphPagesPerLoad">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The number of glyph pages present in the renderer when it commits a load.
    Since this is per-sub-process, you can get the average number of glyph pages
    in the system by multiplying this number with the average number of
    renderers. Note that this typically won't count the glyph pages added as a
    result of the load that just committed, since layout will happen after the
    commit. There are 512 bytes per glyph page, but this number also very
    closely approximates the number of glyph width map pages in the same
    renderer. The only difference is that if you have font fallback, it will
    make a new glyph page and no width page, but in most common cases there is
    no fallback). Width pages are 1K each (256 floats), so you could think of
    this value as being the number of &quot;1.5K units related to glyphs per
    renderer per page load&quot;.
  </summary>
</histogram>

<histogram name="Memory.Gpu" units="KB">
  <obsolete>
    Deprecated 11/2017. Replaced by Memory.Gpu.PrivateMemoryFootprint.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>jamescook@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The private working set used by the GPU process.  Recorded once per UMA
    ping.
  </summary>
</histogram>

<histogram name="Memory.Gpu.PrivateMemoryFootprint" units="MB">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    A rough estimate of the private memory footprint of the gpu process.
    Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.Gpu.PrivateSwapFootprint" units="MB">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chormium.org</owner>
  <summary>
    An amount of private memory of the GPU process placed in swap (VmSwap).
    Available only on Android and Linux.
  </summary>
</histogram>

<histogram name="Memory.Gpu.SharedMemoryFootprint" units="MB">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    A rough estimate of the shared memory footprint of the gpu process. Recorded
    once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.Graphics" units="MB">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>jamescook@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    System-wide graphics driver memory consumption.  Recorded on Chrome OS for
    platforms where it is exposed by the kernel (for example, Intel i915 and
    Exynos Mali).  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.IPCChannelReader.ReceivedMessageSize" units="bytes">
  <obsolete>
    Obsolete as of 11/2015
  </obsolete>
  <owner>dskiba@chromium.org</owner>
  <summary>Size of messages received by IPC::ChannelReader.</summary>
</histogram>

<histogram name="Memory.MovableStringParkingAction" enum="ParkingAction">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Recorded each time a Movable String is (un)parked, with the context:
    foreground/background.
  </summary>
</histogram>

<histogram name="Memory.MovableStringsCount" units="count">
  <owner>lizeb@chromium.org</owner>
  <summary>
    This records the number of movable Javascript source string resources in a
    given renderer, at the time page is backgrounded. Recorded alongside
    Memory.MovableStringsTotalSizeKb.
  </summary>
</histogram>

<histogram name="Memory.MovableStringsTotalSizeKb" units="KB">
  <owner>lizeb@chromium.org</owner>
  <summary>
    This records the total size of movable Javascript source string resources in
    a given renderer, at the time page is backgrounded. Recorded alongside
    Memory.MovableStringsCount.
  </summary>
</histogram>

<histogram name="Memory.NativeClient" units="KB">
  <obsolete>
    Deprecated 11/2017. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The private working set used by each Native Client loader process.  Each
    process provides one sample.  Recorded once per process per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.NativeClientBroker" units="KB">
  <obsolete>
    Deprecated 11/2017. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The private working set used by each Native Client broker process.  Each
    process provides one sample.  Recorded once per process per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.OOMKill.Contents.MemAllocatedMB" units="MB">
  <owner>oshima@chromium.org</owner>
  <summary>
    System-wide memory allocation right after a renderer was killed by
    oom-killer, roughly equivalent to the sum of memory allocated with malloc()
    in userspace plus graphics driver memory.
  </summary>
</histogram>

<histogram name="Memory.OOMKill.Contents.MemAvailableMB" units="MB">
  <owner>oshima@chromium.org</owner>
  <summary>
    System-wide file-backed memory plus free memory right after a renderer was
    killed by oom-killer, which should be smaller than or close to what the
    kernel uses to trigger low-memory notifications for tab discards. If this is
    higher than the kernel's threshold for tab discards, renderers may be killed
    due to reasons other than out-of-memory.
  </summary>
</histogram>

<histogram name="Memory.OOMKill.Contents.MemGraphicsMB" units="MB">
  <owner>oshima@chromium.org</owner>
  <summary>
    Graphics driver (GEM object) memory right after a renderer was killed by
    oom-killer.
  </summary>
</histogram>

<histogram name="Memory.OOMKill.Contents.MemShmemMB" units="MB">
  <owner>oshima@chromium.org</owner>
  <summary>
    System-wide shared memory right after a renderer was killed by oom-killer.
    Used primarily for shared buffers in the graphics system. Tracked because
    it's a historical source of leaks on Chrome OS.
  </summary>
</histogram>

<histogram name="Memory.OOMKill.Extensions.MemAllocatedMB" units="MB">
  <owner>oshima@chromium.org</owner>
  <summary>
    System-wide memory allocation right after a renderer was killed by
    oom-killer, roughly equivalent to the sum of memory allocated with malloc()
    in userspace plus graphics driver memory.
  </summary>
</histogram>

<histogram name="Memory.OOMKill.Extensions.MemAvailableMB" units="MB">
  <owner>oshima@chromium.org</owner>
  <summary>
    System-wide file-backed memory plus free memory right after a renderer was
    killed by oom-killer, which should be smaller than or close to what the
    kernel uses to trigger low-memory notifications for tab discards. If this is
    higher than the kernel's threshold for tab discards, renderers may be killed
    due to reasons other than out-of-memory.
  </summary>
</histogram>

<histogram name="Memory.OOMKill.Extensions.MemGraphicsMB" units="MB">
  <owner>oshima@chromium.org</owner>
  <summary>
    Graphics driver (GEM object) memory right after a renderer was killed by
    oom-killer.
  </summary>
</histogram>

<histogram name="Memory.OOMKill.Extensions.MemShmemMB" units="MB">
  <owner>oshima@chromium.org</owner>
  <summary>
    System-wide shared memory right after a renderer was killed by oom-killer.
    Used primarily for shared buffers in the graphics system. Tracked because
    it's a historical source of leaks on Chrome OS.
  </summary>
</histogram>

<histogram base="true" name="Memory.OpenFDs" units="files">
<!-- Name completed by histogram_suffixes name="MemoryFDsBroswerGpuAndRendererProcess" and name="MemoryFDsAllProcesses" -->

  <owner>dcastagna@chromium.org</owner>
  <owner>primiano@chromium.org</owner>
  <summary>
    The total number of open file descriptors opened per process.  Recorded once
    per UMA ping.
  </summary>
</histogram>

<histogram base="true" name="Memory.OpenFDsSoftLimit" units="files">
<!-- Name completed by histogram_suffixes name="MemoryFDsBroswerGpuAndRendererProcess" -->

  <owner>dcastagna@chromium.org</owner>
  <owner>primiano@chromium.org</owner>
  <summary>
    The limit of open file descriptors that can be opened per process.  Recorded
    once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.OtherProcessCount" units="processes">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The count of other various utility processes (nacl, gpu, sandbox, zygote,
    utility).  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.PepperFlashPlugin" units="KB">
  <obsolete>
    Deprecated 11/2017. No direct replacement.
  </obsolete>
  <owner>thestig@chromium.org</owner>
  <summary>
    The private working set used by each Pepper Flash plugin process. Each
    plugin process provides one sample.  Recorded once per process per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.PepperPlugin" units="KB">
  <obsolete>
    Deprecated 11/2017. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The private working set used by each Pepper plugin process.  Each plugin
    process provides one sample.  Recorded once per process per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.PepperPluginBroker" units="KB">
  <obsolete>
    Deprecated 11/2017. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The private working set used by each Pepper plugin broker process.  Each
    process provides one sample.  Recorded once per process per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.PepperPluginBrokerProcessCount" units="processes">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The count of Pepper plugin broker processes, recorded once per metrics
    services (UMA) update.  See MetricsReportingScheduler for details.
  </summary>
</histogram>

<histogram name="Memory.PepperPluginProcessCount" units="processes">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The count of active Pepper plugin processes.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.Plugin" units="KB">
  <obsolete>
    Deprecated due to NPAPI removal.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The private working set used by each plugin process.  Each plugin process
    provides one sample.  Recorded once per process per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.PluginProcessCount" units="processes">
  <obsolete>
    Deprecated due to NPAPI removal.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The count of active plugin processes.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.PressureLevel" enum="MemoryPressureLevel">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The memory pressure level, which is recorded periodically. This shows the
    cumulative number of seconds that systems spend in each of the memory
    pressure states.
  </summary>
</histogram>

<histogram name="Memory.PressureLevelChanges" enum="MemoryPressureLevelChanges">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The number of pressure level state changes for each possible pairwise state
    change.
  </summary>
</histogram>

<histogram name="Memory.ProcessCount" units="processes">
  <owner>creis@chromium.org</owner>
  <owner>nasko@chromium.org</owner>
  <summary>
    The count of all active processes.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.ProcessLimit">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>The current process limit.  Recorded once per UMA ping.</summary>
</histogram>

<histogram name="Memory.Renderer" units="KB">
  <obsolete>
    Deprecated 06/2016 Replaced with Memory.Renderer.Large2.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The private working set used by each renderer process.  Each renderer
    process provides one sample.  Recorded once per UMA ping. TODO(rkaplow):
    This should be replaced with Memory.Renderer.Large2 in M54.
  </summary>
</histogram>

<histogram name="Memory.Renderer.Committed" units="MB">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>bashi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The total committed memory used by each renderer process.  Each renderer
    process provides one sample.  Recorded once per process per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.Renderer.EstimatedDroppableEncodedSize" units="KB">
  <owner>hajimehoshi@chromium.org</owner>
  <summary>
    The esitimated memory size which would be reduced when reusing disk cache is
    implemented.  If it is 100% sure that the encoded data is in disk cache, the
    same data in memory can be dropped to reduce memory usage.  This is
    rencorded when an ImageResource is pruned.  See crbug/664437.
  </summary>
</histogram>

<histogram name="Memory.Renderer.Large2" units="MB">
  <obsolete>
    Deprecated 11/2017. Replaced by Memory.Renderer.PrivateMemoryFootprint.
  </obsolete>
  <owner>bashi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The private working set used by each renderer process.  Each renderer
    process provides one sample.  Recorded once per process per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.Renderer.PrivateMemoryFootprint" units="MB">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    A rough estimate of the private memory footprint of the renderer process.
    Recorded once per process per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.Renderer.SharedMemoryFootprint" units="MB">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    A rough estimate of the shared memory footprint of the renderer process.
    Recorded once per process per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.RendererAll" units="MB">
  <obsolete>
    Deprecated 11/2017. No direct replacement, although
    Memory.Total.PrivateMemoryFootprint is similar.
  </obsolete>
  <owner>bashi@chromium.org</owner>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>tasak@chromium.org</owner>
  <summary>
    The private working set used by each renderer process, including all
    renderer types, i.e. this includes Chrome renderer, extensions renderer, as
    well as regular renderer processes.  Each renderer process provides one
    sample.  Recorded once per process per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.RendererAll.Committed" units="MB">
  <obsolete>
    Deprecated 01/2018. No direct replacement, although
    Memory.Total.PrivateMemoryFootprint is similar.
  </obsolete>
  <owner>bashi@chromium.org</owner>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>tasak@chromium.org</owner>
  <summary>
    The total committed memory used by each renderer process, including all
    renderer types, i.e. this includes Chrome renderer, extensions renderer, as
    well as regular renderer processes.  Each renderer process provides one
    sample.  Recorded once per process per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.RendererGrowthIn30Min" units="KB">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Growth speed of the private working set used by each renderer process per 30
    minutes.  The usage and growth speed is recorded at most every 30 minutes,
    not every exact 30 minutes.  If the interval is longer than 30 minutes, it
    is normalized to a speed KB per 30 minutes.  Each renderer process provides
    one sample.  Recorded once per UMA log unless this is the first time the UMA
    log is recorded after startup of the renderer, 30 minutes have not passed
    from the last recording of the renderer or the usage goes down. If the usage
    goes down, the amount of the shrink will be recorded in the
    Memory.RendererShrinkIn30Min histogram.
  </summary>
</histogram>

<histogram name="Memory.RendererProcessCount" units="processes">
  <owner>creis@chromium.org</owner>
  <owner>nasko@chromium.org</owner>
  <summary>
    The count of active renderer processes.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.RendererShrinkIn30Min" units="KB">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Shrink speed of the private working set used by each renderer process per 30
    minutes.  The usage and shrink speed is recorded at most every 30 minutes,
    not every exact 30 minutes.  If the interval is longer than 30 minutes, it
    is normalized to a speed KB per 30 minutes.  Each renderer process provides
    one sample.  Recorded once per UMA log unless this is the first time the UMA
    log is recorded after startup of the renderer, 30 minutes have not passed
    from the last recording of the renderer or the usage goes up. If the usage
    goes up, the amount of the growth will be recorded in the
    Memory.RendererGrowthIn30Min histogram.
  </summary>
</histogram>

<histogram name="Memory.SandboxHelper" units="KB">
  <obsolete>
    Deprecated 11/2017. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The private working set used by each sandbox helper process.  Each sandbox
    helper process provides one sample.  Recorded once per process per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.ShmemDir.AmountOfFreeSpace" units="MB">
  <owner>reveman@chromium.org</owner>
  <summary>
    The amount of free space in temporary directory for shared memory files.
    Recorded each time a new discardable memory manager instance is created.
  </summary>
</histogram>

<histogram name="Memory.Stats.Win.AvailPageFile" units="MB">
  <obsolete>
    Deprecated in 595320 and replaced with Memory.Stats.Win.AvailPageFile2.
  </obsolete>
  <owner>georgesak@chromium.org</owner>
  <summary>
    Windows-only metric that represents the maximum amount of memory the current
    process can commit. This value is equal to or smaller than the system-wide
    available commit value.
  </summary>
</histogram>

<histogram name="Memory.Stats.Win.AvailPageFile2" units="MB">
  <owner>georgesak@chromium.org</owner>
  <summary>
    Windows-only metric that represents the maximum amount of memory the current
    process can commit. This value is equal to or smaller than the system-wide
    available commit value.
  </summary>
</histogram>

<histogram name="Memory.Stats.Win.AvailPhys" units="MB">
  <obsolete>
    Deprecated in 595320 and replaced with Memory.Stats.Win.AvailPhys2.
  </obsolete>
  <owner>georgesak@chromium.org</owner>
  <summary>
    Windows-only metric that represents the amount of physical memory currently
    available. This is the amount of physical memory that can be immediately
    reused without having to write its contents to disk first. It is the sum of
    the size of the standby, free, and zero lists.
  </summary>
</histogram>

<histogram name="Memory.Stats.Win.AvailPhys2" units="MB">
  <owner>georgesak@chromium.org</owner>
  <summary>
    Windows-only metric that represents the amount of physical memory currently
    available. This is the amount of physical memory that can be immediately
    reused without having to write its contents to disk first. It is the sum of
    the size of the standby, free, and zero lists.
  </summary>
</histogram>

<histogram name="Memory.Stats.Win.AvailVirtual" units="MB">
  <obsolete>
    Deprecated in 595320 and replaced with Memory.Stats.Win.AvailVirtual2.
  </obsolete>
  <owner>georgesak@chromium.org</owner>
  <summary>
    Windows-only metric that represents the amount of unreserved and uncommitted
    memory currently in the user-mode portion of the virtual address space of
    the calling process.
  </summary>
</histogram>

<histogram name="Memory.Stats.Win.AvailVirtual2" units="MB">
  <owner>georgesak@chromium.org</owner>
  <summary>
    Windows-only metric that represents the amount of unreserved and uncommitted
    memory currently in the user-mode portion of the virtual address space of
    the calling process.
  </summary>
</histogram>

<histogram name="Memory.Stats.Win.MemoryLoad" units="%">
  <owner>georgesak@chromium.org</owner>
  <summary>
    Windows-only metric that represents the approximate percentage of physical
    memory that was in use (0 indicates no memory use and 100 indicates full
    memory use).
  </summary>
</histogram>

<histogram name="Memory.Stats.Win.TotalPageFile" units="MB">
  <obsolete>
    Deprecated in 595320 and replaced with Memory.Stats.Win.TotalPageFile2.
  </obsolete>
  <owner>georgesak@chromium.org</owner>
  <summary>
    Windows-only metric that represents the current committed memory limit for
    the system or the current process, whichever is smaller.
  </summary>
</histogram>

<histogram name="Memory.Stats.Win.TotalPageFile2" units="MB">
  <owner>georgesak@chromium.org</owner>
  <summary>
    Windows-only metric that represents the current committed memory limit for
    the system or the current process, whichever is smaller.
  </summary>
</histogram>

<histogram name="Memory.Stats.Win.TotalPhys" units="MB">
  <obsolete>
    Deprecated in 595320 and replaced with Memory.Stats.Win.TotalPhys2.
  </obsolete>
  <owner>georgesak@chromium.org</owner>
  <summary>
    Windows-only metric that represents the amount of actual physical memory.
  </summary>
</histogram>

<histogram name="Memory.Stats.Win.TotalPhys2" units="MB">
  <owner>georgesak@chromium.org</owner>
  <summary>
    Windows-only metric that represents the amount of actual physical memory.
  </summary>
</histogram>

<histogram name="Memory.Stats.Win.TotalVirtual" units="MB">
  <obsolete>
    Deprecated in 595320 and replaced with Memory.Stats.Win.TotalVirtual2.
  </obsolete>
  <owner>georgesak@chromium.org</owner>
  <summary>
    Windows-only metric that represents the size of the user-mode portion of the
    virtual address space of the calling process. This value depends on the type
    of process, the type of processor, and the configuration of the operating
    system. For example, this value is approximately 2 GB for most 32-bit
    processes on an x86 processor and approximately 3 GB for 32-bit processes
    that are large address aware running on a system with 4-gigabyte tuning
    enabled.
  </summary>
</histogram>

<histogram name="Memory.Stats.Win.TotalVirtual2" units="MB">
  <owner>georgesak@chromium.org</owner>
  <summary>
    Windows-only metric that represents the size of the user-mode portion of the
    virtual address space of the calling process. This value depends on the type
    of process, the type of processor, and the configuration of the operating
    system. For example, this value is approximately 2 GB for most 32-bit
    processes on an x86 processor and approximately 3 GB for 32-bit processes
    that are large address aware running on a system with 4-gigabyte tuning
    enabled.
  </summary>
</histogram>

<histogram name="Memory.Swap.Browser" units="KB">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The swap used by the browser process.  Recorded once per UMA ping if the
    system has swapped.
  </summary>
</histogram>

<histogram name="Memory.Swap.Chrome" units="KB">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The swap used by each chrome:// renderer process.  Each process provides one
    sample.  Recorded once per process per UMA ping if the system has swapped.
  </summary>
</histogram>

<histogram name="Memory.Swap.CompressedDataSize" units="MB">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The amount of memory that swap was compressed into. Recorded once per UMA
    ping if the system has swapped.
  </summary>
</histogram>

<histogram name="Memory.Swap.CompressionRatio">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The ratio of swapped data original size to compressed size. Recorded once
    per UMA ping if the system has swapped.
  </summary>
</histogram>

<histogram name="Memory.Swap.Extension" units="KB">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The swap used by each extension process.  Each process provides one sample.
    Recorded once per process per UMA ping if the system has swapped.
  </summary>
</histogram>

<histogram name="Memory.Swap.Gpu" units="KB">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The swap used by the GPU process.  Recorded once per UMA ping if the system
    has swapped.
  </summary>
</histogram>

<histogram name="Memory.Swap.HaveSwapped" enum="BooleanSuccess">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Indicates that the system has swapped memory out at least once since boot.
    Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.Swap.MemUsedTotal" units="MB">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The amount of memory that is used by swap, including bookkeeping.  Recorded
    once per UMA ping if the system has swapped.
  </summary>
</histogram>

<histogram name="Memory.Swap.NativeClient" units="KB">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The swap used by each Native Client loader process.  Each process provides
    one sample.  Recorded once per process per UMA ping if the system has
    swapped.
  </summary>
</histogram>

<histogram name="Memory.Swap.NativeClientBroker" units="KB">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The swap used by each Native Client broker process.  Each process provides
    one sample.  Recorded once per process per UMA ping if the system has
    swapped.
  </summary>
</histogram>

<histogram name="Memory.Swap.NumReads">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The number of reads from swap.  Recorded once per UMA ping if the system has
    swapped.
  </summary>
</histogram>

<histogram name="Memory.Swap.NumWrites">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The number of writes to swap.  Recorded once per UMA ping if the system has
    swapped.
  </summary>
</histogram>

<histogram name="Memory.Swap.OriginalDataSize" units="MB">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The amount of memory that was swapped out.  Recorded once per UMA ping if
    the system has swapped.
  </summary>
</histogram>

<histogram name="Memory.Swap.PepperPlugin" units="KB">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The swap used by each Pepper plugin process.  Each plugin process provides
    one sample.  Recorded once per process per UMA ping if the system has
    swapped.
  </summary>
</histogram>

<histogram name="Memory.Swap.PepperPluginBroker" units="KB">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The swap used by each Pepper plugin broker process.  Each process provides
    one sample.  Recorded once per process per UMA ping if the system has
    swapped.
  </summary>
</histogram>

<histogram name="Memory.Swap.Plugin" units="KB">
  <obsolete>
    Deprecated due to NPAPI removal.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The swap used by each plugin process.  Each plugin process provides one
    sample.  Recorded once per process per UMA ping if the system has swapped.
  </summary>
</histogram>

<histogram name="Memory.Swap.Renderer" units="KB">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The swap used by each renderer process.  Each renderer process provides one
    sample.  Recorded once per process per UMA ping if the system has swapped.
  </summary>
</histogram>

<histogram name="Memory.Swap.SandboxHelper" units="KB">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The swap used by each sandbox helper process.  Each sandbox helper process
    provides one sample.  Recorded once per process per UMA ping if the system
    has swapped.
  </summary>
</histogram>

<histogram name="Memory.Swap.Total" units="MB">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The sum of all processes' swap. Recorded once per UMA ping if the system has
    swapped. See Memory.Swap.Total2 for the same metric with higher precision
    bucketing.
  </summary>
</histogram>

<histogram name="Memory.Swap.Total2" units="MiB">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The sum of all processes' swap. Recorded once per UMA ping if the system has
    swapped.
  </summary>
</histogram>

<histogram name="Memory.Swap.Utility" units="KB">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The swap used by each utility process.  Each utility process provides one
    sample.  Recorded once per process per UMA ping if the system has swapped.
  </summary>
</histogram>

<histogram name="Memory.Swap.Worker" units="KB">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The swap used by each worker process.  Each worker process provides one
    sample.  Recorded once per process per UMA ping if the system has swapped.
  </summary>
</histogram>

<histogram name="Memory.Swap.Zygote" units="KB">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The swap used by the zygote process.  Recorded once per UMA ping if the
    system has swapped.
  </summary>
</histogram>

<histogram name="Memory.Total" units="MB">
  <obsolete>
    Deprecated 09/2016. Replaced by Memory.Total2.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The sum of all processes. This is not aware of shared memory so it is just a
    rough estimate. Recorded once per UMA ping. See Memory.Total2 for the same
    metric with higher precision bucketing.
  </summary>
</histogram>

<histogram name="Memory.Total.PrivateMemoryFootprint" units="MB">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    A rough estimate of the private memory footprint of all processes. Recorded
    once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.Total.SharedMemoryFootprint" units="MB">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    A rough estimate of the shared memory footprint of all processes. Recorded
    once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.Total2" units="MiB">
  <obsolete>
    Deprecated 11/2017. Replaced by Memory.Total.PrivateMemoryFootprint.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The sum of all processes. This is not aware of shared memory so it is just a
    rough estimate. Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.Utility" units="KB">
  <obsolete>
    Deprecated 11/2017. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The private working set used by each utility process.  Each utility process
    provides one sample.  Recorded once per process per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.Worker" units="KB">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The private working set used by each worker process.  Each worker process
    provides one sample.  Recorded once per process per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.WorkerProcessCount" units="processes">
  <obsolete>
    Deprecated 03/2018. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The count of active worker processes.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.Zygote" units="KB">
  <obsolete>
    Deprecated 11/2017. No direct replacement.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The private working set used by the zygote process.  Each zygote process
    provides one sample.  Recorded once per process per UMA ping.
  </summary>
</histogram>

<histogram name="MemoryAndroid.DeviceMemoryClass">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Value of getMemoryClass() recorded once upon startup. This is an integer,
    device-specific constant correlated with the amount of memory available on
    Android device.
  </summary>
</histogram>

<histogram name="MemoryAndroid.EvictionReason" enum="AndroidEvictionReason">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Reasons behind evictions of individual tabs, recorded upon each tab
    eviction.
  </summary>
</histogram>

<histogram name="MemoryAndroid.LowMemoryLoadedTabCount">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Number of loaded (memory-resident) tabs when LowMemory notification is
    delivered.
  </summary>
</histogram>

<histogram name="MemoryAndroid.LowMemoryTimeBetween" units="ms">
  <obsolete>
    Deprecated 04/2018.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Time between two consecutive LowMemory notification in one foreground
    session.
  </summary>
</histogram>

<histogram name="MemoryAndroid.LowRamDevice" enum="Boolean">
  <owner>ssid@chromium.org</owner>
  <summary>
    Whether Chrome is running in low ram mode. This histogram is reported on
    every upload by Android devices. A device is considered low-RAM if it has
    512MiB of RAM or lower (see SysUtils.detectLowEndDevice()).

    Note: The low-RAM determination has changed in M-49, it used to be given
    directly by the Android OS.
  </summary>
</histogram>

<histogram name="MemoryAndroid.NotificationBackground"
    enum="AndroidMemoryNotificationBackground">
  <obsolete>
    Deprecated 04/2018 in favor of Android.MemoryPressureNotification.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Memory notifications delivered through system callbacks to Chrome while in
    the background.
  </summary>
</histogram>

<histogram name="MemoryAndroid.NotificationForeground"
    enum="AndroidMemoryNotificationForeground">
  <obsolete>
    Deprecated 04/2018 in favor of Android.MemoryPressureNotification.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Memory notifications delivered through system callbacks to Chrome while in
    the foreground - we count LowMemory notification vs particular levels of
    TrimMemory foreground notification.
  </summary>
</histogram>

<histogram name="MemoryPurgeController.ReclaimedPartitionAllocInactiveTab"
    units="KB">
  <owner>bashi@chromium.org</owner>
  <summary>The amount of reclaimed memory after a tab became inactive.</summary>
</histogram>

<histogram name="MemoryWarning.EvictedTabTimeSinceActive" units="ms">
  <obsolete>
    Deprecated as of 10/2016.
  </obsolete>
  <owner>lliabraa@chromium.org</owner>
  <summary>
    [iOS] When the OS sends a memory warning and the app evicts a tab, this
    histogram records the time since the evicted tab was active.
  </summary>
</histogram>

<histogram name="MemoryWarning.OccurrencesPerSession">
  <owner>justincohen@chromium.org</owner>
  <summary>
    The number of memory warnings during a given foreground session.
  </summary>
</histogram>

<histogram name="MemoryWarning.ProtectedTabTimeSinceActive" units="ms">
  <obsolete>
    Deprecated as of 10/2016.
  </obsolete>
  <owner>lliabraa@chromium.org</owner>
  <summary>
    [iOS] When the OS sends a memory warning and the app protects a tab, this
    histogram records the time since the protected tab was active.
  </summary>
</histogram>

<histogram name="MessageLoop.DelayedTaskQueue.PendingTasksCountOnIdle">
  <obsolete>
    Deprecated as of 07/2018.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    The size of the delayed task queue when the loop becomes idle. Diagnosis
    metric for https://crbug.com/850450#c4.
  </summary>
</histogram>

<histogram name="MessageLoop.DelayedTaskQueue.PostedDelay" units="ms">
  <obsolete>
    Deprecated as of 07/2018.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Reports the delay of a delayed task posted to a MessageLoop. Reported once
    per delayed task. Diagnosis metric for https://crbug.com/850450#c4.
  </summary>
</histogram>

<histogram name="MessageLoop.DelayedTaskQueueForUI.PendingTasksCountOnIdle">
  <owner>gab@chromium.org</owner>
  <summary>
    The size of the delayed task queue when the loop becomes idle on a UI
    thread. Diagnosis metric for https://crbug.com/850450#c4. Note: this metric
    is a bit broken on Mac OSX as CFRunLoop doesn't deterministically invoke
    MessageLoop::DoIdleWork().
  </summary>
</histogram>

<histogram name="MessageLoop.ScheduledSleep.Completed" units="ms">
  <obsolete>
    Deprecated as of 07/2018.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Reports the delay for which the MessageLoop successfully slept until an
    upcoming delayed task. Reported each time a MessageLoop successfully sleeps
    until the next delayed task.
  </summary>
</histogram>

<histogram name="MessageLoop.ScheduledSleep.Interrupted" units="ms">
  <obsolete>
    Deprecated as of 07/2018.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Reports the delay for which the MessageLoop had planned to sleep (next
    delayed task) before it was woken up early. Reported each time a MessageLoop
    is woken up early.
  </summary>
</histogram>

<histogram name="Mist.SwitchResult" enum="MistSwitchResult">
  <owner>benchan@chromium.org</owner>
  <summary>
    The result (e.g. success or the type of failure) of a modem interface switch
    operation performed by mist on Chrome OS.
  </summary>
</histogram>

<histogram name="Mobile.CanonicalURLResult" enum="CanonicalURLResult">
  <owner>gchatz@chromium.org</owner>
  <owner>tedchoc@chromium.org</owner>
  <summary>
    The result of the operation to retrieve the page's canonical URL.
  </summary>
</histogram>

<histogram base="true" name="Mobile.DefaultBrowser.BrowserCount">
<!-- Name completed by histogram_suffixes name="Mobile.DefaultBrowser.Type" -->

  <owner>dtrainor@chromium.org</owner>
  <summary>Android: The number of browsers installed on the device.</summary>
</histogram>

<histogram name="Mobile.DefaultBrowser.State" enum="MobileDefaultBrowserState">
  <owner>dtrainor@chromium.org</owner>
  <summary>
    Android: Whether or not the device has a default browser and whether or not
    it is a system installed browser.
  </summary>
</histogram>

<histogram base="true" name="Mobile.DefaultBrowser.SystemBrowserCount">
<!-- Name completed by histogram_suffixes
    name="Mobile.DefaultBrowser.SystemDefaultBrowser.Type" -->

  <owner>dtrainor@chromium.org</owner>
  <summary>Android: The number of system installed browsers.</summary>
</histogram>

<histogram name="Mobile.SystemNotification.Blocked"
    enum="SystemNotificationType">
  <owner>dtrainor@chromium.org</owner>
  <summary>
    Android: Represents the number of system notifications that were blocked and
    could not be shown by type.
  </summary>
</histogram>

<histogram name="Mobile.SystemNotification.BlockedAfterShown"
    enum="SystemNotificationType">
  <owner>dtrainor@chromium.org</owner>
  <summary>
    Android: Represents the type of notification that was last shown before the
    user disabled notification permissions on Chrome.  This is only logged the
    first time we attempt to show a notification and fail.
  </summary>
</histogram>

<histogram name="Mobile.SystemNotification.ChannelBlocked"
    enum="SystemNotificationType">
  <owner>awdf@chromium.org</owner>
  <summary>
    Android: Represents the number of system notifications by type that we
    attempted to show but were blocked, due to their notification channel being
    blocked. Only applies to devices on Android O and above.
  </summary>
</histogram>

<histogram name="Mobile.SystemNotification.Shown" enum="SystemNotificationType">
  <owner>dtrainor@chromium.org</owner>
  <summary>
    Android: Represents the number of system notifications that will be
    successfully shown to the user by type.
  </summary>
</histogram>

<histogram name="MobileDownload.BytesDownloaded" units="KB">
  <owner>qinmin@chromium.org</owner>
  <summary>
    Android: Records the total data downloaded by completion status.
  </summary>
</histogram>

<histogram base="true" name="MobileDownload.BytesWasted.ChromeNetworkStack"
    units="KB">
  <owner>qinmin@chromium.org</owner>
  <summary>
    Android: Records the total data wasted during download due to resumptions.
  </summary>
</histogram>

<histogram name="MobileDownload.CancelReason" enum="MobileDownloadCancelReason">
  <owner>qinmin@chromium.org</owner>
  <summary>Android: Records the reason that a download is canceled.</summary>
</histogram>

<histogram name="MobileDownload.ContextMenu.SaveImage"
    enum="ContextMenuSaveImage">
  <owner>qinmin@chromium.org</owner>
  <summary>
    Android: Records various counts related to the save image context menu
    option.
  </summary>
</histogram>

<histogram name="MobileDownload.DownloadResumption"
    enum="MobileDownloadResumption">
  <owner>qinmin@chromium.org</owner>
  <summary>
    Android: Records user interaction on the download resumption button.
  </summary>
</histogram>

<histogram name="MobileDownload.DownloadTime" units="ms">
  <owner>qinmin@chromium.org</owner>
  <summary>
    Android: Records the total time for a download by completion status.
  </summary>
</histogram>

<histogram name="MobileDownload.DuplicateInfobar"
    enum="MobileDownloadDuplicateInfobar">
  <owner>qinmin@chromium.org</owner>
  <summary>
    Android: Records various counts related to the duplicate download infobar.
  </summary>
</histogram>

<histogram name="MobileDownload.InterceptFailureReason"
    enum="MobileDownloadInterceptFailureReason">
  <obsolete>
    Deprecated 09/2016 in Issue 647755 with all downloads going through Chrome.
  </obsolete>
  <owner>qinmin@chromium.org</owner>
  <summary>
    Android: Records the reason that Chrome fails to intercept a download and
    pass it to the Android DownloadManager.
  </summary>
</histogram>

<histogram name="MobileDownload.InterruptionsCount">
  <owner>qinmin@chromium.org</owner>
  <summary>
    Android: Records the total interruptions for a download by completion
    status.
  </summary>
</histogram>

<histogram name="MobileDownload.Location.Dialog.Result"
    enum="DownloadLocationDialogResult">
  <owner>xingliu@chromium.org</owner>
  <summary>
    Records whether the user accepted or dismissed the dialog to select a
    download location.
  </summary>
</histogram>

<histogram name="MobileDownload.Location.Dialog.Type"
    enum="DownloadLocationDialogType">
  <owner>xingliu@chromium.org</owner>
  <summary>
    Records the download location dialog type when the dialog is shown to the
    user.
  </summary>
</histogram>

<histogram name="MobileDownload.Location.Setting.DirectoryType"
    enum="DownloadLocationDirectoryType">
  <owner>xingliu@chromium.org</owner>
  <summary>
    Records the directory type when the user selects the download directory
    through download location dialog or selects the download directory in
    download preference. May be recorded even when the user didn't download
    anything.
  </summary>
</histogram>

<histogram name="MobileDownload.Notification.FixingSummaryLeak"
    enum="BooleanForegroundNotification">
  <obsolete>
    Deprecated 10/2017 in Issue 722320 with the removal of
    DownloadNotificationService.hideDanglingSummaryNotification.
  </obsolete>
  <owner>dtrainor@chromium.org</owner>
  <summary>
    Android: Records the situation where we try to fix a standalone downloads
    summary notification, which shouldn't be visible to the user.  True if the
    notification was a foreground notification, in which case we can't dismiss
    it and need to attempt a more drastic workaround. False if it was a normal
    notification and we can dismiss it easily (this is okay and expected
    behavior in some scenarios).
  </summary>
</histogram>

<histogram base="true" name="MobileDownload.ResumptionsCount">
  <owner>qinmin@chromium.org</owner>
  <summary>
    Android: Records the number of resumptions for a download by resumption
    type. For all resumption types, this is recorded when a download is
    finished, completed or cancelled. For automatic resumptions, it is also
    recorded when user manually resumes the download to clear the auto retry
    count.
  </summary>
</histogram>

<histogram name="MobileDownload.StoragePermission"
    enum="MobileDownloadStoragePermission">
  <owner>qinmin@chromium.org</owner>
  <summary>
    Android: Records various counts when requesting the storage permission.
  </summary>
</histogram>

<histogram name="MobileFre.PrivacyLinkTappedStatus"
    enum="MobileFreLinkTappedStatus">
  <owner>justincohen@chromium.org</owner>
  <summary>
    iOS: Records the status of the privacy page after user taps on the privacy
    link on the first run welcome view.  This metric is only recorded if and
    after the TOS are accepted. This metric is specific to iOS.
  </summary>
</histogram>

<histogram name="MobileFre.Progress" enum="MobileFreProgress">
  <owner>gogerald@chromium.org</owner>
  <summary>
    Android: Records which states of the &quot;first run experience&quot; have
    been reached. Each bucket represents a state and recorded everytime the
    state changed.  Pages can be double counted if the user goes backwards in
    the flow.
  </summary>
</histogram>

<histogram name="MobileFre.SignInChoice" enum="MobileFreSignInChoice">
  <owner>aruslan@chromium.org</owner>
  <summary>
    Android: How the user left the sign-in part of the &quot;first run
    experience&quot; activity (M-38+).
  </summary>
</histogram>

<histogram name="MobileFullscreenVideo.DurationAfterPotraitRotation" units="ms">
  <owner>qinmin@chromium.org</owner>
  <summary>
    Android: Records the duration that a fullscreen video is played after device
    rotates from portrait to landscape mode for the first time, and before it
    exits fullscreen. If there is no device rotation or if the video starts with
    landscape mode, it is not recorded. If there are mutiple rotations between
    portrait and landscape mode, only one record is emitted and it is equal to
    the time period from the first rotation to the moment when the video exits
    fullscreen.
  </summary>
</histogram>

<histogram name="MobileFullscreenVideo.LandscapeDuration" units="ms">
  <owner>qinmin@chromium.org</owner>
  <summary>
    Android: Records the duration that a fullscreen video is played in landscape
    mode. If a video starts playing in landscape mode, and then it is switched
    back and forth between landscape and portrait mode, only the time period
    before the first switch is accounted. If a video starts playing in portrait
    mode, it is not recorded.
  </summary>
</histogram>

<histogram name="MobileFullscreenVideo.LandscapeRotation" enum="BooleanEnabled">
  <owner>qinmin@chromium.org</owner>
  <summary>
    Android: Records whether a fullscreen video is switched from landscape to
    portrait mode at any point during playback.
  </summary>
</histogram>

<histogram name="MobileFullscreenVideo.OrientationPortrait"
    enum="BooleanEnabled">
  <owner>qinmin@chromium.org</owner>
  <summary>
    Android: Records the device orientation when a video enters fullscreen. The
    value is true if device orientation is portrait, or false otherwise. The
    video doesn't necessarily needs to be in a playing state.
  </summary>
</histogram>

<histogram name="MobileFullscreenVideo.PortraitDuration" units="ms">
  <owner>qinmin@chromium.org</owner>
  <summary>
    Android: Records the duration that a fullscreen video is played in portrait
    mode. If a video starts playing in portrait mode, and then it is switched
    back and forth between landscape and portrait mode, only the time period
    before the first switch is accounted. If a video starts playing in landscape
    mode, it is not recorded.
  </summary>
</histogram>

<histogram name="MobileFullscreenVideo.PortraitRotation" enum="BooleanEnabled">
  <owner>qinmin@chromium.org</owner>
  <summary>
    Android: Records whether a fullscreen video is switched from portrait to
    landscape mode at any point during playback.
  </summary>
</histogram>

<histogram name="MobileFullscreenVideo.VideoPortrait" enum="BooleanEnabled">
  <owner>qinmin@chromium.org</owner>
  <summary>
    Android: Records whether a video has a larger height than width when it
    enters the fullscreen mode.
  </summary>
</histogram>

<histogram name="MobileIntent.PageLoadDueToExternalApp" enum="ClientAppId">
  <owner>tedchoc@chromium.org</owner>
  <summary>
    Android: Count of page loads started by intents from external apps.
  </summary>
</histogram>

<histogram name="MobileOmnibox.PressedClipboardSuggestionAge" units="ms">
  <owner>jif@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <summary>
    When a user presses an omnibox suggestion based on the content of the
    clipboard, this histograms records how long ago Chrome detected a change in
    the clipboard.

    Intended to be compared to Omnibox.ClipboardSuggestionShownAge.

    If Chrome never detected a change to the clipboard, no clipboard suggestion
    is shown, meaning this histogram will never be emitted to.
  </summary>
</histogram>

<histogram name="MobileSignInPromo.BookmarkManager.ImpressionsTilDismiss"
    units="impressions">
  <owner>jlebel@chromium.org</owner>
  <summary>
    Counts how many times the signin promo is implicitly dismissed (by closing
    the bookmark manager) per impression.
  </summary>
</histogram>

<histogram name="MobileSignInPromo.BookmarkManager.ImpressionsTilSigninButtons"
    units="impressions">
  <owner>jlebel@chromium.org</owner>
  <summary>
    Counts how many times one of the &quot;sign in&quot; buttons (any of the
    signed-out &quot;Sign in to Chrome&quot; button, the &quot;Continue as
    |name|&quot; button, or the &quot;Not |email|?&quot; button) is clicked per
    impression.
  </summary>
</histogram>

<histogram name="MobileSignInPromo.BookmarkManager.ImpressionsTilXButton"
    units="impressions">
  <owner>jlebel@chromium.org</owner>
  <summary>
    Counts how many times the explicit &quot;X&quot;-to-close button is clicked
    per impression.
  </summary>
</histogram>

<histogram name="MobileSignInPromo.SettingsManager.ImpressionsTilDismiss"
    units="impressions">
  <owner>jlebel@chromium.org</owner>
  <summary>
    Counts how many times the signin promo is implicitly dismissed (by closing
    the settings view) per impression.
  </summary>
</histogram>

<histogram name="MobileSignInPromo.SettingsManager.ImpressionsTilSigninButtons"
    units="impressions">
  <owner>jlebel@chromium.org</owner>
  <summary>
    Counts how many times one of the &quot;sign in&quot; buttons (any of the
    signed-out &quot;Sign in to Chrome&quot; button, the &quot;Continue as
    |name|&quot; button, or the &quot;Not |email|?&quot; button) is clicked per
    impression.
  </summary>
</histogram>

<histogram name="MobileSignInPromo.SettingsManager.ImpressionsTilXButton"
    units="impressions">
  <owner>jlebel@chromium.org</owner>
  <summary>
    Counts how many times the explicit &quot;X&quot;-to-close button is clicked
    per impression.
  </summary>
</histogram>

<histogram name="MobileStartup.ColdStartupIntent" enum="MobileStartupIntent">
  <owner>tedchoc@chromium.org</owner>
  <summary>
    For cold starts of Chrome (native not initialized at the time of intent),
    record in ChromeTabbedActivity whether the intent had the effect of opening
    a new page or was a restore of last session.
  </summary>
</histogram>

<histogram name="MobileStartup.DailyLaunchCount">
  <owner>charliema@chromium.org</owner>
  <summary>The count of launching Chrome mobile app within a day.</summary>
</histogram>

<histogram name="MobileStartup.IntentToCreationTime" units="ms">
  <owner>twellington@chromium.org</owner>
  <summary>
    Android: The time it takes from creating an intent for ChromeActivity to
    activity creation. This includes activity creation time spent in the
    framework.
  </summary>
</histogram>

<histogram name="MobileStartup.LaunchType" enum="LaunchType">
  <owner>charliema@chromium.org</owner>
  <summary>
    The type of launching Chrome mobile app, e.g launch by hitting icon.
  </summary>
</histogram>

<histogram name="MobileStartup.LoadedHomepageOnColdStart" enum="BooleanIsNtp"
    expires_after="M72">
  <owner>tedchoc@chromium.org</owner>
  <owner>danielpark@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Android: Tracks whether a homepage was loaded on startup of
    ChromeTabbedActivity. Launching a homepage is conditional on a homepage
    being configured on the device and the absence of any existing tabs, so it
    will only happen on a subsets of cold starts. The metric splits out whether
    the homepage was the NTP or some other URL.
  </summary>
</histogram>

<histogram name="MobileStartup.MainIntentAction" enum="MobileStartingAction">
  <obsolete>
    Deprecated and removed from the code 05/2018
  </obsolete>
  <owner>mariakhomenko@chromium.org</owner>
  <summary>
    Android: Records the first action the user does within 10s of starting
    Chrome. Recorded in DocumentActivity and ChromeTabbedActivity only when the
    starting intent is of type MAIN.
  </summary>
</histogram>

<histogram name="MobileStartup.MobileMultiWindowInstances">
  <owner>dtrainor@chromium.org</owner>
  <summary>
    Android: Number of instances of Chrome currently open during a MultiWindow
    session.  Emitted every time Chrome is paused.  Only emitted on Android
    MultiWindow devices.

    A MultiWindow session is any period of time that Chrome was not used in a
    full screen mode but together with another Activity that is visible at the
    same time. This is only supported in a few Android models.
  </summary>
</histogram>

<histogram name="MobileStartup.MobileMultiWindowSession" units="%">
  <owner>miguelg@chromium.org</owner>
  <summary>
    Android: percent of the screen available for Chrome during a multi-window
    session. Emitted every time chrome is paused. Only emitted on Android
    MultiWindow devices.

    A multiwindow session is any period of time that Chrome was not used in full
    screen mode but together with some other application that is visible at the
    same time. This is only supported in a few Android models.
  </summary>
</histogram>

<histogram name="MobileStartup.NonMainIntentAction" enum="MobileStartingAction">
  <obsolete>
    Deprecated and removed from the code 05/2018
  </obsolete>
  <owner>mariakhomenko@chromium.org</owner>
  <summary>
    Android: Records the first action the user does within 10s of starting
    Chrome. Recorded in DocumentActivity and ChromeTabbedActivity only when the
    starting intent is not of type MAIN, e.g. VIEW, etc.
  </summary>
</histogram>

<histogram name="MobileStartup.TimeSinceLastUse" units="minutes">
  <obsolete>
    Deprecated and removed from the code 05/2018
  </obsolete>
  <owner>knn@chromium.org</owner>
  <summary>
    Android: The time since last use until Chrome is launched from the home
    screen. This is measured from the time the last tab is closed until a Main
    intent is received. Has a minute level precision for first 10 minutes
    increasing exponentially till 30 days.

    Note: this metric is broken in M63 and below and only reliable in M64+.
  </summary>
</histogram>

<histogram base="true" name="MobileStartup.ToolbarFirstDrawTime" units="ms">
  <obsolete>
    Deprecated and renamed to MobileStartup.ToolbarFirstDrawTime2 due to double
    reporting bug (see https://crbug.com/857508).
  </obsolete>
  <owner>yusufo@chromium.org</owner>
  <summary>
    Android: The time it takes from launch to the completion of first draw for
    Toolbar. This excludes activity creation time spent in framework.
  </summary>
</histogram>

<histogram base="true" name="MobileStartup.ToolbarFirstDrawTime2" units="ms">
  <owner>yusufo@chromium.org</owner>
  <summary>
    Android: The time it takes from launch to the completion of first draw for
    Toolbar. This excludes activity creation time spent in framework.
  </summary>
</histogram>

<histogram base="true" name="MobileStartup.ToolbarFirstFocusStartupState"
    enum="MobileStartupToolbarFirstFocusStartupState">
  <owner>mheikal@chromium.org</owner>
  <summary>
    Android: The state of chrome startup at the first time the user focuses the
    omnibox, if the user does so within the first 30s of the launch (excluding
    activity creation time spent in the framework).
  </summary>
</histogram>

<histogram base="true" name="MobileStartup.ToolbarFirstFocusTime" units="ms">
  <obsolete>
    Deprecated and renamed to MobileStartup.ToolbarFirstFocusTime2 due to double
    reporting bug (see https://crbug.com/857508).
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    Android: The time it takes from launch to the first time the user focuses
    the omnibox if the user does so within first 30s of the launch. This
    excludes activity creation time spent in framework.
  </summary>
</histogram>

<histogram base="true" name="MobileStartup.ToolbarFirstFocusTime2" units="ms">
  <owner>pasko@chromium.org</owner>
  <summary>
    Android: The time it takes from launch to the first time the user focuses
    the omnibox if the user does so within first 30s of the launch. This
    excludes activity creation time spent in framework.
  </summary>
</histogram>

<histogram base="true" name="MobileStartup.ToolbarInflationTime" units="ms">
  <owner>pasko@chromium.org</owner>
  <summary>
    Android: The time spent performing toolbar layout inflation.
  </summary>
</histogram>

<histogram name="ModuleBlacklistCache.BlacklistPathUpdated"
    enum="BooleanSuccess">
  <owner>pmonette@chromium.org</owner>
  <summary>
    Records the result of writing the path of the module blacklist cache to the
    registry so that chrome_elf.dll can use it. A value is emitted every time
    the cache is updated because another instance of Chrome with a different
    User Data directory could have overwritten the path to point to their own
    version of the cache.
  </summary>
</histogram>

<histogram name="ModuleBlacklistCache.BlacklistStatus"
    enum="ModuleBlacklistStatus">
  <owner>pmonette@chromium.org</owner>
  <summary>
    The status of a blacklisted module in the process. Recorded when the cache
    is updated.
  </summary>
</histogram>

<histogram name="ModuleBlacklistCache.DeleteResult" enum="BooleanSuccess">
  <owner>pmonette@chromium.org</owner>
  <summary>
    The result of deleting the module blacklist cache when third-party module
    blocking is disabled. Attempting to delete an empty file is considered a
    success.
  </summary>
</histogram>

<histogram name="ModuleBlacklistCache.ExpectedMD5Digest" enum="Boolean">
  <owner>pmonette@chromium.org</owner>
  <summary>
    Records whether the MD5 digest of the module blacklist cache matched the one
    recorded in the Local State file.
  </summary>
</histogram>

<histogram name="ModuleBlacklistCache.ModuleCount" units="modules">
  <owner>pmonette@chromium.org</owner>
  <summary>
    Records the number of modules in the module blacklist cache at the time it
    was written to disk.
  </summary>
</histogram>

<histogram name="ModuleBlacklistCache.ReadResult"
    enum="ModuleBlacklistCacheReadResult">
  <owner>pmonette@chromium.org</owner>
  <summary>
    The result of reading the current module blacklist cache while updating it.
  </summary>
</histogram>

<histogram name="ModuleBlacklistCache.WriteResult" enum="BooleanSuccess">
  <owner>pmonette@chromium.org</owner>
  <summary>The result of writing the updated module blacklist cache.</summary>
</histogram>

<histogram name="ModuleIntegrityVerification.BytesModified" units="bytes">
  <owner>anthonyvd@chromium.org</owner>
  <summary>
    Represents the amount of bytes in a module that are different on disk and in
    memory. Logged when the ModuleIntegrityVerifier determines that a module is
    different on disk and in memory after being triggered by an incident.
  </summary>
</histogram>

<histogram name="ModuleIntegrityVerification.Difference" units="bytes">
  <obsolete>
    Deprecated and removed from code as of 05/2015.
  </obsolete>
  <owner>anthonyvd@chromium.org</owner>
  <summary>
    Represents the difference in bytes deemed modified by the two
    ModuleIntegrityVerifier code paths. The suffix indicates which path had a
    higher value. Logged when the ModuleIntegrityVerifier determines that a
    module is different on disk and in memory after being triggered by an
    incident and the reported byte count for both methods is different.
  </summary>
</histogram>

<histogram name="ModuleIntegrityVerification.RelocationsUnordered"
    enum="ModuleIndex">
  <owner>grt@chromium.org</owner>
  <summary>
    Logged when the relocations in a module are not ordered causing the module
    verification to abort.
  </summary>
</histogram>

<histogram name="ModuleIntegrityVerification.RelocationsUnorderedModuleIndex">
  <obsolete>
    Deprecated 04/2015; replaced by
    ModuleIntegrityVerification.RelocationsUnordered.
  </obsolete>
  <owner>anthonyvd@chromium.org</owner>
  <summary>
    Logged when the relocations in a module are not ordered causing the module
    verification to abort. The value is the index of the affected module.
  </summary>
</histogram>

<histogram name="Mojo.MachPortRelay.BrokerError"
    enum="MojoMachPortRelayBrokerError">
  <owner>amistry@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <summary>
    Errors that the broker process encounters while trying to send or receive
    Mach ports from a child process.
  </summary>
</histogram>

<histogram name="Mojo.MachPortRelay.ChildError"
    enum="MojoMachPortRelayChildError">
  <owner>amistry@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <summary>
    Errors that a child process encounters while trying to receive Mach ports
    from the broker process.
  </summary>
</histogram>

<histogram name="Mojo.Shell.ChildConnectionTime" units="ms">
  <obsolete>
    Deprecated 2/2018. Has not actually been collected for some time.
  </obsolete>
  <owner>rockot@chromium.org</owner>
  <summary>
    Measures the time it takes for a new child process to receive an
    initialization request from the Mojo shell. This is precisely the duration
    of the MojoShellConnectionImpl::BindToMessagePipe() call in ChildThreadImpl.
  </summary>
</histogram>

<histogram name="Mojo.System.GetParentPlatformHandleSyncTime" units="ms">
  <obsolete>
    Deprecated 2/2018. Data no longer useful.
  </obsolete>
  <owner>rockot@chromium.org</owner>
  <summary>
    Measures the time it takes for a child to receive its parent platform handle
    synchronously from the broker on startup. This only applies to the subset of
    platforms on which the sync broker is used.
  </summary>
</histogram>

<histogram name="Mojo.System.MessagesAcceptedPerEvent">
  <obsolete>
    Deprecated as of 6/2017.
  </obsolete>
  <owner>rockot@chromium.org</owner>
  <summary>
    Number of internal Mojo system messages processed synchronously during a
    single execution of NodeController::AcceptIncomingMessages(). This is called
    any time an event requires internal Mojo system messages to be pumped.
    Values below 4 are no longer logged.
  </summary>
</histogram>

<histogram name="Mojo.System.Node.ConnectedPeers">
  <obsolete>
    Deprecated 2/2018. Data no longer useful.
  </obsolete>
  <owner>rockot@chromium.org</owner>
  <summary>
    Number of connected peer nodes tracked by a node. This is emitted any time a
    peer is added to or dropped from a node.
  </summary>
</histogram>

<histogram name="Mojo.System.Node.PendingChildren">
  <obsolete>
    Deprecated 2/2018. Data no longer useful.
  </obsolete>
  <owner>rockot@chromium.org</owner>
  <summary>
    Number of connected pending child node connections tracked by a node. This
    is emitted any time a parent-child node connection is initiated or dropped.
  </summary>
</histogram>

<histogram name="MojoLevelDBEnv.IOError" enum="LevelDBIOErrorMethods">
  <owner>mek@chromium.org</owner>
  <summary>Methods where leveldb's Mojo environment has IO errors.</summary>
</histogram>

<histogram name="MojoLevelDBEnv.IOError.BFE" enum="PlatformFileError">
  <owner>mek@chromium.org</owner>
  <summary>
    Errors (base::File::Error) encountered by a single leveldb method in
    leveldb's Mojo environment.
  </summary>
</histogram>

<histogram name="MojoLevelDBEnv.RetryRecoveredFromErrorIn"
    enum="PlatformFileError">
  <owner>mek@chromium.org</owner>
  <summary>
    When Mojo LevelDBEnv successfully retries an operation that had failed,
    record the error from the most recent failed attempt.
  </summary>
</histogram>

<histogram name="MojoLevelDBEnv.TimeUntilSuccessFor" units="ms">
  <owner>mek@chromium.org</owner>
  <summary>
    Time Mojo LevelDBEnv slept before successfully completing this operation. 0
    means success on the first try, as LevelDBEnv only sleeps when retries are
    needed.
  </summary>
</histogram>

<histogram name="Mouse.PointerSensitivity.Changed" enum="PointerSensitivity"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Tracks mouse sensitivity setting changes by the user. This replaces the old
    Mouse.Sensitivity.Changed metric.
  </summary>
</histogram>

<histogram name="Mouse.PointerSensitivity.Started" enum="PointerSensitivity"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Tracks mouse sensitivity setting on startup. This replaces the old
    Mouse.Sensitivity.Started metric.
  </summary>
</histogram>

<histogram name="Mouse.ReverseScroll.Changed" enum="BooleanEnabled">
  <owner>lannm@chromium.org</owner>
  <summary>Tracks mouse reverse scroll setting changes by the user.</summary>
</histogram>

<histogram name="Mouse.ReverseScroll.Started" enum="BooleanEnabled">
  <owner>lannm@chromium.org</owner>
  <summary>Tracks mouse reverse scroll setting on startup.</summary>
</histogram>

<histogram name="Mouse.Sensitivity.Changed" enum="PointerSensitivity">
  <obsolete>
    Deprecated as of 6/2013, replaced by Mouse.PointerSensitivity.Changed.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Tracks mouse sensitivity setting.</summary>
</histogram>

<histogram name="Mouse.Sensitivity.Started" enum="PointerSensitivity">
  <obsolete>
    Deprecated as of 6/2013, replaced by Mouse.PointerSensitivity.Started.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Tracks mouse sensitivity setting on startup.</summary>
</histogram>

<histogram name="MouseEventPrefetch.MouseDownDuration_Click" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures the time elapsed between when the user mousedown-ed a link and when
    the user clicked a link.
  </summary>
</histogram>

<histogram name="MouseEventPrefetch.MouseDownFollowedByClick"
    enum="MouseEventFollowedByClick">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    For each click handled by an HTML anchor tag link, whether Blink saw a
    mousedown event preceding it.  This is only measured for clicks handled by
    the anchor tag's default click event handler.
  </summary>
</histogram>

<histogram name="MouseEventPrefetch.MouseDowns">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of mousedown events detected at HTML anchor-tag links' default
    event handler.
  </summary>
</histogram>

<histogram name="MouseEventPrefetch.MouseOverDuration_Click" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures the time elapsed between when the user mouseover-ed a link and when
    the user clicked a link.
  </summary>
</histogram>

<histogram name="MouseEventPrefetch.MouseOverDuration_NoClick" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures the time elapsed between when the user mouseover-ed a link and when
    the user mouseout-ed a link without click.
  </summary>
</histogram>

<histogram name="MouseEventPrefetch.MouseOvers">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of mouseover events detected at HTML anchor-tag links' default
    event handler.
  </summary>
</histogram>

<histogram name="MouseEventPrefetch.PreTapEventsFollowedByClick"
    enum="PreTapEvents">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The tap gesture events detected before click at HTML anchor-tag links'
    default event handler.
  </summary>
</histogram>

<histogram name="MouseEventPrefetch.TapDownDuration_Click" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures the time elapsed between when the user tapdown-ed a link and when
    the user clicked a link.
  </summary>
</histogram>

<histogram name="MouseEventPrefetch.TapDowns">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of gesturetapdown events detected at HTML anchor-tag links'
    default event handler.
  </summary>
</histogram>

<histogram name="MouseEventPrefetch.TapUnconfirmeds">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of gesturetapunconfirmed events detected at HTML anchor-tag
    links' default event handler.
  </summary>
</histogram>

<histogram name="MPArch.ChildProcessLaunchFirst">
  <owner>ppi@chromium.org</owner>
  <summary>
    The time it takes to spawn the first child subprocess (including sandbox
    init).
  </summary>
</histogram>

<histogram name="MPArch.ChildProcessLaunchSubsequent">
  <owner>ppi@chromium.org</owner>
  <summary>
    The time it takes to spawn child sub processes not counting the first one.
  </summary>
</histogram>

<histogram name="MPArch.ForkTime" units="ms">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Time to call fork() or clone(), in ms. Recorded at each fork excluding from
    the zygote, only on posix platforms.
  </summary>
</histogram>

<histogram name="MPArch.IIR_InputEventDelta" units="ms">
  <obsolete>
    Deprecated 08/2016 due to lack of use (Histogram Eraser).
  </obsolete>
  <owner>rvargas@chromium.org</owner>
  <summary>
    The time spent waiting for the renderer to acknowledge an input event.
  </summary>
</histogram>

<histogram name="MPArch.RendererLaunchFirst">
  <obsolete>
    Deprecated 2/2013, renamed.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time it takes to spawn the first renderer subprocess (including sandbox
    init).
  </summary>
</histogram>

<histogram name="MPArch.RendererLaunchSubsequent">
  <obsolete>
    Deprecated 2/2013, renamed.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time it takes to spawn renderer sub processes not counting the first
    one.
  </summary>
</histogram>

<histogram name="MPArch.RPHCountPerLoad">
  <owner>ppi@chromium.org</owner>
  <summary>
    The number of RenderProcessHosts (i.e. renderer processes) present when each
    load completes. This is basically the average number of sub-processes over
    time. See also Tabs.TabCountPerLoad.
  </summary>
</histogram>

<histogram name="MPArch.RWH_HangMonitorUnresponsive" units="ms">
  <obsolete>
    Deprecated 12/2017 due to lack of usage.
  </obsolete>
  <owner>amaralp@chromium.org</owner>
  <summary>
    The length of time the renderer is unresponsive according to the hang
    monitor. Recorded when the renderer regains responsiveness.
  </summary>
</histogram>

<histogram name="MPArch.RWH_InputEventDelta" units="ms">
  <obsolete>
    renamed MPArch.IIR_InputEventDelta.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time spent waiting for the renderer to acknowledge an input event.
  </summary>
</histogram>

<histogram name="MPArch.RWH_OnMsgPaintRect" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The time spent inside RenderWidgetHost::OnMsgPaintRect.</summary>
</histogram>

<histogram name="MPArch.RWH_OnMsgResizeOrRepaintACK">
  <owner>fsamuel@chromium.org</owner>
  <owner>piman@chromium.org</owner>
  <summary>
    The time delta for processing a paint message. On platforms that don't
    support asynchronous painting, this is equivalent to
    MPArch.RWH_TotalPaintTime.
  </summary>
</histogram>

<histogram name="MPArch.RWH_OnMsgScrollRect" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The time spent inside RenderWidgetHost::OnMsgScrollRect.</summary>
</histogram>

<histogram name="MPArch.RWH_OnMsgUpdateRect">
  <obsolete>
    Deprecated 10/2017. Replaced with MPArch.RWH_OnMsgResizeOrRepaintACK.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>TBD</summary>
</histogram>

<histogram name="MPArch.RWH_RepaintDelta" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>TBD</summary>
</histogram>

<histogram name="MPArch.RWH_TabSwitchPaintDuration" units="ms">
  <owner>jbauman@chromium.org</owner>
  <summary>
    Time from tab switch requested to tab appearing on screen (Aura and Mac
    only).
  </summary>
</histogram>

<histogram name="MPArch.RWHH_WhiteoutDuration" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time that the user sees a blank white page after switching to a
    different tab, while the RenderWidgetHost receives data to paint from the
    renderer process.
  </summary>
</histogram>

<histogram name="MultiDeviceSetup_NotificationClicked"
    enum="MultiDeviceSetupNotification">
  <owner>jordynass@chromium.org</owner>
  <summary>
    Counts the number of each MultiDevice setup notification clicked by a user.
  </summary>
</histogram>

<histogram name="MultiDeviceSetup_NotificationShown"
    enum="MultiDeviceSetupNotification">
  <owner>jordynass@chromium.org</owner>
  <summary>
    Counts the number of each MultiDevice setup notification shown to a user.
  </summary>
</histogram>

<histogram name="MultiProfile.DiscardedTabsPerUser">
  <obsolete>
    Deprecated 11/2017. Analysis confirms that the number of discards increases
    with the number of logged in users. No action will be taken based on this
    information.
  </obsolete>
  <owner>skuhne@chromium.org</owner>
  <summary>
    The relation of discarded tabs vs. the amount of simultaneous users. The
    counts are the number of discards and the buckets are the number of users.
    Since the count values are absolute numbers, they need to be normalized
    before use - so divide the counts by the percentage of users per session
    found under 'MultiProfile.UsersPerSessionIncremental'.
  </summary>
</histogram>

<histogram name="MultiProfile.SessionMode" enum="MultiProfileSessionMode">
  <obsolete>
    Deprecated 09/2017 when side-by-side multi-profile mode was removed. There
    is now only one multi-profile mode (separate desktop). See the metric
    'MultiProfile.UsersPerSessionIncremental' for overall usage of the
    multi-profile feature on Chrome OS.
  </obsolete>
  <owner>skuhne@chromium.org</owner>
  <summary>
    The session counter for different multi profile modes which gets stored once
    per session at the beginning of the session.
  </summary>
</histogram>

<histogram name="MultiProfile.SigninUserUIPath"
    enum="MultiProfileSigninUserAction">
  <owner>skuhne@chromium.org</owner>
  <summary>
    Count the number of times each UI path is taken for signing into a new
    account in a Chrome OS multiprofile session. UI paths include the system
    tray and the user account switcher on the browser frame.
  </summary>
</histogram>

<histogram name="MultiProfile.SwitchActiveUserUIPath"
    enum="MultiProfileSwitchActiveUserAction">
  <owner>skuhne@chromium.org</owner>
  <summary>
    Count the number of times each UI path is taken for switching the active
    account in a Chrome OS multiprofile session. UI paths include the system
    tray and the keyboard shortcut.
  </summary>
</histogram>

<histogram name="MultiProfile.TeleportWindow"
    enum="MultiProfileTeleportWindowAction">
  <obsolete>
    Deprecated 04/2018. Was not being maintained - some cases leading to
    teleport were not captured. See counts of 'MultiProfile.TeleportWindowType'
    to assess the usage of the teleport window feature.
  </obsolete>
  <owner>skuhne@chromium.org</owner>
  <summary>
    Counts the number of window teleportations when using separated desktop
    mode.
  </summary>
</histogram>

<histogram name="MultiProfile.TeleportWindowType"
    enum="MultiProfileTeleportWindowType">
  <owner>skuhne@chromium.org</owner>
  <summary>
    Counts the number of teleported windows by types in separated desktop mode.
  </summary>
</histogram>

<histogram name="MultiProfile.UsersPerSession">
  <obsolete>
    Deprecated 3/2014, renamed to MultiProfile.UsersPerSessionIncremental.
  </obsolete>
  <owner>skuhne@chromium.org</owner>
  <summary>
    The number of users simultaneously signed into a multiprofile session on
    Chrome OS. This is recorded upon session end.
  </summary>
</histogram>

<histogram name="MultiProfile.UsersPerSessionIncremental">
  <owner>skuhne@chromium.org</owner>
  <summary>
    The number of users simultaneously signed into a multiprofile session on
    Chrome OS. This is recorded whenever a user gets added to the session. To
    get the correct count, all following counts must be subtracted. Example: If
    100 single user, 20 two user and 5 three user sessions, there were
    100-20-5=75 single user sessions, 100-80=20 dual user sessions and so on.
  </summary>
</histogram>

<histogram name="NaCl.Client.Helper.InitState" enum="NaClHelperStatus">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    When the browser started, what happened with the NaCl helper process?
  </summary>
</histogram>

<histogram name="NaCl.Client.Helper.StateOnFork" enum="NaClHelperStatus">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    When a NaCl application process was created, what had happened with the NaCl
    helper process when the browser was started?
  </summary>
</histogram>

<histogram name="NaCl.Client.OSArch" enum="NaClOSArchEnum">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>The OS/Architecture of a nexe that was loaded.</summary>
</histogram>

<histogram name="NaCl.HttpStatusCodeClass.Manifest.InstalledApp"
    enum="NaClHttpStatusCodeClass">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The status code returned when trying to load a manifest inside an installed
    app.
  </summary>
</histogram>

<histogram name="NaCl.HttpStatusCodeClass.Manifest.NotInstalledApp"
    enum="NaClHttpStatusCodeClass">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The status code returned when trying to load a manifest from a source other
    than an installed app.
  </summary>
</histogram>

<histogram name="NaCl.HttpStatusCodeClass.Nexe.InstalledApp"
    enum="NaClHttpStatusCodeClass">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The status code returned when trying to load a NaCl executable inside an
    installed app.
  </summary>
</histogram>

<histogram name="NaCl.HttpStatusCodeClass.Nexe.NotInstalledApp"
    enum="NaClHttpStatusCodeClass">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The status code returned when trying to load a NaCl executable from a source
    other than an installed app.
  </summary>
</histogram>

<histogram name="NaCl.LoadStatus.Plugin" enum="NaClPluginErrorCode">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>The error code returned by NaCl's Chrome plugin.</summary>
</histogram>

<histogram name="NaCl.LoadStatus.Plugin.InstalledApp"
    enum="NaClPluginErrorCode">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The error code returned by NaCl's Chrome plugin, but only for installed
    apps.
  </summary>
</histogram>

<histogram name="NaCl.LoadStatus.Plugin.NotInstalledApp"
    enum="NaClPluginErrorCode">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The error code returned by NaCl's Chrome plugin, but excluding installed
    apps.
  </summary>
</histogram>

<histogram name="NaCl.LoadStatus.SelLdr" enum="NaClSelLdrErrorCode">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>The error code returned by NaCl's sel_ldr.</summary>
</histogram>

<histogram name="NaCl.LoadStatus.SelLdr.InstalledApp"
    enum="NaClSelLdrErrorCode">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The error code returned by NaCl's sel_ldr, but only for installed apps.
  </summary>
</histogram>

<histogram name="NaCl.LoadStatus.SelLdr.NotInstalledApp"
    enum="NaClSelLdrErrorCode">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The error code returned by NaCl's sel_ldr, but excluding installed apps.
  </summary>
</histogram>

<histogram name="NaCl.Manifest.IsDataURI" enum="NaClManifestType">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    Was the manifest specified as a data URI rather than a .nmf file?
  </summary>
</histogram>

<histogram name="NaCl.ManifestDownloadTime" units="ms">
  <obsolete>
    Deprecated 6/2011, renamed.
  </obsolete>
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The time it took to download the manifset file for a Native Client module.
  </summary>
</histogram>

<histogram name="NaCl.ModuleUptime.Crash" units="ms">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>The time a NaCl module ran before it crashed.</summary>
</histogram>

<histogram name="NaCl.ModuleUptime.Normal" units="ms">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>The time a NaCl module ran without crashing, at shutdown.</summary>
</histogram>

<histogram name="NaCl.NexeDownloadTime" units="ms">
  <obsolete>
    Deprecated 6/2011, renamed.
  </obsolete>
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The time it took to download the main .nexe for a Native Client module.
  </summary>
</histogram>

<histogram name="NaCl.NexeSize" units="KB">
  <obsolete>
    Deprecated 6/2011, renamed.
  </obsolete>
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The size of the main .nexe file downloaded for a Native Client module.
  </summary>
</histogram>

<histogram name="NaCl.NexeStartupTime" units="ms">
  <obsolete>
    Deprecated 6/2011, renamed.
  </obsolete>
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The time it took between the Native Client plugin initialization and when
    proxied execution of the NaCl module begins. This is the general startup
    overhead of running as a NaCl module vs a trusted PPAPI plugin.
  </summary>
</histogram>

<histogram name="NaCl.NexeStartupTimePerMB" units="milliseconds/MB">
  <obsolete>
    Deprecated 6/2011, renamed.
  </obsolete>
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The time it took between the Native Client plugin initialization and when
    proxied execution of the NaCl module begins. This is the general startup
    overhead of running as a NaCl module vs a trusted PPAPI plugin.
  </summary>
</histogram>

<histogram name="NaCl.Options.PNaCl.OptLevel" enum="PNaClOptionsOptLevelEnum">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The optimization level set for the initial Portable Native Client
    translation from bitcode to native code.
  </summary>
</histogram>

<histogram name="NaCl.OSArch" enum="NaClOSArchEnum">
  <obsolete>
    Deprecated 6/2011, renamed.
  </obsolete>
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>The OS/Architecture of a nexe that was loaded.</summary>
</histogram>

<histogram name="NaCl.Perf.PNaClCache.IsHit" enum="PNaClTranslationCacheEnum">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    Did the Portable Native Client translation cache find an executable
    translated from bitcode?
  </summary>
</histogram>

<histogram name="NaCl.Perf.PNaClLoadTime.CompileKBPerSec" units="KB/s">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The rate for compiling a Portable Native Client bitcode file to an object
    file in Kilobytes per second.
  </summary>
</histogram>

<histogram name="NaCl.Perf.PNaClLoadTime.CompileTime" units="ms">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The time it took to compile a Portable Native Client bitcode file to an
    object file.
  </summary>
</histogram>

<histogram name="NaCl.Perf.PNaClLoadTime.LinkTime" units="ms">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The time it took to link a Portable Native Client generated object file into
    a Native Client executable.
  </summary>
</histogram>

<histogram name="NaCl.Perf.PNaClLoadTime.LoadCompiler" units="ms">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The time it took to load and validate the Portable Native Client compiler.
  </summary>
</histogram>

<histogram name="NaCl.Perf.PNaClLoadTime.LoadLinker" units="ms">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The time it took to load and validate the Portable Native Client linker.
  </summary>
</histogram>

<histogram name="NaCl.Perf.PNaClLoadTime.PctCompiledWhenFullyDownloaded"
    units="%">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The percentage of a Portable Native Client application that is compiled by
    the time the application is fully downloaded (compile and download happen in
    parallel).
  </summary>
</histogram>

<histogram name="NaCl.Perf.PNaClLoadTime.TotalUncachedKBPerSec" units="KB/s">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The rate for completely translating a Portable Native Client bitcode file
    into a Native Client executable and caching the result in Kilobytes per
    second.
  </summary>
</histogram>

<histogram name="NaCl.Perf.PNaClLoadTime.TotalUncachedTime" units="ms">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The total time it took to completely translate a Portable Native Client
    bitcode file into a Native Client executable, and cache the result.
  </summary>
</histogram>

<histogram name="NaCl.Perf.ShutdownTime.Total" units="ms">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>The time it took the NaCl module to shut down.</summary>
</histogram>

<histogram name="NaCl.Perf.Size.Manifest" units="KB">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>The size of the manifest file.</summary>
</histogram>

<histogram name="NaCl.Perf.Size.Nexe" units="KB">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The size of the main .nexe file downloaded for a Native Client module.
  </summary>
</histogram>

<histogram name="NaCl.Perf.Size.Pexe" units="KB">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The size of the main .pexe bitcode file downloaded for a Portable Native
    Client module.
  </summary>
</histogram>

<histogram name="NaCl.Perf.Size.PexeNexeSizePct" units="%">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The size of the main .pexe bitcode file divided by the size of the .nexe
    that is the result of translating the bitcode file, times 100.
  </summary>
</histogram>

<histogram name="NaCl.Perf.Size.PNaClTranslatedNexe" units="KB">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The size of the main .nexe file that is the result of translating a Portable
    Native Client .pexe bitcode file.  This reflects the amount of cache
    consumed.
  </summary>
</histogram>

<histogram name="NaCl.Perf.StartupTime.LoadModule" units="ms">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>The time it took to load the NaCl module into sel_ldr.</summary>
</histogram>

<histogram name="NaCl.Perf.StartupTime.LoadModulePerMB" units="milliseconds/MB">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The time it took to load the NaCl module into sel_ldr.  Normalized by the
    size of the .nexe, in megabytes.
  </summary>
</histogram>

<histogram name="NaCl.Perf.StartupTime.ManifestDownload" units="ms">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The time it took to download the manifset file for a Native Client module.
  </summary>
</histogram>

<histogram name="NaCl.Perf.StartupTime.NaClOverhead" units="ms">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The time it took between the Native Client plugin initialization and when
    proxied execution of the NaCl module begins. This is the general startup
    overhead of running as a NaCl module vs a trusted PPAPI plugin.
  </summary>
</histogram>

<histogram name="NaCl.Perf.StartupTime.NaClOverheadPerMB"
    units="milliseconds/MB">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The time it took between the Native Client plugin initialization and when
    proxied execution of the NaCl module begins. This is the general startup
    overhead of running as a NaCl module vs a trusted PPAPI plugin.  Normalized
    by the size of the .nexe, in megabytes.
  </summary>
</histogram>

<histogram name="NaCl.Perf.StartupTime.NexeDownload" units="ms">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The time it took to download the main .nexe for a Native Client module.
  </summary>
</histogram>

<histogram name="NaCl.Perf.StartupTime.NexeDownloadPerMB"
    units="milliseconds/MB">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The time it took to download the main .nexe for a Native Client module.
    Normalized by the size of the .nexe, in megabytes.
  </summary>
</histogram>

<histogram name="NaCl.Perf.StartupTime.Total" units="ms">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The time it took between the Native Client plugin initialization and when
    the NaCl module is ready to be used.
  </summary>
</histogram>

<histogram name="NaCl.Perf.StartupTime.TotalPerMB" units="milliseconds/MB">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The time it took between the Native Client plugin initialization and when
    the NaCl module is ready to be used.  Normalized by the size of the .nexe,
    in megabytes.
  </summary>
</histogram>

<histogram name="NaCl.Startups" enum="NaClStartupEnum">
  <obsolete>
    Deprecated 5/2011, data is duplicated by NaCl.NexeStartupTime, and
    normalizing to 'tab opens' is unusual.
  </obsolete>
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The number of times that Native Client has been started by loading a .nexe
    compared to the number of times that a tab has been opened.
  </summary>
</histogram>

<histogram name="NaCl.ValidationCache.Query" enum="NaClValidationCacheEnum">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    Did a validation cache query find a previously known validation result?
  </summary>
</histogram>

<histogram name="NaCl.ValidationCache.Set" enum="NaClValidationCacheEnum">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    Was the validation cache updated with a new validation result?
  </summary>
</histogram>

<histogram name="NativeAppLauncher.InstallationDetected"
    enum="BooleanInstalled">
  <owner>jif@chromium.org</owner>
  <summary>
    The number of times that Chrome detected that a request to download and
    install another Google iOS app completed successfully.
  </summary>
</histogram>

<histogram name="NativeSmbFileShare.MountCount">
  <owner>zentaro@chromium.org</owner>
  <summary>
    The number of active mounts that a user has. This is recorded after a share
    has been successfully mounted.
  </summary>
</histogram>

<histogram name="NativeSmbFileShare.MountResult"
    enum="NativeSmbFileShare_MountResult">
  <owner>zentaro@chromium.org</owner>
  <summary>
    The result of the mount operation for Native SMB File Share. This is
    recorded after the D-Bus call to Mount returns.
  </summary>
</histogram>

<histogram name="NativeSmbFileShare.ReadDirectoryCount">
  <owner>zentaro@chromium.org</owner>
  <summary>
    The number of entries read when calling ReadDirectory. This is recorded
    after the D-Bus call to ReadDirectory returns.
  </summary>
</histogram>

<histogram name="NativeSmbFileShare.ReadDirectoryDuration" units="ms">
  <owner>zentaro@chromium.org</owner>
  <summary>
    The duration of ReadDirectory call to SmbProvider in milliseconds. This is
    recorded after the D-Bus call returns.
  </summary>
</histogram>

<histogram name="NativeSmbFileShare.RemountResult"
    enum="NativeSmbFileShare_MountResult">
  <owner>zentaro@chromium.org</owner>
  <summary>
    The result of the Remount operation during startup. This is recorded after
    the D-Bus call to Remount returns.
  </summary>
</histogram>

<histogram name="Navigation.BackForward.CacheFlags" enum="NavigationCacheEnum">
  <owner>clamy@chromium.org</owner>
  <summary>The cache flags set on back-forward navigations.</summary>
</histogram>

<histogram name="Navigation.BackForward.IsSameProcess"
    enum="NavigationIsSameProcess">
  <obsolete>
    Deprecated 2018-02, replaced by Navigation.IsSameProcess.BackForward.
  </obsolete>
  <owner>clamy@chromium.org</owner>
  <summary>
    Whether the back-forward navigation lead to a change of process or not.
  </summary>
</histogram>

<histogram name="Navigation.BackForward.ReadyToCommitUntilCommit" units="ms">
  <obsolete>
    Deprecated 2018-02, replaced by
    Navigation.ReadyToCommitUntilCommit.BackForward.
  </obsolete>
  <owner>clamy@chromium.org</owner>
  <summary>
    The time needed to commit a back forward-navigation once it is ready to
    commit. This is the time between ReadyToCommit and DidFinishNavigation (for
    a navigation that commits).
  </summary>
</histogram>

<histogram name="Navigation.BackForward.TimeToReadyToCommit" units="ms">
  <obsolete>
    Deprecated 2018-02, replaced by Navigation.TimeToReadyToCommit.BackForward.
  </obsolete>
  <owner>clamy@chromium.org</owner>
  <summary>
    The time delta between the start of a back-forward navigation and the time
    it was ready to commit.
  </summary>
</histogram>

<histogram name="Navigation.BackForward.WasCached"
    enum="NavigationWasServedFromCache">
  <owner>clamy@chromium.org</owner>
  <summary>Whether the back-forward navigation was served from cache.</summary>
</histogram>

<histogram name="Navigation.ClearSiteData.Duration" units="ms">
  <owner>msramek@chromium.org</owner>
  <summary>
    Recorded when a navigation is deferred while clearing site data. Indicates
    how much time the clearing took.
  </summary>
</histogram>

<histogram name="Navigation.ClearSiteData.Parameters"
    enum="ClearSiteDataParameters">
  <owner>msramek@chromium.org</owner>
  <summary>
    The parameters of the Clear-Site-Data header. Recorded when the header is
    successfully parsed.
  </summary>
</histogram>

<histogram name="Navigation.DeferredDocumentLoading.StatesV1"
    enum="DocumentStateForDeferredLoading">
  <obsolete>
    Deprecated 10/2016 in favor of Navigation.DeferredDocumentLoading.StatesV2.
  </obsolete>
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Why and if cross-origin documents would be loaded in a world where we defer
    loading until they are visible.
  </summary>
</histogram>

<histogram name="Navigation.DeferredDocumentLoading.StatesV2"
    enum="DocumentStateForDeferredLoadingV2">
  <obsolete>
    Deprecated 10/2016 in favor of Navigation.DeferredDocumentLoading.StatesV3.
  </obsolete>
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Why and if cross-origin documents would be loaded if we were to defer
    loading as long as possible.
  </summary>
</histogram>

<histogram name="Navigation.DeferredDocumentLoading.StatesV3"
    enum="DocumentStateForDeferredLoadingV3">
  <obsolete>
    Deprecated 3/2017 in favor of Navigation.DeferredDocumentLoading.StatesV4.
  </obsolete>
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Why and if cross-origin documents would be loaded if we were to defer
    loading as long as possible. Difference from V2: frames positioned both
    above and to the left of the page have their own bucket and are no longer
    counted in the &quot;above&quot; bucket.
  </summary>
</histogram>

<histogram name="Navigation.DeferredDocumentLoading.StatesV4"
    enum="DocumentStateForDeferredLoadingV4">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Why and if cross-origin documents would be loaded if we were to defer
    loading as long as possible. Changes from V3: replace detailed reasons with
    summaries for four strategies. E.g. any document that would load under a
    strategy of loading when a frame is two screens away is logged to the
    WouldLoad2Screens AND WouldLoad3Screens bucket. We only record documents
    below the current viewport, not to the right of it.
  </summary>
</histogram>

<histogram name="Navigation.DownloadPolicy" enum="NavigationDownloadPolicy"
    expires_after="2019-11-01">
  <owner>csharrison@chromium.org</owner>
  <owner>yaoxia@chromium.org</owner>
  <summary>
    When a navigation results in a download, logs the download policy applied to
    that navigation.
  </summary>
</histogram>

<histogram name="Navigation.EngagementTime.HTTP" units="ms">
  <owner>felt@chromium.org</owner>
  <summary>
    The amount of time that an HTTP page was in the foreground. Recorded on
    every page close/transition.
  </summary>
</histogram>

<histogram name="Navigation.EngagementTime.HTTPS" units="ms">
  <owner>felt@chromium.org</owner>
  <summary>
    The amount of time that an HTTPS page was in the foreground. Recorded on
    every page close/transition.
  </summary>
</histogram>

<histogram name="Navigation.EngagementTime.Ratio" units="%">
  <owner>felt@chromium.org</owner>
  <summary>
    The percentage of time that HTTPS pages were in the foreground, as compared
    to total foreground time. Recorded whenever user metrics are uploaded.
  </summary>
</histogram>

<histogram name="Navigation.FrameHasEmbeddedCredentials" enum="Boolean">
  <obsolete>
    Deprecated 03/2017 in Issue 703460.
  </obsolete>
  <owner>palmer@chromium.org</owner>
  <owner>cbentzel@chromium.org</owner>
  <summary>
    Whether the navigation was to a URL that had embedded credentials.
  </summary>
</histogram>

<histogram name="Navigation.Intercept.Ignored" enum="Boolean">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Records whether the InterceptNavigationThrottle ignored the navigation. This
    is recorded at the end of every navigation the throttle observes.
  </summary>
</histogram>

<histogram name="Navigation.Intercept.WillStart" units="microseconds">
  <owner>csharrison@chromium.org</owner>
  <summary>
    The microseconds it takes for the InterceptNavigationThrottle to determine
    if the navigation should be ignored, at WillStartRequest time.

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

<histogram name="Navigation.IOSWKWebViewSlowFastBackForward"
    enum="BackForwardNavigationType">
  <owner>eugenebut@chromium.org</owner>
  <summary>
    Counts slow/fast back/forward WKWebView navigations on iOS. Fast navigation
    is a back/forward navigation done with WKBackForwardList.
  </summary>
</histogram>

<histogram name="Navigation.IsMobileOptimized" enum="BooleanIsMobileOptimized">
  <obsolete>
    Removed from code March 2018.
  </obsolete>
  <owner>cjhopman@chromium.org</owner>
  <owner>nyquist@chromium.org</owner>
  <summary>
    Signifies whether a succesfully finished page load for the main frame
    content width fits within the device width and/or has a fixed page scale.
  </summary>
</histogram>

<histogram name="Navigation.IsSameProcess" enum="NavigationIsSameProcess">
  <owner>clamy@chromium.org</owner>
  <owner>nasko@chromium.org</owner>
  <summary>Whether the navigation led to a change of process or not.</summary>
</histogram>

<histogram name="Navigation.MainFrameHasEmbeddedCredentials" enum="Boolean">
  <obsolete>
    Deprecated 03/2017 in Issue 703460.
  </obsolete>
  <owner>palmer@chromium.org</owner>
  <owner>cbentzel@chromium.org</owner>
  <summary>
    Whether the main-frame navigation was to a URL that had embedded
    credentials.
  </summary>
</histogram>

<histogram name="Navigation.MainFrameScheme" enum="NavigationScheme">
  <owner>elawrence@chromium.org</owner>
  <owner>estark@chromium.org</owner>
  <summary>The scheme of the URL for each main-frame navigation.</summary>
</histogram>

<histogram name="Navigation.MainFrameScheme.DataUrl.MimeType"
    enum="DataUrlMimeType">
  <obsolete>
    Removed from code October 2017.
  </obsolete>
  <owner>meacer@chromium.org</owner>
  <summary>
    The mime type of the data: URL for each main-frame navigation. This only
    contains mime types that can run scripts.
  </summary>
</histogram>

<histogram name="Navigation.MainFrameSchemeDifferentPage"
    enum="NavigationScheme">
  <owner>elawrence@chromium.org</owner>
  <owner>estark@chromium.org</owner>
  <summary>
    The scheme of the URL for each main-frame navigation that replaces a
    document object. This is not reported for reference fragment navigations,
    pushState/replaceState or same page history navigation.
  </summary>
</histogram>

<histogram name="Navigation.MainFrameSchemeDifferentPageOTR"
    enum="NavigationScheme">
  <owner>elawrence@chromium.org</owner>
  <owner>estark@chromium.org</owner>
  <summary>
    The scheme of the URL for each main-frame navigation that replaces a
    document object while in incognito. This is not reported for reference
    fragment navigations, pushState/replaceState or same page history
    navigation.
  </summary>
</histogram>

<histogram name="Navigation.MainFrameSchemeOTR" enum="NavigationScheme">
  <owner>elawrence@chromium.org</owner>
  <owner>estark@chromium.org</owner>
  <summary>
    The scheme of the URL for each main-frame navigation while in incognito.
  </summary>
</histogram>

<histogram name="Navigation.OnBeforeUnloadOverheadTime" units="ms">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Overhead time spent handling the OnBeforeUnload event from the browser
    standpoint. More precisely, it is the total time between dispatch and
    acknowledgment of the BeforeUnload event on the browser side, minus the
    actual time spent executing the BeforeUnload handlers on the renderer side.
  </summary>
</histogram>

<histogram name="Navigation.ReadyToCommitUntilCommit" units="ms">
  <owner>clamy@chromium.org</owner>
  <owner>nasko@chromium.org</owner>
  <summary>
    The time needed to commit a navigation once it is ready to commit. This is
    the time between ReadyToCommit and DidFinishNavigation (for a navigation
    that commits).
  </summary>
</histogram>

<histogram name="Navigation.RedirectChainSize" units="characters">
  <owner>haitaol@chromium.org</owner>
  <owner>donnd@chromium.org</owner>
  <summary>
    Total length of the redirect URL strings in navigation entry. Logged when
    entry is committed.
  </summary>
</histogram>

<histogram name="Navigation.Reload.ReloadMainResourceToReloadDuration"
    units="ms">
  <owner>toyoshim@chromium.org</owner>
  <summary>
    Reported when a user triggers reload without any other navigations after the
    previous reload in the same page, and the previous reload variant was
    RELOAD_MAIN_RESOURCE. Duration time between two reloads is reported.
  </summary>
</histogram>

<histogram name="Navigation.Reload.ReloadToReloadDuration" units="ms">
  <owner>toyoshim@chromium.org</owner>
  <summary>
    Reported when a user triggers reload without any other navigations after the
    previous reload in the same page. Duration time between two reloads is
    reported.
  </summary>
</histogram>

<histogram name="Navigation.Renderer.ReadyToCommitUntilCommit" units="ms">
  <owner>arthursonzogni@chromium.org</owner>
  <owner>clamy@chromium.org</owner>
  <owner>nasko@chromium.org</owner>
  <summary>
    The time needed in the renderer process between receiving the message to
    commit the navigation until the navigation has committed.
  </summary>
</histogram>

<histogram
    name="Navigation.ResourceHandler.ProceedWithResponseUntilFirstReadCompleted"
    units="ms">
  <obsolete>
    Obsolete as of 06/2018.
  </obsolete>
  <owner>arthursonzogni@chromium.org</owner>
  <owner>clamy@chromium.org</owner>
  <owner>nasko@chromium.org</owner>
  <summary>
    The time delta between when the ResourceHandler is allowed to read the
    response's body and when it has completed its first read.
  </summary>
</histogram>

<histogram
    name="Navigation.ResourceHandler.ResponseStartedUntilProceedWithResponse"
    units="ms">
  <obsolete>
    Obsolete as of 06/2018.
  </obsolete>
  <owner>arthursonzogni@chromium.org</owner>
  <owner>clamy@chromium.org</owner>
  <owner>nasko@chromium.org</owner>
  <summary>
    The time delta between when the ResourceHandler started receiving the
    response and when it is allowed to read the response's body.
  </summary>
</histogram>

<histogram name="Navigation.Scheduled.MaybeCausedAbort"
    enum="ScheduledNavigationType" expires_after="2018-08-30">
  <owner>csharrison@chromium.org</owner>
  <summary>
    window.location and other scheduled navigation changes can cause the current
    provisional load to be aborted. Many times these are initiated without user
    gesture. This histogram logs counts of the various aborters.
  </summary>
</histogram>

<histogram name="Navigation.Scheduled.MaybeCausedAbort.Time" units="ms"
    expires_after="2018-08-30">
  <owner>csharrison@chromium.org</owner>
  <summary>
    window.location and other scheduled navigation changes can cause the current
    provisional load to be aborted. Many times these are initiated without user
    gesture. This histogram logs the time between the aborted navigation start
    and the scheduled navigation start, if the aborted navigation has a non-zero
    navigationStart value.
  </summary>
</histogram>

<histogram name="Navigation.SchemePerUniqueOrigin" enum="NavigationScheme">
  <obsolete>
    Deprecated 4/2017 in Issue 712843.
  </obsolete>
  <owner>palmer@chromium.org</owner>
  <owner>felt@chromium.org</owner>
  <summary>
    The scheme of the URL for the first main-frame navigation per origin per
    non-OffTheRecord session.
  </summary>
</histogram>

<histogram name="Navigation.SchemePerUniqueOriginOTR" enum="NavigationScheme">
  <obsolete>
    Deprecated 4/2017 in Issue 712843.
  </obsolete>
  <owner>palmer@chromium.org</owner>
  <owner>felt@chromium.org</owner>
  <summary>
    The scheme of the URL for the first main-frame navigation per origin per
    OffTheRecord session.
  </summary>
</histogram>

<histogram name="Navigation.SecureSchemeHasSSLStatus" enum="BooleanPresent">
  <owner>jam@chromium.org</owner>
  <summary>
    True counts the events when a https URL commits with a SSL certificate.
    False is when the certificate is missing. This should be at 100%, anything
    less is probably a bug.
  </summary>
</histogram>

<histogram name="Navigation.Start.RendererBrowserDifference.Negative"
    units="ms">
  <obsolete>
    Data collected and posted on issue 675833.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The difference between Now() in the renderer and browser_navigation_start
    for browser-initiated navigations if the difference is negative. This value
    should ideally only reflect the IPC time between the browser process and
    renderer process, but in practice could be skewed by inter-process timing
    errors. If the clocks used for TimeTicks are monotonic across processes, all
    samples should fall into the Positive bucket.
  </summary>
</histogram>

<histogram name="Navigation.Start.RendererBrowserDifference.Positive"
    units="ms">
  <obsolete>
    Data collected and posted on issue 675833.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The difference between Now() in the renderer and browser_navigation_start
    for browser-initiated navigations if the difference is positive. This value
    should ideally only reflect the IPC time between the browser process and
    renderer process, but in practice could be skewed by inter-process timing
    errors. If the clocks used for TimeTicks are monotonic across processes, all
    samples should fall into the Positive bucket.
  </summary>
</histogram>

<histogram name="Navigation.StartToCommit" units="ms">
  <owner>csharrison@chromium.org</owner>
  <owner>nasko@chromium.org</owner>
  <summary>
    The time delta between the start of a navigation and the time it is
    committed.
  </summary>
</histogram>

<histogram name="Navigation.TimeToCommit" units="ms">
  <obsolete>
    Deprecated March 2018 in favor of Navigation.StartToCommit variants.
  </obsolete>
  <owner>carlosk@chromium.org</owner>
  <summary>
    Time between the start of a browser-started navigation request in and its
    commit.
  </summary>
</histogram>

<histogram name="Navigation.TimeToReadyToCommit" units="ms">
  <owner>clamy@chromium.org</owner>
  <owner>nasko@chromium.org</owner>
  <summary>
    The time delta between the start of a navigation and the time it is ready to
    commit.
  </summary>
</histogram>

<histogram name="Navigation.TimeToURLJobStart" units="ms">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Time between the start of a browser-started navigation request and the
    reception of a corresponding ResourceRequest in the network stack.
  </summary>
</histogram>

<histogram name="Navigation.UI_OnCommitProvisionalLoad.Intent" units="ms">
  <obsolete>
    Deprecated 06/2018 in favor of PageLoad metrics.
  </obsolete>
  <owner>clamy@chromium.org</owner>
  <summary>
    Obsolete. Time between receiving an Android Intent and the navigation
    commit.
  </summary>
</histogram>

<histogram name="Navigation.UI_OnCommitProvisionalLoad.Link" units="ms">
  <obsolete>
    Deprecated 06/2018 in favor of PageLoad metrics.
  </obsolete>
  <owner>clamy@chromium.org</owner>
  <summary>
    Obsolete. Time between clicking on a link and the navigation commit.
  </summary>
</histogram>

<histogram name="Navigation.UI_OnLoadComplete.Intent" units="ms">
  <obsolete>
    Deprecated 06/2018 in favor of PageLoad metrics.
  </obsolete>
  <owner>clamy@chromium.org</owner>
  <summary>
    Obsolete. Time between receiving an Android intent and the document load
    complete event for a navigation in the main frame.
  </summary>
</histogram>

<histogram name="Navigation.UI_OnLoadComplete.Link" units="ms">
  <obsolete>
    Deprecated 06/2018 in favor of PageLoad metrics.
  </obsolete>
  <owner>clamy@chromium.org</owner>
  <summary>
    Obsolete. Time between clicking on a link and the document load complete
    event for a navigation in the main frame.
  </summary>
</histogram>

<histogram
    name="Navigation.URLLoaderNetworkService.OnCompleteCertificateChainsSize"
    units="KB">
  <owner>estark@chromium.org</owner>
  <summary>
    When the navigation URL loader receives an OnComplete message from the
    network service that contains certificate chains, this histogram records the
    size in KB of those pickled certificate chains. This histogram is recorded
    by the navigation URLLoader for navigations that fetch from network, for
    every request which contains an SSLInfo in its OnComplete notification.
  </summary>
</histogram>

<histogram name="Navigation.URLLoaderNetworkService.OnCompleteHasSSLInfo"
    enum="BooleanPresent">
  <owner>estark@chromium.org</owner>
  <summary>
    Whether the network service's OnComplete message to the navigation URL
    loader contains an SSLInfo, which should only be present for main-frame
    requests with certificate errors. This histogram is recorded for every
    request completion by the navigation URL loader that fetches from network.
  </summary>
</histogram>

<histogram name="NCN.CellularConnectionSubtype" enum="ConnectionSubtype">
  <owner>bmcquade@chromium.org</owner>
  <summary>
    The connection subtype of the network the client is connected to, when the
    client is on a cellular connection. This histogram is logged once per UMA
    record, if the user is on a cellular connection, at the time the record is
    finalized.
  </summary>
</histogram>

<histogram name="NCN.CM.FastestRTTOn2G" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Rough estimate of the fastest round-trip-time seen on a 2G connection,
    before the NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.FastestRTTOn3G" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Rough estimate of the fastest round-trip-time seen on a 3G connection,
    before the NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.FastestRTTOn4G" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Rough estimate of the fastest round-trip-time seen on a 4G connection,
    before the NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change. This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.FastestRTTOnBluetooth" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Rough estimate of the fastest round-trip-time seen on a Bluetooth
    connection, before the NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.FastestRTTOnEthernet" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Rough estimate of the fastest round-trip-time seen on an Ethernet
    connection, before the NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.FastestRTTOnNone" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Rough estimate of the fastest round-trip-time seen while the
    NetworkChangeNotifier thought there was no network connection, before the
    NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.FastestRTTOnUnknown" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Rough estimate of the fastest round-trip-time seen on an unknown connection
    type, before the NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.FastestRTTOnWifi" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Rough estimate of the fastest round-trip-time seen on a Wifi connection,
    before the NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.FirstReadOn2G" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Time between switching to a 2G connection and receiving the first network
    data.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.FirstReadOn3G" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Time between switching to a 3G connection and receiving the first network
    data.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.FirstReadOn4G" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Time between switching to a 4G connection and receiving the first network
    data.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.FirstReadOnBluetooth" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Time between switching to a Bluetooth connection and receiving the first
    network data.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.FirstReadOnEthernet" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Time between switching to an Ethernet connection and receiving the first
    network data.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.FirstReadOnNone" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Time between disconnecting and receiving the first network data.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.FirstReadOnUnknown" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Time between switching to an unknown connection type and receiving the first
    network data.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.FirstReadOnWifi" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Time between switching to a Wifi connection and receiving the first network
    data.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.KBTransferedOn2G" units="KB">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    How much data was transfered while connected via a 2G connection, before the
    NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.KBTransferedOn3G" units="KB">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    How much data was transfered while connected via a 3G connection, before the
    NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.KBTransferedOn4G" units="KB">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    How much data was transfered while connected via a 4G connection, before the
    NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.KBTransferedOnBluetooth" units="KB">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    How much data was transfered while connected via a Bluetooth connection,
    before the NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.KBTransferedOnEthernet" units="KB">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    How much data was transfered while connected via an Ethernet connection,
    before the NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.KBTransferedOnNone" units="KB">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    How much data was transfered while the NetworkChangeNotifier thought there
    was no network connection, before the NetworkChangeNotifier detected a
    connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.KBTransferedOnUnknown" units="KB">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    How much data was transfered while connected via an unknown connection type,
    before the NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.KBTransferedOnWifi" units="KB">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    How much data was transfered while connected via a Wifi connection, before
    the NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.PeakKbpsOn2G" units="Kbps">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Rough estimate of peak throughput seen on a 2G connection, before the
    NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.PeakKbpsOn3G" units="Kbps">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Rough estimate of peak throughput seen on a 3G connection, before the
    NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.PeakKbpsOn4G" units="Kbps">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Rough estimate of peak throughput seen on a 4G connection, before the
    NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.PeakKbpsOnBluetooth" units="Kbps">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Rough estimate of peak throughput seen on a Bluetooth connection, before the
    NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.PeakKbpsOnEthernet" units="Kbps">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Rough estimate of peak throughput seen on an Ethernet connection, before the
    NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.PeakKbpsOnNone" units="Kbps">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Rough estimate of peak throughput seen while the NetworkChangeNotifier
    thought there was no network connection, before the NetworkChangeNotifier
    detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.PeakKbpsOnUnknown" units="Kbps">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Rough estimate of peak throughput seen on an unknown connection type, before
    the NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.PeakKbpsOnWifi" units="Kbps">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Rough estimate of peak throughput seen on a Wifi connection, before the
    NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.TimeOn2G" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    How long was spent connected via a 2G connection, before the
    NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.TimeOn3G" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    How long was spent connected via a 3G connection, before the
    NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.TimeOn4G" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    How long was spent connected via a 4G connection, before the
    NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.TimeOnBluetooth" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    How long was spent connected via a Bluetooth connection, before the
    NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.TimeOnEthernet" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    How long was spent connected via an Ethernet connection, before the
    NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.TimeOnNone" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    How long was spent disconnected, before the NetworkChangeNotifier detected a
    connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.TimeOnUnknown" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    How long was spent connected via an unknown connection type, before the
    NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.CM.TimeOnWifi" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    How long was spent connected via a Wifi connection, before the
    NetworkChangeNotifier detected a connectivity change.

    This metric is recorded when the NetworkChangeNotifier detects a
    connectivity change.  This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NCN.ConnectionTypeChangeToIPAddressChange" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Time from ConnectionTypeChanged message until IPAddressChanged message.
  </summary>
</histogram>

<histogram name="NCN.DNSConfigChange" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>Time between DNS configuration change messages.</summary>
</histogram>

<histogram name="NCN.GetActiveNetworkInfoResult"
    enum="NCNGetActiveNetworkInfoResult">
  <obsolete>
    Deprecated 05/2017 in Issue 677365.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records the result of querying the network info of the current active
    network. Useful for investigating how frequently the current network was
    unblocked, and why it was not unblocked. See http://crbug.com/677365.
  </summary>
</histogram>

<histogram name="NCN.GetConnectionTypeTime" units="ms">
  <owner>pauljensen@chromium.org</owner>
  <summary>
    How long does each call to NetworkChangeNotifier::GetConnectionType() take.
  </summary>
</histogram>

<histogram name="NCN.getNetInfo1stSuccess"
    enum="BooleanAvoidedNullPointerException">
  <obsolete>
    Deprecated 5/2017 for Issue 592131.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    True if the first call to ConnectivityManager.getNetworkInfo(Network) did
    not throw NullPointerException, false if it did. Useful for investigating
    and avoiding unexpected exceptions, see http://crbug.com/592131.
  </summary>
</histogram>

<histogram name="NCN.getNetInfo2ndSuccess"
    enum="BooleanAvoidedNullPointerException">
  <obsolete>
    Deprecated 5/2017 for Issue 592131.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Recorded after the first call to ConnectivityManager.getNetworkInfo(Network)
    threw a NullPointerException. True if the second call to
    ConnectivityManager.getNetworkInfo(Network) did not throw
    NullPointerException, false if it did. Useful for investigating and avoiding
    unexpected exceptions, see http://crbug.com/592131.
  </summary>
</histogram>

<histogram name="NCN.getWifiInfo1stSuccess"
    enum="BooleanAvoidedNullPointerException">
  <obsolete>
    Deprecated 5/2017 for Issue 592131.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    True if the first call to WifiManager.getConnectionInfo() did not throw
    NullPointerException, false if it did. Useful for investigating and avoiding
    unexpected exceptions, see http://crbug.com/592131.
  </summary>
</histogram>

<histogram name="NCN.getWifiInfo2ndSuccess"
    enum="BooleanAvoidedNullPointerException">
  <obsolete>
    Deprecated 5/2017 for Issue 592131.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Recorded after the first call to WifiManager.getConnectionInfo() threw a
    NullPointerException. True if the second call to
    ConnectivityManager.getNetworkInfo(Network) did not throw
    NullPointerException, false if it did. Useful for investigating and avoiding
    unexpected exceptions, see http://crbug.com/592131.
  </summary>
</histogram>

<histogram name="NCN.IPAddressChange" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>Time between IP address change messages.</summary>
</histogram>

<histogram name="NCN.IPAddressChangeToConnectionTypeChange" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Time from IPAddressChanged message until ConnectionTypeChanged message.
  </summary>
</histogram>

<histogram name="NCN.NetworkOfflineChange" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Time between going online until we go offline change messages, using new
    filtered signal.
  </summary>
</histogram>

<histogram name="NCN.NetworkOnlineChange" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Time between going offline until we go online change messages, using new
    filtered signal.
  </summary>
</histogram>

<histogram name="NCN.NetworkOperatorMCCMNC">
  <owner>bolian@chromium.org</owner>
  <owner>bengr@google.com</owner>
  <owner>marq@google.com</owner>
  <summary>
    The MCC (mobile country code) and MNC (mobile network code) of the network
    operator when a new metrics log is created or when the network connection is
    changed. A value of zero means a non-mobile network or the operator code is
    unknown.
  </summary>
</histogram>

<histogram name="NCN.OfflineChange" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Time between going online until we go offline change messages.
  </summary>
</histogram>

<histogram name="NCN.OfflineDataRecv" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Time between when we thought we went offline and when we received some
    network data (a URLRequest read completed).
  </summary>
</histogram>

<histogram name="NCN.OfflineDataRecvAny5sBeforeOnline">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Count of how many times we received network data (a URLRequest read
    completed) while offline when some data was received at most five seconds
    before going online.
  </summary>
</histogram>

<histogram name="NCN.OfflineDataRecvUntilOnline" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Time between when we received the last network data (a URLRequest read
    completed) while offline and when we thought we went online.
  </summary>
</histogram>

<histogram name="NCN.OfflinePolls">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Count of how many times we polled the online/offline status before detecting
    an offline to online transition.
  </summary>
</histogram>

<histogram name="NCN.OnlineChange" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Time between going offline until we go online change messages.
  </summary>
</histogram>

<histogram name="NCN.PollingOfflineDataRecv" units="ms">
  <obsolete>
    Deprecated 6/2018.
  </obsolete>
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Time between when we thought we went offline and when we received some
    network data (a URLRequest read completed), while polling
    NetworkChangeNotifier::GetConnectionType() still told us we were offline.
  </summary>
</histogram>

<histogram name="Net.AlternateProtocolBrokenLocation"
    enum="BrokenAlternateProtocolLocation">
  <owner>rch@chromium.org</owner>
  <summary>
    Breakdown of the locations when SetBrokenAlternateProtocol is called.
  </summary>
</histogram>

<histogram name="Net.AlternateProtocolUsage" enum="AlternateProtocolUsage">
  <owner>rch@chromium.org</owner>
  <summary>
    Breakdown of how requests which could potentially make use of an alternate
    protocol use or don't use the protocol.
  </summary>
</histogram>

<histogram name="Net.AlternateProtocolUsage.1000Truncated"
    enum="AlternateProtocolUsage">
  <obsolete>
    Deprecated 10/2014.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    Breakdown of how requests which could potentially make use of an alternate
    protocol use or don't use the protocol. Loaded data for 1000 servers and we
    have persisted 1000 MRU servers.
  </summary>
</histogram>

<histogram name="Net.AlternateProtocolUsage.200Truncated"
    enum="AlternateProtocolUsage">
  <obsolete>
    Deprecated 10/2014.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    Breakdown of how requests which could potentially make use of an alternate
    protocol use or don't use the protocol. Loaded data for 200 servers and we
    have persisted 1000 MRU servers.
  </summary>
</histogram>

<histogram name="Net.AlternateServiceFailed" enum="NetErrorCodes">
  <owner>tbansal@chromium.org</owner>
  <owner>rch@chromium.org</owner>
  <summary>
    Positive net error codes that failed alternative protocol requests end with.
    Recorded only when an alternative job fails, and the main job succeeds.
  </summary>
</histogram>

<histogram name="Net.AlternativeProxyFailed" enum="NetErrorCodes">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Positive net error codes that failed alternative proxy requests end with.
    Recorded when an alternative job fails, whether or not the main job
    succeeds.

    As of M66 this superceded DataReductionProxy.Quic.OnAlternativeProxyBroken.
  </summary>
</histogram>

<histogram name="Net.AlternativeServiceServers.MoreOrEqualCacheEntries"
    expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
    The difference between the size of alternative service mappings in cache and
    preferences. This tracks zero or negative values (when the difference
    between preferences size is less than or equal to memory cache size).
    Positive values are tracked by
    Net.AlternativeServiceServers.MorePrefsEntries.
  </summary>
</histogram>

<histogram name="Net.AlternativeServiceServers.MorePrefsEntries">
  <owner>rch@chromium.org</owner>
  <summary>
    The difference between the size of alternative service mappings in
    preferences and cache. This tracks positive values (when the difference
    between preferences size is greater than memory cache size). Non positive
    values are tracked by Net.AlternativeServiceServers.MoreOrEqualCacheEntries.
  </summary>
</histogram>

<histogram name="Net.AlternativeServiceTypeForRequest"
    enum="AlternativeServiceType">
  <owner>bnc@chromium.org</owner>
  <summary>
    Information about the AlternativeService used for each request.
  </summary>
</histogram>

<histogram name="Net.AsyncResourceHandler_PendingDataCount">
  <obsolete>
    Deprecated 03/2015.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The count of unacknowledged ResourceMsg_DataReceived messages.  This message
    is sent once per chunk of data read from the network.
  </summary>
</histogram>

<histogram name="Net.AsyncResourceHandler_PendingDataCount_WhenFull">
  <obsolete>
    Deprecated 03/2015.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The count of unacknowledged ResourceMsg_DataReceived messages at the point
    where we pause network loading.
  </summary>
</histogram>

<histogram name="Net.AsyncResourceHandler_RedirectHopTime" units="ms">
  <obsolete>
    Data collection finished on 2015-03-31.
  </obsolete>
  <owner>bnc@chromium.org</owner>
  <summary>
    The time between the call of AsyncResourceHandler::OnRequestRedirected and
    the FollowRedirect IPC message from ResourceHost, that is, the length of the
    redirect browser-renderer-browser hop.
  </summary>
</histogram>

<histogram name="Net.AsyncResourceHandler_SharedIOBuffer_Alloc" units="bytes">
  <obsolete>
    Deprecated 03/2015.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The size of a SharedIOBuffer allocation.</summary>
</histogram>

<histogram name="Net.AsyncResourceHandler_SharedIOBuffer_Used" units="bytes">
  <obsolete>
    Deprecated 03/2015.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The number of bytes copied into a SharedIOBuffer.</summary>
</histogram>

<histogram name="Net.AsyncResourceHandler_SharedIOBuffer_UsedPercentage"
    units="%">
  <obsolete>
    Deprecated 03/2015.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The percentage of a SharedIOBuffer allocation that is actually used.
  </summary>
</histogram>

<histogram name="Net.AsyncRevalidation.ReadError" enum="NetErrorCodes">
  <owner>ricea@chromium.org</owner>
  <summary>
    Counts of error codes received while reading the body of an async
    revalidation before getting a response. Only async revalidations that had a
    read error are counted.
  </summary>
</histogram>

<histogram name="Net.AsyncRevalidation.ResponseError" enum="NetErrorCodes">
  <owner>ricea@chromium.org</owner>
  <summary>
    Counts of error codes received while performing an async revalidation before
    getting a response. Only async revalidations that had in a response error
    are counted.
  </summary>
</histogram>

<histogram name="Net.AsyncRevalidation.Result" enum="AsyncRevalidationResult">
  <owner>ricea@chromium.org</owner>
  <summary>
    The result of an async revalidation resulting from application of the
    Cache-Control: stale-while-revalidate directive. All async revalidations are
    counted.
  </summary>
</histogram>

<histogram name="Net.AuthGenerateToken_basic" units="ms">
  <obsolete>
    Deprecated 01/2011 in https://crrev.com/70740
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The time to generate a Basic HTTP authentication token.</summary>
</histogram>

<histogram name="Net.AuthGenerateToken_digest" units="ms">
  <obsolete>
    Deprecated 01/2011 in https://crrev.com/70740
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The time to generate a Digest HTTP authentication token.</summary>
</histogram>

<histogram name="Net.AuthGenerateToken_negotiate" units="ms">
  <obsolete>
    Deprecated 01/2011 in https://crrev.com/70740
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time to generate a Negotiate (or SPNEGO) HTTP authentication token.
  </summary>
</histogram>

<histogram name="Net.AuthGenerateToken_ntlm" units="ms">
  <obsolete>
    Deprecated 01/2011 in https://crrev.com/70740
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The time to generate an NTLM HTTP authentication token.</summary>
</histogram>

<histogram name="Net.AutoReload.CountAtStop">
  <owner>mmenke@chromium.org</owner>
  <summary>
    Number of times auto-reload has been attempted before auto-reload stopped
    without succeeding, either because the stop button was pressed or because
    the renderer was destroyed.
  </summary>
</histogram>

<histogram name="Net.AutoReload.CountAtSuccess">
  <owner>mmenke@chromium.org</owner>
  <summary>
    Number of times auto-reload had to attempt to reload a page before
    succeeding.
  </summary>
</histogram>

<histogram name="Net.AutoReload.ErrorAtFirstSuccess" enum="NetErrorCodes">
  <owner>mmenke@chromium.org</owner>
  <summary>
    Original error code that started an auto-reload which then succeeded on the
    first attempt.
  </summary>
</histogram>

<histogram name="Net.AutoReload.ErrorAtStop" enum="NetErrorCodes">
  <owner>mmenke@chromium.org</owner>
  <summary>
    Error code, if any, when auto-reload stopped without succeeding, either
    because the stop button was pressed or because the renderer was destroyed.
  </summary>
</histogram>

<histogram name="Net.AutoReload.ErrorAtSuccess" enum="NetErrorCodes">
  <owner>mmenke@chromium.org</owner>
  <summary>
    Original error code that started an auto-reload which then eventually
    succeeded.
  </summary>
</histogram>

<histogram name="Net.BidirectionalStream.ReceivedBytes" units="bytes">
  <owner>xunjieli@chromium.org</owner>
  <summary>Number of bytes received over this stream.</summary>
</histogram>

<histogram name="Net.BidirectionalStream.SentBytes" units="bytes">
  <owner>xunjieli@chromium.org</owner>
  <summary>Number of bytes sent over this stream.</summary>
</histogram>

<histogram name="Net.BidirectionalStream.TimeToReadEnd" units="ms">
  <owner>xunjieli@chromium.org</owner>
  <summary>
    How long it takes from starting the request to reading the end of the
    response.
  </summary>
</histogram>

<histogram name="Net.BidirectionalStream.TimeToReadStart" units="ms">
  <owner>xunjieli@chromium.org</owner>
  <summary>
    How long it takes from starting the request to reading the start of the
    response.
  </summary>
</histogram>

<histogram name="Net.BidirectionalStream.TimeToSendEnd" units="ms">
  <owner>xunjieli@chromium.org</owner>
  <summary>
    How long it takes from starting the request to when the last byte is sent.
  </summary>
</histogram>

<histogram name="Net.BidirectionalStream.TimeToSendStart" units="ms">
  <owner>xunjieli@chromium.org</owner>
  <summary>
    How long it takes from starting the request to when we can start sending
    data.
  </summary>
</histogram>

<histogram name="Net.CacheState.AllBytes">
  <obsolete>
    Part of a concluded experiment, 2016-08-02.
  </obsolete>
  <owner>ellyjones@chromium.org</owner>
  <summary>Counts of response bytes by cache state.</summary>
</histogram>

<histogram name="Net.CacheState.AllRequests" enum="NetCacheState">
  <obsolete>
    Part of a concluded experiment, 2016-08-02.
  </obsolete>
  <owner>ellyjones@chromium.org</owner>
  <summary>
    State of the cache for a request, delta-encoding eligible or otherwise.
  </summary>
</histogram>

<histogram name="Net.CacheState.EncodeableBytes">
  <obsolete>
    Part of a concluded experiment, 2016-08-02.
  </obsolete>
  <owner>ellyjones@chromium.org</owner>
  <summary>
    Counts of response bytes by cache state for delta-encoding eligible
    requests.
  </summary>
</histogram>

<histogram name="Net.CacheState.EncodeableRequests" enum="NetCacheState">
  <obsolete>
    Part of a concluded experiment, 2016-08-02.
  </obsolete>
  <owner>ellyjones@chromium.org</owner>
  <summary>State of the cache for a delta-encoding eligible request.</summary>
</histogram>

<histogram name="Net.CertCommonNameFallback" enum="BooleanCommonNameMatch">
  <owner>rsleevi@chromium.org</owner>
  <summary>
    Whether the certificate common name was used for matching the hostname,
    instead of the subjectAlternativeName.

    Measures results for all CAs (internal and publicly-trusted).
  </summary>
</histogram>

<histogram name="Net.CertCommonNameFallbackPrivateCA"
    enum="BooleanCommonNameMatch">
  <owner>rsleevi@chromium.org</owner>
  <summary>
    Whether the certificate common name was used for matching the hostname,
    instead of the subjectAlternativeName.

    Measures results ony for internal (non-publicly-trusted) CAs.
  </summary>
</histogram>

<histogram name="Net.Certificate.AndroidAIAFetchError" enum="NetErrorCodes">
  <owner>estark@chromium.org</owner>
  <summary>
    The net error code returned after attempting an AIA fetch on Android.
    Recorded once per intermediate that Chrome attempts to fetch via AIA on
    Android.
  </summary>
</histogram>

<histogram name="Net.Certificate.IgnoreCertificateErrorsSPKIListPresent"
    enum="BooleanPresent">
  <owner>martinkr@google.com</owner>
  <summary>
    Whether certificate validation was disabled for a set of public keys because
    the --ignore-certificate-errors-spki-list switch was set on startup.
  </summary>
</histogram>

<histogram name="Net.Certificate.IgnoreErrors" enum="BooleanEnabled">
  <owner>martinkr@google.com</owner>
  <summary>
    Whether certificate validation was disabled because the
    --ignore-certificate-errors switch was set on startup.
  </summary>
</histogram>

<histogram name="Net.Certificate.SHA1.MainFrame" enum="SHA1Status">
  <obsolete>
    Deprecated 06/2017 as SHA-1 was successfully disabled in 01/2017.
  </obsolete>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    Whether or not SHA-1 was present in a resource fetched for the main frame,
    and if so, what its maximum validity period was.
  </summary>
</histogram>

<histogram name="Net.Certificate.SHA1.Subresource" enum="SHA1Status">
  <obsolete>
    Deprecated 06/2017 as SHA-1 was successfully disabled in 01/2017.
  </obsolete>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    Whether or not SHA-1 was present in a subresource fetch, and if so, what its
    maximum validity period was.
  </summary>
</histogram>

<histogram name="Net.Certificate.TLSFeatureExtensionWithPrivateRoot"
    enum="Boolean">
  <owner>estark@chromium.org</owner>
  <summary>
    This histogram is recorded every time Chrome successfully verifies a
    certificate that chains to a private root. A value of true indicates that
    the certificate contains the TLS Feature Extension, and false indicates that
    it doesn't.
  </summary>
</histogram>

<histogram name="Net.Certificate.TLSFeatureExtensionWithPrivateRootHasOCSP"
    enum="Boolean">
  <owner>estark@chromium.org</owner>
  <summary>
    This histogram is recorded every time Chrome successfully verifies a
    certificate that chains to a private root and the certificate contains the
    TLS Feature Extension. A value of true indicates that the connection had an
    OCSP response stapled, and a value of false indicates that it did not.
  </summary>
</histogram>

<histogram name="Net.Certificate.TrustAnchor.Request" enum="NetTrustAnchors">
  <owner>rsleevi@chromium.org</owner>
  <summary>
    The SHA-256 hash of the subjectPublicKeyInfo of the most-specific trust
    anchor encountered in a successfully-verified certificate chain, during an
    HTTP URL request. The associated root certificate can be looked up using
    https://crt.sh/?spkisha256= .
  </summary>
</histogram>

<histogram name="Net.Certificate.TrustAnchor.Verify" enum="NetTrustAnchors">
  <owner>rsleevi@chromium.org</owner>
  <summary>
    The SHA-256 hash of the subjectPublicKeyInfo of the most-specific trust
    anchor encountered in a successfully-verified certificate chain, during
    verification time. The associated root certificate can be looked up using
    https://crt.sh/?spkisha256= .
  </summary>
</histogram>

<histogram name="Net.Certificate.TrustAnchor.VerifyOutOfDate"
    enum="BooleanOutOfDate">
  <owner>rsleevi@chromium.org</owner>
  <summary>
    This histogram is recorded every time Chrome successfully validates a
    certificate, but cannot determine a public trust anchor from the verified
    chain. A value of true indicates that the trust anchor list is out of date,
    as the OS believes a public trust anchor is being used, but the built-in
    list does not know about this trust anchor, while a value of false indicates
    that a public trust anchor was not used, thus there is no evidence that the
    list is out of date. This histogram is temporary until the transition to a
    unified root store (in source), at which point, the OS store will no longer
    be consulted for known roots.
  </summary>
</histogram>

<histogram name="Net.Certificate.VerificationSuccessAfterAIAFetchingNeeded"
    enum="BooleanSuccess">
  <owner>estark@chromium.org</owner>
  <summary>
    Whether or not certificate verification was successful after attempting AIA
    fetching on Android. Recorded once per certificate verification on Android
    that resulted in an untrusted-root error without AIA fetching.
  </summary>
</histogram>

<histogram name="Net.CertificatePinSuccess" enum="BooleanSuccess">
  <obsolete>
    Renamed to Net.PublicKeyPinSuccess 28 Oct 2011.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    A validated certificate chain may be subject to additional
    &quot;pinning&quot; requirements on a per-domain basis. This records the
    fraction of successful matches between a certificate chain and a pin list.
  </summary>
</histogram>

<histogram name="Net.CertificateTransparency.CanInclusionCheckSCT"
    enum="SCTCanBeChecked">
  <owner>eranm@chromium.org</owner>
  <summary>
    Whether an observed Signed Certificate Timestamp (SCT) can be checked for
    inclusion. An SCT can be checked for inclusion if the client has a valid
    Signed Tree Head (STH) and the STH currently known to the client was issued
    24 hours after the timestamp in the SCT (24 hours being the typical Maximum
    Merge Delay).
  </summary>
</histogram>

<histogram name="Net.CertificateTransparency.ConnectionComplianceStatus.QUIC"
    enum="CTComplianceStatus">
  <obsolete>
    Deprecated Nov 2017, replaced with
    Net.CertificateTransparency.ConnectionComplianceStatus2
  </obsolete>
  <owner>estark@chromium.org</owner>
  <summary>
    The compliance of each QUIC connection with the Certificate Transparency
    policy, recorded once on connection setup unless CT evaluation has been
    disabled for that connection or the certificate is invalid. Connections can
    be compliant, or they can be non-compliant for one of several reasons (not
    enough Signed Certificate Timestamps [SCTs], not diverse enough SCTs, or the
    build was old so CT compliance wasn't checked).
  </summary>
</histogram>

<histogram name="Net.CertificateTransparency.ConnectionComplianceStatus.SSL"
    enum="CTComplianceStatus">
  <obsolete>
    Deprecated Nov 2017, replaced with
    Net.CertificateTransparency.ConnectionComplianceStatus2
  </obsolete>
  <owner>estark@chromium.org</owner>
  <summary>
    The compliance of each SSL connection with the Certificate Transparency
    policy, recorded once on connection setup unless CT evaluation has been
    disabled for that connection or the certificate is invalid. Connections can
    be compliant, or they can be non-compliant for one of several reasons (not
    enough Signed Certificate Timestamps [SCTs], not diverse enough SCTs, or the
    build was old so CT compliance wasn't checked).
  </summary>
</histogram>

<histogram base="true"
    name="Net.CertificateTransparency.ConnectionComplianceStatus2"
    enum="CTComplianceStatus">
<!-- Name completed by histogram_suffixes name="CertificateTransparencyProtocol" -->

  <owner>estark@chromium.org</owner>
  <summary>
    The compliance of each connection with the Certificate Transparency policy,
    recorded once on connection setup unless CT evaluation has been disabled for
    that connection or the certificate is invalid. Connections can be compliant,
    or they can be non-compliant for one of several reasons (not enough Signed
    Certificate Timestamps [SCTs], not diverse enough SCTs, or the build was old
    so CT compliance wasn't checked). Not recorded for certificates that chain
    to locally-installed roots.
  </summary>
</histogram>

<histogram
    name="Net.CertificateTransparency.CTRequiredConnectionComplianceStatus"
    enum="CTComplianceStatus">
  <obsolete>
    Deprecated Nov 2017, replaced with
    Net.CertificateTransparency.CTRequiredConnectionComplianceStatus2
  </obsolete>
  <owner>estark@chromium.org</owner>
  <summary>
    The compliance of each QUIC connection with the Certificate Transparency
    policy, for connections for which CT compliance is required for the
    connection to succeed. (For example, CT compliance is required for certain
    Certificate Authorities, or a site can opt in to having CT be required.)
    Recorded once on connection setup for applicable connections unless CT
    evaluation has been disabled for that connection or the certificate is
    otherwise invalid.
  </summary>
</histogram>

<histogram
    name="Net.CertificateTransparency.CTRequiredConnectionComplianceStatus.SSL"
    enum="CTComplianceStatus">
  <obsolete>
    Deprecated Nov 2017, replaced with
    Net.CertificateTransparency.CTRequiredConnectionComplianceStatus2
  </obsolete>
  <owner>estark@chromium.org</owner>
  <summary>
    The compliance of each SSL connection with the Certificate Transparency
    policy, for connections for which CT compliance is required for the
    connection to succeed. (For example, CT compliance is required for certain
    Certificate Authorities, or a site can opt in to having CT be required.)
    Recorded once on connection setup for applicable connections unless CT
    evaluation has been disabled for that connection or the certificate is
    otherwise invalid. Not recorded for certificates that chain to
    locally-installed roots.
  </summary>
</histogram>

<histogram base="true"
    name="Net.CertificateTransparency.CTRequiredConnectionComplianceStatus2"
    enum="CTComplianceStatus">
<!-- Name completed by histogram_suffixes name="CertificateTransparencyProtocol" -->

  <owner>estark@chromium.org</owner>
  <summary>
    The compliance of each connection with the Certificate Transparency policy,
    for connections for which CT compliance is required for the connection to
    succeed. (For example, CT compliance is required for certain Certificate
    Authorities, or a site can opt in to having CT be required.) Recorded once
    on connection setup for applicable connections unless CT evaluation has been
    disabled for that connection or the certificate is otherwise invalid. Not
    recorded for certificates that chain to locally-installed roots.
  </summary>
</histogram>

<histogram name="Net.CertificateTransparency.CTRequiredRequestComplianceStatus"
    enum="CTComplianceStatus">
  <owner>estark@chromium.org</owner>
  <summary>
    The compliance of each HTTP request with the Certificate Transparency
    policy, for requests on connections for which CT compliance is required for
    the connection to succeed. (For example, CT compliance is required for
    certain Certificate Authorities, or a site can opt in to having CT be
    required.) Recorded once on request completion for requests on applicable
    connections, unless CT evaluation has been disabled for that connection or
    the certificate is otherwise invalid. Not recorded when the request's
    certificate chains to a locally-installed root.
  </summary>
</histogram>

<histogram name="Net.CertificateTransparency.DnsQueryAuditProofError"
    enum="NetErrorCodes">
  <owner>robpercival@chromium.org</owner>
  <summary>
    Counts of specific error codes returned by LogDnsClient at the end of an
    attempt to obtain an inclusion proof for a certificate from a Certificate
    Transparency log.
  </summary>
</histogram>

<histogram name="Net.CertificateTransparency.DnsQueryDuration" units="ms">
  <owner>robpercival@chromium.org</owner>
  <summary>
    The time taken attempting to obtain an inclusion proof from a Certificate
    Transparency log over DNS. This includes the time taken to obtain the leaf
    index first. Emitted at the end of an attempt. Includes attempts that fail.
  </summary>
</histogram>

<histogram name="Net.CertificateTransparency.DnsQueryDuration.Success"
    units="ms">
  <owner>robpercival@chromium.org</owner>
  <summary>
    The time taken to successfully obtain an inclusion proof from a Certificate
    Transparency log over DNS. This includes the time taken to obtain the leaf
    index first. Emitted at the end of an attempt.
  </summary>
</histogram>

<histogram name="Net.CertificateTransparency.DnsQueryLeafIndexError"
    enum="NetErrorCodes">
  <owner>robpercival@chromium.org</owner>
  <summary>
    Counts of specific error codes returned by LogDnsClient at the end of an
    attempt to obtain a leaf index for a certificate from a Certificate
    Transparency log.
  </summary>
</histogram>

<histogram name="Net.CertificateTransparency.DnsQueryStatus"
    enum="CertificateTransparencyDnsQueryStatus" expires_after="M67">
  <obsolete>
    Replaced by Net.CertificateTransparency.DnsQueryError, which provides the
    full range of net::Error codes rather than summarising them into the limited
    set used by this histogram.
  </obsolete>
  <owner>robpercival@chromium.org</owner>
  <summary>
    The status of each attempt to obtain an inclusion proof from a Certificate
    Transparency log over DNS. This can consist of more than one DNS request.
    Emitted at the end of an attempt.
  </summary>
</histogram>

<histogram name="Net.CertificateTransparency.EVCompliance.QUIC"
    enum="CTComplianceStatus">
  <obsolete>
    Deprecated Nov 2017, replaced with
    Net.CertificateTransparency.EVCompliance2.QUIC
  </obsolete>
  <owner>estark@chromium.org</owner>
  <summary>
    The state of compliance with Certificate Transparency presence requirements
    for each EV certificate. Recorded once on QUIC connection setup when the
    connection uses an EV certificate unless CT evaluation has been disabled for
    that connection or the certificate is invalid.
  </summary>
</histogram>

<histogram name="Net.CertificateTransparency.EVCompliance.SSL"
    enum="CTComplianceStatus">
  <obsolete>
    Deprecated Nov 2017, replaced with
    Net.CertificateTransparency.EVCompliance2.SSL
  </obsolete>
  <owner>estark@chromium.org</owner>
  <summary>
    The state of compliance with Certificate Transparency presence requirements
    for each EV certificate. Recorded once on SSL connection setup when the
    connection uses an EV certificate unless CT evaluation has been disabled for
    that connection or the certificate is invalid.
  </summary>
</histogram>

<histogram base="true" name="Net.CertificateTransparency.EVCompliance2"
    enum="CTComplianceStatus">
<!-- Name completed by histogram_suffixes name="CertificateTransparencyProtocol" -->

  <owner>estark@chromium.org</owner>
  <summary>
    The state of compliance with Certificate Transparency presence requirements
    for each EV certificate. Recorded once on QUIC connection setup when the
    connection uses an EV certificate unless CT evaluation has been disabled for
    that connection or the certificate is invalid. Not recorded for certificates
    that chain to locally-installed roots.
  </summary>
</histogram>

<histogram name="Net.CertificateTransparency.InclusionCheckResult"
    enum="CTLogEntryInclusionCheckResult">
  <owner>eranm@chromium.org</owner>
  <summary>
    The result of an inclusion check for a Certificate Transparency log entry
    (composed of a TLS certificate observed together with Signed Certificate
    Timestamps). Emitted once per (TLS certificate, Signed Certificate
    Timestamp) pair observed and checked for inclusion (check results are
    cached).
  </summary>
</histogram>

<histogram name="Net.CertificateTransparency.MainFrameValidSCTCount">
  <owner>eranm@chromium.org</owner>
  <summary>
    Number of valid Signed Certificate Timestamps (SCTs) present for the
    main-frame resource. Emitted every time a main-frame resource is fetched.
  </summary>
</histogram>

<histogram name="Net.CertificateTransparency.PilotSTHAge" units="ms">
  <owner>eranm@chromium.org</owner>
  <summary>
    Age of Pilot's Signed Tree Head, as observed by the client, in minutes.
    Measuring the age of a particular log's Signed Tree Head will allow more
    informed update frequency of the Component Updater component that provides
    them. Emitted once for every STH update received by the component updater.
  </summary>
</histogram>

<histogram name="Net.CertificateTransparency.RequestComplianceStatus"
    enum="CTComplianceStatus">
  <owner>estark@chromium.org</owner>
  <summary>
    The compliance of each HTTP request with the Certificate Transparency
    policy, recorded once on request completion unless CT evaluation has been
    disabled for that request's connection or the certificate is otherwise
    invalid. A request's connection can be compliant, or it can be non-compliant
    for one of several reasons (not enough Signed Certificate Timestamps [SCTs],
    not diverse enough SCTs, or the build was old so CT compliance wasn't
    checked). Not recorded when the request's certificate chains to a
    locally-installed root.
  </summary>
</histogram>

<histogram name="Net.CertificateTransparency.SCT.SingleVerificationTime"
    units="microseconds" expires_after="M70">
  <owner>estark@chromium.org</owner>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    Time to verify a single SCT (Signed Certificate Timestamps) when setting up
    a TLS connection. Recorded each time a single SCT is verified. Includes not
    just the signature verification but also other operations that are involved
    in verifying an SCT, such as notifying observers and looking up the log that
    issued the SCT.
  </summary>
</histogram>

<histogram name="Net.CertificateTransparency.SCT.VerificationTime"
    units="microseconds" expires_after="M70">
  <owner>estark@chromium.org</owner>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    Time to verify the SCTs (Signed Certificate Timestamps) when setting up a
    TLS connection. Recorded on each connection setup where at least one SCT is
    verified.
  </summary>
</histogram>

<histogram name="Net.CertificateTransparency.SCTOrigin" enum="SCTOrigin">
  <owner>eranm@chromium.org</owner>
  <summary>
    The origin breakdown of Signed Certificate Timestamps (SCTs). Emitted once
    for every SCT when first validated, which means 0 or more times during every
    SSL connection establishment.
  </summary>
</histogram>

<histogram name="Net.CertificateTransparency.SCTsPerConnection">
  <owner>eranm@chromium.org</owner>
  <summary>
    The number of Signed Certificate Timestamps (SCTs) that were available for
    each SSL connection, including SCTs embedded in the certificate. This metric
    measures how many SSL connections had SCTs available. Emitted during every
    SSL connection establishment.
  </summary>
</histogram>

<histogram name="Net.CertificateTransparency.SCTStatus" enum="SCTVerifyStatus">
  <owner>eranm@chromium.org</owner>
  <summary>
    Breakdown of Signed Certificate Timestamps (SCTs) validation status. Emitted
    once for every SCT when first validated, which means 0 or more times during
    every SSL connection establishment.
  </summary>
</histogram>

<histogram name="Net.CertVerifier_First_Job_Latency" units="ms">
  <owner>davidben@chromium.org</owner>
  <summary>
    The actual amount of time spent verifying a certificate using the underlying
    cryptographic APIs. Because parallel verifications for the same certificate
    may be coalesced, histograms such as Net.SSLCertVerificationTime may be
    skewed, due to later verifications taking less overall time. This records
    the overall time spent verifying the first job to capture initialization
    costs.
  </summary>
</histogram>

<histogram name="Net.CertVerifier_Job_Latency" units="ms">
  <owner>rsleevi@chromium.org</owner>
  <summary>
    The actual amount of time spent verifying a certificate using the underlying
    cryptographic APIs. Because parallel verifications for the same certificate
    may be coalesced, histograms such as Net.SSLCertVerificationTime may be
    skewed, due to later verifications taking less overall time. This records
    the overall time spent verifying a single request, regardless of how many
    parallel requests are being served by the verification.
  </summary>
</histogram>

<histogram name="Net.CertVerifier_TrialComparisonResult"
    enum="CertVerifierTrialComparisonResult">
  <owner>mattm@chromium.org</owner>
  <summary>
    If the CertDualVerificationTrial is enabled, each certificate verification
    associated with a (non-incognito) profile which is opted-in to SBER2(Scout)
    will record the outcome of comparing the primary verifier and secondary
    verifier results.
  </summary>
</histogram>

<histogram name="Net.CoalescePotential" enum="CoalescePotentialPackets">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of times we sent N packets, but could have sent N-1 packets.
  </summary>
</histogram>

<histogram name="Net.ComodoDNSExperimentFailureTime" units="ms">
  <obsolete>
    This experiment has concluded.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The amount of time taken before we failed to  resolve the Comodo test DNS
    record. This is an experiment, run in conjuction with Comodo, to test the
    viability of a DNS based certificate revocation mechanism.
  </summary>
</histogram>

<histogram name="Net.ComodoDNSExperimentSuccessTime" units="ms">
  <obsolete>
    This experiment has concluded.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The amount of time taken to successfully resolve the Comodo test DNS record.
    This is an experiment, run in conjuction with Comodo, to test the viability
    of a DNS based certificate revocation mechanism.
  </summary>
</histogram>

<histogram name="Net.Compress.NoProxy.BytesAfterCompression" units="bytes">
  <obsolete>
    Removed as of 02/2015
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The uncompressed number of bytes received per request that was compressed.
    Only includes requests which did not go through an explicit proxy and did
    not go over SSL.
  </summary>
</histogram>

<histogram name="Net.Compress.NoProxy.BytesBeforeCompression" units="bytes">
  <obsolete>
    Removed as of 02/2015
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The compressed number of bytes received per request that was compressed.
    Only includes requests which did not go through an explicit proxy and did
    not go over SSL.
  </summary>
</histogram>

<histogram name="Net.Compress.NoProxy.ShouldHaveBeenCompressed" units="bytes">
  <obsolete>
    Removed as of 02/2015
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The uncompressed number of bytes received per request that was not
    compressed but appears to have been compressible.  Only includes requests
    which did not go through an explicit proxy and did not go over SSL.
  </summary>
</histogram>

<histogram name="Net.Compress.Proxy.BytesAfterCompression" units="bytes">
  <obsolete>
    Removed as of 02/2015
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The uncompressed number of bytes received per request that was compressed.
    Only includes requests sent through a proxy without SSL.
  </summary>
</histogram>

<histogram name="Net.Compress.Proxy.BytesBeforeCompression" units="bytes">
  <obsolete>
    Removed as of 02/2015
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The compressed number of bytes received per request that was compressed.
    Only includes requests sent through a proxy without SSL.
  </summary>
</histogram>

<histogram name="Net.Compress.Proxy.ShouldHaveBeenCompressed" units="bytes">
  <obsolete>
    Removed as of 02/2015
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The uncompressed number of bytes received per request that was not
    compressed but appears to have been compressible.  Only includes requests
    sent through a proxy without SSL.
  </summary>
</histogram>

<histogram name="Net.Compress.SSL.BytesAfterCompression" units="bytes">
  <obsolete>
    Removed as of 02/2015
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The uncompressed number of bytes received per request that was compressed.
    Only includes requests sent over SSL.
  </summary>
</histogram>

<histogram name="Net.Compress.SSL.BytesBeforeCompression" units="bytes">
  <obsolete>
    Removed as of 02/2015
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The compressed number of bytes received per request that was compressed.
    Only includes requests sent over SSL.
  </summary>
</histogram>

<histogram name="Net.Compress.SSL.ShouldHaveBeenCompressed" units="bytes">
  <obsolete>
    Removed as of 02/2015
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The uncompressed number of bytes received per request that was not
    compressed but appears to have been compressible.  Only includes requests
    sent over SSL.
  </summary>
</histogram>

<histogram name="Net.ConnectionTypeCount" enum="ConnectionType">
  <obsolete>
    The count was inaccurate (it counted transactions rather than connections)
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Each bucket is the number of connections of a particular type that the user
    has had during the session.
  </summary>
</histogram>

<histogram name="Net.ConnectionTypeCount2" enum="ConnectionType">
  <obsolete>
    Renamed to match HadConnectionType.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Each bucket is the number of successful connections of a particular type
    that the user has had during the session.
  </summary>
</histogram>

<histogram name="Net.ConnectionTypeCount3" enum="ConnectionType">
  <obsolete>
    Removed May 2016.
  </obsolete>
  <owner>davidben@chromium.org</owner>
  <summary>
    Each bucket is the number of successful connections of a particular type
    that the user has had during the session.
  </summary>
</histogram>

<histogram name="Net.ConnectionTypeFailCount2" enum="ConnectionType">
  <obsolete>
    No longer collected.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Each bucket is the number of failed connections of a particular type that
    the user has had during the session.
  </summary>
</histogram>

<histogram name="Net.ConnectionUsedSSLDeprecatedCipherFallback"
    enum="BooleanDeprecatedCiphers">
  <obsolete>
    Replaced with Net.ConnectionUsedSSLDeprecatedCipherFallback2 in Chrome 44.
  </obsolete>
  <owner>davidben@chromium.org</owner>
  <summary>
    True if an HTTPS connection was made using the deprecated cipher suite
    fallback.
  </summary>
</histogram>

<histogram name="Net.ConnectionUsedSSLDeprecatedCipherFallback2"
    enum="BooleanDeprecatedCiphers">
  <obsolete>
    Removed May 2017.
  </obsolete>
  <owner>davidben@chromium.org</owner>
  <summary>
    For each successful HTTPS request, whether it used the deprecated cipher
    suite fallback.
  </summary>
</histogram>

<histogram name="Net.ConnectionUsedSSLv3Fallback">
  <obsolete>
    Replaced by Net.ConnectionUsedSSLVersionFallback in Chrome 21.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    True if the HTTP request was to a server which requires SSLv3 fallback
  </summary>
</histogram>

<histogram name="Net.ConnectionUsedSSLVersionFallback"
    enum="FallbackSSLVersion">
  <obsolete>
    Replaced with Net.ConnectionUsedSSLVersionFallback2 in Chrome 44.
  </obsolete>
  <owner>agl@chromium.org</owner>
  <summary>
    Nonzero if the HTTP request was to a server which requires SSL version
    fallback.  The value indicates the SSL version the request fell back on.
  </summary>
</histogram>

<histogram name="Net.ConnectionUsedSSLVersionFallback2"
    enum="FallbackSSLVersion">
  <obsolete>
    Removed June 2016.
  </obsolete>
  <owner>davidben@chromium.org</owner>
  <summary>
    For each successful HTTPS request, whether it used the SSL version fallback.
    The value indicates the SSL version the request fell back on
  </summary>
</histogram>

<histogram name="Net.ContentDecodingFailed.FilterType" enum="NetFilterType">
  <obsolete>
    Obsoleted in favor of Net.ContentDecodingFailed2.FilterType below.
  </obsolete>
  <summary>
    For each CONTENT_DECODING_FAILED, record the filter that failed.
  </summary>
</histogram>

<histogram name="Net.ContentDecodingFailed2" enum="NetFilterType2">
  <owner>xunjieli@chromium.org</owner>
  <summary>
    For each CONTENT_DECODING_FAILED, record the filter that failed.
  </summary>
</histogram>

<histogram name="Net.ContentDecodingFailed2.FilterType" enum="NetFilterType2">
  <obsolete>
    Obsoleted in favor of Net.ContentDecodingFailed2 above.
  </obsolete>
  <owner>xunjieli@chromium.org</owner>
  <summary>
    For each CONTENT_DECODING_FAILED, record the filter that failed.
  </summary>
</histogram>

<histogram name="net.CookieBackingStoreUpdateResults"
    enum="BackingStoreResults">
  <obsolete>
    Initial typo; only here to get results from builds before r59117.  See
    &quot;Cookie.&quot; group.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Whether or not updates to the backing store succeeded or failed, recorded
    every update.
  </summary>
</histogram>

<histogram name="net.CookieBetweenAccessIntervalMinutes" units="minutes">
  <obsolete>
    Initial typo; only here to get results from builds before r59117.  See
    &quot;Cookie.&quot; group.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Intervals between access time updates for each cookie.</summary>
</histogram>

<histogram name="net.CookieCount">
  <obsolete>
    Initial typo; only here to get results from builds before r59117.  See
    &quot;Cookie.&quot; group.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Number of cookies in the store (recorded every 10 minutes of active browsing
    time)
  </summary>
</histogram>

<histogram name="net.CookieDeletionCause" enum="CookieDeletionCause">
  <obsolete>
    Initial typo; only here to get results from builds before r59117.  See
    &quot;Cookie.&quot; group.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    For each cookie removed from the store, the reason it was removed.
  </summary>
</histogram>

<histogram name="net.CookieDomainCount">
  <obsolete>
    Initial typo; only here to get results from builds before r59117.  See
    &quot;Cookie.&quot; group.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    For each domain, number of cookies in that domain (recorded every 10 minutes
    of active browsing time).
  </summary>
</histogram>

<histogram name="net.CookieDomainPerEtldp1Count">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    For every top level domain, number of subdomains in that top level domain
    (recorded every 10 minutes of active browsing time).
  </summary>
</histogram>

<histogram name="net.CookieEtldp1Count">
  <obsolete>
    Initial typo; only here to get results from builds before r59117.  See
    &quot;Cookie.&quot; group.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    For every top level domain, number of cookies in that domain (recorded every
    10 minutes of active browsing time).
  </summary>
</histogram>

<histogram name="net.CookieEvictedLastAccessMinutes" units="minutes">
  <obsolete>
    Initial typo; only here to get results from builds before r59117.  See
    &quot;Cookie.&quot; group.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    For each evicted (not expired) cookie, the amount of time since it was last
    used
  </summary>
</histogram>

<histogram name="net.CookieExpirationDurationMinutes" units="minutes">
  <obsolete>
    Initial typo; only here to get results from builds before r59117.  See
    &quot;Cookie.&quot; group.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Number of minutes until cookie expires when set.</summary>
</histogram>

<histogram name="net.CookieTimeGet">
  <obsolete>
    Initial typo; only here to get results from builds before r59117.  See
    &quot;Cookie.&quot; group.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The amount of time (ms) to get cookies for each URL request.
  </summary>
</histogram>

<histogram name="net.CookieTimeLoad">
  <obsolete>
    Initial typo; only here to get results from builds before r59117.  See
    &quot;Cookie.&quot; group.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The amount of time (ms) to load the persistent cookie store at browser
    start.
  </summary>
</histogram>

<histogram name="Net.CountOfAlternateProtocolServers" units="servers">
  <owner>bnc@chromium.org</owner>
  <owner>rch@chromium.org</owner>
  <summary>
    The total number of servers (HostPortPairs) to which alternative protocol
    was used. This counts the number of servers persisted to prefs file.
  </summary>
</histogram>

<histogram name="Net.CountOfAlternateProtocolServers.Memory" units="servers">
  <owner>bnc@chromium.org</owner>
  <owner>rch@chromium.org</owner>
  <summary>
    The total number of servers (HostPortPairs in memory) to which alternative
    protocol was used.
  </summary>
</histogram>

<histogram name="Net.CountOfBrokenAlternativeServices" units="services">
  <owner>wangyix@chromium.org</owner>
  <summary>
    The number of broken alternative services loaded from the prefs file on
    startup. Alternative services allow an origin server to specify additional
    means of interacting with it on the network. A broken alternative service is
    one whose most recent connection attempt failed and whose retry timeout
    period has not yet expired. Recorded when broken alternative services are
    loaded from the prefs file on startup.
  </summary>
</histogram>

<histogram name="Net.CountOfPipelineCapableServers" units="servers">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The total number of servers (HostPortPairs) that support HTTP pipelining.
    This counts the number of servers persisted to prefs file.
  </summary>
</histogram>

<histogram name="Net.CountOfQuicServerInfos" units="configs">
  <owner>zhongyi@chromium.org</owner>
  <summary>
    This counts the number of server configs persisted in prefs file.
  </summary>
</histogram>

<histogram name="Net.CountOfRecentlyBrokenAlternativeServices" units="services">
  <owner>wangyix@chromium.org</owner>
  <summary>
    The number of recently broken alternative services loaded from the prefs
    file on startup. Alternative services allow an origin server to specify
    additional means of interacting with it on the network. A recently broken
    alternative service is one whose most recent connection attempt failed.
    Recorded when broken alternative services are loaded from the prefs file on
    startup.
  </summary>
</histogram>

<histogram name="Net.CountOfSpdyServers">
  <owner>bnc@chromium.org</owner>
  <owner>rch@chromium.org</owner>
  <summary>
    The total number of SPDY server names persisted to prefs file.
  </summary>
</histogram>

<histogram name="Net.CountOfSpdySettings">
  <obsolete>
    Removed on 2016-10-11.
  </obsolete>
  <owner>bnc@chromium.org</owner>
  <owner>rch@chromium.org</owner>
  <summary>
    The total number of SPDY Settings properties persisted to prefs file.
  </summary>
</histogram>

<histogram name="Net.CRLRequestFailedTimeMs" units="ms">
  <obsolete>
    Deprecated 2017-04-21 as it was Linux/CrOS only.
  </obsolete>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    When validating an HTTPS certificate we may have to block to fetch one or
    more revocation lists. This measures the amount of time that failures to get
    CRL information take.
  </summary>
</histogram>

<histogram name="Net.CRLRequestSuccess" enum="BooleanSuccess">
  <obsolete>
    Deprecated 2017-04-21 as it was Linux/CrOS only.
  </obsolete>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    When validating an HTTPS certificate we may have to block to fetch one or
    more revocation lists. This records the fraction of successful requests.
  </summary>
</histogram>

<histogram name="Net.CRLRequestTimeMs" units="ms">
  <obsolete>
    Deprecated 2017-04-21 as it was Linux/CrOS only.
  </obsolete>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    When validating an HTTPS certificate we may have to block to fetch one or
    more revocation lists. This measures the amount of time that each fetch
    takes.
  </summary>
</histogram>

<histogram name="Net.Cronet.CertVerifierCache.DeserializeTime" units="ms">
  <owner>rch@chromium.org</owner>
  <summary>
    Measures time spent to deserialize and populate the
    net::CachingCertVerifier's cache.
  </summary>
</histogram>

<histogram name="Net.Cronet.CertVerifierCache.SerializeTime" units="ms">
  <owner>rch@chromium.org</owner>
  <summary>
    Measures time spent to serialize the net::CachingCertVerifier's cache.
  </summary>
</histogram>

<histogram name="Net.Cronet.PrefsInitTime" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Measures time spent creating the Cronet PrefService, including loading the
    prefs from disk synchronously.
  </summary>
</histogram>

<histogram name="Net.DailyContentLength" units="KB">
  <owner>bolian@chromium.org</owner>
  <summary>
    The total content size in KB of all HTTP/HTTPS response bodies in the
    previous calendar day. The metric is reported when the first response in the
    current day is received.
  </summary>
</histogram>

<histogram name="Net.DailyContentLength_DataReductionProxyEnabled" units="KB">
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    The total content size in KB of all HTTP/HTTPS response bodies in the
    previous calendar day while the data reduction proxy setting was enabled.
    The metric is reported when the first response in the current day is
    received.
  </summary>
</histogram>

<histogram name="Net.DailyContentLength_DataReductionProxyEnabled_Https"
    units="KB">
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    The total content size in KB of all HTTPS response bodies in the previous
    calendar day while the data reduction proxy setting was enabled. The metric
    is reported when the first response in the current day is received.
  </summary>
</histogram>

<histogram name="Net.DailyContentLength_DataReductionProxyEnabled_LongBypass"
    units="KB">
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    The total content size in KB of all long-bypassed HTTP response bodies in
    the  previous calendar day while the data reduction proxy setting was
    enabled. The metric is reported when the first response in the current day
    is received.
  </summary>
</histogram>

<histogram name="Net.DailyContentLength_DataReductionProxyEnabled_ShortBypass"
    units="KB">
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    The total content size in KB of all short-bypassed HTTP response bodies in
    the previous calendar day while the data reduction proxy setting was
    enabled. The metric is reported when the first response in the current day
    is received.
  </summary>
</histogram>

<histogram name="Net.DailyContentLength_DataReductionProxyEnabled_Unknown"
    units="KB">
  <obsolete>
    Deprecated. Moved to
    Net.DailyContentLength_DataReductionProxyEnabled_UnknownBypass in M46.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    The total content size in KB of all HTTP response bodies for requests that
    were not served by the enabled data reduction proxy for unknown reasons in
    the previous calendar day while the data reduction proxy setting was
    enabled. The metric is reported when the first response in the current day
    is received.
  </summary>
</histogram>

<histogram
    name="Net.DailyContentLength_DataReductionProxyEnabled_UnknownBypass"
    units="KB">
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    The total content size in KB of all HTTP response bodies for requests that
    were not served by the enabled data reduction proxy for unknown reasons in
    the previous calendar day while the data reduction proxy setting was
    enabled. The metric is reported when the first response in the current day
    is received.
  </summary>
</histogram>

<histogram name="Net.DailyContentLength_ViaDataReductionProxy" units="KB">
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    The total content size in KB of all HTTP/HTTPS response bodies in the
    previous calendar day via the data reduction proxy. The metric is reported
    when the first response in the current day is received.
  </summary>
</histogram>

<histogram name="Net.DailyContentPercent_DataReductionProxyEnabled" units="%">
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    The percentage of total HTTP/HTTPS response body size while the data
    reduction proxy is enabled to total HTTP/HTTPS response body size in the
    previous calendar day. The metric is reported when the first response in the
    current day is received.
  </summary>
</histogram>

<histogram name="Net.DailyContentPercent_DataReductionProxyEnabled_Https"
    units="%">
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    The percentage of total HTTPS response body size while the data reduction
    proxy is enabled to total HTTP/HTTPS response body size in the previous
    calendar day. The metric is reported when the first response in the current
    day is received.
  </summary>
</histogram>

<histogram name="Net.DailyContentPercent_DataReductionProxyEnabled_LongBypass"
    units="%">
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    The percentage of total long-bypassed response body size while the data
    reduction proxy is enabled to total HTTP/HTTPS response body size in the
    previous calendar day. The metric is reported when the first response in the
    current day is received.
  </summary>
</histogram>

<histogram name="Net.DailyContentPercent_DataReductionProxyEnabled_ShortBypass"
    units="%">
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    The percentage of total short-bypassed response body size while the data
    reduction proxy is enabled to total HTTP/HTTPS response body size in the
    previous calendar day. The metric is reported when the first response in the
    current day is received.
  </summary>
</histogram>

<histogram name="Net.DailyContentPercent_DataReductionProxyEnabled_Unknown"
    units="%">
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    The percentage of total body size of responses that were not served by the
    data reduction proxy for unknown reason while the data reduction proxy is
    enabled to total HTTP/HTTPS response body size in the previous calendar day.
    The metric is reported when the first response in the current day is
    received.
  </summary>
</histogram>

<histogram name="Net.DailyContentPercent_ViaDataReductionProxy" units="%">
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    The percentage of total HTTP/HTTPS response body size via the data reduction
    proxy to total HTTP/HTTPS response body size in the previous calendar day.
    The metric is reported when the first response in the current day is
    received.
  </summary>
</histogram>

<histogram name="Net.DailyContentSavingPercent" units="%">
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    The percentage of data saving in the previous calendar day. A negative
    saving will be shown as zero. The metric is reported when the first response
    in the current day is received.
  </summary>
</histogram>

<histogram name="Net.DailyContentSavingPercent_DataReductionProxyEnabled"
    units="%">
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    The percentage of data saving in the previous calendar day while the data
    reduction proxy was enabled. A negative saving will be shown as zero. This
    only counts responses while the data reduction proxy is enabled. The metric
    is reported when the first response in the current day is received.
  </summary>
</histogram>

<histogram name="Net.DailyContentSavingPercent_DataReductionProxyEnabled_Video"
    units="%">
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    The percentage of data saving in the previous calendar day while the data
    reduction proxy was enabled. A negative saving will be shown as zero. This
    only counts responses while the data reduction proxy is enabled. The metric
    is reported when the first response in the current day is received. If no
    video bytes were received while the data reduction proxy was enabled, the
    metric will not be reported.
  </summary>
</histogram>

<histogram name="Net.DailyContentSavingPercent_ViaDataReductionProxy" units="%">
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    The percentage of data saving in the previous calendar day via the data
    reduction proxy. A negative saving will be shown as zero. This only counts
    responses via the data reduction proxy. The metric is reported when the
    first response in the current day is received.
  </summary>
</histogram>

<histogram name="Net.DailyContentSavingPercent_ViaDataReductionProxy_Video"
    units="%">
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    The percentage of data saving in the previous calendar day via the data
    reduction proxy. A negative saving will be shown as zero. This only counts
    responses via the data reduction proxy. The metric is reported when the
    first response in the current day is received. If no video bytes were
    received via the data reduction proxy, the metric will not be reported.
  </summary>
</histogram>

<histogram name="Net.DailyHttpContentLengthViaDataReductionProxy" units="KB">
  <obsolete>
    Deprecated- see Net.DailyContentLength_ViaDataReductionProxy.
  </obsolete>
  <owner>bolian@chromium.org</owner>
  <summary>
    Total size in KB of all response bodies in the previous calendar day that
    were received through the data reduction proxy.
  </summary>
</histogram>

<histogram name="Net.DailyHttpContentLengthWithDataReductionProxyEnabled"
    units="KB">
  <obsolete>
    Deprecated- see Net.DailyContentLength_DataReductionProxyEnabled
  </obsolete>
  <owner>bolian@chromium.org</owner>
  <summary>
    Total size in KB of all response bodies in the previous calendar day that
    were received when the data reduction proxy was enabled.
  </summary>
</histogram>

<histogram name="Net.DailyHttpContentSavings" units="%">
  <obsolete>
    Deprecated- see Net.DailyContentSavingPercent.
  </obsolete>
  <owner>bolian@chromium.org</owner>
  <summary>
    The percentage of data saving in the previous calendar day. A negative
    saving will be shown as zero.
  </summary>
</histogram>

<histogram name="Net.DailyHttpContentSavings_DataReductionProxy" units="%">
  <obsolete>
    Deprecated- see Net.DailyContentSavingPercent_DataReductionProxyEnabled.
  </obsolete>
  <owner>bolian@chromium.org</owner>
  <summary>
    The percentage of data saving in the previous calendar day when the data
    reduction proxy was enabled for at least some responses during the day. A
    negative saving will be shown as zero.
  </summary>
</histogram>

<histogram name="Net.DailyHttpOriginalContentLength" units="KB">
  <obsolete>
    Deprecated- see Net.DailyOriginalContentLength.
  </obsolete>
  <owner>bolian@chromium.org</owner>
  <summary>
    Total size in KB specified in the X-Original-Content-Length headers of all
    responses in the previous calendar day. If the header is not present in a
    response, the size of the response body is used.
  </summary>
</histogram>

<histogram name="Net.DailyHttpReceivedContentLength" units="KB">
  <obsolete>
    Deprecated- see Net.DailyContentLength.
  </obsolete>
  <owner>bolian@chromium.org</owner>
  <summary>
    Total size in KB of all response bodies in the previous calendar day.
  </summary>
</histogram>

<histogram name="Net.DailyOriginalContentLength" units="KB">
  <owner>bolian@chromium.org</owner>
  <summary>
    The total size in KB specified in the X-Original-Content-Length headers of
    all HTTP/HTTPS response bodies in the previous calendar day. If the header
    is not present in a response, the size of the response body is used. The
    metric is reported when the first response in the current day is received.
  </summary>
</histogram>

<histogram name="Net.DailyOriginalContentLength_DataReductionProxyEnabled"
    units="KB">
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    The total size in KB specified in the X-Original-Content-Length headers of
    all HTTP/HTTPS response bodies in the previous calendar day while the data
    reduction proxy is enabled. If the header is not present in a response, the
    size of the response body is used. The metric is reported when the first
    response in the current day is received.
  </summary>
</histogram>

<histogram name="Net.DailyOriginalContentLength_ViaDataReductionProxy"
    units="KB">
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    The total size in KB specified in the X-Original-Content-Length headers of
    all HTTP/HTTPS response bodies in the previous calendar day via the data
    reduction proxy. If the header is not present in a response, the size of the
    response body is used. The metric is reported when the first response in the
    current day is received.
  </summary>
</histogram>

<histogram name="Net.DailyReceivedContentViaDataReductionProxy" units="%">
  <obsolete>
    Deprecated- see Net.DailyContentPercent_ViaDataReductionProxy.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    The percentage of Net.DailyHttpContentLengthViaDataReductionProxy in
    Net.DailyHttpReceivedContentLength.
  </summary>
</histogram>

<histogram name="Net.DailyReceivedContentWithDataReductionProxyEnabled"
    units="%">
  <obsolete>
    Deprecated- see Net.DailyContentPercent_DataReductionProxyEnabled.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    The percentage of Net.DailyHttpContentLengthWithDataReductionProxyEnabled in
    Net.DailyHttpReceivedContentLength.
  </summary>
</histogram>

<histogram name="Net.DailyUserVisibleSavingsPercent_DataReductionProxyEnabled"
    units="%">
  <obsolete>
    Removed in Chrome 57.
  </obsolete>
  <owner>kundaji@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The percentage of data savings in past
    |DataReductionProxy::kNumDaysInHistorySummary| days. This number is
    displayed to users as their data savings.
  </summary>
</histogram>

<histogram name="Net.DailyUserVisibleSavingsSize_DataReductionProxyEnabled"
    units="KB">
  <obsolete>
    Removed in Chrome 57.
  </obsolete>
  <owner>kundaji@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The total data saved in KB in past
    |DataReductionProxy::kNumDaysInHistorySummary| days. This number is used to
    compute the data savings displayed to the user.
  </summary>
</histogram>

<histogram name="Net.DetachableResourceHandler.Duration" units="ms">
  <obsolete>
    Removed in Chrome 64.
  </obsolete>
  <owner>yhirano@chromium.org</owner>
  <summary>
    Duration of time that a request associated with DetachableResourceHandler
    takes.
  </summary>
</histogram>

<histogram name="Net.DhcpWpadCancelTime" units="ms">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures time from initiating a fetch of a PAC file from DHCP WPAD to
    cancellation of the fetch. For a given fetch, only one of the cancellation
    or completion histograms will be added to.
  </summary>
</histogram>

<histogram name="Net.DhcpWpadCompletionTime" units="ms">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures time from initiating a fetch of a PAC file from DHCP WPAD to
    completion of the fetch. For a given fetch, only one of the cancellation or
    completion histograms will be added to.
  </summary>
</histogram>

<histogram name="Net.DhcpWpadFetchError" enum="NetErrorCodes">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Tracks the net error codes received when the DHCP WPAD fetch fails to
    retrieve a PAC file (including PAC_NOT_IN_DHCP, which is not really an error
    but an indication that a PAC URL was not configured in DHCP).
  </summary>
</histogram>

<histogram name="Net.DhcpWpadGetAdaptersAddressesError"
    enum="ErrorCodesGetAdaptersAddresses">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Tracks the frequency of each of the different known error codes of calling
    the GetAdaptersAddresses Win32 API.
  </summary>
</histogram>

<histogram name="Net.DhcpWpadGetAdaptersAddressesTime" units="ms">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Measures the time taken to call the GetAdaptersAddresses Win32 API, to
    validate our understanding that it should complete quickly enough to call
    synchronously from the network thread.
  </summary>
</histogram>

<histogram name="Net.DhcpWpadNumAdaptersAtWaitTimer">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Total number of adapters enabled for DHCP as seen when the wait timer in the
    DHCP WPAD code hits. This timer fires after a timeout from when we get some
    information from the first adapter to finish.
  </summary>
</histogram>

<histogram name="Net.DhcpWpadNumPendingAdaptersAtWaitTimer">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Number of adapters enabled for DHCP that we have not completed retrieving
    information for, as seen when the wait timer in the DHCP WPAD code hits.
    This timer fires after a timeout from when we get some information from the
    first adapter to finish.
  </summary>
</histogram>

<histogram name="Net.DhcpWpadUnhandledDhcpError">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Counts the number of errors from the DhcpRequestParams API that we do not
    have specific handling for, so that we can see if there is an abnormally
    high rate.
  </summary>
</histogram>

<histogram name="Net.DiskCache.Size" units="MB">
  <obsolete>
    Removed in Chrome 65.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    The sum of the size of all files in the HTTP cache directory.

    This is recorded on startup, and then every 24 hours afterwards. However, it
    is only recorded for 0.1% of profiles, to reduce overhead for most users.
    This is meant to be a temporary metric to help debug a potential HTTP cache
    leak. We do not yet know which milestone we expect it to be removed in.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsTask.ErrorBeforeFallback.Fast" enum="NetErrorCodes">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Counts of specific error codes returned by DnsTask. Only counts failures
    that took less than 10ms, which are probably local failures.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsTask.ErrorBeforeFallback.Slow" enum="NetErrorCodes">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Counts of specific error codes returned by DnsTask. Only counts failures
    that took at least 10ms, which are probably remote failures or connectivity
    problems.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsTask.Errors" enum="NetErrorCodes">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Counts of specific error codes returned by DnsTask if a subsequent ProcTask
    succeeded.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsTask.FailureTime" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time taken by DnsTask in resolutions that failed. Excludes time
    spent in the subsequent fallback.
  </summary>
</histogram>

<histogram name="Net.DNS.DnsTask.SuccessTime" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time taken by DnsTask in resolutions that succeeded.
  </summary>
</histogram>

<histogram name="Net.DNS.JobQueueTime" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the time the HostResolverImpl::Job was created and the
    time the Job was started.
  </summary>
</histogram>

<histogram name="Net.DNS.JobQueueTimeAfterChange" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time elapsed between the last time the priority of a HostResolverImpl::Job
    changed (when a Request was attached or detached) and the time the Job was
    started.
  </summary>
</histogram>

<histogram name="Net.DNS.ProcTask.FailureTime" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time taken by ProcTask in resolutions that failed.
  </summary>
</histogram>

<histogram name="Net.DNS.ProcTask.SuccessTime" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time taken by ProcTask in resolutions that succeeded.
  </summary>
</histogram>

<histogram name="Net.DNS.ResolveCategory" enum="ResolutionCategory">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Whether a DNS resolution (single HostResolverImpl::Job) succeeded or failed,
    and whether it was speculative.
  </summary>
</histogram>

<histogram name="Net.DNS.ResolveError.Fast" enum="NetErrorCodes">
  <owner>mgersh@chromium.org</owner>
  <summary>
    For DNS resolutions that failed after less than 10 ms, which are probably
    local failures, what error code the jobs failed with.
  </summary>
</histogram>

<histogram name="Net.DNS.ResolveError.Slow" enum="NetErrorCodes">
  <owner>mgersh@chromium.org</owner>
  <summary>
    For DNS resolutions that failed after at least 10 ms, which are probably
    remote failures or connectivity problems, what error code the jobs failed
    with.
  </summary>
</histogram>

<histogram name="Net.DNS.ResolveFailureTime" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time taken by HostResolverImpl::Job in resolutions that failed.
    This is the time to resolve a hostname from start to finish. The main
    histogram and by-priority versions exclude speculative requests.
  </summary>
</histogram>

<histogram name="Net.DNS.ResolveSuccessTime" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time taken by HostResolverImpl::Job in resolutions that
    succeeded. This is the time to resolve a hostname from start to finish. The
    main histogram and by-priority versions exclude speculative requests.
  </summary>
</histogram>

<histogram name="Net.DNS.ResultAfterMalformedResponse"
    enum="MalformedResponseResult">
  <owner>mgersh@chromium.org</owner>
  <summary>
    When DnsUDPAttempt gets a malformed response, it returns an error but
    continues running. This histogram records all attempt outcomes that are
    returned to the transaction once a malformed response has been received,
    including the original malformed response.
  </summary>
</histogram>

<histogram name="Net.DNS.TotalTime" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time since a HostResolverImpl::Resolve request to the time a
    result is posted. Excludes canceled, evicted, and aborted requests. Includes
    cache hits (recorded as 0). Excludes speculative requests.
  </summary>
</histogram>

<histogram name="Net.DNS.TotalTimeNotCached" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Duration of time since a HostResolverImpl::Resolve request to the time a
    result is posted. Excludes canceled, evicted, and aborted requests and
    requests that returned synchronously (such as cache hits). Excludes
    speculative requests.
  </summary>
</histogram>

<histogram name="Net.DNS_Resolution_And_TCP_Connection_Latency">
  <obsolete>
    Deprecated- see Net.DNS_Resolution_And_TCP_Connection_Latency2
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
</histogram>

<histogram name="Net.Dns_Resolution_And_TCP_Connection_Latency">
  <obsolete>
    Deprecated- see Net.DNS_Resolution_And_TCP_Connection_Latency2
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
</histogram>

<histogram name="Net.DNS_Resolution_And_TCP_Connection_Latency2" units="ms">
  <owner>mmenke@chromium.org</owner>
  <summary>
    The time measured before starting DNS lookup until after the connection is
    complete.
  </summary>
</histogram>

<histogram name="Net.Dns_Resolution_And_TCP_Connection_Latency2">
  <obsolete>
    Deprecated- see Net.DNS_Resolution_And_TCP_Connection_Latency2
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
</histogram>

<histogram name="Net.DNSNameCompliantIfValid" enum="Boolean">
  <obsolete>
    Deprecated 07/2017, not necessary to determine deprecation for invalid DNS
    names.
  </obsolete>
  <owner>palmer@chromium.org</owner>
  <summary>
    True if |net::IsCanonicalizedHostCompliant| returns true. Used to see if
    IsCanonicalizedHostCompliant() runs afoul of real websites. This histogram
    is recorded when converting dotted DNS names into DNS query form, in
    preparation for issuing a DNS request. This histogram is only recorded if
    Net.ValidDNSName is true.
  </summary>
</histogram>

<histogram name="Net.DoubleGetExperiment_InitialResponseMethod"
    enum="DoubleGetExperimentMethods">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of HTTP request responses with MS Office Docs MIME types. The
    responses are classified based on their method type and cacheability (POST,
    cacheable GET and non-cacheable GET). The histogram is used in Double GET
    Experiment, where successful non-cacheable GET requests are intercepted
    after initial response and repeated in order to determine how much reissuing
    non-cacheable GET requests influences their error rate. The histogram tracks
    only initial requests (not the repeated ones).
  </summary>
</histogram>

<histogram name="Net.DoubleGetExperiment_ResponseCode">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The response codes encountered for GET request repeated in Double GET
    Experiment. In the experiment successful non-cacheable GET requests are
    intercepted after initial response and repeated. The goal of the experiment
    is to measure how much reissuing non-cacheable GET requests influences their
    error rate.
  </summary>
</histogram>

<histogram name="Net.DownloadBandwidth">
  <obsolete>
    Deprecated as of 03/2015.  No longer generated.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Kbps on download streams exceeding 25KB.  Measures from the beginning of the
    first byte received until the end of flowing data.
  </summary>
</histogram>

<histogram name="Net.ErrAborted.CountPerUpload" units="aborts">
  <obsolete>
    Deprecated in favor of Net.ErrAborted.CountPerUpload2 which has a higher
    upper bound
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The count of the ABORTED bucket in Net.ErrorCodesForMainFrame3 at the time
    histograms are being uploaded.
  </summary>
</histogram>

<histogram name="Net.ErrAborted.CountPerUpload2" units="aborts">
  <owner>csharrison@chromium.org</owner>
  <summary>
    The count of the ABORTED bucket in Net.ErrorCodesForMainFrame3 at the time
    histograms are being uploaded.
  </summary>
</histogram>

<histogram name="Net.ErrAborted.ProportionPerUpload" units="%">
  <owner>csharrison@chromium.org</owner>
  <summary>
    The bucket proportion of the ABORTED bucket in Net.ErrorCodesForMainFrame3
    at the time histograms are being uploaded.
  </summary>
</histogram>

<histogram name="Net.ErrAborted.ReceivedBytes" units="bytes">
  <obsolete>
    Removed from Chromium as of 2018/7/2.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The TotalReceivedBytes() at the time the request finishes with ERR_ABORTED.
  </summary>
</histogram>

<histogram name="Net.ErrAborted.SentBytes" units="bytes">
  <obsolete>
    Removed from Chromium as of 2018/7/2.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The TotalSentBytes() at the time the request finishes with ERR_ABORTED.
  </summary>
</histogram>

<histogram name="Net.ErrorCodesForHTTPSGoogleMainFrame" enum="NetErrorCodes">
  <obsolete>
    Deprecated as of 2012/5/16, replaced by
    Net.ErrorCodesForHTTPSGoogleMainFrame2, which measures the same data but
    includes ERR_ABORT and OK.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Errors resulting from loading pages from https://www.google.com. Note that
    this only counts the errors in &quot;main frames&quot;, so it is a measure
    of the error pages that users actually see (it does not for example count
    the error codes for subresoures on a page). This is a temporary histogram,
    added in order to debug query loss from the SSL Search launch.
  </summary>
</histogram>

<histogram name="Net.ErrorCodesForHTTPSGoogleMainFrame2" enum="NetErrorCodes">
  <obsolete>
    Deprecated as of 7/2018, replaced by Net.ErrorCodesForHTTPSGoogleMainFrame3.
  </obsolete>
  <owner>mmenke@chromium.org</owner>
  <summary>
    Positive net error codes that requests for pages end with, including net::OK
    and net::ERR_ABORTED.  This only counts loads in &quot;main frames&quot; for
    https://www.google.com. Subresources or main frame navigations to other
    origins are not included.
  </summary>
</histogram>

<histogram name="Net.ErrorCodesForHTTPSGoogleMainFrame3" enum="NetErrorCodes">
  <owner>mmenke@chromium.org</owner>
  <summary>
    Positive net error codes that requests for pages end with, including net::OK
    and net::ERR_ABORTED.  This only counts loads in &quot;main frames&quot; for
    https://www.google.com (it does not for example count the error codes for
    subresoures on a page). It excludes main frame navigations that are
    converted to downloads (unless they fail / are aborted before it's known
    that they would be a download), and requests handled externally (like mailto
    links).
  </summary>
</histogram>

<histogram name="Net.ErrorCodesForImages" enum="NetErrorCodes">
  <obsolete>
    Deprecated as of 7/2018, replaced by Net.ErrorCodesForImages2, which is
    recorded in a net-service friendly way.
  </obsolete>
  <owner>skonig@chromium.org</owner>
  <owner>hbengali@chromium.org</owner>
  <summary>
    Net error codes that requests for images end with, including net::OK and
    net:ERR_ABORTED.
  </summary>
</histogram>

<histogram name="Net.ErrorCodesForImages2" enum="NetErrorCodes">
  <owner>skonig@chromium.org</owner>
  <owner>hbengali@chromium.org</owner>
  <summary>
    Net error codes that requests for images end with, including net::OK and
    net:ERR_ABORTED.
  </summary>
</histogram>

<histogram name="Net.ErrorCodesForMainFrame" enum="NetErrorCodes">
  <obsolete>
    Deprecated as of 2011/5/24, replaced by Net.ErrorCodesForMainFrame2, which
    measures the same data but uses a different bucket structure (adds guard
    buckets).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Positive net error code that a page failed with. Note that this only counts
    the errors in &quot;main frames&quot;, so it is a measure of the error pages
    that users actually see (it does not for example count the error codes for
    subresoures on a page).
  </summary>
</histogram>

<histogram name="Net.ErrorCodesForMainFrame2" enum="NetErrorCodes">
  <obsolete>
    Deprecated as of 2012/5/16, replaced by Net.ErrorCodesForMainFrame3, which
    measures the same data but includes ERR_ABORTED and OK.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Positive net error code that a page failed with. Note that this only counts
    the errors in &quot;main frames&quot;, so it is a measure of the error pages
    that users actually see (it does not for example count the error codes for
    subresoures on a page).
  </summary>
</histogram>

<histogram name="Net.ErrorCodesForMainFrame3" enum="NetErrorCodes">
  <obsolete>
    Deprecated as of 7/2018, replaced by Net.ErrorCodesForMainFrame4, which is
    recorded in a net-service friendly way.
  </obsolete>
  <owner>mmenke@chromium.org</owner>
  <summary>
    Positive net error codes that requests for pages end with, including net::OK
    and net::ERR_ABORTED.  This only counts loads in &quot;main frames&quot; (it
    does not for example count the error codes for subresoures on a page).
  </summary>
</histogram>

<histogram name="Net.ErrorCodesForMainFrame4" enum="NetErrorCodes">
  <owner>mmenke@chromium.org</owner>
  <summary>
    Positive net error codes that requests for pages end with, including net::OK
    and net::ERR_ABORTED.  This only counts loads in &quot;main frames&quot; (it
    does not for example count the error codes for subresoures on a page). It
    excludes main frame navigations that are converted to downloads (unless they
    fail / are aborted before it's known that they would be a download), and
    requests handled externally (like mailto links).
  </summary>
</histogram>

<histogram name="Net.ErrorCodesForSubresources" enum="NetErrorCodes">
  <obsolete>
    Deprecated as of 2012/5/16, replaced by Net.ErrorCodesForSubresources2,
    which measures the same data but includes ERR_ABORT and OK.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Positive net error code that a page failed with. Note that this only counts
    the errors in &quot;subresources&quot;.
  </summary>
</histogram>

<histogram name="Net.ErrorCodesForSubresources2" enum="NetErrorCodes">
  <obsolete>
    Deprecated as of 7/2018, replaced by Net.ErrorCodesForSubresources3, which
    is recorded in a net-service friendly way.
  </obsolete>
  <owner>mmenke@chromium.org</owner>
  <summary>
    Net error codes that requests for &quot;subresources&quot; end with,
    including net::OK and net::ERR_ABORTED.
  </summary>
</histogram>

<histogram name="Net.ErrorCodesForSubresources3" enum="NetErrorCodes">
  <owner>mmenke@chromium.org</owner>
  <summary>
    Net error codes that requests for &quot;subresources&quot; end with,
    including net::OK and net::ERR_ABORTED.
  </summary>
</histogram>

<histogram name="Net.ErrorCodesForTLS13ExperimentMainFrame"
    enum="NetErrorCodes">
  <obsolete>
    Deprecated as of 7/2018, replaced by
    Net.ErrorCodesForTLS13ExperimentMainFrame2, which is recorded in a
    net-service friendly way.
  </obsolete>
  <owner>svaldez@chromium.org</owner>
  <summary>
    Positive net error codes that requests for pages end with, including net::OK
    and net::ERR_ABORTED.  This only counts loads in &quot;main frames&quot; for
    endpoints used in the initial TLS 1.3 deployment. Subresources or main frame
    navigations to other origins are not included.
  </summary>
</histogram>

<histogram name="Net.ErrorCodesForTLS13ExperimentMainFrame2"
    enum="NetErrorCodes">
  <owner>svaldez@chromium.org</owner>
  <summary>
    Positive net error codes that requests for pages end with, including net::OK
    and net::ERR_ABORTED.  This only counts loads in &quot;main frames&quot; for
    endpoints used in the initial TLS 1.3 deployment. Subresources or main frame
    navigations to other origins are not included.
  </summary>
</histogram>

<histogram name="Net.ErrorPageButtonPressedWhileInUnexpectedState"
    enum="ErrorPageButton">
  <obsolete>
    Deprecated as of 2015/8/21
  </obsolete>
  <owner>mmenke@chromium.org</owner>
  <summary>
    Temporary histogram to investigate http://crbug.com/500556.  Records which
    button on the network error page was pushed when either the URL Blink
    reports for the page is not the internal error page URL or the
    NetErrorHelper core has no error information for the current page (or both).
  </summary>
</histogram>

<histogram name="Net.ErrorPageButtonPressUnexpectedStates"
    enum="ErrorPageUnexpectedStates">
  <obsolete>
    Deprecated as of 2015/8/21
  </obsolete>
  <owner>mmenke@chromium.org</owner>
  <summary>
    Temporary histogram to investigate http://crbug.com/500556.  Records
    whether, when the handler for a button press on the network error page runs,
    which of the following are or are not true:  The URL Blink reports for the
    page is not the internal error page URL or the NetErrorHelper core has no
    error information for the current page.
  </summary>
</histogram>

<histogram name="Net.ErrorPageCounts" enum="NetErrorPageEvents">
  <owner>mmenke@chromium.org</owner>
  <summary>
    Counts of various events that can occur on the network error page. Note that
    this histogram enum buckets are not mutually exclusive and so a single error
    page load might report samples into multiple ones. Each bucket has
    descriptions that further explain the context of their samples.
  </summary>
</histogram>

<histogram name="Net.ErrorPageCounts.NavigationCorrectionLinksShown"
    enum="NetErrorNavigationCorrectionTypes">
  <owner>edwardjung@chromium.org</owner>
  <summary>
    Counts of the type of navigation correction suggestions shown on the network
    error page. Multiple suggestions can be shown at the same time.
  </summary>
</histogram>

<histogram name="Net.ErrorPageCounts.NavigationCorrectionLinksUsed"
    enum="NetErrorNavigationCorrectionTypes">
  <owner>edwardjung@chromium.org</owner>
  <summary>
    Usage of navigation correction suggestions shown on the network error page.
  </summary>
</histogram>

<histogram name="Net.ErrorResponseHasContentMainFrame" enum="BooleanSuccess">
  <obsolete>
    Deprecated 10/2016.
  </obsolete>
  <owner>mmenke@chromium.org</owner>
  <summary>
    The number of main frame 4xx/5xx responses that have content, to determine
    if it's worth hooking up an error page for those that don't.  Intended to be
    removed from the binary soon.
  </summary>
</histogram>

<histogram name="Net.ErrorResponseHasContentNonMainFrame" enum="BooleanSuccess">
  <obsolete>
    Deprecated 10/2016.
  </obsolete>
  <owner>mmenke@chromium.org</owner>
  <summary>
    The number of non-main frame 4xx/5xx responses that have content, to
    determine if it's worth hooking up an error page for those that don't.
    Intended to be removed from the binary soon.
  </summary>
</histogram>

<histogram name="Net.ExpectCTHeader.ParseSuccess" enum="BooleanSuccess">
  <owner>estark@chromium.org</owner>
  <summary>
    Sites can send an Expect-CT header to Chrome to indicate that they intend
    their sites to comply with Chrome's Certificate Transparency policy. This
    histogram is recorded whenever an Expect-CT header is processed on a
    connection. True indicates that the header parsed successfully, and false
    indicates that there was a parse failure.
  </summary>
</histogram>

<histogram name="Net.ExpectCTHeader.PolicyComplianceOnConnectionSetup"
    enum="CTComplianceStatus">
  <owner>estark@chromium.org</owner>
  <summary>
    Sites can send an Expect-CT header to Chrome to indicate that they intend
    their sites to comply with Chrome's Certificate Transparency policy. This
    histogram is recorded on connection setup, whenever Chrome connects to an
    Expect-CT site using a publicly trusted root. The histogram records the CT
    policy compliance status of the connection.
  </summary>
</histogram>

<histogram name="Net.ExpectCTHeader.PolicyComplianceOnHeaderProcessing"
    enum="CTComplianceStatus">
  <owner>estark@chromium.org</owner>
  <summary>
    Sites can send an Expect-CT header to Chrome to indicate that they intend
    their sites to comply with Chrome's Certificate Transparency policy. This
    histogram is recorded whenever an Expect-CT header is successfully parsed on
    a connection that chains to a publicly trusted root. The histogram records
    the CT policy compliance status of the connection on which the header was
    received.
  </summary>
</histogram>

<histogram name="Net.ExpectCTHeaderResult" enum="ExpectCTHeaderResult">
  <obsolete>
    Deprecated 04/2017.
  </obsolete>
  <owner>estark@chromium.org</owner>
  <summary>
    Sites can send an Expect-CT header to Chrome to indicate that they want a
    report to be sent when the connection does not comply with Certificate
    Transparency policy. This histogram is recorded whenever Chrome receives an
    Expect-CT header, and it records the result of processing the header, such
    as whether it was ignored due to a bad value.
  </summary>
</histogram>

<histogram name="Net.FileError_Flush">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    System error code that a file Flush failed with.  The code is OS dependent,
    so when looking at the histogram don't mix OSes.
  </summary>
</histogram>

<histogram name="Net.FileError_GetSize">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    System error code that a file GetSize failed with.  The code is OS
    dependent, so when looking at the histogram don't mix OSes.
  </summary>
</histogram>

<histogram name="Net.FileError_Open">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    System error code that a file Open failed with.  The code is OS dependent,
    so when looking at the histogram don't mix OSes.
  </summary>
</histogram>

<histogram name="Net.FileError_Read">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    System error code that a file Read failed with.  The code is OS dependent,
    so when looking at the histogram don't mix OSes.
  </summary>
</histogram>

<histogram name="Net.FileError_Seek">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    System error code that a file Seek failed with.  The code is OS dependent,
    so when looking at the histogram don't mix OSes.
  </summary>
</histogram>

<histogram name="Net.FileError_SetEof">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    System error code that a file SetEof failed with.  The code is OS dependent,
    so when looking at the histogram don't mix OSes.
  </summary>
</histogram>

<histogram name="Net.FileError_Write">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    System error code that a file Write failed with.  The code is OS dependent,
    so when looking at the histogram don't mix OSes.
  </summary>
</histogram>

<histogram name="Net.FileErrorRange_Flush">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    System error code range that a file Flush failed with.  Any value other than
    0 indicates that we have received errors in a range outside of the one in
    which we recorded the specific errors in Net.FileError_Flush.  The code is
    OS dependent, so when looking at the histogram don't mix OSes.
  </summary>
</histogram>

<histogram name="Net.FileErrorRange_GetSize">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    System error code range that a file GetSize failed with.  Any value other
    than 0 indicates that we have received errors in a range outside of the one
    in which we recorded the specific errors in Net.FileError_GetSize.  The code
    is OS dependent, so when looking at the histogram don't mix OSes.
  </summary>
</histogram>

<histogram name="Net.FileErrorRange_Open">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    System error code range that a file Open failed with.  Any value other than
    0 indicates that we have received errors in a range outside of the one in
    which we recorded the specific errors in Net.FileError_Open.  The code is OS
    dependent, so when looking at the histogram don't mix OSes.
  </summary>
</histogram>

<histogram name="Net.FileErrorRange_Read">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    System error code range that a file Read failed with.  Any value other than
    0 indicates that we have received errors in a range outside of the one in
    which we recorded the specific errors in Net.FileError_Read.  The code is OS
    dependent, so when looking at the histogram don't mix OSes.
  </summary>
</histogram>

<histogram name="Net.FileErrorRange_Seek">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    System error code range that a file Seek failed with.  Any value other than
    0 indicates that we have received errors in a range outside of the one in
    which we recorded the specific errors in Net.FileError_Seek.  The code is OS
    dependent, so when looking at the histogram don't mix OSes.
  </summary>
</histogram>

<histogram name="Net.FileErrorRange_SetEof">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    System error code range that a file SetEof failed with.  Any value other
    than 0 indicates that we have received errors in a range outside of the one
    in which we recorded the specific errors in Net.FileError_SetEof.  The code
    is OS dependent, so when looking at the histogram don't mix OSes.
  </summary>
</histogram>

<histogram name="Net.FileErrorRange_Write">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    System error code range that a file Write failed with.  Any value other than
    0 indicates that we have received errors in a range outside of the one in
    which we recorded the specific errors in Net.FileError_Write.  The code is
    OS dependent, so when looking at the histogram don't mix OSes.
  </summary>
</histogram>

<histogram name="Net.ForceAlternativeService" enum="BooleanForced">
  <obsolete>
    Data collection ended, corresponding feature removed.
  </obsolete>
  <owner>bnc@chromium.org</owner>
  <summary>
    Track usage of alternative services forced by the force-alt-protocols
    command line flag.  Triggered each time alternative services are queried for
    a given origin and the command line flag would make a difference (that is,
    there is no advertised alternative service for that origin).
  </summary>
</histogram>

<histogram name="Net.FoundSystemTrustRootsAndroid" enum="Boolean"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Whether or not system installed trust anchors could be distinguished from
    user installed trust anchors. Recorded on first certificate verification on
    Android 4.2 and later.
  </summary>
</histogram>

<histogram name="Net.FtpDataConnectionErrorCount" enum="FtpDataConnectionError">
  <owner>phajdan.jr@chromium.org</owner>
  <summary>The number of times each FTP Error was observed.</summary>
</histogram>

<histogram name="Net.FtpDataConnectionErrorHappened"
    enum="FtpDataConnectionError">
  <owner>phajdan.jr@chromium.org</owner>
  <summary>
    The number of Chrome sessions which encountered the indicates FTP Error.
    This prevents allowing a user that retried a connection many times (getting
    an error each time) from biasing the tallies.
  </summary>
</histogram>

<histogram name="Net.FtpServerTypeCount" enum="FtpServerType">
  <obsolete>
    Replaced by Net.FtpServerTypeCount2 on 2012-11-03.
  </obsolete>
  <owner>phajdan.jr@chromium.org</owner>
  <summary>
    Each bucket is the number of times the FTP server type was encountered.
  </summary>
</histogram>

<histogram name="Net.FtpServerTypeCount2" enum="FtpServerType2">
  <owner>phajdan.jr@chromium.org</owner>
  <summary>
    Each bucket is the number of times the FTP server type was encountered.
  </summary>
</histogram>

<histogram name="Net.GetProxyForUrl_FAIL" units="ms">
  <obsolete>
    Removed at some time before 2014/09/15.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time spent waiting for WinHttpGetProxyForUrl to return with error.
  </summary>
</histogram>

<histogram name="Net.GetProxyForUrl_OK" units="ms">
  <obsolete>
    Removed at some time before 2014/09/15.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time spent waiting for WinHttpGetProxyForUrl to return with success.
  </summary>
</histogram>

<histogram name="Net.GoogleConnectionInappropriateFallback"
    enum="BooleanInappropriateFallback">
  <obsolete>
    Removed June 2016.
  </obsolete>
  <owner>davidben@chromium.org</owner>
  <summary>
    Records a sample for each HTTPS request to a Google server that either
    succeeded or received an inappropriate_fallback alert. This is used to
    estimate how frequently the fallback is used to recover from a spurious
    network failure.
  </summary>
</histogram>

<histogram name="Net.GoogleConnectionUsedSSLVersionFallback"
    enum="FallbackSSLVersion">
  <obsolete>
    Replaced with Net.GoogleConnectionUsedSSLVersionFallback2 in Chrome 44.
  </obsolete>
  <owner>agl@chromium.org</owner>
  <summary>
    Nonzero if the HTTP request was to a Google server which required SSL
    version fallback. The value indicates the SSL version the request fell back
    on. Since Google servers support TLS 1.2, any fallback is an indication of
    network middleware problems.
  </summary>
</histogram>

<histogram name="Net.GoogleConnectionUsedSSLVersionFallback2"
    enum="FallbackSSLVersion">
  <obsolete>
    Removed June 2016.
  </obsolete>
  <owner>davidben@chromium.org</owner>
  <summary>
    For each successful HTTPS request to a Google server, whether it used the
    SSL version fallback. The value indicates the SSL version the request fell
    back on. Since Google servers support TLS 1.2 and FALLBACK_SCSV, any
    fallback is an indication of a broken local SSL MITM proxy.
  </summary>
</histogram>

<histogram name="Net.GzipEncodingFixupResult" enum="GzipEncodingFixupResult">
  <obsolete>
    Removed around 2015/03/18. The code which implemented Gzip encoding fixup
    was removed.
  </obsolete>
  <owner>asanka@chromium.org</owner>
  <summary>
    Resources are sometimes transferred with an incorrect encoding type of gzip.
    net::Filter::FixupEncodingTypes() attempts to correct for these situations
    by applying a set of heuristics. This histogram counts the frequency of
    usage of these heuristics in the wild.
  </summary>
</histogram>

<histogram name="Net.HadConnectionType" enum="ConnectionType">
  <obsolete>
    The count was inaccurate (it counted transactions rather than connections).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Each bucket is a boolean (0 or 1) indicating whether the user has had a
    connection of that type during the session.
  </summary>
</histogram>

<histogram name="Net.HadConnectionType2" enum="ConnectionType">
  <obsolete>
    This statistic measures successful and failed connections, the new one only
    measures successful ones.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Each bucket is a boolean (0 or 1) indicating whether the user has had a
    connection of that type during the session.
  </summary>
</histogram>

<histogram name="Net.HadConnectionType3" enum="ConnectionType">
  <obsolete>
    Removed May 2016.
  </obsolete>
  <owner>davidben@chromium.org</owner>
  <summary>
    Each bucket is a boolean (0 or 1) indicating whether the user has had a
    successful connection of that type during the session.
  </summary>
</histogram>

<histogram name="Net.HadFtpServerType" enum="FtpServerType">
  <obsolete>
    Replaced by Net.HadFtpServerType2 on 2012-11-13.
  </obsolete>
  <owner>phajdan.jr@chromium.org</owner>
  <summary>
    Each bucket is the number of sessions that encountered a given FTP server
    type. Each session reports a given server type at most once.
  </summary>
</histogram>

<histogram name="Net.HadFtpServerType2" enum="FtpServerType2">
  <owner>phajdan.jr@chromium.org</owner>
  <summary>
    Each bucket is the number of sessions that encountered a given FTP server
    type. Each session reports a given server type at most once.
  </summary>
</histogram>

<histogram name="Net.HasBrokenNEON" enum="BooleanBroken">
  <owner>davidben@chromium.org</owner>
  <summary>
    Records, on startup, for ARM devices running Android, whether the CPU is
    known to have a broken NEON unit. See https://crbug.com/341598.
  </summary>
</histogram>

<histogram name="Net.Http2ResponseStatusHeader" enum="StatusHeader">
  <obsolete>
    Removed in 2017 March.
  </obsolete>
  <owner>bnc@chromium.org</owner>
  <summary>Format of :status header value in HTTP/2 response.</summary>
</histogram>

<histogram name="Net.Http2SSLCipherSuite" enum="SSLCipherSuite">
  <obsolete>
    Removed 2017-02.
  </obsolete>
  <owner>davidben@chromium.org</owner>
  <summary>
    The SSL/TLS cipher suite that was negotiated, recorded for each successful
    HTTP/2 connection.
  </summary>
</histogram>

<histogram name="Net.HttpAuthCacheAddEvicted" enum="BooleanDidEvict">
  <owner>asanka@chromium.org</owner>
  <summary>
    Whether adding an entry to the HTTP auth cache evicted another entry.
  </summary>
</histogram>

<histogram name="Net.HttpAuthCacheAddEvictedCreation">
  <owner>asanka@chromium.org</owner>
  <summary>
    When an HTTP auth cache entry is evicted, the time since it was created.
  </summary>
</histogram>

<histogram name="Net.HttpAuthCacheAddEvictedLastUse">
  <owner>asanka@chromium.org</owner>
  <summary>
    When an HTTP auth cache entry is evicted, the time since it was last used.
  </summary>
</histogram>

<histogram name="Net.HttpAuthCacheAddPathEvicted" enum="BooleanDidEvict">
  <owner>asanka@chromium.org</owner>
  <summary>
    Whether adding a path to an entry in the HTTP auth cache evicted another
    path.
  </summary>
</histogram>

<histogram name="Net.HttpAuthCacheLookupByPathPosition">
  <owner>asanka@chromium.org</owner>
  <summary>
    When looking up an HTTP auth cache entry by path, the position (1-indexed)
    of the entry on a hit, or 0 on a miss.
  </summary>
</histogram>

<histogram name="Net.HttpAuthCacheLookupPosition">
  <owner>asanka@chromium.org</owner>
  <summary>
    When looking up an HTTP auth cache entry by realm, the position (1-indexed)
    of the entry on a hit, or 0 on a miss.
  </summary>
</histogram>

<histogram name="Net.HttpAuthCount" enum="HttpAuthCount">
  <owner>asanka@chromium.org</owner>
  <owner>cbentzel@chromium.org</owner>
  <summary>
    Per-authentication-scheme counts of authentication attempts and rejections.
  </summary>
</histogram>

<histogram name="Net.HttpAuthPromptType" enum="HttpAuthPromptType">
  <owner>meacer@chromium.org</owner>
  <summary>Type of the HTTP auth prompt displayed.</summary>
</histogram>

<histogram name="Net.HttpAuthResource" enum="HttpAuthResource">
  <obsolete>
    Removed in https://crrev.com/209100
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Count of authentication requests for top level pages vs. sub-resources, such
    as images or iframes.
  </summary>
</histogram>

<histogram name="Net.HttpAuthTarget" enum="HttpAuthTarget">
  <owner>asanka@chromium.org</owner>
  <owner>cbentzel@chromium.org</owner>
  <summary>
    Per-authentication-scheme counts of authentication targets, such as secure
    servers or proxies.
  </summary>
</histogram>

<histogram name="Net.HttpConnectionLatency" units="ms">
  <obsolete>
    Deprecated as of 03/2015.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time between the HttpNetworkTransaction requesting a connection and the time
    it connected.
  </summary>
</histogram>

<histogram name="Net.HttpContentFreshnessLifetime" units="seconds">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Length of time that a received resource will be cacheable.</summary>
</histogram>

<histogram name="Net.HttpContentLength" units="bytes">
  <obsolete>
    Replaced by Net.HttpContentLengthV2
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <summary>
    Size of the response body. This is the actual number of bytes received,
    which usually agrees with but is not necessarily the same as the size
    specified by the Content-Length header.
  </summary>
</histogram>

<histogram name="Net.HttpContentLengthCacheable" units="bytes">
  <obsolete>
    Deprecated 04/2018.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <summary>
    Size of the response body if it is cacheable. This is the actual number of
    bytes received, which usually agrees with but is not necessarily the same as
    the size specified by the Content-Length header.
  </summary>
</histogram>

<histogram name="Net.HttpContentLengthCacheable24Hours" units="bytes">
  <obsolete>
    Deprecated 04/2018.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <summary>
    Size of the response body if it is cacheable for at least 24 hours. This is
    the actual number of bytes received, which usually agrees with but is not
    necessarily the same as the size specified by the Content-Length header.
  </summary>
</histogram>

<histogram name="Net.HttpContentLengthCacheable4Hours" units="bytes">
  <obsolete>
    Deprecated 04/2018.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <summary>
    Size of the response body if it is cacheable for at least 4 hours. This is
    the actual number of bytes received, which usually agrees with but is not
    necessarily the same as the size specified by the Content-Length header.
  </summary>
</histogram>

<histogram name="Net.HttpContentLengthDifference" units="bytes">
  <obsolete>
    Deprecated 06/2018.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <summary>
    The difference between the size specified in the X-Original-Content-Length
    header and the size of the response body. This is zero if the
    X-Original-Content-Length header is not present in the response.
  </summary>
</histogram>

<histogram name="Net.HttpContentLengthDifferenceWithValidOCL" units="bytes">
  <owner>bengr@chromium.org</owner>
  <summary>
    The difference between the size specified in the X-Original-Content-Length
    header and the size of the response body. Only includes resources that have
    the X-Original-Content-Length header.
  </summary>
</histogram>

<histogram name="Net.HttpContentLengthV2" units="bytes">
  <owner>bengr@chromium.org</owner>
  <summary>
    Size of the response body. This is the actual number of bytes received,
    which usually agrees with but is not necessarily the same as the size
    specified by the Content-Length header. Replaces Net.HttpContentLength,
    recording non-DRP Http traffic as &quot;Http.Direct&quot; instead of
    &quot;Http.Other&quot;.
  </summary>
</histogram>

<histogram name="Net.HttpContentLengthWithValidOCL" units="bytes">
  <obsolete>
    Deprecated 04/2018.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <summary>
    Size of the response body. Only includes resources that have the
    X-Original-Content-Length header.
  </summary>
</histogram>

<histogram name="Net.HttpHeaderParserEvent" enum="HttpHeaderParserEvent">
  <obsolete>
    Deprecated as of 12/2016.
  </obsolete>
  <owner>mmenke@chromium.org</owner>
  <summary>
    Records the frequency with which a number of hacky HTTP header parsing rules
    are invoked.  This histogram should be removed after we have enough data to
    know if we can remove the hacks.
  </summary>
</histogram>

<histogram name="net.HttpIdentSrcURL" units="requests">
  <owner>tsepez@chromium.org</owner>
  <summary>
    Count of requests which contained a basic auth username and password
    embedded in the URL itself.
  </summary>
</histogram>

<histogram name="Net.HttpJob.PrefilterBytesRead" units="bytes">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Total prefilter (e.g., before decompression) bytes read for an HttpJob
    request.
  </summary>
</histogram>

<histogram name="Net.HttpJob.TotalTime" units="ms">
  <owner>mmenke@chromium.org</owner>
  <summary>
    Time it takes to complete an HttpJob, from starting the transaction until we
    are done reading.
  </summary>
</histogram>

<histogram name="Net.HttpJob.TotalTimeCached" units="ms">
  <owner>mmenke@chromium.org</owner>
  <summary>
    Time it takes to complete an HttpJob, from starting the transaction until we
    are done reading, for jobs served from the cache.
  </summary>
</histogram>

<histogram name="Net.HttpJob.TotalTimeCancel" units="ms">
  <owner>mmenke@chromium.org</owner>
  <summary>
    Time it takes to complete an HttpJob, from starting the transaction until
    the job is killed. Note that we didn't detect the end of the data for this
    job.
  </summary>
</histogram>

<histogram name="Net.HttpJob.TotalTimeNotCached" units="ms">
  <owner>mmenke@chromium.org</owner>
  <summary>
    Time it takes to complete an HttpJob, from starting the transaction until we
    are done reading, for jobs not served from the cache.
  </summary>
</histogram>

<histogram name="Net.HttpJob.TotalTimeSuccess" units="ms">
  <owner>mmenke@chromium.org</owner>
  <summary>
    Time it takes to complete an HttpJob, from starting the transaction until we
    are done reading, for jobs when we read until no more data is available.
  </summary>
</histogram>

<histogram name="Net.HttpOriginalContentLength" units="bytes">
  <obsolete>
    Replaced by Net.HttpOriginalContentLengthV2.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <summary>
    Size specified in the X-Original-Content-Length header. If this header is
    not present in the response, the size of the response body is used.
  </summary>
</histogram>

<histogram name="Net.HttpOriginalContentLengthV2" units="bytes">
  <owner>bengr@chromium.org</owner>
  <summary>
    Net.HttpOriginalContentLength with non-data reduction proxy traffic properly
    labeled with the &quot;Direct&quot; suffix.

    Size specified in the X-Original-Content-Length header. If this header is
    not present in the response, the size of the response body is used. Replaces
    Net.HttpOriginalContentLength, breaking down traffic by Direct, ViaDRP,
    Bypassed, and Other.
  </summary>
</histogram>

<histogram name="Net.HttpOriginalContentLengthWithValidOCL" units="bytes">
  <owner>bengr@chromium.org</owner>
  <summary>
    Size specified in the X-Original-Content-Length header. Only includes
    resources that have the X-Original-Content-Length header.
  </summary>
</histogram>

<histogram name="Net.HttpProxy.ConnectLatency" units="ms">
  <owner>tbansal@chromium.org</owner>
  <summary>Time taken to establish the connection to the HTTP proxy.</summary>
</histogram>

<histogram name="Net.HttpProxySocketRequestTime" units="ms">
  <obsolete>
    Deprecated as of 10/2016.
  </obsolete>
  <owner>mmenke@chromium.org</owner>
  <summary>Time it takes to request a new (unused) HTTP proxy socket.</summary>
</histogram>

<histogram name="Net.HttpRequest.ContainsInvalidHeaderValuesInRFC7230"
    enum="Boolean">
  <obsolete>
    Deprecated 06/2016 because this is not continuously tracked.
  </obsolete>
  <owner>hiroshige@chromium.org</owner>
  <summary>
    Whether a request contains invalid request header values in RFC 7230. This
    is counted once for every redirect leg. https://crbug.com/455099.
  </summary>
</histogram>

<histogram name="Net.HttpRequestCompletionErrorCodes" enum="NetErrorCodes">
  <owner>sclittle@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The network error code that the HTTP request completes with, including OK
    and ABORTED.
  </summary>
</histogram>

<histogram name="Net.HttpRequestCompletionErrorCodes.MainFrame"
    enum="NetErrorCodes">
  <owner>sclittle@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The network error code that the HTTP main frame resource request completes
    with, including OK and ABORTED.
  </summary>
</histogram>

<histogram name="Net.HttpResponse.ContainsInvalidHeaderValuesInRFC7230"
    enum="Boolean">
  <obsolete>
    Deprecated 06/2016 because this is not continuously tracked.
  </obsolete>
  <owner>hiroshige@chromium.org</owner>
  <summary>
    Whether a response contains invalid response header values in RFC 7230. This
    is counted once for every redirect leg. https://crbug.com/455099.
  </summary>
</histogram>

<histogram name="Net.HttpResponseCode">
  <owner>mmenke@chromium.org</owner>
  <summary>The count of HTTP Response codes encountered.</summary>
</histogram>

<histogram name="Net.HttpResponseCode_Nxx_MainFrame">
  <owner>mmenke@chromium.org</owner>
  <summary>
    The count of HTTP Response codes encountered, in response to MAIN_FRAME
    requests only; saving only the hundreds digit, e.g. 100-&gt;1, 300-&gt;3.
  </summary>
</histogram>

<histogram name="Net.HttpResponseInfo.ConnectionInfo" enum="ConnectionInfo">
  <obsolete>
    Deprecated as of 06/2016.
  </obsolete>
  <owner>bnc@chromium.org</owner>
  <summary>
    Application protocol used in HTTP response.  Recorded every time a
    URLRequest completes.
  </summary>
</histogram>

<histogram name="Net.HttpResponseInfo.ConnectionInfo.MainFrame"
    enum="ConnectionInfo">
  <obsolete>
    Deprecated as of July 2018.
  </obsolete>
  <owner>mmenke@chromium.org</owner>
  <summary>
    Application protocol used in HTTP responses to requests for main frames.
    Only includes requests that went over the network.
  </summary>
</histogram>

<histogram name="Net.HttpResponseInfo.ConnectionInfo.SubResource"
    enum="ConnectionInfo">
  <obsolete>
    Deprecated as of July 2018.
  </obsolete>
  <owner>mmenke@chromium.org</owner>
  <summary>
    Application protocol used in HTTP responses to requests for resources other
    than main frames. Does not include internal Chrome requests.  Only includes
    requests that went over the network.
  </summary>
</histogram>

<histogram name="Net.HttpServerProperties.UpdatePrefs"
    enum="HttpServerPropertiesUpdatePrefsLocation" expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
    The location in http_server_properties_manager.cc where UpdatePrefs was
    called.
  </summary>
</histogram>

<histogram name="Net.HttpSocketType" enum="HttpSocketType">
  <obsolete>
    Deprecated as of 03/2015.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The counts of the type of sockets (all HTTP sockets, regardless of any proxy
    used) used for HTTP[s].
  </summary>
</histogram>

<histogram name="Net.HttpStatusLineStatus" enum="HttpStatusLineStatus">
  <obsolete>
    Deprecated as of 12/2016.
  </obsolete>
  <owner>ellyjones@chromium.org</owner>
  <summary>
    Records how often violations of RFC 7230's header parsing rules are
    observed.
  </summary>
</histogram>

<histogram name="Net.HttpStreamFactoryJob.Alt.NextState"
    enum="HttpStreamFactoryJobState">
  <obsolete>
    Deprecated as of 1/2018.
  </obsolete>
  <owner>xunjieli@chromium.org</owner>
  <summary>Reports the next state that the Alternative Job is in.</summary>
</histogram>

<histogram name="Net.HttpStreamFactoryJob.Alt.State"
    enum="HttpStreamFactoryJobState">
  <obsolete>
    Deprecated as of 1/2018.
  </obsolete>
  <owner>xunjieli@chromium.org</owner>
  <summary>Reports the state that the Alternative Job is in.</summary>
</histogram>

<histogram name="Net.HttpStreamFactoryJob.Main.NextState"
    enum="HttpStreamFactoryJobState">
  <obsolete>
    Deprecated as of 1/2018.
  </obsolete>
  <owner>xunjieli@chromium.org</owner>
  <summary>Reports the next state that the Main Job is in.</summary>
</histogram>

<histogram name="Net.HttpStreamFactoryJob.Main.State"
    enum="HttpStreamFactoryJobState">
  <obsolete>
    Deprecated as of 1/2018.
  </obsolete>
  <owner>xunjieli@chromium.org</owner>
  <summary>Reports the state that the Main Job is in.</summary>
</histogram>

<histogram name="Net.HttpStreamFactoryJob.StreamReadyCallbackTime" units="ms">
  <obsolete>
    Deprecated 08/2017. No longer tracked.
  </obsolete>
  <owner>zhongyi@chromium.org</owner>
  <summary>Time it takes for OnStreamReadyCallback to be called.</summary>
</histogram>

<histogram name="Net.HttpTimeToFirstByte" units="ms">
  <owner>mmenke@chromium.org</owner>
  <summary>
    Time from when an HTTP request is issued to when the first byte is
    processed.
  </summary>
</histogram>

<histogram name="Net.HttpTimeToFirstByte.LargeUpload" units="ms">
  <owner>mmenke@chromium.org</owner>
  <summary>
    Time from when an HTTP request is issued to when the first byte is
    processed, for requests with an upload that is &gt; 1 MiB. Excludes chunked
    uploads.
  </summary>
</histogram>

<histogram name="Net.IOError_SocketReuseType" enum="HttpSocketType">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The count of handleable socket errors (connection abort/close/reset) per
    socket reuse type.
  </summary>
</histogram>

<histogram name="Net.IOError_SocketReuseType_disable_late_binding"
    enum="HttpSocketType">
  <obsolete>
    Late bindings are on by default now.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The count of handleable socket errors (connection abort/close/reset) per
    socket reuse type.  Socket late binding is disabled.
  </summary>
</histogram>

<histogram name="Net.IOError_SocketReuseType_enable_late_binding"
    enum="HttpSocketType">
  <obsolete>
    Late bindings are on by default now.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The count of handleable socket errors (connection abort/close/reset) per
    socket reuse type.  Socket late binding is enabled.
  </summary>
</histogram>

<histogram name="Net.IOThreadCreationToHttpRequestStart" units="ms">
  <obsolete>
    Deprecated 11/2014. No longer tracked.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <summary>
    Time from when the IOThread is created to when the first URL request is
    started. Only requests that are created for a profile while Chrome is
    starting up are considered.
  </summary>
</histogram>

<histogram name="Net.IPv6ConnectDuration" units="ms">
  <obsolete>
    Deprecated 1/2015. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Duration of time spent during the UDP-connect IPv6 probe.</summary>
</histogram>

<histogram name="Net.IPv6ConnectFailureMatch" enum="BooleanSuccess">
  <obsolete>
    Deprecated 03/2015. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Whether the interface-enumeration IPv6 probe method failed given that the
    UDP-connect IPV6 probe failed.
  </summary>
</histogram>

<histogram name="Net.IPv6ConnectSuccessMatch" enum="BooleanSuccess">
  <obsolete>
    Deprecated 03/2015. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Whether the interface-enumeration IPv6 probe method was successful given
    that the UDP-connect IPV6 probe was successful.
  </summary>
</histogram>

<histogram name="Net.IPv6Status" enum="IPV6ProbeResult">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The probe results when a test for IPv6 support is done.</summary>
</histogram>

<histogram name="Net.IPv6Status_retest" enum="IPV6ProbeResult">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The probe results when a test for IPv6 support is done, after a network
    change event.
  </summary>
</histogram>

<histogram name="Net.JobControllerSet.CountOfJobController"
    units="job_controllers">
  <obsolete>
    Deprecated 01/2018.
  </obsolete>
  <owner>zhongyi@chromium.org</owner>
  <summary>
    This counts number of all the job controllers that are still alive if the
    count is a multiple of 100: 100, 200, 300, etc.
  </summary>
</histogram>

<histogram
    name="Net.JobControllerSet.CountOfJobController.NonPreconnect.PendingRequest"
    units="job_controllers">
  <obsolete>
    Deprecated 01/2018.
  </obsolete>
  <owner>zhongyi@chromium.org</owner>
  <summary>
    This counts number of JobControllers that are still alive, not created for
    preconnect, and still have a HttpStreamFactoryImpl::Request pending.
  </summary>
</histogram>

<histogram
    name="Net.JobControllerSet.CountOfJobController.NonPreconnect.RequestGone"
    units="job_controllers">
  <obsolete>
    Deprecated 01/2018.
  </obsolete>
  <owner>zhongyi@chromium.org</owner>
  <summary>
    This counts number of job controllers that are still alive, not created for
    preconnect but HttpStreamFactoryImpl::Request has completed.
  </summary>
</histogram>

<histogram name="Net.JobControllerSet.CountOfJobController.Preconnect"
    units="job_controllers">
  <obsolete>
    Deprecated 01/2018.
  </obsolete>
  <owner>zhongyi@chromium.org</owner>
  <summary>
    This counts number of job controllers which are used for preconnect and are
    still alive.
  </summary>
</histogram>

<histogram name="Net.JobControllerSet.CountOfJobControllerAtShutDown"
    units="job_controllers">
  <obsolete>
    Deprecated 01/2018.
  </obsolete>
  <owner>zhongyi@chromium.org</owner>
  <summary>
    This counts number of all the job controllers that are still alive.
  </summary>
</histogram>

<histogram name="Net.JobControllerSet.CountOfNonPreconnectAltJob"
    units="alt_jobs">
  <obsolete>
    Deprecated 08/2017.
  </obsolete>
  <owner>zhongyi@chromium.org</owner>
  <summary>
    This counts number of alternative jobs which are still alive.
  </summary>
</histogram>

<histogram name="Net.JobControllerSet.CountOfNonPreconnectMainJob"
    units="main_jobs">
  <obsolete>
    Deprecated 08/2017.
  </obsolete>
  <owner>zhongyi@chromium.org</owner>
  <summary>This counts number of main jobs which are still alive.</summary>
</histogram>

<histogram name="Net.JobControllerSet.CountOfPendingRequest" units="requests">
  <obsolete>
    Deprecated 04/2017, replaced by
    Net.JobController.CountOfJobController.NonPreconnect.PendingRequest.
  </obsolete>
  <owner>zhongyi@chromium.org</owner>
  <summary>
    This counts number of HttpStreamFactoryImpl::Request which are still alive.
  </summary>
</histogram>

<histogram name="Net.JobControllerSet.CountOfPreconnect"
    units="job_controllers">
  <obsolete>
    Deprecated 04/2017, replaced by
    Net.JobController.CountOfJobController.Preconnect.
  </obsolete>
  <owner>zhongyi@chromium.org</owner>
  <summary>
    This counts number of job controllers which are used for preconnect and are
    still alive.
  </summary>
</histogram>

<histogram name="Net.KeepaliveStatisticsRecorder.PeakInflightRequests"
    units="requests">
  <obsolete>
    Deprecated 02/2018, replaced by
    Net.KeepaliveStatisticsRecorder.PeakInflightRequests2
  </obsolete>
  <owner>yhirano@chromium.org</owner>
  <summary>
    The peak number of concurrent outstanding requests with keepalive specified.
  </summary>
</histogram>

<histogram name="Net.KeepaliveStatisticsRecorder.PeakInflightRequests2"
    units="requests">
  <owner>yhirano@chromium.org</owner>
  <summary>
    The peak number of concurrent outstanding requests with keepalive specified.
    This histogram is reported whenever the peak number is updated. For example,
    if the inflight number of requests were 0 =&gt; 1 =&gt; 2 =&gt; 1 =&gt; 2
    =&gt; 3 =&gt; 2, then 0, 1, 2, and 3 would be reported.
  </summary>
</histogram>

<histogram
    name="Net.KeepaliveStatisticsRecorder.PeakInflightRequestsPerProcess"
    units="requests">
  <owner>yhirano@chromium.org</owner>
  <summary>
    The peak number of concurrent outstanding requests with keepalive specified
    per render process.
  </summary>
</histogram>

<histogram
    name="Net.KeepaliveStatisticsRecorder.PeakInflightRequestsPerProcess2"
    units="requests">
  <owner>yhirano@chromium.org</owner>
  <summary>
    The peak number of concurrent outstanding requests with keepalive specified
    per render process. This histogram is reported whenever the peak number is
    updated. For example, if the inflight number of requests were 0 =&gt; 1
    =&gt; 2 =&gt; 1 =&gt; 2 =&gt; 3 =&gt; 2, then 0, 1, 2, and 3 would be
    reported.
  </summary>
</histogram>

<histogram name="Net.LoadPrefetch.Pattern" enum="PrefetchStatus">
  <obsolete>
    Deprecated July 2018
  </obsolete>
  <owner>droger@chromium.org</owner>
  <owner>mattcary@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    The completion status of prefetches that have finished loading.
  </summary>
  <details>
    Measurement occurs at ResourceLoader::ResponseCompleted so requests canceled
    before that point are not registered.

    This applies to requests with net::LOAD_PREFETCH, used by various
    prefetching features such as no-state prefetch and RESOURCE_TYPE_PREFETCH.

    Note that &quot;success from cache&quot; means that the
    UrlRequest::was_cached() was true and unused_since_prefetch was false.
    &quot;success from network&quot; means that was_cached() was false.
    &quot;success already prefetched&quot; means that both was_cached() and
    unused_since_prefetch were true. Validated results are considered cached,
    even though a conditional network request is made.
  </details>
</histogram>

<histogram name="Net.MainFrameNoStore" enum="MainFrameStorable">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The distribution of storable vs &quot;cache-control: no-store&quot;
    main-frame resources.

    Counted after response headers have completed and before the content has
    completed. Redirects are counted. All HTTP cache transactions are counted,
    not just those that require the network.
  </summary>
</histogram>

<histogram name="Net.MTPR_GetProxyForUrl_Thread_Wait_Time" units="ms">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time that a (non-cancelled) proxy resolution request was stalled waiting
    for an execution thread, for MultiThreadedProxyResolver.
  </summary>
</histogram>

<histogram name="Net.MTPR_GetProxyForUrl_Time" units="ms">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The total time that it took for a (non-cancelled) proxy resolution request
    to complete, for MultiThreadedProxyResolver.
  </summary>
</histogram>

<histogram name="Net.NeedsHWCAP2Workaround" enum="BooleanBroken">
  <owner>davidben@chromium.org</owner>
  <summary>
    Records, on startup, for ARM devices running Android, whether the kernel is
    missing AT_HWCAP2 from the ELF auxv and /proc/cpuinfo reports support for
    ARMv8 features. Those features should also be reported in AT_HWCAP2. This is
    to measure the workaround in https://crbug.com/boringssl/46.
  </summary>
</histogram>

<histogram name="Net.NetInternalsUi.Feature" enum="NetInternalsUiFeature">
  <obsolete>
    Removed in Chrome 44.
  </obsolete>
  <owner>eroman@chromium.org</owner>
  <summary>
    Counts the number of browser launches where chrome://net-internals and
    chrome://net-internals/#tests are used.
  </summary>
</histogram>

<histogram name="Net.NetworkConfigWatcherMac.SCDynamicStore.Create"
    enum="SCStatusCode">
  <owner>xunjieli@chromium.org</owner>
  <summary>
    This is logged when SCDynamicStoreCreate fails in
    network_config_watcher_mac.cc.
  </summary>
</histogram>

<histogram
    name="Net.NetworkConfigWatcherMac.SCDynamicStore.Create.RunLoopSource"
    enum="SCStatusCode">
  <owner>xunjieli@chromium.org</owner>
  <summary>
    This is logged when SCDynamicStoreCreateRunLoopSource fails in
    network_config_watcher_mac.cc.
  </summary>
</histogram>

<histogram name="Net.NetworkConfigWatcherMac.SCDynamicStore.NumRetry"
    units="retries">
  <owner>xunjieli@chromium.org</owner>
  <summary>
    This is logged when retrying SCDynamicStore has stopped after either
    receiving a success or hitting the maximum number of retries in
    network_config_watcher_mac.cc. The 0 bucket is where no retry is performed,
    and the maximal bucket is where all retries have failed.
  </summary>
</histogram>

<histogram name="Net.NetworkErrorLogging.HeaderOutcome"
    enum="NetNetworkErrorLoggingHeaderOutcome">
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    When Network Error Logging receives a &quot;NEL:&quot; header, what happens
    to it.
  </summary>
</histogram>

<histogram name="Net.NetworkErrorLogging.RequestOutcome"
    enum="NetNetworkErrorLoggingRequestOutcome">
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    When Network Error Logging observes a completed request that might generate
    a report, what happens to it. NEL observes all requests, since it can send
    reports for a fraction of successful requests as well so error rates can be
    calculated.
  </summary>
</histogram>

<histogram name="Net.NetworkErrorsRecovered.MainFrame" enum="NetErrorCodes">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    How often automatically retrying to download the main frame of a page in
    response to specific HTTP network errors succeeds.
  </summary>
</histogram>

<histogram name="Net.NetworkErrorsRecovered.Subresource" enum="NetErrorCodes">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    How often automatically retrying to download a subresource in response to
    specific HTTP network errors succeeds.
  </summary>
</histogram>

<histogram name="Net.NetworkErrorsUnrecovered.MainFrame" enum="NetErrorCodes">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    How often automatically retrying to download the main frame of a page in
    response to specific HTTP network errors returns another network error.
    Histogram includes only the error code that triggered the retry.
  </summary>
</histogram>

<histogram name="Net.NetworkErrorsUnrecovered.Subresource" enum="NetErrorCodes">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    How often automatically retrying to download a subresource in response to
    specific HTTP network errors returns another network error.  Histogram
    includes only the error code that triggered the retry.
  </summary>
</histogram>

<histogram name="Net.NotifyAddrChangeFailures" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    On Windows, NetworkChangeNotifierWin calls NotifyAddrChange, which can fail
    for unknown reasons. This records the number of times it fails in a row
    before a successful call. If it never succeeds, or takes over 100 tries, a
    value of 100 is recorded. See http://crbug.com/69198
  </summary>
</histogram>

<histogram name="Net.NumDuplicateCookiesInDb">
  <obsolete>
    Deprecated 2015-08-17 as part of cookie histogram cleanup
    (https://crbug.com/521135).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of duplicate cookies that were present in the cookie store during
    startup.
  </summary>
</histogram>

<histogram name="Net.NumQuicSessionsAtShutdown">
  <owner>rch@chromium.org</owner>
  <summary>
    The number of QUIC sessions when the QuicStreamFactory is destroyed.
  </summary>
</histogram>

<histogram name="Net.OCSPRequestFailedTimeMs" units="ms">
  <obsolete>
    Deprecated 2017-04-21 as it was Linux/CrOS only.
  </obsolete>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    When validating an HTTPS certificate we may have to make one or more HTTP
    fetches to OCSP responders in order to get revocation information. This
    measures the amount of time that failures to get OCSP information take.
  </summary>
</histogram>

<histogram name="Net.OCSPRequestSuccess" enum="BooleanSuccess">
  <obsolete>
    Deprecated 2017-04-21 as it was Linux/CrOS only.
  </obsolete>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    When validating an HTTPS certificate we may have to make one or more HTTP
    fetches to OCSP responders in order to get revocation information. This
    records the fraction of successful requests.
  </summary>
</histogram>

<histogram name="Net.OCSPRequestTimeMs" units="ms">
  <obsolete>
    Deprecated 2017-04-21 as it was Linux/CrOS only.
  </obsolete>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    When validating an HTTPS certificate we may have to make one or more HTTP
    fetches to OCSP responders in order to get revocation information. This
    measures the amount of time that each of those requests takes.
  </summary>
</histogram>

<histogram name="Net.OCSPResponseStapled" enum="BooleanSuccess">
  <owner>rsleevi@chromium.org</owner>
  <summary>
    When connecting over HTTPS, a server may include an OCSP response as part of
    the TLS handshake so that clients do not have to fetch it, provided the
    client requested the server do so. This measures whether or not a server
    included an OCSP response when it was requested.
  </summary>
</histogram>

<histogram name="Net.OSErrorsForGetAddrinfo" enum="ErrorCodesGetaddrinfo_All">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Positive error code that was returned by the system library
    &quot;getaddrinfo()&quot;. This error code is platform specific, so when
    there is a Windows/Linux conflict, both decodings are shown.
  </summary>
</histogram>

<histogram name="Net.OSErrorsForGetAddrinfo_Linux"
    enum="ErrorCodesGetaddrinfo_Linux">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Positive error code that was returned by the system library
    &quot;getaddrinfo()&quot;.
  </summary>
</histogram>

<histogram name="Net.OSErrorsForGetAddrinfo_Mac"
    enum="ErrorCodesGetaddrinfo_Mac">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Positive error code that was returned by the system library
    &quot;getaddrinfo()&quot;.
  </summary>
</histogram>

<histogram name="Net.OSErrorsForGetAddrinfo_Win"
    enum="ErrorCodesGetaddrinfo_Win">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Positive error code that was returned by the system library
    &quot;getaddrinfo()&quot;.
  </summary>
</histogram>

<histogram name="Net.PacResultForStrippedUrl" enum="PacResultForStrippedUrl">
  <obsolete>
    Deprecated 4/27/2016. No longer tracked.
  </obsolete>
  <owner>eroman@chromium.org</owner>
  <summary>
    Proxy Auto Config (PAC) allows specifying an arbitrary javascript program to
    pick network proxies on a per-request basis (based on the URL). This works
    by calling the script's FindProxyForURL() function with the target URL as
    its first argument.

    Traditionally, the URL parameter passed into the script contains the exact
    URL being loaded, except maybe for having stripped the fragment and embedded
    identity portions of the URL.

    This histogram records what happens when the URL passed into
    FindProxyForURL() additionally has had its path component stripped. Does it
    return the same proxy list as when calling FindProxyForURL() with the
    original (unmodified) URL?

    This comparison is done only when the URL scheme implies a secure channel
    (i.e. https:// and wss://), in order to gather data for crbug.com/593759.
  </summary>
</histogram>

<histogram name="Net.Ping_ResponseStartedTime" units="ms">
  <obsolete>
    Deprecated 4/16/2014. No longer tracked.
  </obsolete>
  <owner>davidben@chromium.org</owner>
  <summary>
    How long it took for an &lt;a ping&gt; request to receive a response. Only
    recorded if a response was received.
  </summary>
</histogram>

<histogram name="Net.Ping_Result" enum="PingResult">
  <obsolete>
    Deprecated 4/16/2014. No longer tracked.
  </obsolete>
  <owner>davidben@chromium.org</owner>
  <summary>
    The result of an &lt;a ping&gt; request, whether it received a response or
    timed out or failed for some other reason.
  </summary>
</histogram>

<histogram name="Net.PreconnectedLinkNavigations" enum="PreconnectedNavigation">
  <obsolete>
    No longer tracked.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Indicate whether a link navigation was preceded by a recent pre-connect
    trigger (within 10 seconds). There is a high chance that loading the page
    used a preconnected TCP session.
  </summary>
</histogram>

<histogram name="Net.PreconnectedNavigation" enum="PreconnectedNavigation">
  <obsolete>
    No longer tracked.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Indicate whether a URLRequest was preceded by a recent pre-connect trigger
    (within 10 seconds). There is a high chance that loading the resource used a
    preconnected TCP session.
  </summary>
</histogram>

<histogram name="Net.PreconnectMotivation" enum="PreconnectMotivation">
  <obsolete>
    Deprecated May 2018
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    When a preconnection is made, indicate what the motivation was.
  </summary>
  <details>
    Currently, the most common (only?) motivations are SELF_REFERAL,
    LEARNED_REFERAL and OMNIBOX. The SELF_REFERAL indicates that we made sure a
    second connection was available for a resource that either was never before
    seen, or has historically had no subresources.  The LEARNED_REFERAL
    indicates that we &quot;learned&quot; that a subresource was commonly
    needed, and that motivated the TCP/IP preconnect. The OMNIBOX motivation
    happens when a search is being suggested, and we preconnect to the search
    provider. (WARNING: Prior to version 7.517.*, enums 7, 8, and 9 may be
    confused, as EARLY_LOAD_MOTIVATED was inserted new 6 value.)
  </details>
</histogram>

<histogram name="Net.PreconnectProxyStatus" enum="ProxyStatus">
  <obsolete>
    No longer tracked.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Indicate whether there was a proxy to preclude preconnection.
  </summary>
</histogram>

<histogram name="Net.PreconnectSkippedToProxyServers" units="count">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Indicates number of times a preconnect to proxy server was skipped due to an
    existing pending preconnection request.
  </summary>
</histogram>

<histogram name="Net.PreconnectSubresourceEval"
    enum="PreconnectSubresourceEval">
  <obsolete>
    Deprecated May 2018
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    What did we decide to do about a predicted resource, based on the historical
    expected number of connection that this subresource will require.
  </summary>
  <details>
    This is basically the current thresholding of the SubresourceExpectation,
    relative to current static thresholds, and taking into account whether
    preconnection is enabled (i.e., if preconnection is disabled, we'll never
    decide to preconnect).
  </details>
</histogram>

<histogram name="Net.PreconnectSubresourceExpectation">
  <obsolete>
    Deprecated May 2018
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The expected number of connections, times 100, that we'll make to a given
    subresource, based on learned history.
  </summary>
  <details>
    By comparing this to thresholds, we decide if we will preconnect,
    preresolve, or do nothing. This histogram can be used to select those static
    thresholds.
  </details>
</histogram>

<histogram name="Net.PreconnectTriggerUsed" enum="PreconnectTriggerUsed">
  <obsolete>
    No longer tracked.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Indicate whether if a preconnect trigger is followed by a resource request
    (from link navigations) to the host or not. This is to measure precision of
    link-based preconnect triggers.
  </summary>
</histogram>

<histogram name="Net.PreconnectUtilization" enum="NetPreconnectUtilization">
  <obsolete>
    Sourced data corrected, and replaced by NetPreconnectUtilization2
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Indicate final utilization for each attempted socket connection.
  </summary>
  <details>
    We also include stats for non-speculative sockets. Some socket connections
    may never connect, and others may never be used (as the user may abort
    before then).
  </details>
</histogram>

<histogram name="Net.PreconnectUtilization2" enum="NetPreconnectUtilization">
  <obsolete>
    Deprecated in M68 (May 2018)
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Indicate final utilization for each attempted socket connection.
  </summary>
  <details>
    We also include stats for non-speculative sockets. Some socket connections
    may never connect, and others may never be used (as the user may abort
    before then).
  </details>
</histogram>

<histogram name="Net.Predictor.MRUIndex">
  <obsolete>
    Dev data was collected which was good enough to make a decision on the size
    of the predictor database.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The index into the predictor's MRU on navigation. This is the size the MRU
    had to be in order to effectively predict subresources for this navigation.
  </summary>
</histogram>

<histogram name="Net.Predictor.Startup.DBSize" units="bytes">
  <obsolete>
    Deprecated May 2018
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The approximate size in bytes of the predictor's database on startup.
  </summary>
</histogram>

<histogram name="Net.Prefetch.HitBytes" units="bytes">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Bytes read for requests that were served from a cache entry whose
    unused_since_prefetch bit is true.
  </summary>
</histogram>

<histogram name="Net.Prefetch.Pattern" enum="PrefetchStatus">
  <obsolete>
    Deprecated July 2018
  </obsolete>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The completion status of prefetches that have finished loading.
  </summary>
  <details>
    Measurement occurs at ResourceLoader::ResponseCompleted so requests canceled
    before that point are not registered.

    This applies to requests with RESOURCE_TYPE_PREFETCH.

    Note that &quot;success from cache&quot; means that the
    UrlRequest::was_cached() was true and unused_since_prefetch was false.
    &quot;success from network&quot; means that was_cached() was false.
    &quot;success already prefetched&quot; means that both was_cached() and
    unused_since_prefetch were true. Validated results are considered cached,
    even though a conditional network request is made.
  </details>
</histogram>

<histogram name="Net.Prefetch.PrefilterBytesReadFromNetwork" units="bytes">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Number of bytes read from the network on behalf of prefetch requests.  This
    is prefilter, so before any decompression.
  </summary>
  <details>
    This applies to requests with RESOURCE_TYPE_PREFETCH.
  </details>
</histogram>

<histogram name="Net.Prefetch.TimeBeforeCancel" units="ms">
  <obsolete>
    Deprecated July 2018
  </obsolete>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Time spent on prefetch requests before the request was canceled.
  </summary>
  <details>
    This applies to requests with RESOURCE_TYPE_PREFETCH.
  </details>
</histogram>

<histogram name="Net.Prefetch.TimeSpentOnPrefetchHit" units="ms">
  <obsolete>
    Deprecated July 2018
  </obsolete>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Time spent on requests that were served from a cache entry whose
    unused_since_prefetch bit is true.
  </summary>
</histogram>

<histogram name="Net.Prefetch.TimeSpentPrefetchingFromCache" units="ms">
  <obsolete>
    Deprecated July 2018
  </obsolete>
  <owner>jkarlin@chromium.org</owner>
  <summary>Time spent on prefetch requests when fetched from cache.</summary>
  <details>
    This applies to requests with RESOURCE_TYPE_PREFETCH.
  </details>
</histogram>

<histogram name="Net.Prefetch.TimeSpentPrefetchingFromNetwork" units="ms">
  <obsolete>
    Deprecated July 2018
  </obsolete>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Time spent on prefetch requests when fetched from the network, including
    validation time.
  </summary>
</histogram>

<histogram name="Net.PrefProxyConfig.GooglezipProxyRemovalCount">
  <owner>sclittle@chromium.org</owner>
  <summary>
    Records how many *.googlezip.net Data Reduction Proxies were removed from
    the effective proxy configuration when a proxy reconfiguration occurs.
  </summary>
</histogram>

<histogram name="Net.Priority_High_Latency" units="ms">
  <obsolete>
    Replaced by Net.Priority_High_Latency_b.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from the start of the http transaction until the first byte of the
    response for high priority (currently frame and subframe) requests.  Only
    times under 10 minutes are recorded.
  </summary>
</histogram>

<histogram name="Net.Priority_High_Latency_b" units="ms">
  <obsolete>
    Deprecated as of 11/2014.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from the start of the http transaction until the first byte of the
    response for high priority (currently frame and subframe) requests.
  </summary>
</histogram>

<histogram name="Net.Priority_Low_Latency" units="ms">
  <obsolete>
    Replaced by Net.Priority_Low_Latency_b.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from the start of the http transaction until the first byte of the
    response for low priority (non-frame/subframe) requests.   Only times under
    10 minutes are recorded.
  </summary>
</histogram>

<histogram name="Net.Priority_Low_Latency_b" units="ms">
  <obsolete>
    Deprecated as of 11/2014.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from the start of the http transaction until the first byte of the
    response for low priority (non-frame/subframe) requests.
  </summary>
</histogram>

<histogram name="Net.ProxyAuthRequested.HasConnection">
  <owner>rch@chromium.org</owner>
  <summary>
    When a PROXY_AUTH_REQUESTED error code is handled in
    net::HttpStreamFactoryImpl::Job::RunLoop, this is true if connection_ has an
    associated value.
  </summary>
</histogram>

<histogram name="Net.ProxyPollConfigurationTime">
  <obsolete>
    Removed at some time before 2014/09/15.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time in milliseconds spent fetch the system proxy configuration, when
    polling it for changes.
  </summary>
</histogram>

<histogram name="Net.ProxyResolutionService.PacUrlScheme" enum="PacUrlScheme">
  <owner>eroman@chromium.org</owner>
  <summary>
    The breakdown of URL schemes seen for explicitly configured ProxyAutoConfig
    (PAC). This metric is emitted once each time the proxy settings change
    (including initial value). Note that this does not count implicitly inferred
    PAC URLs (from WPAD).
  </summary>
</histogram>

<histogram name="Net.ProxyResolver.AbandonedExecutionTotalTime" units="ms">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The total amount of time that was spent executing the proxy script during
    &quot;tracing&quot; runs (executions of the script which discovered a new
    DNS dependency and were subsequently abandoned).
  </summary>
</histogram>

<histogram name="Net.ProxyResolver.BlockingDNSMode.AbandonedExecutionTotalTime"
    units="ms">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The total amount of time that was spent executing the proxy script during
    &quot;tracing&quot; runs (executions of the script which discovered a new
    DNS dependency and were subsequently abandoned).
  </summary>
</histogram>

<histogram name="Net.ProxyResolver.BlockingDNSMode.DnsWaitTotalTime" units="ms">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The total amount of time that was spent in the non-blocking DNS bindings
    while executing PAC scripts. This includes the times for abandoned
    executions.
  </summary>
</histogram>

<histogram name="Net.ProxyResolver.BlockingDNSMode.ExecutionTime" units="ms">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The amount of time inside of V8 that the proxy script spent executing for
    the final pass. This includes the time spent in the javascript bindings.
    This does not include the time spent in abandoned execution passes.
  </summary>
</histogram>

<histogram name="Net.ProxyResolver.BlockingDNSMode.NumAlerts">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of times that alert() was called in the final execution of the
    script.
  </summary>
</histogram>

<histogram name="Net.ProxyResolver.BlockingDNSMode.NumErrors">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of errors that were seen in the final execution of the script.
  </summary>
</histogram>

<histogram name="Net.ProxyResolver.BlockingDNSMode.NumRestarts">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of times that the PAC script execution was restarted.
  </summary>
</histogram>

<histogram name="Net.ProxyResolver.BlockingDNSMode.TotalTime" units="ms">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The total time that the proxy resolution took. This includes all the time
    spent waiting for DNS, PAC script execution, and restarts.
  </summary>
</histogram>

<histogram name="Net.ProxyResolver.BlockingDNSMode.TotalTimeDNS" units="ms">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The total time that proxy resolution spent waiting for DNS. This also
    includes any queuing delays on the origin thread waiting for the DNS result
    to be processed.
  </summary>
</histogram>

<histogram name="Net.ProxyResolver.BlockingDNSMode.UniqueDNS">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of unique DNS hostnames that the PAC script tried to resolve. The
    *Ex() versions of the bindings count separately.
  </summary>
</histogram>

<histogram name="Net.ProxyResolver.DnsWaitTotalTime" units="ms">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The total amount of time that was spent in the non-blocking DNS bindings
    while executing PAC scripts. This includes the times for abandoned
    executions.
  </summary>
</histogram>

<histogram name="Net.ProxyResolver.ExecutionTime" units="ms">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The amount of time inside of V8 that the proxy script spent executing for
    the final pass. This includes the time spent in the javascript bindings
    (which is probably dominated by Net.ProxyResolver.DnsWaitTotalTime). This
    does not include the time spent in abandoned execution passes.
  </summary>
</histogram>

<histogram name="Net.ProxyResolver.NumAlerts">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of times that alert() was called in the final execution of the
    script.
  </summary>
</histogram>

<histogram name="Net.ProxyResolver.NumErrors">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of errors that were seen in the final execution of the script.
  </summary>
</histogram>

<histogram name="Net.ProxyResolver.NumRestarts">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of times that the PAC script execution was restarted.
  </summary>
</histogram>

<histogram name="Net.ProxyResolver.OriginThreadLatency" units="ms">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The amount of time it took upon completion to run the final task posted back
    to the IO thread.
  </summary>
</histogram>

<histogram name="Net.ProxyResolver.TotalTime" units="ms">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The total time that the proxy resolution took. This includes all the time
    spent waiting for DNS, PAC script execution, and restarts.
  </summary>
</histogram>

<histogram name="Net.ProxyResolver.TotalTimeDNS" units="ms">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The total time that proxy resolution spent waiting for DNS. This also
    includes any queuing delays on the origin thread waiting for the DNS result
    to be processed.
  </summary>
</histogram>

<histogram name="Net.ProxyResolver.TotalTimeWorkerThread" units="ms">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The total time that the proxy resolution took, not including the post back
    to the origin thread. This includes all the time spent waiting for DNS, PAC
    script execution, and restarts.
  </summary>
</histogram>

<histogram name="Net.ProxyResolver.UniqueDNS">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of unique DNS hostnames that the PAC script tried to resolve. The
    *Ex() versions of the bindings count separately.
  </summary>
</histogram>

<histogram name="Net.ProxyResolver.URLSize">
  <obsolete>
    Removed in Chrome 39.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The length of the URL that was passed into the PAC script.</summary>
</histogram>

<histogram name="Net.ProxyScriptFetcher.FirstByteDuration" units="ms">
  <owner>cbentzel@chromium.org</owner>
  <summary>
    The time taken from requesting a PAC script to receiving the first byte of
    the response body on successful fetches. This does not include time spent
    doing proxy auto-discovery, or failed attempts at retrieving PAC  scripts.
    If the response body was empty, this measures the total time to fetch the
    (empty) response body.
  </summary>
</histogram>

<histogram name="Net.ProxyScriptFetcher.SuccessDuration" units="ms">
  <owner>cbentzel@chromium.org</owner>
  <summary>
    The time taken to successfully fetch a PAC script. This does not include
    time spent doing proxy auto-discovery, or failed attempts at retrieving PAC
    scripts.
  </summary>
</histogram>

<histogram name="Net.ProxyService.GetProxyUsingScriptResult"
    enum="NetErrorCodes">
  <obsolete>
    Deprecated as of Chrome 61.
  </obsolete>
  <owner>eroman@chromium.org</owner>
  <summary>
    The network error code of resolving a URL by forwarding the request to the
    proxy resolver and executing the PAC script.
  </summary>
</histogram>

<histogram name="Net.ProxyService.GetProxyUsingScriptTime"
    units="100s of microseconds">
  <obsolete>
    Deprecated as of Chrome 61.
  </obsolete>
  <owner>eroman@chromium.org</owner>
  <summary>
    The time taken to resolve a URL by forwarding the request to the proxy
    resolver and executing the PAC script. This includes PAC script execution,
    DNS queries, and internal retries. This does not include retries initiated
    by the user, such as by calling ProxyService::ReconsiderProxyAfterError().
  </summary>
</histogram>

<histogram name="Net.ProxyService.ResolvedUsingScript" enum="Boolean">
  <obsolete>
    Deprecated as of Chrome 61.
  </obsolete>
  <owner>eroman@chromium.org</owner>
  <summary>
    Whether proxy resolution occured by forwarding the request to the proxy
    resolver and executing the PAC script. This histogram records all URLs,
    regardless of whether a proxy configuration is set. Note that in some cases,
    the system proxy resolver is used. If so, this histogram indicates whether
    the request was forwarded to the system resolver. However, on desktop
    platforms, the number of users using the system resolver should be small
    since the default is to use V8. Hence, the count of emissions to the 'True'
    bucket on desktop caused by users of the system resolver should be small.
  </summary>
</histogram>

<histogram name="Net.ProxyService.ResolveProxyTime"
    units="100s of microseconds">
  <obsolete>
    Deprecated as of Chrome 61.
  </obsolete>
  <owner>eroman@chromium.org</owner>
  <summary>
    The total time taken to resolve a URL. This includes PAC script execution,
    DNS queries, and internal retries. This does not include retries initiated
    by the user, such as by calling ProxyService::ReconsiderProxyAfterError().
  </summary>
</histogram>

<histogram name="Net.ProxyService.ScriptTerminated" enum="BooleanTerminated">
  <obsolete>
    Deprecated as of Chrome 61.
  </obsolete>
  <owner>eroman@chromium.org</owner>
  <summary>
    Whether a proxy resolution resulted in the PAC script terminating
    unexpectedly. This does not include terminations that occured during
    initialization of a new proxy resolver. This only happens when the resolver
    process crashes when using out-of-process PAC.
  </summary>
</histogram>

<histogram name="Net.ProxyService.ScriptTerminatedOnInit"
    enum="BooleanTerminated">
  <obsolete>
    Deprecated as of Chrome 61.
  </obsolete>
  <owner>eroman@chromium.org</owner>
  <summary>
    Whether the creation of a new proxy resolver resulted in the PAC script
    terminating unexpectedly. This only happens when the resolver process
    crashes when using out-of-process PAC.
  </summary>
</histogram>

<histogram name="Net.PublicKeyPinFailureDomain" enum="PublicKeyPinFailedDomain">
  <obsolete>
    Deprecated as of November 2016 because of disuse. Historical data is likely
    inaccurate due to changes in the data structure that calculated domain IDs
    for this histogram.
  </obsolete>
  <owner>agl@chromium.org</owner>
  <summary>
    Second-level domains for which we have observed public key pinning failures.
  </summary>
</histogram>

<histogram name="Net.PublicKeyPinReportSendingFailure" enum="NetErrorCodes">
  <obsolete>
    Deprecated as of 07/2016. Replaced with
    Net.PublicKeyPinReportSendingFailure2.
  </obsolete>
  <owner>estark@chromium.org</owner>
  <summary>
    A validated certificate chain may be subject to additional pinning
    requirements on a per-domain basis. When pinning requirements are violated,
    Chrome attempts to send a report about the incident. This records the net
    error code when sending a pinning violation report fails.
  </summary>
</histogram>

<histogram name="Net.PublicKeyPinReportSendingFailure2" enum="NetErrorCodes">
  <owner>estark@chromium.org</owner>
  <summary>
    A validated certificate chain may be subject to additional pinning
    requirements on a per-domain basis. When pinning requirements are violated,
    Chrome attempts to send a report about the incident. This records the net
    error code when sending a pinning violation report fails.
  </summary>
</histogram>

<histogram name="Net.PublicKeyPinSuccess" enum="BooleanSuccess">
  <owner>agl@chromium.org</owner>
  <summary>
    A validated certificate chain may be subject to additional
    &quot;pinning&quot; requirements on a per-domain basis. This records the
    fraction of successful matches between a certificate chain and a pin list.
  </summary>
</histogram>

<histogram name="Net.PushedStreamAlreadyHasResponseHeaders" enum="Boolean">
  <obsolete>
    Deprecated 11/2017.
  </obsolete>
  <owner>bnc@chromium.org</owner>
  <summary>
    Records whether HTTP/2 response headers have already arrived on a pushed
    stream at the time the stream is matched up with a request. See
    https://crbug.com/554220.
  </summary>
</histogram>

<histogram name="Net.PushedStreamVaryResponseHeader"
    enum="PushedStreamVaryResponseHeaderValues">
  <owner>bnc@chromium.org</owner>
  <summary>
    Information about the value of the Vary response header in HTTP/2 pushed
    streams.
  </summary>
</histogram>

<histogram name="Net.QuicActiveSessions">
  <owner>rch@chromium.org</owner>
  <summary>
    The number of active QUIC sessions before we activate a new QUIC session.
  </summary>
</histogram>

<histogram name="Net.QuicAlternativeProxy.Usage"
    enum="QuicAlternativeProxyUsage">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Breakdown of how requests which could potentially make use of an alternative
    QUIC proxy server use or don't use the QUIC server.
  </summary>
</histogram>

<histogram name="Net.QuicAltSvcFormat" enum="QuicAltSvcFormat">
  <owner>wangyix@chromium.org</owner>
  <summary>
    Tracks the number of QUIC alt-svc advertisements parsed by Chrome in Google
    format vs in IETF format.
  </summary>
</histogram>

<histogram name="Net.QuicClientHelloRejectReasons" enum="QuicRejectReasons">
  <owner>rch@chromium.org</owner>
  <summary>
    The reject reasons for QUIC's CHLO (client hello) message from server
  </summary>
</histogram>

<histogram name="Net.QuicClientHelloServerConfig.HowExpired" units="ms">
  <obsolete>
    Deprecated 08/2014, and replaced by
    Net.QuicClientHelloServerConfig.InvalidDuration.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    How expired server config is for sending inchoate ClientHello to the server.
  </summary>
</histogram>

<histogram name="Net.QuicClientHelloServerConfig.InvalidDuration" units="ms"
    expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
    The time since expiration of server config when we sent inchoate ClientHello
    to the server.
  </summary>
</histogram>

<histogram name="Net.QuicClientHelloServerConfigState"
    enum="QuicServerConfigState">
  <obsolete>
    Deprecated as of 11/2014. Replaced by Net.QuicInchoateClientHelloReason.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    The reason (the state of the server config) for sending inchoate ClientHello
    to the server.
  </summary>
</histogram>

<histogram name="Net.QuicCloseConnection.NullVisitor" enum="BooleanNullVisitor">
  <obsolete>
    Deprecated 02/2018. No data for this histogram for more than 30 days.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    The number of times Connection's visitor is a nullptr when CloseConnection
    is called.
  </summary>
</histogram>

<histogram name="Net.QuicConnection.WritePacketStatus" enum="QuicWriteStatus">
  <owner>wub@chromium.org</owner>
  <summary>
    The write result returned by the packet writer when the connection attempts
    to write a packet.
  </summary>
</histogram>

<histogram name="Net.QuicCryptoClientConfig.PopulatedFromCanonicalConfig"
    enum="BooleanPopulated" expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
    The number of times CryptoClientConfig's CachedState is populated from
    canonical config whenever we create a new CryptoClientConfig::CachedState.
  </summary>
</histogram>

<histogram name="Net.QuicDiskCache.APICall" enum="QuicDiskCacheAPICall">
  <obsolete>
    Deprecated as of 4/15/2017.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    Tracks number of times data read/parse/write API calls of QuicServerInfo to
    and from disk cache is called.
  </summary>
</histogram>

<histogram name="Net.QuicDiskCache.EntryState" enum="QuicDiskCacheEntryState">
  <obsolete>
    Deprecated as of 10/2014.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    Tracks the opening and closing of disk cache entries. Recorded each time a
    disk cache entry is either opened or closed.
  </summary>
</histogram>

<histogram name="Net.QuicDiskCache.FailureReason"
    enum="QuicDiskCacheFailureReason">
  <owner>rch@chromium.org</owner>
  <summary>
    Tracks failure reasons to read/load/write of QuicServerInfo to and from disk
    cache.
  </summary>
</histogram>

<histogram name="Net.QuicEphemeralPortsSuggested">
  <obsolete>
    Deprecated as of 04/2016.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>The number of ports suggested per server.</summary>
</histogram>

<histogram name="Net.QuicHandshakeNotConfirmedNumPacketsReceived">
  <owner>rch@chromium.org</owner>
  <summary>
    The number of QUIC packets received by a QUIC connection whose handshake was
    not confirmed when that connection is closed.
  </summary>
</histogram>

<histogram name="Net.QuicHandshakeState" enum="QuicHandshakeState">
  <owner>rch@chromium.org</owner>
  <summary>
    The state of a QUIC connection's crypto hanshake as it progresses from
    starting to confirmation or failure.
  </summary>
</histogram>

<histogram name="Net.QuicHpackCompressionPercentage" units="%">
  <owner>ckrasic@chromium.org</owner>
  <summary>
    The compression percentage, logged for each sent HPACK compressed header
    frame.
  </summary>
</histogram>

<histogram name="Net.QuicHpackDecoder.IndexedEntryAge" units="ms">
  <owner>ckrasic@chromium.org</owner>
  <summary>
    For each indexed representation decoded, records the time since the
    corresponding entry was added to the dynamic table.  This data is being
    collected to help analyze a proposed solution to HPACK induced head of line
    blocking.
  </summary>
</histogram>

<histogram name="Net.QuicHpackDecompressionPercentage" units="%">
  <owner>ckrasic@chromium.org</owner>
  <summary>
    The decompression percentage, logged for each received HPACK compressed
    header frame.
  </summary>
</histogram>

<histogram name="Net.QuicHpackEncoder.IndexedEntryAge" units="ms">
  <owner>ckrasic@chromium.org</owner>
  <summary>
    For each indexed representation encoded, records the time since the
    corresponding entry was added to the dynamic table.  This data is being
    collected to help analyze a proposed solution to HPACK induced head of line
    blocking.
  </summary>
</histogram>

<histogram name="Net.QuicHttpStream::DoStreamRequest.IsNullSession"
    enum="Boolean">
  <obsolete>
    Deprecated 2016. No longer tracked.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    The number of times QuicHttpStream's session_ is a nullptr before
    StartRequest() is called.
  </summary>
</histogram>

<histogram name="Net.QuicInchoateClientHelloReason"
    enum="QuicServerConfigState" expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
    The reason (the state of the server config) for sending inchoate ClientHello
    to the server.
  </summary>
</histogram>

<histogram name="Net.QuicNetworkDegradingDurationTillDisconnected" units="ms">
  <owner>zhongyi@chromium.org</owner>
  <summary>
    The time from QUIC detecting network performance degradation to network
    disconnection.
  </summary>
</histogram>

<histogram name="Net.QuicNetworkDegradingDurationTillNewNetworkMadeDefault"
    units="ms">
  <owner>zhongyi@chromium.org</owner>
  <summary>
    The time from QUIC detecting network performance degradation to an
    alternative network becoming default.
  </summary>
</histogram>

<histogram name="Net.QuicNetworkDisconnectionDuration" units="ms">
  <owner>zhongyi@chromium.org</owner>
  <summary>
    The time from network disconnection to an alternative network becoming
    default.
  </summary>
</histogram>

<histogram name="Net.QuicNumSentClientHellos">
  <owner>rch@chromium.org</owner>
  <summary>The number of client hello messages sent.</summary>
</histogram>

<histogram name="Net.QuicNumSentClientHellosCryptoHandshakeConfirmed">
  <obsolete>
    see Net.QuicSession.Connect*PortForHTTP*
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    The number of client hello messages sent when the crypto handshake was
    confirmed.
  </summary>
</histogram>

<histogram name="Net.QuicNumServerConfig.UpdateMessagesIgnored"
    enum="BooleanIgnored">
  <owner>rch@chromium.org</owner>
  <summary>The number of times ServerConfigUpdateMessages ignored.</summary>
</histogram>

<histogram name="Net.QuicNumStreamFramesInPacket" expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
    The number of stream frames bundled within a received packet.
  </summary>
</histogram>

<histogram name="Net.QuicNumStreamFramesPerStreamInPacket"
    expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
    The number of stream frames per stream ID within a received packet.
  </summary>
</histogram>

<histogram name="Net.QuicReadAvailableData.NullStream" enum="BooleanNullStream">
  <obsolete>
    Removed as of 05/2017.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    The number of times QuicHttpStream's stream_ is a nullptr before
    IsDoneReading() is called.
  </summary>
</histogram>

<histogram name="Net.QuicServerInfo.DiskCacheLoadTime" units="ms">
  <obsolete>
    Deprecated as of 4/15/2017.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>Time spent to load QUIC server information from disk cache.</summary>
</histogram>

<histogram name="Net.QuicServerInfo.DiskCacheReadTime" units="ms">
  <obsolete>
    Deprecated as of 10/2014. Replaced by DiskCacheWaitForDataReadyTime.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>Time spent to load QUIC server information from disk cache.</summary>
</histogram>

<histogram name="Net.QuicServerInfo.DiskCacheState"
    enum="QuicServerConfigState">
  <owner>rch@chromium.org</owner>
  <summary>
    The state of the QUIC server information when it's loaded from the disk
    cache.
  </summary>
</histogram>

<histogram name="Net.QuicServerInfo.DiskCacheWaitForDataReadyTime" units="ms">
  <obsolete>
    Deprecated as of 4/19/2017.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    Time spent waiting to load QUIC server information from disk cache.
  </summary>
</histogram>

<histogram name="Net.QuicServerInfo.ExpectConfigMissingFromDiskCache"
    enum="BooleanMissingFromDiskCache">
  <obsolete>
    Deprecated as of 4/15/2017.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    The number of times AlternateProtocolMap supports QUIC, but there is no QUIC
    server information in the disk cache. This is recorded whenever QUIC server
    information is loaded from the disk cache.
  </summary>
</histogram>

<histogram name="Net.QuicServerInfo.WaitForDataReady.HandshakeConfirmedTime"
    units="Milliseconds">
  <obsolete>
    Deprecated as of 8/3/2017.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    The elapsed time between waiting for reading of QUIC server information from
    disk cache, and receiving crypto handshake confirmation from the server.
    Will measure the impact of cancelling the WaitForDataReady callback. Logged
    after crypto handshake is confirmed.
  </summary>
</histogram>

<histogram name="Net.QuicServerInfo.WaitForDataReadyToRtt" units="%">
  <obsolete>
    Deprecated as of 4/15/2017.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    The ratio of the time spent waiting to load QUIC server information from
    disk cache to the min rtt. Logged when session is closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.21CumulativePacketsReceived"
    units="Received in Ranges">
  <obsolete>
    Deprecated 08/2016.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    This histogram summarizes information about a 21 packet sequence, indicating
    for each of the 21 possible prefixes of this pattern, how many packets were
    received in that prefix.  The first range uses buckets 0 and 1, and it
    describes the 1st packet in the sequence.  It indicates if the first packet
    was missing (bucket 0), or the first packet was present (bucket 1).  The
    second range uses buckets 2 through 4, and describes the first 2 packets in
    the prefix of this sequence.  It indicates if there were no packets received
    in the first two packets (bucket 2), or there was one out of two packets
    received (bucket 3), or if there was two out of tow received (bucket 4).
    etc. etc.  Reading this histogram may require post-processing in a spread
    sheet, but can indicate the potential value of using FEC packets to convey
    data.
  </summary>
</histogram>

<histogram name="Net.QuicSession.6PacketsPatternsReceived"
    units="Binay of Packets ACKed">
  <obsolete>
    Deprecated 08/2016.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    Each of the 64 buckets represents a different binary pattern of 6
    consecutive packets that were received by the client.  The LSB of the bucket
    number corresponds to the reception of the oldest packet.  A bit in the
    bucket-number being 1 indicates the packet was received, and a 0 means the
    packet was never received (by the client).
  </summary>
</histogram>

<histogram name="Net.QuicSession.AbortedPendingStreamRequests"
    units="stream requests">
  <owner>ckrasic@chromium.org</owner>
  <summary>
    The number of pending stream requests aborted when the session is closed.
    Pending streams are those which could not be created immediately because
    there were too many active streams.
  </summary>
</histogram>

<histogram name="Net.QuicSession.AsyncRead" enum="Boolean">
  <owner>rch@chromium.org</owner>
  <summary>
    True if the result of reading a packet from the network was ERR_IO_PENDING.
    Recorded for each packet when Read() returns.
  </summary>
</histogram>

<histogram name="Net.QuicSession.BlockedFrames.Received">
  <owner>rch@chromium.org</owner>
  <summary>
    The number of BLOCKED frames recevied by a QuicSession when the session is
    closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.BlockedFrames.Sent">
  <owner>rch@chromium.org</owner>
  <summary>
    The number of BLOCKED frames sent by a QuicSession when the session is
    closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.CertVerificationResult" enum="NetErrorCodes">
  <owner>rch@chromium.org</owner>
  <summary>
    The network error code returned to a QUIC session from the CertVerifier when
    a certification verification is attempted.
  </summary>
</histogram>

<histogram name="Net.QuicSession.CertVerifierJob.CompleteTime"
    units="Milliseconds">
  <owner>rch@chromium.org</owner>
  <summary>
    Time spent verifying a certificate when racing cert veriifcation with host
    resolution.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ClientSideMtu" units="bytes"
    expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
    The final maximum packet size of the connection used by the client before
    the session is closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.CloseAllSessionsError" enum="NetErrorCodes">
  <owner>rch@chromium.org</owner>
  <summary>
    The network error code which resulted in all sessions being closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ClosedDuringInitializeSession" enum="Boolean"
    expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
     True if the QUIC session is closed during the call to InitializeSession,
    logged for each session just after InitializeSession is called.
  </summary>
</histogram>

<histogram name="Net.QuicSession.CloseSessionOnError" enum="NetErrorCodes">
  <owner>rch@chromium.org</owner>
  <summary>
    The network error code which resulted in the session being closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.Connect" units="RTTs">
  <owner>rch@chromium.org</owner>
  <summary>
    Samples of the number of round-trips needed by a QUIC connection before a
    request could be sent by the client.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ConnectAfterBroken" enum="BooleanSuccess">
  <owner>rch@chromium.org</owner>
  <summary>
    True if a QUIC connection connected successfully after having been broken.
    Only emitted after a QUIC connection attempt to a server that was previous
    marked as broken.
  </summary>
</histogram>

<histogram
    name="Net.QuicSession.ConnectionClose.HandshakeFailureBlackHole.QuicError"
    enum="QuicErrorCodes" expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
    The QUIC error which caused a QUIC connection to be closed before the
    hanshake was confirmed, in the case where no packets were received. This
    provides a breakdown of the entires in
    Net.QuicSession.ConnectionClose.HandshakeNotConfirmed.Reason where the value
    is BLACK_HOLE.
  </summary>
</histogram>

<histogram
    name="Net.QuicSession.ConnectionClose.HandshakeFailureUnknown.QuicError"
    enum="QuicErrorCodes">
  <owner>rch@chromium.org</owner>
  <summary>
    The QUIC error which caused a QUIC connection to be closed before the
    hanshake was confirmed, in the case where at least 1 packet was received.
    This provides a breakdown of the entires in
    Net.QuicSession.ConnectionClose.HandshakeNotConfirmed.Reason where the value
    is UNKNOWN.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ConnectionClose.HandshakeNotConfirmed.Reason"
    enum="QuicHandshakeFailureReason">
  <owner>rch@chromium.org</owner>
  <summary>The reason a QUIC handshake failed.</summary>
</histogram>

<histogram
    name="Net.QuicSession.ConnectionClose.NumOpenStreams.HandshakeTimedOut">
  <owner>rch@chromium.org</owner>
  <summary>
    The number of streams open when a QUIC session crypto handshake timed out.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ConnectionClose.NumOpenStreams.TimedOut">
  <owner>rch@chromium.org</owner>
  <summary>The number of streams open when a QUIC session timed out.</summary>
</histogram>

<histogram
    name="Net.QuicSession.ConnectionClose.NumTotalStreams.HandshakeTimedOut">
  <owner>rch@chromium.org</owner>
  <summary>
    The number of total streams created when a QUIC session crypto handshake
    timed out.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ConnectionCloseErrorCode"
    enum="QuicErrorCodes">
  <owner>rch@chromium.org</owner>
  <summary>
    The QUIC error code which resulted in the connection being closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ConnectionCloseErrorCodeClient"
    enum="QuicErrorCodes">
  <owner>rch@chromium.org</owner>
  <summary>
    The QUIC error code which resulted in the connection being closed by the
    client.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ConnectionCloseErrorCodeServer"
    enum="QuicErrorCodes">
  <owner>rch@chromium.org</owner>
  <summary>
    The QUIC error code which resulted in the connection being closed by the
    server.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ConnectionFlowControlBlocked"
    enum="BooleanBlocked">
  <owner>rch@chromium.org</owner>
  <summary>
    Whether QUIC session's connection is flow control blocked when a PING
    message is sent to server.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ConnectionMigration"
    enum="QuicConnectionMigrationStatus">
  <owner>zhongyi@chromium.org</owner>
  <summary>
    The result of a QUIC connection migration attempt. The suffix specifies the
    cause of connection migration.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ConnectionMigrationProbeSuccess"
    enum="BooleanSuccess">
  <owner>fayang@chromium.org</owner>
  <summary>
    The result of connectivity probing according to different migration causes.
    Recorded for every connectivity probing when attempting connection
    migrations.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ConnectionTypeFromPeer" enum="AddressFamily">
  <owner>rch@chromium.org</owner>
  <summary>
    The IP Address family of this connection, as reported by the server.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ConnectionTypeFromSelf" enum="AddressFamily">
  <owner>rch@chromium.org</owner>
  <summary>The IP Address family of this connection, as seen locally.</summary>
</histogram>

<histogram name="Net.QuicSession.ConnectRandomPortRequiringConfirmation"
    units="RTTs">
  <owner>jri@chromium.org</owner>
  <summary>
    Samples of the number of round-trips needed by a QUIC connection before a
    request could be sent by the client, when handshake confirmation was
    required. (The operating system randomly selected a source port for the
    connection.)
  </summary>
</histogram>

<histogram name="Net.QuicSession.CookieSentToAccountsOverChannelId"
    enum="BooleanUsage" expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
    Logs whether channel ID was used when a cookie is sent over QUIC to
    https://accounts.google.com.
  </summary>
</histogram>

<histogram name="Net.QuicSession.CreationError" enum="QuicSessionErrorCodes">
  <owner>rch@chromium.org</owner>
  <summary>
    Count of errors during attempts to create a QUIC session (before even using
    the session).
  </summary>
</histogram>

<histogram name="Net.QuicSession.DuplicatePacketsReceived">
  <owner>rch@chromium.org</owner>
  <summary>
    The number of duplicate packets recevied by a QuicSession when the session
    is closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.FinalTcpCwnd">
  <owner>rch@chromium.org</owner>
  <summary>
    The value of the TCP cubic sender's CWND when the session is closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.GapBetweenWriteErrorAndNetworkDisconnection"
    units="ms">
  <owner>zhongyi@chromium.org</owner>
  <summary>
    This measures the time gap between the most recent write error and the
    network disconnection.
  </summary>
</histogram>

<histogram name="Net.QuicSession.GoAwayReceivedForConnectionMigration"
    enum="BooleanReceived">
  <owner>zhongyi@chromium.org</owner>
  <summary>
    Whether QuicGoAwayFrame is received from server for connection migration due
    to client's port change. Logged when a QuicGoAwayFrame with error code
    QUIC_ERROR_MIGRATING_PORT is received.
  </summary>
</histogram>

<histogram name="Net.QuicSession.HandshakeConfirmedTime" units="Milliseconds">
  <owner>rch@chromium.org</owner>
  <summary>
    The elapsed time between starting the crypto handshake, and receiving
    confirmation from the server.
  </summary>
</histogram>

<histogram name="Net.QuicSession.HandshakeRoundTrips" units="RTTs">
  <obsolete>
    see Net.QuicSession.Connect*PortForHTTP*
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    Samples of the number of round-trips needed by a QUIC connection before a
    request could be sent by the client.
  </summary>
</histogram>

<histogram name="Net.QuicSession.HandshakeStatusOnConnectionMigration"
    enum="BooleanConfirmed">
  <owner>zhongyi@chromium.org</owner>
  <summary>
    The handshake status when when the session attempts to migrate the
    connection according to different migration causes.
  </summary>
</histogram>

<histogram name="Net.QuicSession.HeadersHOLBlockedTime" units="Milliseconds">
  <obsolete>
    The experiments with head of line blocking have been completed, and the code
    tracking head of line blocking was removed.
  </obsolete>
  <owner>ckrasic@chromium.org</owner>
  <summary>
    The elapsed time that headers are head of line blocked on others, presumably
    due to lost headers stream packets.
  </summary>
</histogram>

<histogram name="Net.QuicSession.HeadersStream.EarlyFramesReceived">
  <obsolete>
    Deprecated 08/2016.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    The frames received on the headers stream which arrived early.
  </summary>
</histogram>

<histogram name="Net.QuicSession.HostResolution.HandshakeConfirmedTime"
    units="Milliseconds">
  <owner>rch@chromium.org</owner>
  <summary>
    The elapsed time between the end of resolving the DNS name of the server for
    a QUIC connection, and receiving crypto handshake confirmation from the
    server. Logged after crypto handshake is confirmed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.HostResolutionTime" units="ms">
  <obsolete>
    Deprecated 08/2016. No longer tracked.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    Time spent resolving the DNS name of the server for a QUIC connection.
  </summary>
</histogram>

<histogram name="Net.QuicSession.IncorrectConnectionIDsReceived"
    expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
    The number packets recevied by a QuicSession with an incorrect connection id
    when the sesesion is closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.InitialRttEsitmateSource"
    enum="InitialRttEstimateSource">
  <owner>rch@chromium.org</owner>
  <summary>
    The source for the initial RTT estimate recorded when a QUIC session is
    created.
  </summary>
</histogram>

<histogram name="Net.QuicSession.InternalErrorLocation"
    enum="QuicInternalErrorLocation">
  <owner>rch@chromium.org</owner>
  <summary>
    The location where a QUIC internal error was generated, recorded any time an
    internal error is generated, which should be once per connection.
  </summary>
</histogram>

<histogram
    name="Net.QuicSession.LocallyTimedOutWithOpenStreams.TimeSinceLastReceived">
  <owner>rch@chromium.org</owner>
  <summary>
    If a QUIC connection timed out locally with open streams, this contains the
    time since any data was read from the network until the connection was
    closed. The suffix specifies whether there were any unacked packets pending
    when the connection timed out.
  </summary>
</histogram>

<histogram name="Net.QuicSession.MaxReordering">
  <owner>rch@chromium.org</owner>
  <summary>
    The maximum packet sequence number reordering observed by a QUIC connection.
  </summary>
</histogram>

<histogram name="Net.QuicSession.MaxReorderingTime" units="%">
  <owner>rch@chromium.org</owner>
  <summary>
    The ratio of the maximum reordering time of a QUIC packet to the min rtt.
  </summary>
</histogram>

<histogram name="Net.QuicSession.MaxReorderingTimeLongRtt" units="%">
  <owner>rch@chromium.org</owner>
  <summary>
    The ratio of the maximum reordering time of a QUIC packet to the min rtt,
    only for those sessions with a min rtt larger than 100 ms.
  </summary>
</histogram>

<histogram name="Net.QuicSession.MinRTT" units="ms">
  <owner>rch@chromium.org</owner>
  <summary>
    The minimum RTT observed during the life of a QUIC connection.
  </summary>
</histogram>

<histogram name="Net.QuicSession.MtuProbesSent" expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
    The number of MTU probes sent by the client during the session.  Logged when
    the connection is destroyed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.NumOpenStreams">
  <owner>rch@chromium.org</owner>
  <summary>
    The number of QUIC streams opened when a new QUIC stream is created.
  </summary>
</histogram>

<histogram name="Net.QuicSession.NumPendingStreamRequests"
    units="stream requests">
  <owner>ckrasic@chromium.org</owner>
  <summary>
    The number of pending stream requests when a new stream request is added to
    the pending list.  Pending streams are those which could not be created
    immediately because there were too many active streams.
  </summary>
</histogram>

<histogram name="Net.QuicSession.NumQueuedPacketsAtOutOfOrder" units="packets">
  <owner>zhongyi@chromium.org</owner>
  <summary>
    The number of queued packets when a connection is closed due to writing an
    out of order packet.
  </summary>
</histogram>

<histogram name="Net.QuicSession.NumQueuedPacketsBeforeWrite" units="packets">
  <owner>zhongyi@chromium.org</owner>
  <summary>
    The number of queued packets when a connection starts to write queued
    packets.
  </summary>
</histogram>

<histogram name="Net.QuicSession.NumTotalStreams">
  <owner>rch@chromium.org</owner>
  <summary>
    The total number of streams created by the client when the session is
    closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.OutOfOrderGapReceived">
  <owner>rch@chromium.org</owner>
  <summary>
    The number of missing packets between the current received packet and the
    previously largest received packet sequence number, when the current
    received packet had a lower sequence number than the previously received
    packet sequence number.
  </summary>
</histogram>

<histogram name="Net.QuicSession.OutOfOrderLargePacketsReceived"
    expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
    The number of times the current received packet had a lower sequence number
    than the previously received packet sequence number, and the size of the
    current packet is larger than the size of the previous packet.
  </summary>
</histogram>

<histogram name="Net.QuicSession.OutOfOrderPacketsReceived">
  <owner>rch@chromium.org</owner>
  <summary>
    The number of times the current received packet had a lower sequence number
    than the previously received packet sequence number.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PacketGapReceived">
  <owner>rch@chromium.org</owner>
  <summary>
    The number of missing packets between the current received packet and the
    previously largest received packet sequence number.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PacketGapReceivedNearPing" units="count">
  <owner>zhongyi@chromium.org</owner>
  <summary>
    The number of missing packets between the last received packet before a PING
    frame sent and the first packet received after PING sent.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PacketGapSent">
  <owner>rch@chromium.org</owner>
  <summary>
    The number of missing packets between the current received packet and the
    previously largest received packet sequence number, as reported by the
    remote end of the connection.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PacketLossRate" units="1/10th Percent">
  <owner>rch@chromium.org</owner>
  <summary>
    The ratio of the number of missing packets, to the maximum packet sequence
    number received,  for QUIC connections longer than 21 packets received via
  </summary>
</histogram>

<histogram name="Net.QuicSession.PacketReceived" units="SequenceNumber">
  <obsolete>
    Deprecated 08/2016.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    Each bucket corresponds to a specific packet sequence number that was sent
    by a server to Chrome at the start of a QUIC connection. This histogram is
    compared, bucket by bucket, with a second histogram to compute the ratio for
    each bucket (each packet sequence number).
  </summary>
</histogram>

<histogram name="Net.QuicSession.PacketRetransmitsPerMille" units="permille">
  <owner>ckrasic@chromium.org</owner>
  <summary>
    The number of packets retransmitted per 1000.  Only sessions with
    packets_sent &gt;= 100 are included.  Recorded in session destructor.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PacketWriteTime">
  <owner>rch@chromium.org</owner>
  <summary>
    The time taken to Write() a QUIC packet to the socket. Recorded for each
    packet when it is sent. The suffix specifies if the write completed
    synchonously or asynchronously.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PendingStreamsWaitTime" units="ms">
  <owner>ckrasic@chromium.org</owner>
  <summary>
    The wait time of the pending stream when it is finally serviced. Pending
    streams are those which could not be created immediately because there were
    too many active streams.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PlatformNotification"
    enum="QuicPlatformNotification">
  <owner>zhongyi@chromium.org</owner>
  <summary>
    The platform notification received by QUIC when network change happens.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PreferAesGcm" enum="BooleanPreferred">
  <owner>rch@chromium.org</owner>
  <summary>
    True if the QUIC session prefers to use AES GCM because of hardware support.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ProbingRetryCountUntilSuccess" units="retries">
  <owner>zhongyi@chromium.org</owner>
  <summary>
    Number of retries to send connectivity probing packet on new path until
    success.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ProbingTimeInMillisecondsUntilSuccess"
    units="ms">
  <owner>zhongyi@chromium.org</owner>
  <summary>
    The wait time to receive a matched probing response to mark connectivity
    probing as successful.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PublicResetAddressMismatch"
    enum="QuicAddressMismatch">
  <obsolete>
    Deprecated 02/2018. Use Net.QuicSession.PublicResetAddressMismatch2.
  </obsolete>
  <owner>wtc@chromium.org</owner>
  <summary>
    When a public reset packet is received, whether the client IP address and
    port number in it differ from the client IP address and port number in the
    ServerHello handshake message. In the comparison, the first address is the
    one in ServerHello and the second address is the one in public reset. Note:
    this histogram is obsolete because it failed to treat IPv4-mapped IPv6
    addresses as IPv4 addresses.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PublicResetAddressMismatch2"
    enum="QuicAddressMismatch">
  <owner>wtc@chromium.org</owner>
  <summary>
    When a public reset packet is received, whether the client IP address and
    port number in it differ from the client IP address and port number in the
    ServerHello handshake message. In the comparison, the first address is the
    one in ServerHello and the second address is the one in public reset.
  </summary>
</histogram>

<histogram name="Net.QuicSession.Pushed" units="count">
  <owner>ckrasic@chromium.org</owner>
  <summary>
    The number of push streams received when the session is closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PushedAndClaimed" units="count">
  <owner>ckrasic@chromium.org</owner>
  <summary>
    The number of pushed and used streams when the session is closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PushedAndUnclaimedBytes" units="count">
  <owner>zhongyi@chromium.org</owner>
  <summary>
    The number of bytes that is pushed but not used when the session is closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.PushedBytes" units="count">
  <owner>zhongyi@chromium.org</owner>
  <summary>
    The number of bytes that is pushed when the session is closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.QuicVersion">
  <owner>rch@chromium.org</owner>
  <summary>Version of the QUIC protocol used for this connection.</summary>
</histogram>

<histogram name="Net.QuicSession.ReadError" enum="NetErrorCodes">
  <owner>rch@chromium.org</owner>
  <summary>
    The network error code returned when attempting to read from a QUIC
    connection. The suffix specifies the condition/source of the read error.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ReadError.CurrentNetwork.HandshakeConfirmed"
    enum="NetErrorCodes">
  <owner>zhongyi@chromium.org</owner>
  <summary>
    The network error code returned when attempting to read on the current
    network from a QUIC connection after handshake has been confirmed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.RejectHasProof" enum="Boolean"
    expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
    True if the QUIC REJ message received from the server contains a proof.
  </summary>
</histogram>

<histogram name="Net.QuicSession.RejectLength" expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
    The length in bytes of a QUIC REJ message received from the server.
  </summary>
</histogram>

<histogram name="Net.QuicSession.RetryAfterWriteErrorCount" units="retries">
  <obsolete>
    Deprecated 11/2017. Use Net.QuicSession.RetryAfterWriteErrorCount2.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    The number of consecutive times a packet was retried after a write error.
  </summary>
</histogram>

<histogram name="Net.QuicSession.RetryAfterWriteErrorCount2" units="retries">
  <owner>rch@chromium.org</owner>
  <summary>
    The number of consecutive times a packet was retried after a write error,
    using exponential backoff.
  </summary>
</histogram>

<histogram name="Net.QuicSession.RstStreamErrorCodeClient"
    enum="QuicRstStreamErrorCodes">
  <owner>rch@chromium.org</owner>
  <summary>
    The QUIC error code which resulted in a stream being reset by the client.
  </summary>
</histogram>

<histogram name="Net.QuicSession.RstStreamErrorCodeServer"
    enum="QuicRstStreamErrorCodes">
  <owner>rch@chromium.org</owner>
  <summary>
    The QUIC error code which resulted in a stream being reset by the server.
  </summary>
</histogram>

<histogram name="Net.QuicSession.SecureResourceSecureSession">
  <owner>rch@chromium.org.</owner>
  <summary>
    The number of request for secure resources over QUIC sessions. True if the
    session is secure, false if it is not.
  </summary>
</histogram>

<histogram name="Net.QuicSession.SentConnectivityProbe" enum="Boolean">
  <obsolete>
    Deprecated 03/2018 as crbug.com/817496 is resolved.
  </obsolete>
  <owner>zhongyi@chromium.org</owner>
  <summary>
    The number of times the connection sends connectivity probe to the peer.
  </summary>
</histogram>

<histogram name="Net.QuicSession.ServerSideMtu" units="bytes"
    expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
    The largest packet which the client received from the server during the
    session.
  </summary>
</histogram>

<histogram name="Net.QuicSession.SmoothedRTT" units="ms">
  <owner>rch@chromium.org</owner>
  <summary>
    The final smoothed RTT observed during the life of a QUIC connection.
  </summary>
</histogram>

<histogram name="Net.QuicSession.StreamCloseErrorCodeClient.HandshakeConfirmed"
    enum="QuicErrorCodes">
  <owner>rch@chromium.org</owner>
  <summary>
    The QUIC error code which resulted in the stream (and connection) being
    closed by the client after the handshake was confirmed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.StreamCloseErrorCodeServer.HandshakeConfirmed"
    enum="QuicErrorCodes">
  <owner>rch@chromium.org</owner>
  <summary>
    The QUIC error code which resulted in the stream (and connection) being
    closed by the client after the handshake was confirmed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.StreamFlowControlBlocked"
    enum="BooleanBlocked">
  <owner>rch@chromium.org</owner>
  <summary>
    Whether any of QUIC session's streams are flow control blocked when a PING
    message is sent to server.
  </summary>
</histogram>

<histogram name="Net.QuicSession.StreamFrameDuplicatedLongConnection"
    units="1/10th Percent">
  <owner>rch@chromium.org</owner>
  <summary>
    The number of stream frames received which were duplicates, out of every
    1000 stream frames received. Only for QUIC sessions which received at least
    100 packets.
  </summary>
</histogram>

<histogram name="Net.QuicSession.StreamFrameDuplicatedPercentLongConnection">
  <owner>rch@chromium.org</owner>
  <summary>
    The percentage of stream frames received which were duplicates. Only for
    QUIC sessions which received at least 100 packets.
  </summary>
</histogram>

<histogram name="Net.QuicSession.StreamFrameDuplicatedPercentShortConnection">
  <owner>rch@chromium.org</owner>
  <summary>
    The percentage of stream frames received which were duplicates. Only for
    QUIC sessions which received fewer than 100 packets.
  </summary>
</histogram>

<histogram name="Net.QuicSession.StreamFrameDuplicatedShortConnection"
    units="1/10th Percent">
  <owner>rch@chromium.org</owner>
  <summary>
    The number of stream frames received which were duplicates, out of every
    1000 stream frames received. Only for QUIC sessions which received fewer
    than 100 packets.
  </summary>
</histogram>

<histogram name="Net.QuicSession.TimedOutWithOpenStreams.ConsecutiveRTOCount"
    expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
    If a QUIC connection timed out with open streams, this contains a count of
    consecutive RTOs.
  </summary>
</histogram>

<histogram name="Net.QuicSession.TimedOutWithOpenStreams.ConsecutiveTLPCount"
    expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
    If a QUIC connection timed out with open streams, this contains a count of
    consecutive TLPs.
  </summary>
</histogram>

<histogram name="Net.QuicSession.TimedOutWithOpenStreams.HasUnackedPackets"
    expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
    If a QUIC connection timed out with open streams, this will be true when the
    connection has unacked packets.
  </summary>
</histogram>

<histogram name="Net.QuicSession.TimedOutWithOpenStreams.LocalPort"
    expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
    If a QUIC connection timed out locally with open streams, this contains the
    local port number for the connection.
  </summary>
</histogram>

<histogram name="Net.QuicSession.TooManyOpenStream" enum="BooleanTooMany">
  <obsolete>
    Deprecated 04/2015. Tracked as Net.QuicSession.TooManyOpenStreams.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    True if more than 100 streams are open when a new stream is activated.
  </summary>
</histogram>

<histogram name="Net.QuicSession.TooManyOpenStreams" enum="BooleanTooMany"
    expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
    True if more than 100 streams are open when a new stream is activated.
  </summary>
</histogram>

<histogram name="Net.QuicSession.TruncatedAcksReceived">
  <obsolete>
    Deprecated 08/2016.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>The number of truncated ACK frames received.</summary>
</histogram>

<histogram name="Net.QuicSession.TruncatedAcksSent">
  <obsolete>
    Deprecated 08/2016.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>The number of truncated ACK frames sent.</summary>
</histogram>

<histogram name="Net.QuicSession.UndecryptablePacketsReceived"
    expires_after="2018-08-30">
  <owner>rch@chromium.org</owner>
  <summary>
    The number of undecryptable packets recevied by a QuicSession when the
    sesesion is closed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.UnexpectedNotGoingAway"
    enum="QuicSessionLocations">
  <owner>rch@chromium.org</owner>
  <summary>
    The location in quic_client_session.cc where a session is unexpectedly not
    going away.
  </summary>
</histogram>

<histogram name="Net.QuicSession.UnexpectedObservers"
    enum="QuicSessionLocations">
  <owner>rch@chromium.org</owner>
  <summary>
    The location in quic_client_session.cc where there were unexpected
    observers.
  </summary>
</histogram>

<histogram name="Net.QuicSession.UnexpectedOpenStreams"
    enum="QuicSessionLocations">
  <owner>rch@chromium.org</owner>
  <summary>
    The location in quic_client_session.cc where there were unexpected open
    streams.
  </summary>
</histogram>

<histogram name="Net.QuicSession.VerifyProofTime" units="ms">
  <owner>rch@chromium.org</owner>
  <summary>
    Time spent verifying the signature and certificate chain. This is logged
    whenever QUIC verifies the certificate chain and signature during crypto
    handshake.
  </summary>
</histogram>

<histogram name="Net.QuicSession.WriteError" enum="NetErrorCodes">
  <owner>rch@chromium.org</owner>
  <summary>
    The network error code returned when attempting to write to a QUIC
    connection.
  </summary>
</histogram>

<histogram name="Net.QuicSession.WriteError.HandshakeConfirmed"
    enum="NetErrorCodes">
  <owner>rch@chromium.org</owner>
  <summary>
    The network error code returned when attempting to write to a QUIC
    connection after the handshake has been confirmed.
  </summary>
</histogram>

<histogram name="Net.QuicSession.WriteError.NetworkDisconnected"
    enum="NetErrorCodes">
  <owner>zhongyi@chromium.org</owner>
  <summary>
    The most recent network error code when attempting to write to a QUIC
    connection when the network gets disconnected.
  </summary>
</histogram>

<histogram name="Net.QuicSession.WriteOutOfOrderQueuedPacketAfterClose"
    enum="Boolean">
  <obsolete>
    Deprecated 06/2018 after https://crbug.com/818040 is fixed.
  </obsolete>
  <owner>wub@chromium.org</owner>
  <summary>
    Temporary histogram being used to investigate https://crbug.com/818040.
    Records whether a connection is closed when an out of order queued packet is
    about to be written.
  </summary>
</histogram>

<histogram name="Net.QuicSession.WritePacketNotReusableReason"
    enum="QuicNotReusableReason">
  <owner>ckrasic@chromium.org</owner>
  <summary>
    The reason QUIC packet writer needed to allocate a new buffer, rather than
    the expected case of reusing its existing one.
  </summary>
</histogram>

<histogram name="Net.QuicStreamFactory.BadPacketLossEvents5"
    enum="QuicBadPacketLossEvents">
  <owner>rch@chromium.org</owner>
  <summary>
    A count of how often a user hits 1, 2, 3, 4 and 5 bad packet loss events for
    port 443. Recorded whenever QUIC has bad packet loss (high packet loss on
    multiple consecutive connections).
  </summary>
</histogram>

<histogram name="Net.QuicStreamFactory.DefaultNetworkMatch"
    enum="BooleanMatched">
  <owner>zhongyi@chromium.org</owner>
  <summary>
    Records, for initial socket created for each new QUIC connection, whether
    the bound network matched the default network tracked by QuicStreamFactory.
  </summary>
</histogram>

<histogram name="Net.QuicStreamFactory.DisabledReasons"
    enum="QuicDisabledReason">
  <owner>ckrasic@chromium.org</owner>
  <summary>
    Rrecords reasons QUIC is disabled (for all ports), if sufficent recent
    connections experience: public reset post crypto handshake, or timeouts with
    streams open. QUIC is disabled until the next reboot of Chrome. Logged
    during session close.
  </summary>
</histogram>

<histogram name="Net.QuicStreamFactory.PublicResetsPostHandshake"
    units="resets">
  <owner>ckrasic@chromium.org</owner>
  <summary>
    Captures the maximum number of public resets post handshake that occurred
    within a window of recent connections (default 20). Will help inform the
    choice of threshold to disable QUIC for clients that experience pathalogical
    errors. Logged during session close.
  </summary>
</histogram>

<histogram name="Net.QuicStreamFactory.QuicIsDisabled" enum="Ports">
  <owner>rch@chromium.org</owner>
  <summary>
    Recorded whenever QUIC is disabled for a port due to repeated lossy
    connections (high packet loss on multiple consecutive connections). QUIC is
    disabled until next reboot of Chrome.
  </summary>
</histogram>

<histogram name="Net.QuicStreamFactory.TimeoutsWithOpenStreams"
    units="timeouts">
  <owner>ckrasic@chromium.org</owner>
  <summary>
    Captures the maximum number of connection timeouts with streams open that
    occurred within a window of recent connections (default 20). Will help
    inform the choice of threshold to disable QUIC for clients that experience
    pathalogical errors. Logged during session close.
  </summary>
</histogram>

<histogram name="Net.QuicStreamFactory.TSVIPCliIsLoaded" enum="Boolean">
  <obsolete>
    Deprecated 06/2016. No longer tracked.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    Whether TSVIPCli DLL is loaded or not on windows when the socket is
    configured.
  </summary>
</histogram>

<histogram name="Net.QuicTimeBetweenTwoPacketSent" units="ms">
  <obsolete>
    Deprecated 08/2016. No longer tracked.
  </obsolete>
  <owner>zhongyi@chromium.org</owner>
  <summary>
    Time duration from last packet sent to a new packet sent in QUIC connection.
  </summary>
</histogram>

<histogram name="Net.QuicVerifyProofFailed.HandshakeConfirmed"
    enum="BooleanHandshakeConfirmed">
  <owner>rch@chromium.org</owner>
  <summary>
    Logged whenever proof verification fails and if the failure occurred before
    or after the crypto handshake is confirmed.
  </summary>
</histogram>

<histogram name="Net.RedirectChainLength" units="redirects">
  <owner>csharrison@chromium.org</owner>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    The total number of redirects encountered during processing a URLRequest.
    This includes redirects generated by servers (for example, 302 Found) and
    redirects generated internally (for example, HSTS redirects or error pages).
  </summary>
</histogram>

<histogram name="Net.RedirectWithUnadvertisedContentEncoding" enum="Boolean">
  <owner>eustas@chromium.org</owner>
  <summary>
    True for redirect responses with unadvertised &quot;Content-Encoding&quot;.
    False for valid redirect responses. See http://crbug.com/714514
  </summary>
</histogram>

<histogram name="Net.RenegotiationExtensionSupported">
  <obsolete>
    Deprecated 03/2015. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    True if the HTTP request was sent to a server which supports the TLS
    renegotiation extension.
  </summary>
</histogram>

<histogram name="Net.Reporting.HeaderEndpointGroupOutcome"
    enum="NetReportingHeaderEndpointGroupOutcome">
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The outcome of Reporting trying to process a single endpoint group in a
    Report-To header once the header itself has been parsed.
  </summary>
</histogram>

<histogram name="Net.Reporting.HeaderEndpointOutcome"
    enum="NetReportingHeaderEndpointOutcome">
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The outcome of Reporting trying to process a single endpoint in a Report-To
    header once the header itself has been parsed.
  </summary>
</histogram>

<histogram name="Net.Reporting.HeaderOutcome" enum="NetReportingHeaderOutcome">
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The outcome of Reporting trying to process a Report-To header. Once it is
    parsed, Reporting.HeaderEndpointOutcome records the outcome of the endpoints
    within it.
  </summary>
</histogram>

<histogram name="Net.Reporting.ReportDeliveredAttempts" units="attempts">
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    When Reporting successfully delivers a report, the number of unsuccessful
    delivery attempts that preceded the successful one.
  </summary>
</histogram>

<histogram name="Net.Reporting.ReportDeliveredLatency" units="ms">
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The delivery latency of reports successfully delivered by Reporting. Starts
    when the report is queued and finishes when the delivery attempt returns
    successfully.
  </summary>
</histogram>

<histogram name="Net.Reporting.ReportOutcome" enum="NetReportingReportOutcome">
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The outcome of Reporting trying to deliver a report, recorded when the
    report is finally erased from memory.
  </summary>
</histogram>

<histogram name="Net.Reporting.UploadError"
    enum="CombinedHttpResponseAndNetErrorCode">
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The error (net or HTTP) encountered by Reporting trying to upload one or
    more reports to a single endpoint in a single request, recorded when the
    upload attempt completes, if and only if the attempt failed with a net error
    or an HTTP error other than 410 (which is specified to mean &quot;remove
    endpoint&quot;).
  </summary>
</histogram>

<histogram name="Net.Reporting.UploadOutcome" enum="NetReportingUploadOutcome">
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The outcome of Reporting trying to upload one or more reports to a single
    endpoint in a single request, recorded when the upload attempt completes.
  </summary>
</histogram>

<histogram name="Net.RequestTime">
  <obsolete>
    Replaced by Net.RequestTime2 due to bug in original implementation.
  </obsolete>
  <summary>
    The amount of time between request initiation and request completion for
    success and various different errors.
  </summary>
</histogram>

<histogram name="Net.RequestTime2">
  <obsolete>
    Unused, so removed from Chromium as of 2017/8/31.
  </obsolete>
  <summary>
    The amount of time between request initiation and request completion for
    success and various different errors.
  </summary>
</histogram>

<histogram name="Net.RequestTime2.ErrAborted.HttpScheme" units="ms">
  <obsolete>
    Unused, so removed from Chromium as of 2017/8/31.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The amount of time between request initiation and request completion for
    ERR_ABORTED when the request's scheme is http/s.
  </summary>
</histogram>

<histogram name="Net.RequestTime2.ErrAborted.NetworkContent" units="ms">
  <obsolete>
    Unused, so removed from Chromium as of 2017/8/31.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The amount of time between request initiation and request completion for
    ERR_ABORTED when the requests TotalReceivedBytes() &gt; 0.
  </summary>
</histogram>

<histogram name="Net.RequestTime2.ErrAborted.NoBytesRead" units="ms">
  <obsolete>
    Unused, so removed from Chromium as of 2017/8/31.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The amount of time between request initiation and request completion for
    ERR_ABORTED when the requests TotalReceivedBytes() = 0 and
    received_response_content_length() = 0.
  </summary>
</histogram>

<histogram name="Net.RequestTime2.ErrAborted.NoNetworkContent.CachedContent"
    units="ms">
  <obsolete>
    Unused, so removed from Chromium as of 2017/8/31.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The amount of time between request initiation and request completion for
    ERR_ABORTED when the requests TotalReceivedBytes() = 0 and
    received_response_content_length() &gt; 0.
  </summary>
</histogram>

<histogram name="Net.RequestTime2.ErrAborted.NonHttpScheme" units="ms">
  <obsolete>
    Unused, so removed from Chromium as of 2017/8/31.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The amount of time between request initiation and request completion for
    ERR_ABORTED when the request's scheme is not http/s.
  </summary>
</histogram>

<histogram name="Net.RequestTime2Success.MainFrame" units="ms">
  <obsolete>
    Removed from Chromium as of 2018/7/2.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The amount of time between request initiation and request completion for
    success for main frame resources.
  </summary>
</histogram>

<histogram name="Net.RequestTime2Success.Subresource" units="ms">
  <obsolete>
    Removed from Chromium as of 2018/7/2.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The amount of time between request initiation and request completion for
    success for non-main frame resources.
  </summary>
</histogram>

<histogram name="Net.ResourceDispatcherHost.OutstandingRequests.PerProcess"
    units="requests">
  <obsolete>
    Removed from Chromium as of 2018/7.
  </obsolete>
  <owner>xunjieli@chromium.org</owner>
  <summary>
    The largest number of outstanding requests that are handled by the resource
    dispatcher host for a single process.
  </summary>
</histogram>

<histogram name="Net.ResourceDispatcherHost.OutstandingRequests.Total"
    units="requests">
  <obsolete>
    Removed from Chromium as of 2018/7.
  </obsolete>
  <owner>xunjieli@chromium.org</owner>
  <summary>
    The largest number of outstanding requests that are handled by the resource
    dispatcher host across all processes.
  </summary>
</histogram>

<histogram name="Net.ResourceDispatcherHost.PeakOutstandingRequests"
    units="requests">
  <obsolete>
    Removed from code as of 03/2018.
  </obsolete>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The largest number of outstanding requests handled by the resource
    dispatcher host, during the last sample interval (60 seconds). Not logged if
    there are no outstanding requests in the interval. This metric is temporary
    for the Loading Dispatcher v0 (crbug.com/723233), and will be removed soon.
  </summary>
</histogram>

<histogram name="Net.ResourceDispatcherHost.RequestMode.Get"
    enum="FetchRequestMode" expires_after="M69">
  <owner>yhirano@chromium.org</owner>
  <owner>toyoshim@chromium.org</owner>
  <summary>
    Records request mode (https://fetch.spec.whatwg.org/#concept-request-mode)
    for HTTP &quot;GET&quot; requests.
  </summary>
</histogram>

<histogram name="Net.ResourceDispatcherHost.RequestMode.Post"
    enum="FetchRequestMode" expires_after="M69">
  <owner>yhirano@chromium.org</owner>
  <owner>toyoshim@chromium.org</owner>
  <summary>
    Records request mode (https://fetch.spec.whatwg.org/#concept-request-mode)
    for HTTP &quot;POST&quot; requests.
  </summary>
</histogram>

<histogram name="Net.ResourceDispatcherHost.RequestMode.Post.WithPort"
    enum="FetchRequestMode" expires_after="M69">
  <owner>yhirano@chromium.org</owner>
  <owner>toyoshim@chromium.org</owner>
  <summary>
    Records request mode (https://fetch.spec.whatwg.org/#concept-request-mode)
    for HTTP &quot;POST&quot; requests whose url contains a port.
  </summary>
</histogram>

<histogram name="Net.ResourceLoader.ExpectedContentSizeResult"
    enum="ResourceLoaderExpectedContentSizeResult">
  <obsolete>
    Removed 10/2017.
  </obsolete>
  <owner>maksim.sisov@intel.com</owner>
  <owner>mmenke@chromium.org</owner>
  <summary>
    Records how many times expected content size equals/less/more than size of
    read body/buffer or content size is unkown. Recorded for each resource load.
  </summary>
</histogram>

<histogram name="Net.ResourceLoader.InliningStatus"
    enum="ResourceLoaderInliningStatus">
  <obsolete>
    This experiment was turned down, see https://crbug.com/703188.
  </obsolete>
  <owner>tzik@chromium.org</owner>
  <summary>
    Counts whether the chunk inlining is applicable or not to a resource
    loading. Counts the reason if inapplicable.
  </summary>
</histogram>

<histogram name="Net.ResourceLoader.ReadDeferral" units="ms">
  <owner>clamy@chromium.org</owner>
  <summary>
    When starting a cross-site navigation, the time between reading the headers
    and body of the response.
  </summary>
</histogram>

<histogram name="Net.ResourceLoader.ResponseStartToEnd" units="microseconds">
  <owner>tzik@chromium.org</owner>
  <summary>
    Time from the start to the end of receiving a response body. Recorded for
    each resource load.

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

<histogram name="Net.ResourceLoader.TimeToURLRequestStart" units="ms">
  <obsolete>
    Removed from Chromium as of 2018/7/2.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The time elapsed from URLRequest creation to when a ResourceLoader actually
    calls Start on it.
  </summary>
</histogram>

<histogram name="Net.ResponseSizeByProcess.Browser" units="KB">
  <obsolete>
    The code to record this histogram was removed November 2017.
  </obsolete>
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    Count of (post-SSL/proxy, pre-filter) kilobytes received per request made by
    the browser process.
  </summary>
</histogram>

<histogram name="Net.ResponseSizeByProcess.Renderer" units="KB">
  <obsolete>
    The code to record this histogram was removed November 2017.
  </obsolete>
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    Count of (post-SSL/proxy, pre-filter) kilobytes received per request made by
    a renderer process.
  </summary>
</histogram>

<histogram name="Net.ResponseSizeByProcess.Unknown" units="KB">
  <obsolete>
    The code to record this histogram was removed November 2017.
  </obsolete>
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    Count of (post-SSL/proxy, pre-filter) kilobytes received per request made by
    a process not covered by one of the other ResponseSizeByProcess histograms.
  </summary>
</histogram>

<histogram name="Net.Socket.IdleSocketFate" enum="IdleSocketFate">
  <obsolete>
    Deprecated as of 9/2017.
  </obsolete>
  <owner>xunjieli@chromium.org</owner>
  <summary>
    Whether an idle socket is reused, timed out, or closed to make room for new
    sockets.
  </summary>
</histogram>

<histogram name="Net.Socket.IdleSocketReuseTime" units="seconds">
  <obsolete>
    Deprecated as of 7/2017.
  </obsolete>
  <owner>mmenke@chromium.org</owner>
  <summary>
    Seconds a socket was idle before it was reused. Emitted upon reuse. Does not
    record the times sockets were idle before first use.
  </summary>
</histogram>

<histogram name="Net.Socket.IdleSocketTimeSaving" units="ms">
  <obsolete>
    Deprecated as of 11/2016.
  </obsolete>
  <owner>xunjieli@chromium.org</owner>
  <summary>
    Number of milliseconds an idle socket saved in connection establishment
    because it is reused.
  </summary>
</histogram>

<histogram name="Net.Socket.NumIdleSockets">
  <owner>mmenke@chromium.org</owner>
  <summary>Number of idle sockets when one of them was reused.</summary>
</histogram>

<histogram name="Net.SocketIdleTimeBeforeNextUse_ReusedSocket">
  <obsolete>
    Deprecated as of 03/2015.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The time an already used socket sat idle before being used.</summary>
</histogram>

<histogram name="Net.SocketIdleTimeBeforeNextUse_UnusedSocket">
  <obsolete>
    Deprecated as of 03/2015.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time an unused socket (all HTTP sockets, regardless of any proxy used)
    sat idle before being used.
  </summary>
</histogram>

<histogram name="Net.SocketIdleTimeOnIOError2_ReusedSocket">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time a previously used socket sat idle before encountering a recoverable
    socket IO error (connection abort/reset/close).
  </summary>
</histogram>

<histogram name="Net.SocketIdleTimeOnIOError2_UnusedSocket">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time an unused socket sat idle before encountering a recoverable socket
    IO error (connection abort/reset/close).
  </summary>
</histogram>

<histogram name="Net.SocketInitErrorCodes" enum="NetErrorCodes">
  <obsolete>
    Deprecated as of 03/2015.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Net error codes that socket initializations end with, including net::OK and
    net::ERR_ABORTED.
  </summary>
</histogram>

<histogram name="Net.SocketReceiveBufferUnchangeable" units="Bytes">
  <obsolete>
    Replaced by Net.SocketUnchangeableReceiveBuffer 3/31/2014.
  </obsolete>
  <summary>
    The size of a socket's receive buffer when the attempt to change it via
    setsockopt failed.
  </summary>
</histogram>

<histogram name="Net.SocketRequestTime">
  <obsolete>
    Deprecated as of 03/2015.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time in milliseconds from initial RequestSocket() call until successfully
    acquiring a connected socket.
  </summary>
</histogram>

<histogram name="Net.SocketStream.ConnectionEstablish" units="ms">
  <obsolete>
    Deprecated 2014-10-28. No longer generated. No direct replacement.
  </obsolete>
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>The time from the connection start to connection establish.</summary>
</histogram>

<histogram name="Net.SocketStream.ConnectionLatency" units="ms">
  <obsolete>
    Deprecated 2014-10-28. No longer generated. No direct replacement.
  </obsolete>
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>The time waiting to be ready to start connecting.</summary>
</histogram>

<histogram name="Net.SocketStream.ConnectionType"
    enum="SocketStreamConnectionType">
  <obsolete>
    Deprecated 2014-10-28. No longer generated. No direct replacement.
  </obsolete>
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>
    Each bucket is the number of connection type of socket stream.
  </summary>
</histogram>

<histogram name="Net.SocketStream.Duration" units="ms">
  <obsolete>
    Deprecated 2014-10-28. No longer generated. Replaced by
    Net.WebSocket.Duration.
  </obsolete>
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>The time a socket stream was open.</summary>
</histogram>

<histogram name="Net.SocketStream.ProtocolType" enum="SocketStreamProtocolType">
  <obsolete>
    Deprecated 2014-10-28. No longer generated. No direct replacement.
  </obsolete>
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>
    Each bucket is the number of protocol type on socket stream.
  </summary>
</histogram>

<histogram name="Net.SocketStream.ReceivedBytes" units="bytes">
  <obsolete>
    Deprecated 2014-10-28. No longer generated. No direct replacement.
  </obsolete>
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>Number of bytes on a socket stream.</summary>
</histogram>

<histogram name="Net.SocketStream.ReceivedCounts">
  <obsolete>
    Deprecated 2014-10-28. No longer generated. No direct replacement.
  </obsolete>
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>Number of reads on a socket stream.</summary>
</histogram>

<histogram name="Net.SocketStream.SentBytes" units="bytes">
  <obsolete>
    Deprecated 2014-10-28. No longer generated. No direct replacement.
  </obsolete>
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>Number of bytes on a socket stream.</summary>
</histogram>

<histogram name="Net.SocketStream.SentCounts">
  <obsolete>
    Deprecated 2014-10-28. No longer generated. No direct replacement.
  </obsolete>
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>Number of Write on a socket stream.</summary>
</histogram>

<histogram name="Net.SocketType" enum="HttpSocketType">
  <obsolete>
    Deprecated as of 03/2015.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The counts of the type of sockets returned by the socket pools.
  </summary>
</histogram>

<histogram name="Net.SocketUnchangeableReceiveBuffer" units="Bytes">
  <owner>rch@chromium.org</owner>
  <summary>
    The size of a socket's receive buffer when the attempt to change it via
    setsockopt failed.
  </summary>
</histogram>

<histogram name="Net.SocketUnchangeableSendBuffer" units="Bytes">
  <owner>rch@chromium.org</owner>
  <summary>
    The size of a socket's send buffer when the attempt to change it via
    setsockopt failed.
  </summary>
</histogram>

<histogram name="Net.SOCKSSocketIdleTimeBeforeNextUse_ReusedSocket">
  <obsolete>
    see SocketIdleTimeBeforeNextUse_ReusedSocket_SOCK
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time an already used SOCKS socket sat idle before being used.
  </summary>
</histogram>

<histogram name="Net.SOCKSSocketIdleTimeBeforeNextUse_UnusedSocket">
  <obsolete>
    see SocketIdleTimeBeforeNextUse_UnusedSocket_SOCK
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The time an unused SOCKS socket sat idle before being used.</summary>
</histogram>

<histogram name="Net.SOCKSSocketRequestTime" units="ms">
  <obsolete>
    see SocketRequestTime_SOCK
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from initial SOCKSClientSocketPool::RequestSocket() call until
    successfully acquiring a connected SOCKS socket.
  </summary>
</histogram>

<histogram name="Net.SocksSocketRequestTime">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Time it takes to request a new (unused) SOCKS proxy socket.</summary>
</histogram>

<histogram name="Net.SOCKSSocketType" enum="HttpSocketType">
  <obsolete>
    see SocketType_SOCK
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The counts of the type of sockets returned by the SOCKS pool.
  </summary>
</histogram>

<histogram name="Net.SpdyConnectionLatency" units="ms">
  <obsolete>
    Replaced by Net.SpdyConnectionLatency_2 on 2014-10-21.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>Time from when the Connect() starts until it completes.</summary>
</histogram>

<histogram name="Net.SpdyConnectionLatency_2" units="ms">
  <obsolete>
    Removed 2018-02.
  </obsolete>
  <owner>bnc@chromium.org</owner>
  <summary>Time from when the Connect() starts until it completes.</summary>
</histogram>

<histogram name="Net.SpdyFrameStreamAndSessionFlowControlState"
    enum="SpdyFrameFlowControlState">
  <owner>bnc@chromium.org</owner>
  <summary>
    The counts of the flow control state of each frame (with stream and session
    flow control on).
  </summary>
</histogram>

<histogram name="Net.SpdyFrameStreamFlowControlState"
    enum="SpdyFrameFlowControlState">
  <obsolete>
    The last protocol which would trigger this was deprecated in 2014 November.
    This histogram is deprecated in 2016 January.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    The counts of the flow control state of each frame (with stream flow control
    on).
  </summary>
</histogram>

<histogram name="Net.SpdyHeadersCompressionPercentage" units="%">
  <owner>bnc@chromium.org</owner>
  <summary>
    The percent compression achieved when compressing HEADERS frames.
  </summary>
</histogram>

<histogram name="Net.SpdyHpackDecompressionPercentage" units="%">
  <owner>ckrasic@chromium.org</owner>
  <summary>
    The compression percentage in received HPACK compressed header frames.
  </summary>
</histogram>

<histogram name="Net.SpdyHpackEncodedCharacterFrequency" units="ASCII codes">
  <obsolete>
    Obsolete as HTTP/2 standard is finalized.
  </obsolete>
  <owner>bnc@chromium.org</owner>
  <summary>
    Frequencies of characters observed in request and response headers.
    Temporarily being collected to inform the construction of an optimized
    Huffman code for the HTTP/2 specification. Buckets are ASCII codes offset by
    1.
  </summary>
</histogram>

<histogram name="Net.SpdyIPPoolDomainMatch" enum="SpdyIPPoolDomainMatch"
    units="count">
  <owner>bnc@chromium.org</owner>
  <summary>
    Status of checking if a SPDY domain can handle a IP match.  If a match is
    found, we successfully used the IP Pooling.  If a match is not found, we
    could have used IP Pooling, except the TLS Cert didn't match the IP-pooled
    domain.
  </summary>
</histogram>

<histogram name="Net.SpdyPing.RTT" units="ms">
  <owner>bnc@chromium.org</owner>
  <summary>The RTT for SPDY's PING.</summary>
</histogram>

<histogram name="Net.SpdyPriorityCount">
  <obsolete>
    Removed 2016-05-26.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>The count of streams at each priority over Spdy sessions.</summary>
</histogram>

<histogram name="Net.SpdyPushedStreamFate" enum="SpdyPushedStreamFate">
  <owner>bnc@chromium.org</owner>
  <summary>
    This histogram is recorded exactly once for every PUSH_PROMISE frame
    received on an HTTP/2 connection, and tracks the fate of the pushed stream.
  </summary>
</histogram>

<histogram name="Net.SpdyRecvBytes" units="bytes">
  <owner>bnc@chromium.org</owner>
  <summary>The number of bytes recevied per stream.</summary>
</histogram>

<histogram name="Net.SpdyResponseCode" enum="HttpResponseCode">
  <owner>bnc@chromium.org</owner>
  <summary>
    HTTP status codes received in HTTP/2 HEADERS frames.  If a stream contains
    one or more informational (1xx) response preceeding the main response, each
    status code is logged separately.
  </summary>
</histogram>

<histogram name="Net.SpdySendBytes" units="bytes">
  <owner>bnc@chromium.org</owner>
  <summary>The number of bytes sent per stream.</summary>
</histogram>

<histogram name="Net.SpdySession.BytesRead.EOF" units="bytes">
  <obsolete>
    Removed on 2016-10-10.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    Total number of bytes recevied per session before closing session due to
    EOF.
  </summary>
</histogram>

<histogram name="Net.SpdySession.BytesRead.OtherErrors" units="bytes">
  <obsolete>
    Removed on 2016-10-10.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    Total number of bytes recevied per session before closing session due to an
    error during read.
  </summary>
</histogram>

<histogram name="Net.SpdySession.ClosedOnError" enum="NetErrorCodes">
  <owner>rch@chromium.org</owner>
  <summary>
    Net error codes when SpdySession was closed, doesn't inlcuding net::OK.
  </summary>
</histogram>

<histogram name="Net.SpdySession.CreateStreamWithSocketConnected"
    enum="BooleanSuccess">
  <owner>bnc@chromium.org</owner>
  <summary>Socket connected status in SpdySession::CreateStream.</summary>
</histogram>

<histogram name="Net.SpdySession.PushedAndUnclaimedBytes" units="count">
  <owner>zhongyi@chromium.org</owner>
  <summary>
    The number of bytes that is pushed but not used when the session is closed.
  </summary>
</histogram>

<histogram name="Net.SpdySession.PushedBytes" units="count">
  <owner>zhongyi@chromium.org</owner>
  <summary>
    The number of bytes that is pushed when the session is closed.
  </summary>
</histogram>

<histogram name="Net.SpdySessionErrorDetails" enum="SpdyProtocolErrorDetails"
    units="count">
  <obsolete>
    Replaced by SpdySessionErrorDetails2 on 2013-04-19.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    WARNING: r181910 added an enum value in the middle, so don't trust the
    counts for values 9 and above for Chrome builds after that revision.

    The type of SPDY Protocol error encountered.
  </summary>
</histogram>

<histogram name="Net.SpdySessionErrorDetails2" enum="SpdyProtocolErrorDetails2"
    units="count">
  <owner>bnc@chromium.org</owner>
  <summary>The type of SPDY Protocol error encountered.</summary>
</histogram>

<histogram name="Net.SpdySessionErrorDetails_Google"
    enum="SpdyProtocolErrorDetails" units="count">
  <obsolete>
    Replaced by SpdySessionErrorDetails_Google2 on 2013-04-19.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    The type of SPDY Protocol error encountered when talking to a google.com
    server.
  </summary>
</histogram>

<histogram name="Net.SpdySessionErrorDetails_Google2"
    enum="SpdyProtocolErrorDetails2" units="count">
  <owner>bnc@chromium.org</owner>
  <summary>
    WARNING: r181910 added an enum value in the middle, so don't trust the
    counts for values 9 and above for Chrome builds after that revision.

    The type of SPDY Protocol error encountered when talking to a google.com
    server.
  </summary>
</histogram>

<histogram name="Net.SpdySessionGet" enum="SpdySessionGet" units="count">
  <owner>bnc@chromium.org</owner>
  <summary>The type of SPDY Session used when looking up a session.</summary>
</histogram>

<histogram name="Net.SpdySessionGetPeerAddressNotConnected"
    enum="BooleanSuccess">
  <owner>bnc@chromium.org</owner>
  <summary>
    Whether SpdySession::Get{Peer,Local}Address was called when the connection
    had no socket.
  </summary>
</histogram>

<histogram name="Net.SpdySessions_DataReductionProxy"
    enum="BooleanDataReductionProxy">
  <obsolete>
    Deprecated 7/21/2014. No longer tracked.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <owner>rch@chromium.org</owner>
  <summary>
    The count of SPDY sessions using the data reduction proxy and the count of
    other SPDY sessions.
  </summary>
</histogram>

<histogram name="Net.SpdySessionSocketNotConnectedGetLocalAddress"
    enum="BooleanSuccess">
  <obsolete>
    Removed on 2016-10-10.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    SpdySession::GetLocalAddress returned ERR_SOCKET_NOT_CONNECTED.
  </summary>
</histogram>

<histogram name="Net.SpdySessionSocketNotConnectedGetPeerAddress"
    enum="BooleanSuccess">
  <obsolete>
    Removed on 2016-10-10.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    SpdySession::GetPeerAddress returned ERR_SOCKET_NOT_CONNECTED.
  </summary>
</histogram>

<histogram name="Net.SpdySessionsWithStalls">
  <obsolete>
    Removed on 2016-10-10.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>The count of SPDY Sessions with or without stalls.</summary>
</histogram>

<histogram name="Net.SpdySettingsCwnd" units="packets">
  <obsolete>
    Removed on 2016-10-10.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    The congestion window (in pkts) received at the end of a SpdySession.
  </summary>
</histogram>

<histogram name="Net.SpdySettingsCwndSent" units="packets">
  <obsolete>
    Deprecated 2016 July with removal of SPDY/3.1.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    The congestion window (in pkts) sent at the beginning of a SpdySession.
  </summary>
</histogram>

<histogram name="Net.SpdySettingsReceived" enum="SpdySettingsReceived"
    units="%">
  <obsolete>
    Removed on 2016-10-10.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    Percentage of sessions which received settings from the server.
  </summary>
</histogram>

<histogram name="Net.SpdySettingsRetransRate" units="%">
  <obsolete>
    Removed on 2016-10-10.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    The Download Retransmission Rate (%) received at the end of a SpdySession.
  </summary>
</histogram>

<histogram name="Net.SpdySettingsRTT" units="ms">
  <obsolete>
    Removed on 2016-10-10.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>The RTT received at the end of a SpdySession.</summary>
</histogram>

<histogram name="Net.SpdySettingsSent" enum="SpdySettingsSent" units="%">
  <obsolete>
    Removed on 2016-10-10.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>Percentage of sessions which sent settings to the server.</summary>
</histogram>

<histogram name="Net.SpdyStreamDownloadTime" units="ms">
  <owner>bnc@chromium.org</owner>
  <summary>
    The time between receiving the first chunk and the last chunk of data on a
    Spdy stream.
  </summary>
</histogram>

<histogram name="Net.SpdyStreamsAbandonedPerSession">
  <owner>bnc@chromium.org</owner>
  <summary>
    The number of pushed, but abandoned streams over a single session.
  </summary>
</histogram>

<histogram name="Net.SpdyStreamsPerSession">
  <owner>bnc@chromium.org</owner>
  <summary>The number of streams issued over a single session.</summary>
</histogram>

<histogram name="Net.SpdyStreamsPushedAndClaimedPerSession">
  <owner>bnc@chromium.org</owner>
  <summary>
    The number of pushed, and used streams over a single session.
  </summary>
</histogram>

<histogram name="Net.SpdyStreamsPushedPerSession">
  <owner>bnc@chromium.org</owner>
  <summary>The number of push streams received over a single session.</summary>
</histogram>

<histogram name="Net.SpdyStreamStallsPerSession">
  <obsolete>
    Removed on 2016-10-10.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>The number of stream stalls per session.</summary>
</histogram>

<histogram name="Net.SpdyStreamTime" units="ms">
  <owner>bnc@chromium.org</owner>
  <summary>
    The time of a Spdy stream.  Measured from sending the first chunk to
    receiving the last chunk of data.
  </summary>
</histogram>

<histogram name="Net.SpdyStreamTimeToFirstByte" units="ms">
  <owner>bnc@chromium.org</owner>
  <summary>
    The time between sending the request and receiving the first chunk of data
    on a Spdy stream.
  </summary>
</histogram>

<histogram name="Net.SpdySynStreamCompressionPercentage" units="%">
  <obsolete>
    Deprecated on 2016-11-28, because SPDY/3 and, accordingly, SYN_STREAM frames
    are no longer used.  Compression values are now calculated slightly
    differently.  Replaced by Net.SpdyHeadersCompressionPercentage.
  </obsolete>
  <owner>bnc@chromium.org</owner>
  <summary>
    The percent compression achieved when compression SYN_STREAM frames.
  </summary>
</histogram>

<histogram name="Net.SpdyVersion" enum="ProtocolVersion">
  <obsolete>
    Deprecated on 2014-09-11, because the uploaded values were changing as
    protocols were removed, therefore statistics couldn't be combined across
    different builds.  Replaced by Net.SpdyVersion2.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    The SPDY protocol version that is used to talk to SPDY servers.
  </summary>
</histogram>

<histogram name="Net.SpdyVersion2" enum="SpdyProtocolVersion">
  <obsolete>
    Deprecated on 2016-02-01, because the incorrect bucket count caused data
    corruption.  Replaced by Net.SpdyVersion3.
  </obsolete>
  <owner>bnc@chromium.org</owner>
  <summary>
    The SPDY protocol version that is used to talk to SPDY servers.  Logged
    every time a SPDY session is initialized.
  </summary>
</histogram>

<histogram name="Net.SpdyVersion3" enum="SpdyProtocolVersion">
  <obsolete>
    Deprecated 2016 July with removal of SPDY/3.1.
  </obsolete>
  <owner>bnc@chromium.org</owner>
  <summary>
    The SPDY protocol version that is used to talk to SPDY servers.  Logged
    every time a SPDY session is initialized.
  </summary>
</histogram>

<histogram name="Net.SSL_AuthRootConsistency" enum="SSLAuthRootConsistency">
  <obsolete>
    Deprecated 2018-01 with the transition to a unified root list with OS
    fallback.
  </obsolete>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    The results of comparing the built-in list of known Windows roots against
    the CERT_AUTH_ROOT_SHA256_HASH_PROP_ID certificate property. Recorded for
    each certificate verification on Windows.
  </summary>
</histogram>

<histogram name="Net.SSL_CipherSuite" enum="SSLCipherSuite">
  <owner>agl@chromium.org</owner>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    The SSL/TLS cipher suite that was negotiated. Recorded for each SSL/TLS
    connection in the socket pool where Connect() succeeds.
  </summary>
</histogram>

<histogram name="Net.SSL_Connection_Error" enum="NetErrorCodes">
  <owner>agl@chromium.org</owner>
  <summary>
    Counts of specific error codes returned when opening an SSL connection.
  </summary>
</histogram>

<histogram name="Net.SSL_Connection_Error_FastRadioPadding"
    enum="NetErrorCodes">
  <obsolete>
    Removed 7/21/2015. No longer tracked.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <summary>
    Counts of specific error codes returned when opening an SSL connection for
    an endpoint which is eligible for fastradio padding.
  </summary>
</histogram>

<histogram name="Net.SSL_Connection_Error_Google" enum="NetErrorCodes">
  <obsolete>
    Removed 2018-03-07. No longer tracked.
  </obsolete>
  <owner>svaldez@chromium.org</owner>
  <summary>
    Counts of specific error codes returned when opening an SSL connection for
    google.com and any subdomain of it.
  </summary>
</histogram>

<histogram name="Net.SSL_Connection_Error_TLS13Experiment" enum="NetErrorCodes">
  <owner>svaldez@chromium.org</owner>
  <summary>
    Counts of specific error codes returned when opening an SSL connection for
    an endpoint we are using in the initial TLS 1.3 deployment.
  </summary>
</histogram>

<histogram name="Net.SSL_Connection_Latency" units="ms">
  <obsolete>
    Replaced by Net.SSL_Connection_Latency_2 on 2014-10-21.
  </obsolete>
  <owner>agl@chromium.org</owner>
  <summary>Time from when the Connect() starts until it completes.</summary>
</histogram>

<histogram name="Net.SSL_Connection_Latency_2" units="ms">
  <owner>agl@chromium.org</owner>
  <summary>Time from when the Connect() starts until it completes.</summary>
</histogram>

<histogram name="Net.SSL_Connection_Latency_DataReductionProxy" units="ms">
  <obsolete>
    Deprecated 7/21/2014. No longer tracked.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>bolian@chromium.org</owner>
  <summary>
    Time from when the Connect() starts until it completes when using the data
    reduction proxy. This includes certificate retrieval and verification.
  </summary>
</histogram>

<histogram name="Net.SSL_Connection_Latency_Full_Handshake" units="ms">
  <owner>agl@chromium.org</owner>
  <summary>
    Time from when the Connect() starts until it completes for full handshakes.
  </summary>
</histogram>

<histogram name="Net.SSL_Connection_Latency_Google" units="ms">
  <obsolete>
    Replaced by Net.SSL_Connection_Latency_Google2 on 2014-10-21.
  </obsolete>
  <owner>agl@chromium.org</owner>
  <summary>
    Time from when the Connect() starts until it completes for google.com and
    any subdomain of it.
  </summary>
</histogram>

<histogram name="Net.SSL_Connection_Latency_Google2" units="ms">
  <obsolete>
    Removed 2018-03-07. No longer tracked.
  </obsolete>
  <owner>agl@chromium.org</owner>
  <summary>
    Time from when the Connect() starts until it completes for google.com and
    any subdomain of it.
  </summary>
</histogram>

<histogram name="Net.SSL_Connection_Latency_Google_Full_Handshake" units="ms">
  <obsolete>
    Removed 2018-03-07. No longer tracked.
  </obsolete>
  <owner>agl@chromium.org</owner>
  <summary>
    Time from when the Connect() starts until it completes for google.com and
    any subdomain of it for full handshakes.
  </summary>
</histogram>

<histogram name="Net.SSL_Connection_Latency_Google_No_Revocation_Checking"
    units="ms">
  <obsolete>
    Removed in 2011.
  </obsolete>
  <owner>agl@chromium.org</owner>
  <summary>
    Time from when the Connect() starts until it completes for google.com and
    any subdomain of it. This only includes users in a 50% field trial that
    disables revocation checking for certificate pinned sites.
  </summary>
</histogram>

<histogram name="Net.SSL_Connection_Latency_Google_Resume_Handshake" units="ms">
  <obsolete>
    Removed 2018-03-07. No longer tracked.
  </obsolete>
  <owner>agl@chromium.org</owner>
  <summary>
    Time from when the Connect() starts until it completes for google.com and
    any subdomain of it for resumption handshakes.
  </summary>
</histogram>

<histogram name="Net.SSL_Connection_Latency_Google_Revocation_Checking"
    units="ms">
  <obsolete>
    Removed in 2011.
  </obsolete>
  <owner>agl@chromium.org</owner>
  <summary>
    Time from when the Connect() starts until it completes for google.com and
    any subdomain of it. This only includes users not in a 50% field trail that
    disables revocation for certificate pinned sites.
  </summary>
</histogram>

<histogram
    name="Net.SSL_Connection_Latency_PostQuantumSupported_Full_Handshake"
    units="ms">
  <obsolete>
    Deprecated as of 2016-12-01.
  </obsolete>
  <owner>mab@chromium.org</owner>
  <summary>
    Time from when the Connect() starts until it completes (full handshakes
    only), for a set of domains that we expect to always offer the experimental
    post-quantum (CECPQ1) ciphersuites.
  </summary>
</histogram>

<histogram name="Net.SSL_Connection_Latency_PQPadding" units="ms">
  <owner>agl@chromium.org</owner>
  <summary>
    Time from when the Connect() starts until it completes for any server that
    echos a dummy post-quantum padding extension.
  </summary>
</histogram>

<histogram name="Net.SSL_Connection_Latency_Resume_Handshake" units="ms">
  <owner>agl@chromium.org</owner>
  <summary>
    Time from when the Connect() starts until it completes for resumption
    handshakes.
  </summary>
</histogram>

<histogram name="Net.SSL_Connection_Latency_TLS13Experiment" units="ms">
  <owner>svaldez@chromium.org</owner>
  <summary>
    Time from when the Connect() starts until it completes for a set of domains
    that we are using in the initial TLS 1.3 deployment.
  </summary>
</histogram>

<histogram name="Net.SSL_Connection_PostQuantum_Negotiated"
    enum="BooleanSupported">
  <obsolete>
    Deprecated as of 2016-12-01.
  </obsolete>
  <owner>mab@chromium.org</owner>
  <summary>
    For only browsers in the post-quantum (CECPQ1) ciphersuite experiment,
    counts the full TLS handshakes where CECPQ1 was, or was not, negotiated on
    hosts where we expect it to be negotiated.
  </summary>
</histogram>

<histogram name="Net.SSL_EVCertificateCTCompliance"
    enum="CTRequirementCompliance">
  <obsolete>
    Deprecated as of 01/2016.
  </obsolete>
  <owner>eranm@chromium.org</owner>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    The state of compliance with Certificate Transparency presence requirements
    for each EV certificate. An EV certificate could be non-compliant (in which
    case it loses the EV status), comply through inclusion in the EV whitelist
    or have the required number of Signed Certificate Timestamps. This metric
    will gauge adoption rate of Certificate Transparency and will help identify
    when the EV whitelist is no longer needed. Emitted during every SSL
    connection establishment, but only if the client is checking compliance with
    Certificate Transparency requirements (currently guarded by a Finch
    experiment).
  </summary>
</histogram>

<histogram name="Net.SSL_EVCertificateInWhitelist" enum="Boolean">
  <obsolete>
    Removed 06/2017 with the deprecation of the EV certificate whitelist after
    all certificates expired.
  </obsolete>
  <owner>eranm@chromium.org</owner>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    Whether an EV certificate is present in the Certificate Transparency
    whitelist. Emitted once for every EV certificate encountered (during SSL
    connection establishment), but only if the client has a valid whitelist.
  </summary>
</histogram>

<histogram name="Net.SSL_EVCTCompliance" enum="EVCTCompliance">
  <obsolete>
    Removed 06/2017 with the deprecation of distinct EV and !EV CT policies.
  </obsolete>
  <owner>eranm@chromium.org</owner>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    The state of compliance with Certificate Transparency presence requirements
    for each EV certificate. An EV certificate could be non-compliant (in which
    case it loses the EV status), comply through inclusion in the EV whitelist
    or comply with the CT certificate policy. This metric will gauge adoption
    rate of Certificate Transparency and will help identify when the EV
    whitelist is no longer needed. Emitted during every SSL connection
    establishment.
  </summary>
</histogram>

<histogram name="Net.SSL_EVWhitelistValidityForNonCompliantCert"
    enum="EVWhitelistStatus">
  <obsolete>
    Removed 06/2017 with the deprecation of the EV certificate whitelist after
    all certificates expired.
  </obsolete>
  <owner>eranm@chromium.org</owner>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    Whether the client holds a valid EV Certificates whitelist or not. Only
    emitted when an EV cert that is not compliant with the Certificate
    Transparency requirement is encountered. This histogram is intended to be
    short-lived and help determine if EV certificates are considered
    non-compliant because they are not whitelisted or if the client does not
    hold a valid instance of the whitelist.
  </summary>
</histogram>

<histogram name="Net.SSL_KeyExchange.DHE">
  <obsolete>
    Removed September 2016.
  </obsolete>
  <owner>sigbjorn@opera.com</owner>
  <owner>agl@chromium.org</owner>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    Bit strength of the key exchange for DHE. Recorded for each SSL/TLS
    connection in the socket pool where Connect() succeeds.
  </summary>
</histogram>

<histogram name="Net.SSL_KeyExchange.ECDHE" enum="ECDHECurves">
  <owner>sigbjorn@opera.com</owner>
  <owner>agl@chromium.org</owner>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    The curve used for key exchange for ECDHE. Recorded for each SSL/TLS
    connection in the socket pool where Connect() succeeds.
  </summary>
</histogram>

<histogram name="Net.SSL_KeyExchange.RSA">
  <obsolete>
    Removed May 2016.
  </obsolete>
  <owner>sigbjorn@opera.com</owner>
  <owner>agl@chromium.org</owner>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    Bit strength of the key exchange for RSA. Recorded for each SSL/TLS
    connection in the socket pool where Connect() succeeds. See |SSL_SESSION|'s
    key_exchange_info for more information.
  </summary>
</histogram>

<histogram name="Net.SSLCertBlacklisted">
  <obsolete>
    Removed on 01/2016. Only ever measured blacklisted Comodo serials, not any
    of the other blacklisted certificates and keys.
  </obsolete>
  <owner>agl@chromium.org</owner>
  <summary>
    Counts the number of times that users have hit blacklisted certificates. The
    indexes match up to the indexes in
    net/base/x509_certificate.cc:IsBlacklisted. The details of the certificates
    in question is confidential.
  </summary>
</histogram>

<histogram name="Net.SSLCertVerificationTime" units="ms">
  <owner>rsleevi@chromium.org</owner>
  <summary>Time to complete a certificate verification (success case).</summary>
</histogram>

<histogram name="Net.SSLCertVerificationTimeError" units="ms">
  <owner>rsleevi@chromium.org</owner>
  <summary>Time to complete a certificate verification (error case).</summary>
</histogram>

<histogram name="Net.SSLDraftDowngradeTLS13Experiment" enum="BooleanDowngrade">
  <owner>davidben@chromium.org</owner>
  <summary>
    For each HTTPS connection to the TLS 1.3 experiment server set, whether the
    TLS 1.3 anti-downgrade mechanism would have fired. This is to measure the
    effects of non-compliant middleboxes on this otherwise safe security
    feature. The numbers are only valid while the TLS 1.3 experiment set deploys
    a TLS 1.3 draft version compatible with the corresponding Chrome version and
    implement the our draft anti-downgrade signal. See
    https://crbug.com/boringssl/226.
  </summary>
</histogram>

<histogram name="Net.SSLFallbackErrorCode" enum="NetErrorCodes">
  <obsolete>
    Removed June 2016.
  </obsolete>
  <owner>davidben@chromium.org</owner>
  <summary>
    For each successful HTTPS request which used the TLS version fallback, the
    error code of the last failed attempt.
  </summary>
</histogram>

<histogram name="Net.SSLFallbackFailureState" enum="SSLFailureState">
  <obsolete>
    Removed June 2016.
  </obsolete>
  <owner>davidben@chromium.org</owner>
  <summary>
    For each successful HTTPS request which used the TLS version fallback, the
    type of handshake failure of the last failed attempt.
  </summary>
</histogram>

<histogram name="Net.SSLHostInfoDNSLookup" units="ms">
  <obsolete>
    Removed in 2011.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Time to complete a DNS lookup for a DNS CAA record.</summary>
</histogram>

<histogram name="Net.SSLHostInfoDNSLookupDelayMs" units="ms">
  <obsolete>
    Removed in 2011.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time that we would have wasted had we waited for a CAA lookup in order to
    validate a certificate.
  </summary>
</histogram>

<histogram name="Net.SSLHostInfoVerificationTimeMs" units="ms">
  <obsolete>
    Removed in 2012.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Time to complete a speculative certificate verification.</summary>
</histogram>

<histogram name="Net.SSLNegotiatedAlpnProtocol"
    enum="SSLNegotiatedAlpnProtocol">
  <owner>bnc@chromium.org</owner>
  <summary>
    For each TLS handshake, whether ALPN was negotiated; and if so, the
    negotiated protocol.
  </summary>
</histogram>

<histogram name="Net.SSLProtocolErrorCipher" enum="SSLCipherSuite">
  <obsolete>
    Removed in March 2016.
  </obsolete>
  <owner>davidben@chromium.org</owner>
  <summary>
    The cipher suite used when the corresponding operation on an SSLClientSocket
    fails with ERR_SSL_PROTOCOL_ERROR. This histogram will be removed when
    https://crbug.com/593963 is resolved.
  </summary>
</histogram>

<histogram name="Net.SSLProtocolErrorReason" enum="BoringSSLReasonCode">
  <obsolete>
    Removed in March 2016.
  </obsolete>
  <owner>davidben@chromium.org</owner>
  <summary>
    The internal, version-specific BoringSSL error reason reported when the
    corresponding operation on an SSLClientSocket fails with
    ERR_SSL_PROTOCOL_ERROR. This histogram will be removed when
    https://crbug.com/593963 is resolved.
  </summary>
</histogram>

<histogram name="Net.SSLProtocolNegotiation" enum="SSLProtocolNegotiation">
  <obsolete>
    Superseded by Net.SSLNegotiatedAlpnProtocol in 2016 August.
  </obsolete>
  <owner>bnc@chromium.org</owner>
  <summary>
    TLS extension used to negotiate protocol (ALPN or NPN); in case of NPN,
    whether the protocol is indeed supported by both the client and the server
    or is a fallback because of no overlap; and the negotiated protocol itself.
  </summary>
</histogram>

<histogram name="Net.SSLRecordSizeRead" units="bytes">
  <obsolete>
    Removed in January 2018.
  </obsolete>
  <owner>davidben@chromium.org</owner>
  <owner>svaldez@chromium.org</owner>
  <summary>
    The number of bytes, excluding the record header, of each TLS record read.
  </summary>
</histogram>

<histogram name="Net.SSLRSAKeyUsage.KnownRoot" enum="RSAKeyUsage">
  <owner>davidben@chromium.org</owner>
  <summary>
    For each TLS connection which uses a known root, an RSA key, and TLS 1.2 or
    below, what the result of checking the RSA key usage would have been.
  </summary>
</histogram>

<histogram name="Net.SSLRSAKeyUsage.UnknownRoot" enum="RSAKeyUsage">
  <owner>davidben@chromium.org</owner>
  <summary>
    For each TLS connection which uses a unknown root, an RSA key, and TLS 1.2
    or below, what the result of checking the RSA key usage would have been.
  </summary>
</histogram>

<histogram name="Net.SSLSecureRenegotiation" enum="BooleanSecure">
  <owner>davidben@chromium.org</owner>
  <summary>
    For each attempted SSL renegotiation (non-initial handshake), whether the
    server supported the renegotiation_info extension (RFC 5746).
  </summary>
</histogram>

<histogram name="Net.SSLServerKeyExchangeHash" enum="SSLHashAlgorithm">
  <obsolete>
    Replaced by Net.SSLSignatureAlgorithm.
  </obsolete>
  <owner>davidben@chromium.org</owner>
  <summary>
    For each SSL connection with a full handshake using a DHE- or ECDHE-based
    key exchange, the hash function used in the ServerKeyExchange signature.
  </summary>
</histogram>

<histogram name="Net.SSLSessionConcurrentLookupCount">
  <obsolete>
    Removed on 2017-10-02.
  </obsolete>
  <owner>nharper@chromium.org</owner>
  <summary>
    For each SSL connection where we resume a session and negotiate HTTP/2, the
    simulated minimum number of sessions retained per host it would have
    required with TLS 1.3 single-use sessions. See https://crbug.com/631988.
  </summary>
</histogram>

<histogram name="Net.SSLSessionVersionMatch" enum="BooleanMatched">
  <obsolete>
    Removed on 2015-11-10.
  </obsolete>
  <owner>davidben@chromium.org</owner>
  <summary>
    For each SSL connection that resumed a session, whether the session was
    resumed at the same version it was established at. This is only recorded in
    BoringSSL ports.
  </summary>
</histogram>

<histogram name="Net.SSLSignatureAlgorithm" enum="SSLSignatureAlgorithm">
  <owner>davidben@chromium.org</owner>
  <summary>
    For each SSL connection with a full handshake using a DHE- or ECDHE-based
    key exchange, the signature algorithm used to authenticate the peer. In TLS
    1.2, this is the signature on the ServerKeyExchange message. (Note: Although
    the ECDSA values specify a curve, the curve is only enforced in TLS 1.3.)
  </summary>
</histogram>

<histogram name="Net.SSLv3FallbackToRenegoPatchedServer"
    enum="TLSRenegotiationPatched">
  <obsolete>
    Removed on 2014-08-20.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of times that we have performed SSLv3 fallback and found a TLS
    renegotiation patched server.
  </summary>
</histogram>

<histogram name="Net.SSLVerificationMerged">
  <obsolete>
    Removed in 2012.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Was a speculative certificate verification used?</summary>
</histogram>

<histogram name="Net.SSLVerificationMergedMsSaved" units="ms">
  <obsolete>
    Removed in 2012.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Time saved by a speculative certificate vertification.</summary>
</histogram>

<histogram name="Net.SSLVersion" enum="SSLOrQUICVersion">
  <owner>davidben@chromium.org</owner>
  <summary>
    The SSL/TLS version that was negotiated. Recorded for each SSL/TLS
    connection in the socket pool where Connect() succeeds.
  </summary>
</histogram>

<histogram name="Net.SSLVersionInterferenceDetails_TLS13Experiment"
    enum="SSLVersionInterferenceDetails">
  <obsolete>
    Removed April 2018.
  </obsolete>
  <owner>davidben@chromium.org</owner>
  <owner>svaldez@chromium.org</owner>
  <summary>
    For each detected SSL version interference against a server in the initial
    TLS 1.3 deployment, details on how the initial connection failed.
  </summary>
</histogram>

<histogram name="Net.SSLVersionInterferenceError" enum="NetErrorCodes">
  <owner>davidben@chromium.org</owner>
  <summary>
    For each detected SSL version interference, what network error the original
    failed connection reported.
  </summary>
</histogram>

<histogram name="Net.SSLVersionInterferenceProbeTrigger" enum="NetErrorCodes">
  <owner>davidben@chromium.org</owner>
  <summary>
    For each SSL version interference probe, what network error triggered it.
    Probes are only triggered for a small set of network errors.
  </summary>
</histogram>

<histogram name="Net.SuccessfulResolutionWithValidDNSName" enum="Boolean">
  <obsolete>
    Removed in 07/2017.
  </obsolete>
  <owner>palmer@chromium.org</owner>
  <summary>
    True if a DNS name contains only characters for which
    |net::IsValidLabelCharacter| returns true. Used to see if we can deprecate
    and remove support for arbitrary bytes in DNS names. This histogram is
    recorded after DNS resolution has completed successfully.
  </summary>
</histogram>

<histogram name="Net.TCP_Connection_Idle_Sockets">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Number of idle sockets when the Connect() succeeded.</summary>
</histogram>

<histogram name="Net.TCP_Connection_Latency" units="ms">
  <owner>mmenke@chromium.org</owner>
  <summary>
    Time from when the Connect() starts until it completes.  Only times under 10
    minutes are logged.
  </summary>
</histogram>

<histogram name="Net.TCP_Connection_Latency_IPv4_No_Race" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time from when the Connect() starts until it completes when the network
    address only contains IPv4 addresses.  Only times under 10 minutes are
    logged.
  </summary>
</histogram>

<histogram name="Net.TCP_Connection_Latency_IPv4_Wins_Race" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time from when the Connect() starts until it completes when the IPv4
    fallback connection won the race against IPv6.  Only times under 10 minutes
    are logged.
  </summary>
</histogram>

<histogram name="Net.TCP_Connection_Latency_IPv6_Raceable" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time from when the Connect() starts until it completes when we race an IPv6
    connection against an IPv4 connection with a 300ms delay.  Only times under
    10 minutes are logged.
  </summary>
</histogram>

<histogram name="Net.TCP_Connection_Latency_IPv6_Solo" units="ms">
  <owner>mgersh@chromium.org</owner>
  <summary>
    Time from when the Connect() starts until it completes when the network
    address only contains IPv6 addresses.  Only times under 10 minutes are
    logged.
  </summary>
</histogram>

<histogram name="Net.TcpFastOpenSocketConnection" enum="TcpSocketStatus">
  <owner>jri@chromium.org</owner>
  <summary>
    For sockets for which a TCP Fast Open protocol might be used, the result of
    trying to use it.
  </summary>
</histogram>

<histogram name="Net.TCPForSOCKSSocketIdleTimeBeforeNextUse_ReusedSocket">
  <obsolete>
    see SocketIdleTimeBeforeNextUse_ReusedSocket_TCPforSOCKS
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time an already used TCP socket sat idle before being used for a SOCKS
    request.
  </summary>
</histogram>

<histogram name="Net.TCPForSOCKSSocketIdleTimeBeforeNextUse_UnusedSocket">
  <obsolete>
    see SocketIdleTimeBeforeNextUse_UnusedSocket_TCPforSOCKS
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time an unused TCP socket sat idle before being used for a SOCKS
    request.
  </summary>
</histogram>

<histogram name="Net.TCPForSOCKSSocketRequestTime" units="ms">
  <obsolete>
    see SocketRequestTime_TCPforSOCKS
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from initial SOCKSClientSocketPool::RequestSocket() call until
    successfully acquiring a connected TCP socket.
  </summary>
</histogram>

<histogram name="Net.TCPForSOCKSSocketType" enum="HttpSocketType">
  <obsolete>
    see SocketType_TCPforSOCKS
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The counts of the type of sockets returned by the TCP pool used by the SOCKS
    pool.
  </summary>
</histogram>

<histogram name="Net.TcpRtt.AtDisconnect" units="ms">
  <owner>bmcquade@chromium.org</owner>
  <summary>
    The kernel's estimated TCP round trip time. Recorded for each TCP socket, at
    the time it is disconnected.
  </summary>
</histogram>

<histogram name="Net.TCPSocketType" enum="HttpSocketType">
  <obsolete>
    Was only used for HTTP[S] connections, renamed to Net.HTTPSocketType.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The counts of the type of TCP socket returned.</summary>
</histogram>

<histogram name="Net.ThreadHopResourceThrottleTime" units="ms">
  <obsolete>
    Experiment complete, code removed.
  </obsolete>
  <owner>davidben@chromium.org</owner>
  <summary>
    The time it took to do an IO to UI round-trip in the
    ThreadHopResourceThrottle. This is part of an experiment to determine the
    feasibility to moving some high-level resource loading checks to the UI
    thread.
  </summary>
</histogram>

<histogram name="Net.TokenBinding.HeaderCreationTime" units="ms">
  <owner>nharper@chromium.org</owner>
  <summary>Time spent creating a Token-Binding header.</summary>
</histogram>

<histogram name="Net.TokenBinding.KeyMatch" enum="TokenBinding.KeyMatch">
  <owner>nharper@chromium.org</owner>
  <summary>
    Logs on each request that is sent on a connection where Channel ID was sent
    whether the key that would be used for Token Binding matches the key used
    for Channel ID.
  </summary>
</histogram>

<histogram name="Net.TokenBinding.StoreEphemerality"
    enum="TokenBinding.StoreEphemerality">
  <owner>nharper@chromium.org</owner>
  <summary>
    For each request to accounts.google.com on a connection where Channel ID was
    sent, this logs whether the Cookie store and the Channel ID store were
    ephemeral or persistent.
  </summary>
</histogram>

<histogram name="Net.TokenBinding.Support" enum="TokenBinding.Support">
  <owner>nharper@chromium.org</owner>
  <summary>
    The number of secure HTTP requests broken down by support for Token Binding,
    indicating if Token Binding was negotiated and supported by both client and
    server, or why it wasn't if not.
  </summary>
</histogram>

<histogram name="Net.Transaction_Bandwidth" units="KB/s">
  <obsolete>
    Discontinued as of 4/12/09
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Effective bandwidth in KByte/Second of transactions logged to
    Transaction_Latency histogram.  Note that only samples durations greater
    than zero ms, and less than 1 hour are tallied into this ratio.
  </summary>
</histogram>

<histogram name="Net.Transaction_Connected" units="ms">
  <obsolete>
    Deprecated as of 11/2014.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from the when the network transaction is requested, until the first
    byte of the header is received.
  </summary>
</histogram>

<histogram name="Net.Transaction_Connected_New" units="ms">
  <obsolete>
    Replaced by Net.Transaction_Connected_New_b.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    When a new connection is established, the time from the when the network
    transaction is requested, until the first byte of the header is received.
    Only items under 10 minutes are logged.
  </summary>
</histogram>

<histogram name="Net.Transaction_Connected_New_b" units="ms">
  <obsolete>
    Deprecated as of 11/2014.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    When a new connection is established, the time from the when the network
    transaction is requested, until the first byte of the header is received.
  </summary>
</histogram>

<histogram name="Net.Transaction_Connected_Under_10" units="ms">
  <obsolete>
    Replaced by Net.Transaction_Connected.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from the when the network transaction is requested, until the first
    byte of the header is received.  Only items under 10 minutes are logged.
  </summary>
</histogram>

<histogram name="Net.Transaction_Latency" units="ms">
  <obsolete>
    Replaced by Net.Transaction_Latency_b.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from first byte sent until last byte received by the new network stack.
    Only items under 1 hour are logged.
  </summary>
</histogram>

<histogram name="Net.Transaction_Latency_b" units="ms">
  <obsolete>
    Deprecated as of 11/2014.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from first byte sent until last byte received by the new network stack.
  </summary>
</histogram>

<histogram name="Net.Transaction_Latency_Total" units="ms">
  <obsolete>
    Deprecated as of 11/2014.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from when a network transaction is requested until last byte received
    by the new network stack.
  </summary>
</histogram>

<histogram name="Net.Transaction_Latency_Total_New_Connection" units="ms">
  <obsolete>
    Deprecated as of 11/2014.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    When an existing TCP/IP connection is NOT reused, the time from when a
    network transaction is requested until last byte received by the new network
    stack.
  </summary>
</histogram>

<histogram name="Net.Transaction_Latency_Total_New_Connection_Under_10"
    units="ms">
  <obsolete>
    Replaced by Net.Transaction_Latency_Total_New_Connection.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    When an existing TCP/IP connection is NOT reused, the time from when a
    network transaction is requested until last byte received by the new network
    stack.  Only items under 10 minutes are logged.
  </summary>
</histogram>

<histogram name="Net.Transaction_Latency_Total_Under_10" units="ms">
  <obsolete>
    Replaced by Net.Transaction_Latency_Total.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from when a network transaction is requested until last byte received
    by the new network stack.  Only items under 10 minutes are logged.
  </summary>
</histogram>

<histogram name="Net.Transaction_Latency_Under_10" units="ms">
  <obsolete>
    Replaced by Net.Transaction_Latency.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from first byte sent until last byte received by the new network stack.
    Only items under 10 minutes are logged.
  </summary>
</histogram>

<histogram name="Net.Transaction_Latency_WinHTTP" units="ms">
  <obsolete>
    Deprecated a long time ago.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from first byte sent until last byte received with old WinHTTP network
    stack.  Only items under 1 hour are logged.
  </summary>
</histogram>

<histogram name="Net.TransportSocketIdleTimeBeforeNextUse_ReusedSocket">
  <obsolete/>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time an already used TCP socket sat idle before being used (either for
    direct or non-socks use).
  </summary>
</histogram>

<histogram name="Net.TransportSocketIdleTimeBeforeNextUse_UnusedSocket">
  <obsolete/>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time an unused TCP socket sat idle before being used (either for direct
    or non-socks use).
  </summary>
</histogram>

<histogram name="Net.TransportSocketRequestTime" units="ms">
  <obsolete/>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from initial ClientSocketPool::RequestSocket() call until successfully
    acquiring a connected socket (either for direct or non-socks use).
  </summary>
</histogram>

<histogram name="Net.TransportSocketType" enum="HttpSocketType">
  <obsolete/>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The counts of the type of sockets returned by the TCP pool (either for
    direct or non-socks use).
  </summary>
</histogram>

<histogram name="Net.UdpSocketBindErrorFromPosix" units="PosixError">
  <obsolete>
    Deprecated as of 10/2017.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Posix error code from call to bind() UDP socket.</summary>
</histogram>

<histogram name="Net.UdpSocketBindErrorFromWinOS" units="WinError">
  <obsolete>
    Deprecated as of 10/2017.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Windows error code from call to bind() UDP socket.</summary>
</histogram>

<histogram name="Net.UdpSocketRandomBindErrorCode" enum="NetErrorCodes">
  <owner>mgersh@chromium.org</owner>
  <summary>Chromium error code from call to RandomBind() UDP socket.</summary>
</histogram>

<histogram name="Net.UDPSocketWinClose" units="ms">
  <owner>rch@chromium.org</owner>
  <summary>The time spent in closesocket call in UDPSocketWin::Close.</summary>
</histogram>

<histogram name="Net.URLRequest.ReferrerPolicyHeaderPresentOnRedirect"
    enum="BooleanPresent">
  <owner>estark@chromium.org</owner>
  <summary>
    Records the usage of the Referrer-Policy header on redirect responses. This
    histogram is recorded on each HTTP redirect response, with the value true if
    a Referrer-Policy header was present and false otherwise.
  </summary>
</histogram>

<histogram name="Net.URLRequest_SetReferrer_IsEmptyOrValid" enum="Boolean">
  <obsolete>
    Deprecated 6/23/2014. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>True if a URLRequest's referrer is empty or valid when set.</summary>
</histogram>

<histogram name="Net.URLRequestContext.OutstandingRequests" units="count">
  <obsolete>
    Deprecated 1/1/2018. No longer tracked.
  </obsolete>
  <summary>
    Indicates the number of URLRequests that are handed out by a
    URLRequestContext and are not yet destroyed.
  </summary>
</histogram>

<histogram name="Net.URLRequestContext.OutstandingRequests.Type"
    enum="URLRequestAnnotationType">
  <obsolete>
    Deprecated 1/1/2018. No longer tracked.
  </obsolete>
  <summary>
    Records the annotation type of the URLRequest that is handed out by a
    URLRequestContext when Net.URLRequestContext.OutstandingRequests is
    recorded.
  </summary>
</histogram>

<histogram name="Net.ValidDNSName" enum="Boolean">
  <obsolete>
    Deprecated 07/2017, not necessary to determine deprecation for invalid DNS
    names.
  </obsolete>
  <owner>palmer@chromium.org</owner>
  <summary>
    True if a DNS name contains only characters for which
    |net::IsValidLabelCharacter| returns true. Used to see if we can deprecate
    and remove support for arbitrary bytes in DNS names. This histogram is
    recorded when converting dotted DNS names into DNS query form, in
    preparation for issuing a DNS request.
  </summary>
</histogram>

<histogram name="Net.WebSocket.DataUse.Downstream" units="bytes">
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the downstream data use of WebSockets. Logged on every read
    operation in the WebSocket.
  </summary>
</histogram>

<histogram name="Net.WebSocket.DataUse.Upstream" units="bytes">
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the upstream data use of WebSockets. Logged on every write operation
    in the WebSocket.
  </summary>
</histogram>

<histogram name="Net.WebSocket.DeflateMode"
    enum="WebSocketNewPerMessageDeflateContextTakeoverMode">
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>
    Count the number of WebSockets that accepted permessage-deflate extension
    for each context take over mode. Used by the new Chromium-based WebSocket
    implementation.
  </summary>
</histogram>

<histogram name="Net.WebSocket.Duration" units="ms">
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>
    The time from a WebSocket is successfully opened until it's closed. Used to
    study how WebSockets are used.
  </summary>
</histogram>

<histogram name="Net.WebSocket.ErrorCodes" enum="NetErrorCodes">
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>
    Positive net error codes that WebSockets end with, including OK and ABORTED.
  </summary>
</histogram>

<histogram name="Net.WebSocket.HandshakeResult"
    enum="WebSocketNewHandshakeResult">
  <obsolete>
    Deprecated 03/2018, replaced by Net.WebSocket.HandshakeResult2.
  </obsolete>
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>
    Results of WebSocket handshakes. Use this histogram as a baseline for
    investigating feature usage counters.
  </summary>
</histogram>

<histogram name="Net.WebSocket.HandshakeResult2"
    enum="WebSocketHandshakeResult2">
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <owner>bnc@chromium.org</owner>
  <summary>
    Results of WebSocket handshakes, including information whether the handshake
    happened over HTTP/2. Use this histogram as a baseline for investigating
    feature usage counters.
  </summary>
</histogram>

<histogram name="Net.WebSocket.ResponseCode" enum="HttpResponseCode">
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>All HTTP status codes seen during WebSocket handshakes.</summary>
</histogram>

<histogram name="Net.Wifi.InterfaceCount">
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>
    The number of Wi-fi adapters on the computer. Because the histogram is
    logged each time Chrome performs a Wi-fi scan, it's better to see results in
    the &quot;user count&quot; view.
  </summary>
</histogram>

<histogram name="Net.Wifi.LbsLatency" units="ms">
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>The time that a request to Location Based Services takes.</summary>
</histogram>

<histogram name="Net.Wifi.ScanLatency" units="ms">
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>The time that a Wi-fi scan takes.</summary>
</histogram>

<histogram name="Net.WpadQuickCheckFailure" units="ms"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Duration of time that a failing WPAD QuickCheck takes. WPAD QuickCheck does
    a name lookup for &quot;wpad&quot; and times out quickly to fail fast when
    there's no WPAD server on the network.
  </summary>
</histogram>

<histogram name="Net.WpadQuickCheckSuccess" units="ms"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Duration of time that a successful WPAD QuickCheck takes. WPAD QuickCheck
    does a name lookup for &quot;wpad&quot; and times out quickly to fail fast
    when there's no WPAD server on the network.
  </summary>
</histogram>

<histogram name="NetConnectivity.Pipeline.0.NetworkError" enum="NetErrorCodes">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The network error, if any, of the first pipeline connectivity request.
  </summary>
</histogram>

<histogram name="NetConnectivity.Pipeline.0.ResponseCode">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The HTTP response code, if any, of the first pipeline connectivity response.
  </summary>
</histogram>

<histogram name="NetConnectivity.Pipeline.0.Status" enum="HttpPipelineStatus">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The result of the first pipeline connectivity request.</summary>
</histogram>

<histogram name="NetConnectivity.Pipeline.1.NetworkError" enum="NetErrorCodes">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The network error, if any, of the second pipeline connectivity request.
  </summary>
</histogram>

<histogram name="NetConnectivity.Pipeline.1.ResponseCode">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The HTTP response code, if any, of the second pipeline connectivity
    response.
  </summary>
</histogram>

<histogram name="NetConnectivity.Pipeline.1.Status" enum="HttpPipelineStatus">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The result of the second pipeline connectivity request.</summary>
</histogram>

<histogram name="NetConnectivity.Pipeline.2.NetworkError" enum="NetErrorCodes">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The network error, if any, of the third pipeline connectivity request.
  </summary>
</histogram>

<histogram name="NetConnectivity.Pipeline.2.ResponseCode">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The HTTP response code, if any, of the third pipeline connectivity response.
  </summary>
</histogram>

<histogram name="NetConnectivity.Pipeline.2.Status" enum="HttpPipelineStatus">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The result of the third pipeline connectivity request.</summary>
</histogram>

<histogram name="NetConnectivity.Pipeline.3.NetworkError" enum="NetErrorCodes">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The network error, if any, of the fourth pipeline connectivity request.
  </summary>
</histogram>

<histogram name="NetConnectivity.Pipeline.3.ResponseCode">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The HTTP response code, if any, of the fourth pipeline connectivity
    response.
  </summary>
</histogram>

<histogram name="NetConnectivity.Pipeline.3.Status" enum="HttpPipelineStatus">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The result of the fourth pipeline connectivity request.</summary>
</histogram>

<histogram name="NetConnectivity.Pipeline.4.NetworkError" enum="NetErrorCodes">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The network error, if any, of the fifth pipeline connectivity request.
  </summary>
</histogram>

<histogram name="NetConnectivity.Pipeline.4.ResponseCode">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The HTTP response code, if any, of the fifth pipeline connectivity response.
  </summary>
</histogram>

<histogram name="NetConnectivity.Pipeline.4.Status" enum="HttpPipelineStatus">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The result of the fifth pipeline connectivity request.</summary>
</histogram>

<histogram name="NetConnectivity.Pipeline.5.NetworkError" enum="NetErrorCodes">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The network error, if any, of the stats pipeline connectivity request.
  </summary>
</histogram>

<histogram name="NetConnectivity.Pipeline.5.ResponseCode">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The HTTP response code, if any, of the stats pipeline connectivity response.
  </summary>
</histogram>

<histogram name="NetConnectivity.Pipeline.5.Status" enum="HttpPipelineStatus">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The result of the stats pipeline connectivity request.</summary>
</histogram>

<histogram name="NetConnectivity.Pipeline.AllHTTP11" enum="BooleanSuccess">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    True if all requests received by the pipelining test server were HTTP/1.1.
  </summary>
</histogram>

<histogram name="NetConnectivity.Pipeline.CanarySuccess" enum="BooleanSuccess">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    True if the non-pipelined canary request sent immediately before the
    pipelining test requests succeeded. Note that if this fails, the rest of the
    NetConnectivity.Pipeline.* stats are not collected.
  </summary>
</histogram>

<histogram name="NetConnectivity.Pipeline.Depth">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The maximum depth of pipelined requests received by the test server.
  </summary>
</histogram>

<histogram name="NetConnectivity.Pipeline.Success" enum="BooleanSuccess">
  <obsolete>
    Deprecated 05/2014, related field trial already long expired.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>True if the entire pipeline connectivity trial passed.</summary>
</histogram>

<histogram name="NetConnectivity.Sent21">
  <obsolete>
    Deprecated 6/25/2012. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    In this experiment, 21 packets were sent to Google via UDP at port 6121 as
    rapidly as possible, just after successfully sending an UMA upload. Each
    packet was numbered, as was its ACK sent back by Google. If no packets (of
    the 21) were ever ACKed, then the port is assumed to be blocked, and no data
    is recorded in this histogram. If the port is not blocked, then this
    histogram shows the number of echo responses received from the first
  </summary>
</histogram>

<histogram name="NetConnectivity.Sent21.AckReceivedForNthPacket">
  <obsolete>
    Deprecated 6/25/2012. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    In this experiment, 21 packets were sent to Google via UDP at port 6121 as
    rapidly as possible, just after successfully sending an UMA upload. Each
    packet was numbered, as was its ACK sent back by Google. This histogram
    records, for each packet number, how often we received an ACK for that
    packet.
  </summary>
</histogram>

<histogram name="NetConnectivity.Sent21.GotAnAck" enum="BooleanSuccess">
  <obsolete>
    Deprecated 6/25/2012. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    In this experiment, 21 packets were sent to Google via UDP at port 6121 as
    rapidly as possible, just after successfully sending an UMA upload. If no
    packets (of the 21) were ever ACKed, then the port is assumed to be blocked.
    The histogram shows if we ever got an ACK for a packet in our series of 21.
  </summary>
</histogram>

<histogram name="NetConnectivity.TCP.Fail.100B.RTT" units="ms">
  <obsolete>
    Deprecated 4/2012. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The RTT for echoing 100 bytes of TCP data unsuccessfully.</summary>
</histogram>

<histogram name="NetConnectivity.TCP.Fail.1k.RTT" units="ms">
  <obsolete>
    Deprecated 4/2012. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The RTT for echoing 1K bytes of TCP data successfully.</summary>
</histogram>

<histogram name="NetConnectivity.TCP.Status"
    enum="NetConnectivityProtocolStatus">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Status for TCP protocol for echoing</summary>
</histogram>

<histogram name="NetConnectivity.TCP.Status.100B" enum="NetConnectivityStatus">
  <obsolete>
    Deprecated 4/2012. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Status for echoing 100 bytes of TCP data.</summary>
</histogram>

<histogram name="NetConnectivity.TCP.Status.1K" enum="NetConnectivityStatus">
  <obsolete>
    Deprecated 4/2012. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Status for echoing 1K bytes of TCP data.</summary>
</histogram>

<histogram name="NetConnectivity.TCP.Success" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The RTT for TCP protocol for echoing</summary>
</histogram>

<histogram name="NetConnectivity.TCP.Success.100B.RTT" units="ms">
  <obsolete>
    Deprecated 4/2012. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The RTT for echoing 100 bytes of TCP data successfully.</summary>
</histogram>

<histogram name="NetConnectivity.TCP.Success.1K.RTT" units="ms">
  <obsolete>
    Deprecated 4/2012. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The RTT for echoing 1K bytes of TCP data successfully.</summary>
</histogram>

<histogram name="NetConnectivity.UDP.Fail.100B.RTT" units="ms">
  <obsolete>
    Deprecated 4/2012. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The RTT for echoing 100 bytes of UDP data unsuccessfully.</summary>
</histogram>

<histogram name="NetConnectivity.UDP.Fail.1k.RTT" units="ms">
  <obsolete>
    Deprecated 4/2012. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The RTT for echoing 1K bytes of UDP data successfully.</summary>
</histogram>

<histogram name="NetConnectivity.UDP.PacketLoss">
  <obsolete>
    Deprecated 6/25/2012. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome sends 4 UDP packets in a row to test to see if there is a
    probabalistic dependency in packet loss for consecutive packets.  We record
    a bit vector of packets received, where the least significant bit is a 1 if
    the first packet was received, etc.  For example, if packets 1 and 3 are
    received, but packets 2 and 4 are lost, then we'd record a sample of binary
    0101B, or 5.
  </summary>
</histogram>

<histogram name="NetConnectivity.UDP.PacketLoss6">
  <obsolete>
    Deprecated 6/25/2012. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome sends 6 UDP packets in a row to test to see if there is a
    probabalistic dependency in packet loss for consecutive packets.  We record
    a bit vector of packets received, where the least significant bit is a 1 if
    the first packet was received, etc.  For example, if all packets other than
    packet 2 and 4 are responded to, then we'd have a sample (in binary) of
    110101B, or 53.
  </summary>
</histogram>

<histogram name="NetConnectivity.UDP.Status"
    enum="NetConnectivityProtocolStatus">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Status for UDP protocol for echoing</summary>
</histogram>

<histogram name="NetConnectivity.UDP.Status.100B" enum="NetConnectivityStatus">
  <obsolete>
    Deprecated 4/2012. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Status for echoing 100 bytes of UDP data.</summary>
</histogram>

<histogram name="NetConnectivity.UDP.Status.1K" enum="NetConnectivityStatus">
  <obsolete>
    Deprecated 4/2012. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Status for echoing 1K bytes of UDP data.</summary>
</histogram>

<histogram name="NetConnectivity.UDP.Success" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The RTT for UDP protocol for echoing</summary>
</histogram>

<histogram name="NetConnectivity.UDP.Success.100B.RTT" units="ms">
  <obsolete>
    Deprecated 4/2012. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The RTT for echoing 100 bytes of UDP data successfully.</summary>
</histogram>

<histogram name="NetConnectivity.UDP.Success.1K.RTT" units="ms">
  <obsolete>
    Deprecated 4/2012. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The RTT for echoing 1k bytes of UDP data successfully.</summary>
</histogram>

<histogram name="NetConnectivity2.Send6.PacketsSent">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    This histogram records how many packets (out of 6 attempted) were sent via
    UDP as rapidly as possible, just after successfully sending an UMA upload.
  </summary>
</histogram>

<histogram name="NetConnectivity2.Send6.SeriesAcked">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome sends 6 UDP packets in a row to test to see if there is a
    probabalistic dependency in packet loss for consecutive packets.  We record
    a bit vector of packets received, where the least significant bit is a 1 if
    the first packet was received, etc.  For example, if all packets other than
    packet 2 and 4 are responded to, then we'd have a sample (in binary) of
    110101B, or 53.
  </summary>
</histogram>

<histogram name="NetConnectivity2.Sent21">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    In this experiment, 21 packets were sent to Google via UDP as rapidly as
    possible, just after successfully sending an UMA upload. Each packet was
    numbered, as was its ACK sent back by Google. If no packets (of the 21) were
    ever ACKed, then the port is assumed to be blocked, and no data is recorded
    in this histogram. If the port is not blocked, then this histogram shows the
    number of echo responses received from the first
  </summary>
</histogram>

<histogram name="NetConnectivity2.Sent21.AckReceivedForNthPacket">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    In this experiment, 21 packets were sent to Google via UDP as rapidly as
    possible, just after successfully sending an UMA upload. Each packet was
    numbered, as was its ACK sent back by Google. This histogram records, for
    each packet number, how often we received an ACK for that packet.
  </summary>
</histogram>

<histogram name="NetConnectivity2.Sent21.GotAnAck" enum="BooleanSuccess">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    In this experiment, 21 packets were sent to Google via UDP as rapidly as
    possible, just after successfully sending an UMA upload. If no packets (of
    the 21) were ever ACKed, then the port is assumed to be blocked. The
    histogram shows if we ever got an ACK for a packet in our series of 21.
  </summary>
</histogram>

<histogram name="NetConnectivity2.Sent21.PacketsSent">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    This histogram records how many packets (out of 21 attempted) were sent via
    UDP as rapidly as possible, just after successfully sending an UMA upload.
  </summary>
</histogram>

<histogram name="NetConnectivity3">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    In this experiment, 21 packets were sent to Google via UDP on port 443 or
    6121.
  </summary>
</histogram>

<histogram name="NetConnectivity3.NonPacedPacket.Sent21.443.100B.PacketDelay"
    units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.NonPacedPacket.Sent21.443.1200B.PacketDelay"
    units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.NonPacedPacket.Sent21.443.500B.PacketDelay"
    units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.NonPacedPacket.Sent21.6121.100B.PacketDelay"
    units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.NonPacedPacket.Sent21.6121.1200B.PacketDelay"
    units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.NonPacedPacket.Sent21.6121.500B.PacketDelay"
    units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.NonPacedPacket.Sent21.GotAnAck"
    enum="BooleanSuccess">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.PacedPacket.Sent21.443.100B.PacketDelay"
    units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.PacedPacket.Sent21.443.1200B.PacketDelay"
    units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.PacedPacket.Sent21.443.500B.PacketDelay"
    units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.PacedPacket.Sent21.6121.100B.PacketDelay"
    units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.PacedPacket.Sent21.6121.1200B.PacketDelay"
    units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.PacedPacket.Sent21.6121.500B.PacketDelay"
    units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.PacedPacket.Sent21.GotAnAck"
    enum="BooleanSuccess">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.PacedPacket.Sent21.Success.RTT" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.StartPacket.Send6.PacketsSent">
  <obsolete>
    Deprecated 9/2012. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    This histogram records how many packets (out of 6 attempted) were sent via
    UDP as rapidly as possible, just after successfully sending an UMA upload.
  </summary>
</histogram>

<histogram name="NetConnectivity3.StartPacket.Sent21.443.100B.PacketDelay"
    units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.StartPacket.Sent21.443.1200B.PacketDelay"
    units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.StartPacket.Sent21.443.500B.PacketDelay"
    units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.StartPacket.Sent21.6121.100B.PacketDelay"
    units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.StartPacket.Sent21.6121.1200B.PacketDelay"
    units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.StartPacket.Sent21.6121.500B.PacketDelay"
    units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.StartPacket.Sent21.GotAnAck"
    enum="BooleanSuccess">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity3.StartPacket.Sent21.Success.RTT" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="NetConnectivity4">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    In this experiment, a few packets were sent from Google to clients via UDP
    on port 443 or 80 to perform net connectivity test.
  </summary>
</histogram>

<histogram name="NetConnectivity5">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    In this experiment, a few packets were sent from Google to clients via UDP
    on port 443 or 80 to perform net connectivity test.
  </summary>
</histogram>

<histogram name="NetConnectivity5.TestFailed.WritePending"
    enum="BooleanSuccess">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Next NetConnectivity5 experiment weren't started because there is an
    outstading pending write.
  </summary>
</histogram>

<histogram name="Network.3G.Gobi.Activation" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>The time the Gobi modem takes to complete activation.</summary>
</histogram>

<histogram name="Network.3G.Gobi.Connect" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    The time the Gobi modem takes to connect to the cellular network.
  </summary>
</histogram>

<histogram name="Network.3G.Gobi.Disconnect" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    The time the Gobi modem takes to disconnect from the cellular network.
  </summary>
</histogram>

<histogram name="Network.3G.Gobi.FirmwareDownload.Attempts">
  <owner>benchan@chromium.org</owner>
  <summary>Number of attempts taken to install Gobi firmware.</summary>
</histogram>

<histogram name="Network.3G.Gobi.FirmwareDownload.Time" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>The time it takes to install Gobi firmware.</summary>
</histogram>

<histogram name="Network.3G.Gobi.Registration" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    The time the Gobi modem takes to register on the cellular network.
  </summary>
</histogram>

<histogram name="Network.3G.Gobi.SetPower" enum="Network3GGobiError">
  <owner>benchan@chromium.org</owner>
  <summary>Errors experienced during Gobi device powerup.</summary>
</histogram>

<histogram name="Network.Cellular.TimeOnline" units="seconds">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS network metric sampling the time spent using Cellular to transport
    data.  These data are mostly useful when summed and compared to TimeOnline
    for other network technologies (e.g. WiFi vs Cellular).
  </summary>
</histogram>

<histogram name="Network.Cellular.TimeToConfig" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS network performance metric sampling the time to join a 3G/Cellular
    network and configure Layer 3 state.
  </summary>
</histogram>

<histogram name="Network.Cellular.TimeToOnline" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS network performance metric sampling the time to determine that a
    3G/Cellular network is online after configuring Layer 3 state.
  </summary>
</histogram>

<histogram name="Network.Cellular.TimeToPortal" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS network performance metric sampling the time to determine that a
    3G/Cellular network is in a captive portal after configuring Layer 3 state.
  </summary>
</histogram>

<histogram name="Network.Cellular.UsageRequestStatus"
    enum="NetworkCellularUsageRequestStatus">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Chrome OS cellular usage API request status codes.</summary>
</histogram>

<histogram name="Network.Ethernet.TimeOnline" units="seconds">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS network metric sampling the time spent using Ethernet to transport
    data.  These data are mostly useful when summed and compared to TimeOnline
    for other network technologies (e.g. WiFi vs Cellular).
  </summary>
</histogram>

<histogram name="Network.Ethernet.TimeToConfig" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS network performance metric sampling the time to join a wired
    Ethernet network and configure Layer 3 state (typically acquire a DHCP
    lease).
  </summary>
</histogram>

<histogram name="Network.Ethernet.TimeToOnline" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS network performance metric sampling the time to determine that an
    Ethernet network is online after configuring Layer 3 state.
  </summary>
</histogram>

<histogram name="Network.Ethernet.TimeToPortal" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS network performance metric sampling the time to determine that an
    Ethernet network is in a captive portal after configuring Layer 3 state.
  </summary>
</histogram>

<histogram name="Network.MigrationNssToPem"
    enum="MigrationNssToPemNetworkTypes">
  <obsolete>
    Deprecated 8/2015.
  </obsolete>
  <owner>cschuet@chromium.org</owner>
  <summary>
    Chrome OS metric counting the number of network configurations that
    contained a NSS nickname identifying a CA certificate, which triggered the
    migration to PEM encoding. This metric doesn't consider whether the
    migration was successful but once a migration was successful the nickname is
    removed.
  </summary>
</histogram>

<histogram name="Network.ServiceErrors" enum="NetworkServiceError">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Chrome OS connection manager service errors seen.</summary>
</histogram>

<histogram name="Network.Shill.Cellular.3GPPRegistrationDelayedDrop"
    enum="NetworkCellular3GPPRegistrationDelayedDrop">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the number of cellular network
    flakes. A network flake occurs when the signal strength goes below detection
    level for a short duration.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.AutoConnectTotalTime" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the total amount of time spent
    from the start of the first auto-connect request until when the cellular
    modem successfully connects to the network.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.AutoConnectTries">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the number of auto-connect
    tries that were attempted before the cellular modem successfully connected
    to the network.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.DevicePresenceStatus"
    enum="BooleanPresent">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network metric that tracks the presence of a Cellular device in
    the system. A sample is emitted once every 3 minutes.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.DHCPOptionFailureDetected"
    enum="NetworkDHCPOptionFailure">
  <obsolete>
    Deprecated 5/2014, and replaced by Network.Shill.DHCPOptionFailureDetected.
  </obsolete>
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network metric that tracks the number of DHCP option failures
    encountered by Shill.  This indicates that Shill is using minimal DHCP
    options due to suspected MTU issues on the return path from the DHCP server
    back to the client.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.Disconnect"
    enum="NetworkDisconnectType">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network usage metric that tracks whether the cellular network was
    disconnected due to an error or was explicitly disconnected by the user.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.Drop" enum="NetworkCellularTechnology">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS cellular network metric that tracks the number of drops based on
    the network technology.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.ExpiredLeaseLengthSeconds"
    units="seconds">
  <obsolete>
    Deprecated since Chrome OS build 10010.0.0 and superceded by
    Network.Shill.Cellular.ExpiredLeaseLengthSeconds2 due to change in number of
    buckets (crosreview.com/557297, crosreview.com/703679).
  </obsolete>
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric that tracks the length of a lease for a
    cellular network at the time it expired without the DHCP client being able
    to renew it.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.ExpiredLeaseLengthSeconds2"
    units="seconds">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric that tracks the length of a lease for a
    cellular network at the time it expired without the DHCP client being able
    to renew it.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.IPv6ConnectivityStatus"
    enum="IPv6ConnectivityStatus">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network metric that tracks the presence of complete IPv6
    configuration at the time when cellular connection is established.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.NetworkConnectionIPType"
    enum="NetworkConnectionIPType">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network metric that tracks the types of IP configuration used for
    establishing cellular connections.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.OutOfCreditsReason"
    enum="NetworkCellularOutOfCreditsReason">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS cellular network metric that tracks the number of out-of-credits
    detected based on the cause that triggered the out-of-credits.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.PortalAttempts">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the number of portal detection
    attempts per pass for a cellular network. This includes failure, timeout and
    successful attempts.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.PortalAttemptsToOnline">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the total number of portal
    detection attempts performed for a cellular network between the Connected
    and Online state. This includes failure, timeout and successful attempts.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.PortalResult"
    enum="NetworkPortalResult">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the result of portal detections
    for a cellular network.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.SignalStrengthBeforeDrop">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network metric sampling the signal strength (0-100) of the
    cellular modem before it dropped from the network.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.TimeOnline" units="seconds">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network metric sampling the time spent using cellular to transport
    data.  These data are mostly useful when summed and compared to TimeOnline
    for other network technologies (e.g. WiFi vs Cellular).
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.TimeToConfig" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to join a cellular
    network and configure Layer 3 state.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.TimeToConnect" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to connect a cellular
    modem.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.TimeToDisable" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to disable a cellular
    modem.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.TimeToEnable" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to enable a cellular
    modem.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.TimeToInitialize" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to initialize a
    cellular modem.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.TimeToOnline" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to determine that a
    cellular network is online after configuring Layer 3 state.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.TimeToPortal" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to determine that a
    cellular network is in a captive portal after configuring Layer 3 state.
  </summary>
</histogram>

<histogram name="Network.Shill.Cellular.TimeToScan" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to scan a cellular
    network and register a modem.
  </summary>
</histogram>

<histogram name="Network.Shill.ConnectionDiagnosticsIssue"
    enum="ConnectionDiagnosticsIssue">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network metric that tracks the connectivity issue diagnosed by the
    ConnectionDiagnostics class in Shill. This metric is logged each time a
    ConnectionDiagnostics object completes its diagnostics actions and reports
    the results to its caller.
  </summary>
</histogram>

<histogram name="Network.Shill.CorruptedProfile" enum="NetworkCorruptedProfile">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS cellular network metric that tracks the number of corrupted
    profiles encountered by Shill.
  </summary>
</histogram>

<histogram name="Network.Shill.DarkResumeActionResult"
    enum="ShillSuspendTerminationDarkResumeActionResult">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the number of dark resume
    actions that successfully complete or fail when shill suspends.
  </summary>
</histogram>

<histogram name="Network.Shill.DarkResumeActionsTimeTaken" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the time in milliseconds it
    takes dark resume actions to complete when shill suspends.
  </summary>
</histogram>

<histogram name="Network.Shill.DarkResumeActionTime" units="ms">
  <obsolete>
    Deprecated 01/2015. Migrated to Network.Shill.DarkResumeActionsTimeTaken.
  </obsolete>
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the time in milliseconds it
    takes dark resume actions to complete when shill suspends.
  </summary>
</histogram>

<histogram name="Network.Shill.DarkResumeScanNumRetries">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network metric sampling the number of times a dark resume scan is
    retried in a single dark resume.
  </summary>
</histogram>

<histogram name="Network.Shill.DarkResumeScanRetryResult"
    enum="DarkResumeScanRetryResult">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network metric that tracks whether dark resume scan retries led to
    the system suspending from dark resume in a connected state. This metric is
    only recorded in dark resumes when at least one dark resume scan retry was
    launched.
  </summary>
</histogram>

<histogram name="Network.Shill.DeviceConnectionStatus" enum="ConnectionStatus">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric that tracks the connection status of
    the device. A sample is emitted once every 3 minutes.
  </summary>
</histogram>

<histogram name="Network.Shill.DeviceRemovedEvent" enum="DeviceTechnologyType">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network metric that tracks the network device removed events for
    each device type.
  </summary>
</histogram>

<histogram name="Network.Shill.DHCPClientMTUValue" units="bytes">
  <owner>pstew@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the MTU value proposed by the
    DHCP server.  A sample is emitted each time the DHCP client completes
    negotiation with a server.
  </summary>
</histogram>

<histogram name="Network.Shill.DHCPClientStatus" enum="NetworkDhcpClientStatus">
  <owner>pstew@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the current state of the DHCP
    client.  A sample is emitted each time the DHCP client state changes.
  </summary>
</histogram>

<histogram name="Network.Shill.DHCPOptionFailureDetected"
    enum="NetworkTechnology">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network metric that tracks the number of DHCP option failures
    encountered by Shill for each network technology.  This indicates that Shill
    is using minimal DHCP options due to suspected MTU issues on the return path
    from the DHCP server back to the client.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.DevicePresenceStatus"
    enum="BooleanPresent">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network metric that tracks the presence of an Ethernet device in
    the system. A sample is emitted once every 3 minutes.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.DHCPOptionFailureDetected"
    enum="NetworkDHCPOptionFailure">
  <obsolete>
    Deprecated 5/2014, and replaced by Network.Shill.DHCPOptionFailureDetected.
  </obsolete>
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network metric that tracks the number of DHCP option failures
    encountered by Shill.  This indicates that Shill is using minimal DHCP
    options due to suspected MTU issues on the return path from the DHCP server
    back to the client.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.Disconnect"
    enum="NetworkDisconnectType">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network usage metric that tracks whether the Ethernet network was
    disconnected due to an error or was explicitly disconnected by the user.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.ExpiredLeaseLengthSeconds"
    units="seconds">
  <obsolete>
    Deprecated since Chrome OS build 10010.0.0 and superceded by
    Network.Shill.Ethernet.ExpiredLeaseLengthSeconds2 due to change in number of
    buckets (crosreview.com/557297, crosreview.com/703679).
  </obsolete>
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric that tracks the length of a lease for
    an Ethernet network at the time it expired without the DHCP client being
    able to renew it.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.ExpiredLeaseLengthSeconds2"
    units="seconds">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric that tracks the length of a lease for
    an Ethernet network at the time it expired without the DHCP client being
    able to renew it.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.LinkMonitorBroadcastErrorsAtFailure">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric that tracks the number of LinkMonitor
    broadcast errors that were accrued on an Ethernet network at the time that
    the link was declaired to be failed.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.LinkMonitorFailure"
    enum="LinkMonitorFailureType">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS metric that signals the type of failure the LinkMonitor
    encountered which caused it to stop monitoring an Ethernet network.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.LinkMonitorResponseTimeSample"
    units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric that tracks the number of milliseconds
    between an ARP request and a received reply on an Ethernet network.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.LinkMonitorSecondsToFailure"
    units="seconds">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric that tracks the number of seconds from
    the start of the LinkMonitor until failure on an Ethernet network.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.LinkMonitorUnicastErrorsAtFailure">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric that tracks the number of LinkMonitor
    unicast errors that were accrued on an Ethernet network at the time that the
    link was declaired to be failed.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.PortalAttempts">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the number of portal detection
    attempts per pass for an Ethernet network. This includes failure, timeout
    and successful attempts.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.PortalAttemptsToOnline">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the total number of portal
    detection attempts performed for an Ethernet network between the Connected
    and Online state. This includes failure, timeout and successful attempts.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.PortalResult"
    enum="NetworkPortalResult">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the result of portal detections
    for an Ethernet network.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.TimeOnline" units="seconds">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network metric sampling the time spent using Ethernet to transport
    data.  These data are mostly useful when summed and compared to TimeOnline
    for other network technologies (e.g. WiFi vs Cellular).
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.TimeToConfig" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to join a wired
    Ethernet network and configure Layer 3 state (typically acquire a DHCP
    lease).
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.TimeToInitialize" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to initialize an
    Ethernet device.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.TimeToOnline" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to determine that an
    Ethernet network is online after configuring Layer 3 state.
  </summary>
</histogram>

<histogram name="Network.Shill.Ethernet.TimeToPortal" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to determine that an
    Ethernet network is in a captive portal after configuring Layer 3 state.
  </summary>
</histogram>

<histogram name="Network.Shill.PPPMTUValue" units="bytes">
  <owner>gdk@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the MTU value provided by the
    upstream PPP peer.  A sample is emitted each time the client successfully
    negotiates an MTU value via PPP.
  </summary>
</histogram>

<histogram name="Network.Shill.ServiceErrors" enum="NetworkServiceError">
  <owner>benchan@chromium.org</owner>
  <summary>Chrome OS connection manager service errors seen.</summary>
</histogram>

<histogram name="Network.Shill.ServicesOnSameNetwork">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network metric sampling the number of services that are connected
    to the currently connected network.
  </summary>
</histogram>

<histogram name="Network.Shill.SuspendActionResult"
    enum="ShillSuspendTerminationDarkResumeActionResult">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the number of suspend actions
    that successfully complete or fail when shill suspends.
  </summary>
</histogram>

<histogram name="Network.Shill.SuspendActionsTimeTaken" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the time in milliseconds it
    takes suspend actions to complete when shill suspends.
  </summary>
</histogram>

<histogram name="Network.Shill.SuspendActionTime" units="ms">
  <obsolete>
    Deprecated 01/2015. Migrated to Network.Shill.SuspendActionsTimeTaken.
  </obsolete>
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the time in milliseconds it
    takes suspend actions to complete when shill suspends.
  </summary>
</histogram>

<histogram name="Network.Shill.TerminationActionResult"
    enum="ShillSuspendTerminationDarkResumeActionResult">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the number of termination
    actions that successfully complete or fail when shill terminates. Previously
    deprecated in 10/2012 and brought back in 10/2014.
  </summary>
</histogram>

<histogram name="Network.Shill.TerminationActionResult.OnSuspend"
    enum="ShillSuspendTerminationDarkResumeActionResult">
  <obsolete>
    Deprecated 10/2014. Migrated to Network.Shill.SuspendActionResult.
  </obsolete>
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the number of termination
    actions that successfully complete or fail when shill suspends.
  </summary>
</histogram>

<histogram name="Network.Shill.TerminationActionResult.OnTerminate"
    enum="ShillSuspendTerminationDarkResumeActionResult">
  <obsolete>
    Deprecated 10/2014. Migrated to Network.Shill.TerminationActionResult.
  </obsolete>
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the number of termination
    actions that successfully complete or fail when shill terminates.
  </summary>
</histogram>

<histogram name="Network.Shill.TerminationActionsTimeTaken" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the time in milliseconds it
    takes termination actions to complete when shill terminates.
  </summary>
</histogram>

<histogram name="Network.Shill.TerminationActionTime" units="ms">
  <obsolete>
    Deprecated 01/2015. Migrated to Network.Shill.TerminationActionsTimeTaken.
  </obsolete>
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the time in milliseconds it
    takes termination actions to complete when shill terminates.
  </summary>
</histogram>

<histogram name="Network.Shill.TerminationActionTime.OnSuspend" units="ms">
  <obsolete>
    Deprecated 10/2014. Migrated to Network.Shill.SuspendActionTime.
  </obsolete>
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the time in milliseconds it
    takes termination actions to complete when shill suspends.
  </summary>
</histogram>

<histogram name="Network.Shill.TerminationActionTime.OnTerminate" units="ms">
  <obsolete>
    Deprecated 10/2014. Migrated to Network.Shill.TerminationActionTime.
  </obsolete>
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the time in milliseconds it
    takes termination actions to complete when shill terminates.
  </summary>
</histogram>

<histogram name="Network.Shill.TimeToDrop" units="seconds">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network stability metric sampling the time in seconds between the
    networking going online to going offline. Offline events due to device
    shutdown or suspend are ignored (along with the online time before that
    offline event).
  </summary>
</histogram>

<histogram name="Network.Shill.UserInitiatedEvents" enum="UserInitiatedEvent">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network metric that tracks the number of user-initiated events.
  </summary>
</histogram>

<histogram name="Network.Shill.Vpn.Driver" enum="VPNDriver">
  <owner>cernekee@chromium.org</owner>
  <summary>
    Chrome OS network usage metric sampled on each successful VPN connection
    that tracks the VPN connection type.
  </summary>
</histogram>

<histogram name="Network.Shill.Vpn.RemoteAuthenticationType"
    enum="VPNRemoteAuthenticationType">
  <owner>cernekee@chromium.org</owner>
  <summary>
    Chrome OS network usage metric sampled on each successful VPN connection
    that tracks the remote authentication method.
  </summary>
</histogram>

<histogram name="Network.Shill.Vpn.TimeOnline" units="ms">
  <owner>cernekee@chromium.org</owner>
  <summary>
    Chrome OS network metric sampling the time spent using VPN to transport
    data.  These data are mostly useful when summed and compared to TimeOnline
    for other network technologies (e.g. WiFi vs Cellular).  A sample is emitted
    every time the system transitions from primary connectivity through a VPN to
    some other type of connectivity.  The value of the sample is the time delta
    in seconds from the instant the system transitioned to VPN connectivity.
  </summary>
</histogram>

<histogram name="Network.Shill.Vpn.TimeToConfig" units="ms">
  <owner>cernekee@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to configure Layer 3
    state on a VPN network (typically acquire a DHCP lease).
  </summary>
</histogram>

<histogram name="Network.Shill.Vpn.TimeToOnline" units="ms">
  <owner>cernekee@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to determine that a
    WiMax network is online after configuring Layer 3 state.
  </summary>
</histogram>

<histogram name="Network.Shill.Vpn.UserAuthenticationType"
    enum="VPNUserAuthenticationType">
  <owner>cernekee@chromium.org</owner>
  <summary>
    Chrome OS network usage metric sampled on each successful VPN connection
    that tracks the user authentication method.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Ap80211kSupport" enum="WiFiAp80211kSupport">
  <owner>matthewmwang@chromium.org</owner>
  <summary>
    Chrome OS network metric sampling the number of Wireless Access Points that
    support the 802.11k standard, sampled on successful connections to an AP.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Ap80211rSupport" enum="WiFiAp80211rSupport">
  <owner>matthewmwang@chromium.org</owner>
  <summary>
    Chrome OS network metric sampling the number of Wireless Access Points that
    support the 802.11r standard, sampled on successful connections to an AP.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Ap80211vBSSMaxIdlePeriodSupport"
    enum="WiFiAp80211vBSSMaxIdlePeriodSupport">
  <owner>matthewmwang@chromium.org</owner>
  <summary>
    Chrome OS network metric sampling the number of Wireless Access Points that
    support the 802.11v BSS Max Idle Period feature, sampled on successful
    connections to an AP.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Ap80211vBSSTransitionSupport"
    enum="WiFiAp80211vBSSTransitionSupport">
  <owner>matthewmwang@chromium.org</owner>
  <summary>
    Chrome OS network metric sampling the number of Wireless Access Points that
    support the 802.11v BSS Transition feature, sampled on successful
    connections to an AP.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.Ap80211vDMSSupport"
    enum="WiFiAp80211vDMSSupport">
  <owner>matthewmwang@chromium.org</owner>
  <summary>
    Chrome OS network metric sampling the number of Wireless Access Points that
    support the 802.11v DMS feature, sampled on successful connections to an AP.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.ApChannelSwitch" enum="WiFiApChannelSwitch">
  <owner>matthewmwang@chromium.org</owner>
  <summary>
    Chrome OS network usage metric sampled when an AP switches channels. Shows
    the old frequency band and the new frequency band.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.ApDisconnectReason" enum="WiFiReasonCode">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network usage metric.  Reason code reported when the AP
    disconnects a WiFi connection.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.ApDisconnectType" enum="WiFiStatusType">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network usage metric.  Broad category of reason AP disconnected a
    WiFi connection.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.ApMode" enum="WiFiApMode">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network usage metric.  The AP mode setting for each successful
    WiFi connection.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.AutoConnectableServices">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network metric sampling the number of wifi services available for
    auto-connect when auto-connect is initiated for wifi device.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.AvailableBSSesAtConnect">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network metric sampling the number of BSSes (endpoints) available
    for the currently connecting wifi service.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.Channel" enum="NetworkChannelType">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network usage metric.  The channel used for each successful WiFi
    connection.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.ClientDisconnectReason"
    enum="WiFiReasonCode">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network usage metric.  Reason code reported when the client
    disconnects a WiFi connection.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.ClientDisconnectType" enum="WiFiStatusType">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network usage metric.  Broad category of reason client
    disconnected a WiFi connection.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.DarkResumeUnmatchedScanResultsReceived"
    enum="DarkResumeUnmatchedScanResultReceived">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network metric that tracks whether any unmatched scan results are
    received during dark resume cycles. An unmatched scan result is a set of
    scan results received by shill in response to a scan request that was not
    sent directly by shill in the same dark resume cycle.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.DarkResumeWakeReason"
    enum="DarkResumeWakeReason">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network metric that tracks the wake reason for dark resume.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.DevicePresenceStatus" enum="BooleanPresent">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network metric that tracks the presence of a WiFi device in the
    system. A sample is emitted once every 3 minutes.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.DHCPOptionFailureDetected"
    enum="NetworkDHCPOptionFailure">
  <obsolete>
    Deprecated 5/2014, and replaced by Network.Shill.DHCPOptionFailureDetected.
  </obsolete>
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network metric that tracks the number of DHCP option failures
    encountered by Shill.  This indicates that Shill is using minimal DHCP
    options due to suspected MTU issues on the return path from the DHCP server
    back to the client.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.Disconnect" enum="NetworkDisconnectType">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network usage metric that tracks whether an 802.11 wireless
    network was disconnected due to an error or was explicitly disconnected by
    the user.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.EapInnerProtocol" enum="EAPInnerProtocol">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network usage metric sampled on each successful 802.1x wireless
    connection that tracks the configured inner authentication method.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.EapOuterProtocol" enum="EAPOuterProtocol">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network usage metric sampled on each successful 802.1x wireless
    connection that tracks the configured outer authentication method.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.ExpiredLeaseLengthSeconds" units="seconds">
  <obsolete>
    Deprecated since Chrome OS build 10010.0.0 and superceded by
    Network.Shill.Wifi.ExpiredLeaseLengthSeconds2 due to change in number of
    buckets (crosreview.com/557297, crosreview.com/703679).
  </obsolete>
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network performance metric that tracks the length of a lease for a
    WiFi network at the time it expired without the DHCP client being able to
    renew it.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.ExpiredLeaseLengthSeconds2" units="seconds">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network performance metric that tracks the length of a lease for a
    WiFi network at the time it expired without the DHCP client being able to
    renew it.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.FallbackDNSTestResult"
    enum="FallbackDNSTestResult">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network performance metric that tracks the result of the fallback
    DNS test. The fallback DNS test is performed when portal detection failed
    due to DNS failure.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.FrequenciesConnectedEver">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS metric sampling the number of different frequencies (i.e.
    channels) on which a device has connected to a WiFi network. This value is
    sampled every time a WiFi connection is established
    (WPASupplicant::kInterfaceStateCompleted). Note that the word
    &quot;Ever&quot; in the metric name is misleading. Chrome OS actually ages
    out historical information, currently after 3 weeks.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.IPv6ConnectivityStatus"
    enum="IPv6ConnectivityStatus">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network metric that tracks the presence of complete IPv6
    configuration at the time when WiFi connection is established.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.LinkMonitorBroadcastErrorsAtFailure">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network performance metric that tracks the number of LinkMonitor
    broadcast errors that were accrued on an 802.11 wireiless network at the
    time that the link was declaired to be failed.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.LinkMonitorFailure"
    enum="LinkMonitorFailureType">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS metric that signals the type of failure the LinkMonitor
    encountered which caused it to stop monitoring an 802.11 wireless network.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.LinkMonitorResponseTimeSample" units="ms">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network performance metric that tracks the number of milliseconds
    between an ARP request and a received reply on an 802.11 wireless network.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.LinkMonitorSecondsToFailure"
    units="seconds">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network performance metric that tracks the number of seconds from
    the start of the LinkMonitor until failure on an 802.11 wireless network.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.LinkMonitorUnicastErrorsAtFailure">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network performance metric that tracks the number of LinkMonitor
    unicast errors that were accrued on an 802.11 wireless network at the time
    that the link was declaired to be failed.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.NetworkConnectionIPType"
    enum="NetworkConnectionIPType">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network metric that tracks the types of IP configuration used for
    establishing WiFi connections.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.NetworkProblemDetected"
    enum="NetworkProblemType">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network performance metric that tracks the network problems
    encountered by TrafficMonitor after WiFi connection is established.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.PhyMode" enum="NetworkPhyModeType">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network usage metric.  The channel type used for each successful
    WiFi connection.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.PortalAttempts">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the number of portal detection
    attempts per pass for an 802.11 wireless network. This includes failure,
    timeout and successful attempts.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.PortalAttemptsToOnline">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the total number of portal
    detection attempts performed for an 802.11 wireless network between the
    Connected and Online state. This includes failure, timeout and successful
    attempts.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.PortalResult" enum="NetworkPortalResult">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the result of portal detections
    for an 802.11 wireless network.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.RememberedNetworkCount">
  <owner>pstew@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the number of 802.11 wireless
    networks known by the connection manager at the time a configuration profile
    has been loaded.  A configuration profile is loaded at each system startup,
    and when a user logs in.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.RememberedSystemNetworkCount">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network metric sampling the number of 802.11 wireless networks
    configured from the system configuration profile. This metric is sampled
    each time a user configuration profile is loaded, such as when a user logs
    in.

    It might be surprising to have a system configuration profile metric sampled
    when a user configuration profile is loaded. But this ensures that we have
    equal numbers of samples for system and user configuration profiles.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.RememberedUserNetworkCount">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network metric sampling the number of 802.11 wireless networks
    configured from a user configuration profile. This metric is sampled each
    time a user configuration profile is loaded, such as when a user logs in.
  </summary>
</histogram>

<histogram base="true" name="Network.Shill.WiFi.RoamComplete"
    enum="WiFiRoamComplete">
<!-- Name completed by histogram_suffixes name="RoamSecurityType" -->

  <owner>matthewmwang@chromium.org</owner>
  <summary>
    Chrome OS network metric recording roam successes or failures. This is
    recorded every time a client succeeds or fails to roam from one wireless
    access point to another.
  </summary>
</histogram>

<histogram base="true" name="Network.Shill.WiFi.RoamTime" units="ms">
<!-- Name completed by histogram_suffixes name="RoamSecurityType" -->

  <owner>matthewmwang@chromium.org</owner>
  <summary>
    Chrome OS network metric recording roam time in milliseconds. This is
    recorded every time a successful roam from one wireless access point to
    another occurs.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.ScanResult" enum="WiFiScanResult">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network usage metric describing, for a WiFi scan attempt, what
    scan method is used and whether it ends in a connection.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.ScanTimeInEbusy" units="ms">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network usage metric describing, for a WiFi scan attempt, how many
    milliseconds were spent waiting to talk to the kernel/drivers.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.Security" enum="NetworkSecurityType">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network usage metric.  The security setting for each successful
    WiFi connection.
  </summary>
</histogram>

<histogram base="true" name="Network.Shill.WiFi.SessionLength" units="ms">
<!-- Name completed by histogram_suffixes name="RoamSecurityType" -->

  <owner>matthewmwang@chromium.org</owner>
  <summary>
    Chrome OS network metric recording session length in milliseconds. This is
    recorded every time an uninterrupted session with a wireless access point is
    terminated.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.SignalAtDisconnect" units="negative dBm">
  <owner>silberst@chromium.org</owner>
  <summary>
    Chrome OS network metric indicating the negative of the dBm received signal
    strength recorded at the time of a WiFi disconnect.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.SignalStrength" units="negative dBm">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network metric indicating the negative of the dBm received signal
    strength recorded at the time a successful WiFi connection started.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.StoppedTxQueueLength" units="frames">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network metric indicating the maximal length of any stopped
    mac80211 transmit queue. The metric is reported when a queue-status check
    determines that at least one transmit queue is stopped, and has more than a
    threshold number of frames queued.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.StoppedTxQueueReason"
    enum="NetworkQueueStopReason">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network metric indicating the reason that mac80211 transmit queues
    were stopped. The metric is reported when a queue-status check determines
    that at least one queue is stopped, and has more than a threshold number of
    frames queued.

    One measurement is reported per stop reason, per queue-status check. Reasons
    that apply to multiple queues are reported only once per queue-status check.
    Reasons that only apply to queues that have a below-threshold number of
    frames are skipped.

    Note that, because we may report multiple stop reasons for a single
    queue-status check, this histogram is not suitable for determining the
    number of times a queue-status check found that the queues were stopped. To
    determine that number, use the count of
    Network.Shill.WiFi.StoppedTxQueueLength reports.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.SuspendDurationWoWOffConnected"
    units="seconds">
  <owner>semenzato@chromium.org</owner>
  <owner>kirtika@chromium.org</owner>
  <summary>
    Time spent in suspended state, on a resume, for the case when wake on wifi
    is  disabled (WoWOff), and after resume, the NIC is found to be already
    connected.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.SuspendDurationWoWOffDisconnected"
    units="seconds">
  <owner>semenzato@chromium.org</owner>
  <owner>kirtika@chromium.org</owner>
  <summary>
    Time spent in suspended state, on a resume, for the case when wake on wifi
    is  enabled (WoWOff), and after resume, the NIC is found to be disconnected.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.SuspendDurationWoWOnConnected"
    units="seconds">
  <owner>semenzato@chromium.org</owner>
  <owner>kirtika@chromium.org</owner>
  <summary>
    Time spent in suspended state, on a resume, for the case when wake on wifi
    is  enabled (WoWOn), and after resume, the NIC is found to be already
    connected.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.SuspendDurationWoWOnDisconnected"
    units="seconds">
  <owner>semenzato@chromium.org</owner>
  <owner>kirtika@chromium.org</owner>
  <summary>
    Time spent in suspended state, on a resume, for the case when wake on wifi
    is  enabled (WoWOn), and after resume, the NIC is found to be disconnected.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.TimeOnline" units="seconds">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network metric sampling the time spent using WiFi to transport
    data.  These data are mostly useful when summed and compared to TimeOnline
    for other network technologies (e.g. WiFi vs Cellular).
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.TimeResumeToReady" units="ms">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time from the resume event
    to the time when an 802.11 wireless network has configured its Layer 3
    state.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.TimeToConfig" units="ms">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to configure Layer 3
    state on an 802.11 wireless network (typically acquire a DHCP lease).
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.TimeToConnect" units="ms">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to connect to a WiFi
    Basic Service Set (which consists of the access point and associated
    stations on a particular WiFi channel for a specific network).
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.TimeToInitialize" units="ms">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to initialize an
    802.11 wireless device.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.TimeToJoin" units="ms">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to join (associate
    plus authenticate) an 802.11 wireless network.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.TimeToOnline" units="ms">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to determine that an
    802.11 wireless network is online after configuring Layer 3 state.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.TimeToPortal" units="ms">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to determine that an
    802.11 wireless network is in a captive portal after configuring Layer 3
    state.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.TimeToScan" units="ms">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to scan WiFi until a
    connection is found.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.TimeToScanAndConnect" units="ms">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time between the beginning
    of a WiFi scan (if the scan includes both a progressive scan and a full
    scan, the TimeToScanAndConnect starts with the first scan of the series) and
    the completion of a successful connection.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.TransmitBitrateMbps" units="Mbps">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network performance metric that tracks the transmit bitrate in
    Mbps for the wifi device when it is connected to a network. The bitrate is
    reported once every minute after the wifi connection is established.
  </summary>
</histogram>

<histogram name="Network.Shill.Wifi.UnreliableLinkSignalStrength">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network metric sampling the signal strength (0-100) of the wifi
    network when it becomes unreliable (experiencing multiple link failures in a
    short period of time).
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.UserInitiatedConnectionFailureReason"
    enum="ConnectionFailureReason">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network performance metric that tracks the reasons of failed
    user-initiated WiFi connection attempts. The result of the user-initiated
    WiFi connection attempts are being tracked by
    Network.Shill.WiFi.UserInitiatedConnectionResult.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.UserInitiatedConnectionResult"
    enum="ConnectionResult">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network performance metric that tracks the result of
    user-initiated WiFi connection attempts.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.VerifyWakeOnWiFiSettingsResult"
    enum="VerifyWakeOnWiFiSettingsResult">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network diagnostic metric sampling the number of times NIC wake on
    WiFi settings verification succeeds or fails in shill. This metric is
    recorded every time wake on WiFi settings are requested and verified after
    the NIC is programmed with wake on WiFi settings.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.WakeOnWiFiFeaturesEnabledState"
    enum="WakeOnWiFiFeaturesEnabledState">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network usage metric that tracks the wake on WiFi features that
    are enabled in shill. Recorded once every 10 minutes.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.WakeOnWiFiThrottled"
    enum="WakeOnWiFiThrottled">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network metric that tracks whether wake on WiFi was disabled
    during a period of system suspension because of too many dark resume wakes.
    This metric is only recorded for system suspends where wake on WiFi
    functionality has been programmed into the NIC.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.WakeReasonReceivedBeforeOnDarkResume"
    enum="WakeReasonReceivedBeforeOnDarkResume">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network metric that tracks whether a wake reason was received
    during dark resume before executing WakeOnWiFi::OnDarkResume.
  </summary>
</histogram>

<histogram name="Network.Shill.WiFi.WiFiConnectionStatusAfterWake"
    enum="WiFiConnectionStatusAfterWake">
  <owner>kirtika@chromium.org</owner>
  <summary>
    Chrome OS network usage metric that tracks the WiFi connection status after
    waking from suspend, both when wake on WiFi is enabled and disabled.
    Recorded 1 second after waking from suspend.
  </summary>
</histogram>

<histogram name="Network.Shill.Wimax.DevicePresenceStatus"
    enum="BooleanPresent">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network metric that tracks the presence of a WiMax device in the
    system. A sample is emitted once every 3 minutes.
  </summary>
</histogram>

<histogram name="Network.Shill.Wimax.DHCPOptionFailureDetected"
    enum="NetworkDHCPOptionFailure">
  <obsolete>
    Deprecated 5/2014, and replaced by Network.Shill.DHCPOptionFailureDetected.
  </obsolete>
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network metric that tracks the number of DHCP option failures
    encountered by Shill.  This indicates that Shill is using minimal DHCP
    options due to suspected MTU issues on the return path from the DHCP server
    back to the client.
  </summary>
</histogram>

<histogram name="Network.Shill.Wimax.ExpiredLeaseLengthSeconds" units="seconds">
  <obsolete>
    Deprecated since Chrome OS build 10010.0.0 and superceded by
    Network.Shill.Wimax.ExpiredLeaseLengthSeconds2 due to change in number of
    buckets (crosreview.com/557297, crosreview.com/703679).
  </obsolete>
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric that tracks the length of a lease for a
    WiMax network at the time it expired without the DHCP client being able to
    renew it.
  </summary>
</histogram>

<histogram name="Network.Shill.Wimax.ExpiredLeaseLengthSeconds2"
    units="seconds">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric that tracks the length of a lease for a
    WiMax network at the time it expired without the DHCP client being able to
    renew it.
  </summary>
</histogram>

<histogram name="Network.Shill.Wimax.TimeToConfig" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to configure Layer 3
    state on a WiMax network (typically acquire a DHCP lease).
  </summary>
</histogram>

<histogram name="Network.Shill.Wimax.TimeToInitialize" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to initialize a WiMax
    device.
  </summary>
</histogram>

<histogram name="Network.Shill.Wimax.TimeToOnline" units="ms">
  <owner>benchan@chromium.org</owner>
  <summary>
    Chrome OS network performance metric sampling the time to determine that a
    WiMax network is online after configuring Layer 3 state.
  </summary>
</histogram>

<histogram name="Network.TimeToConfig.Cellular" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS network performance metric sampling the time to join a 3G/Cellular
    network and configure Layer 3 state. Note this metric is deprecated; see
    Network.Cellular.TimeToConfig.
  </summary>
</histogram>

<histogram name="Network.TimeToConfig.Ethernet" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS network performance metric sampling the time to join a wired
    Ethernet network and configure Layer 3 state (typically acquire a DHCP
    lease). Note this metric is deprecated; see Network.Ethernet.TimeToConfig.
  </summary>
</histogram>

<histogram name="Network.TimeToConfig.Wifi" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS network performance metric sampling the time to configure Layer 3
    state on an 802.11 wireless network (typically acquire a DHCP lease). Note
    this metric is deprecated; see Network.Wifi.TimeToConfig.
  </summary>
</histogram>

<histogram name="Network.TimeToDrop" units="seconds">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS network stability metric sampling the time in seconds between the
    networking going online to going offline. Offline events due to device
    shutdown or suspend are ignored (along with the online time before that
    offline event).
  </summary>
</histogram>

<histogram name="Network.TimeToJoin.Wifi" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS network performance metric sampling the time to join (associate
    plus authenticate) an 802.11 wireless network. Note this metric is
    deprecated; see Network.Wifi.TimeToJoin.
  </summary>
</histogram>

<histogram name="Network.URLLoader.BodyReadFromNetBeforePaused" units="bytes">
  <owner>yzshen@chromium.org</owner>
  <summary>
    How much, in bytes, of the response body has been read from network by a
    URLLoader before it pauses reading, when it receives a
    PauseReadingBodyFromNet() call. If there are multiple calls to
    PauseReadingBodyFromNet(), only a single value is recorded for the last
    call. This histogram is recorded by URLLoader implementations that fetch
    from network. When SafeBrowsing indicates that a resource may be unsafe and
    therefore a more time-consuming check is required to classify it, reading
    response body from network is paused in order to reduce the chance of
    writing unsafe contents into cache. This histogram is useful to evaluate how
    much data is cached during this window.
  </summary>
</histogram>

<histogram name="Network.Wifi.AuthMode" enum="NetworkAuthModeType">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS network performance metric sampling the time to configure Layer 3
    state on an 802.11 wireless network (typically acquire a DHCP lease).
  </summary>
</histogram>

<histogram name="Network.Wifi.BitRate" units="bps">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Network metric reporting the download speed test results run at setup time.
    Recorded at least once per day.
  </summary>
</histogram>

<histogram name="Network.Wifi.Channel" enum="NetworkChannelType">
  <owner>cast-analytics@google.com</owner>
  <summary>
    Chrome OS network usage metric.  The channel used for each successful WiFi
    connection.
  </summary>
</histogram>

<histogram name="Network.Wifi.PhyMode" enum="NetworkPhyModeType">
  <owner>cast-analytics@google.com</owner>
  <summary>
    Chrome OS network usage metric.  The channel type used for each successful
    WiFi connection.
  </summary>
</histogram>

<histogram name="Network.Wifi.RoundTripTime" units="ms">
  <owner>cast-analytics@google.com</owner>
  <summary>
    Network metric reporting the average round trip time to the WiFi gateway.
    Recorded at least once per day.
  </summary>
</histogram>

<histogram name="Network.Wifi.Security" enum="NetworkSecurityType">
  <owner>cast-analytics@google.com</owner>
  <summary>
    Chrome OS network usage metric.  The security setting for each successful
    WiFi connection.
  </summary>
</histogram>

<histogram name="Network.Wifi.TimeOnline" units="seconds">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS network metric sampling the time spent using WiFi to transport
    data.  These data are mostly useful when summed and compared to TimeOnline
    for other network technologies (e.g. WiFi vs Cellular).
  </summary>
</histogram>

<histogram name="Network.Wifi.TimeResumeToReady" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS network performance metric sampling the time from the resume event
    to the time when an 802.11 wireless network has configured its Layer 3
    state.
  </summary>
</histogram>

<histogram name="Network.Wifi.TimeToConfig" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS network performance metric sampling the time to configure Layer 3
    state on an 802.11 wireless network (typically acquire a DHCP lease).
  </summary>
</histogram>

<histogram name="Network.Wifi.TimeToJoin" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS network performance metric sampling the time to join (associate
    plus authenticate) an 802.11 wireless network.
  </summary>
</histogram>

<histogram name="Network.Wifi.TimeToOnline" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS network performance metric sampling the time to determine that an
    802.11 wireless network is online after configuring Layer 3 state.
  </summary>
</histogram>

<histogram name="Network.Wifi.TimeToPortal" units="ms">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS network performance metric sampling the time to determine that an
    802.11 wireless network is in a captive portal after configuring Layer 3
    state.
  </summary>
</histogram>

<histogram name="Networks.RememberedShared">
  <owner>stevenjb@chromium.org</owner>
  <summary>
    Number of shared remembered (preferred) networks on Chrome OS. Updated any
    time the network list changes.
  </summary>
</histogram>

<histogram name="Networks.RememberedUnshared">
  <owner>stevenjb@chromium.org</owner>
  <summary>
    Number of private remembered (preferred) networks on Chrome OS. Updated any
    time the network list changes.
  </summary>
</histogram>

<histogram name="Networks.Visible">
  <owner>stevenjb@chromium.org</owner>
  <summary>
    Number of visible (in-range) networks on Chrome OS. Updated any time the
    network list changes.
  </summary>
</histogram>

<histogram name="NetworkService.ShutdownTime" units="ms">
  <owner>jam@chromium.org</owner>
  <summary>
    How long the browser waits for the network process to exit at shutdown.
  </summary>
</histogram>

<histogram name="NetworkTimeTracker.ClockDivergence.Negative" units="seconds">
  <owner>estark@chromium.org</owner>
  <owner>mab@chromium.org</owner>
  <summary>
    NetworkTimeTracker observes a tick clock and a wall clock to determine
    whether a timestamp retrieved from the network in the past can be used to
    compute a current timestamp. When the tick clock and wall clock diverge from
    each other, the NetworkTimeTracker must discard the network timestamp
    because it has no way to compute a reliable current timestamp. Whenever the
    NetworkTimeTracker discards a network timestamp due to the tick and wall
    clocks diverging, this histogram records the difference of the tick clock's
    delta minus the wall clock's delta since the network timestamp was
    retrieved. For cases where the the tick clock delta is bigger than the wall
    clock delta, see NetworkTimeTracker.ClockDivergence.Positive.
  </summary>
</histogram>

<histogram name="NetworkTimeTracker.ClockDivergence.Positive" units="seconds">
  <owner>estark@chromium.org</owner>
  <owner>mab@chromium.org</owner>
  <summary>
    NetworkTimeTracker observes a tick clock and a wall clock to determine
    whether a timestamp retrieved from the network in the past can be used to
    compute a current timestamp. When the tick clock and wall clock diverge from
    each other, the NetworkTimeTracker must discard the network timestamp
    because it has no way to compute a reliable current timestamp. Whenever the
    NetworkTimeTracker discards a network timestamp due to the tick and wall
    clocks diverging, this histogram records the difference of the tick clock's
    delta minus the wall clock's delta since the network timestamp was
    retrieved. For cases where the the wall clock delta is bigger than the tick
    clock delta, see NetworkTimeTracker.ClockDivergence.Negative.
  </summary>
</histogram>

<histogram name="NetworkTimeTracker.TimeBetweenFetches" units="ms">
  <owner>estark@chromium.org</owner>
  <owner>mab@chromium.org</owner>
  <summary>
    NetworkTimeTracker makes periodic queries to obtain a secure timestamp over
    the network. This histogram records the delta between each secure timestamp
    and the previous one, to measure how often time queries are made. The first
    time query is not recorded, because there is no previous query from which to
    compute a delta.
  </summary>
</histogram>

<histogram name="NetworkTimeTracker.TimeQueryLatency" units="ms">
  <owner>estark@chromium.org</owner>
  <owner>mab@chromium.org</owner>
  <summary>
    NetworkTimeTracker makes periodic queries to obtain a secure timestamp over
    the network. This histogram records the latency of each time query.
  </summary>
</histogram>

<histogram name="NetworkTimeTracker.UpdateTimeFetchAttempted">
  <obsolete>
    Deprecated 08/2016 because it does not provide additional information beyond
    NetworkTimeTracker.UpdateTimeFetchFailed and
    NetworkTimeTracker.UpdateTimeFetchValid.
  </obsolete>
  <owner>estark@chromium.org</owner>
  <owner>mab@chromium.org</owner>
  <summary>
    NetworkTimeTracker makes periodic queries to obtain a secure timestamp over
    the network. This histogram increments whenever such a query is attempted.
  </summary>
</histogram>

<histogram name="NetworkTimeTracker.UpdateTimeFetchFailed" enum="NetErrorCodes">
  <owner>estark@chromium.org</owner>
  <owner>mab@chromium.org</owner>
  <summary>
    NetworkTimeTracker makes periodic queries to obtain a secure timestamp over
    the network. This histogram records the request's net error code whenever a
    secure timestamp fetch results in a network error or a non-200 HTTP status
    code.
  </summary>
</histogram>

<histogram name="NetworkTimeTracker.UpdateTimeFetchValid" enum="BooleanValid">
  <owner>estark@chromium.org</owner>
  <owner>mab@chromium.org</owner>
  <summary>
    NetworkTimeTracker makes periodic queries to obtain a secure timestamp over
    the network. Whenever one of these requests results in a successful 200
    status code, this histogram records true if the response parsed and
    validated successfully, and false otherwise.
  </summary>
</histogram>

<histogram name="NetworkTimeTracker.WallClockRanBackwards" units="seconds">
  <owner>estark@chromium.org</owner>
  <owner>mab@chromium.org</owner>
  <summary>
    NetworkTimeTracker observes a tick clock and a wall clock to determine
    whether a timestamp retrieved from the network in the past can be used to
    compute a current timestamp. When the NetworkTimeTracker observes that the
    wall clock ran backwards, the NetworkTimeTracker must discard the network
    timestamp because it has no way to compute a reliable current timestamp.
    Whenever the NetworkTimeTracker discards a network timestamp due to the wall
    clock running backwards, this histogram records the magnitude of the
    difference of the current wall clock time minus the wall clock time when the
    network timestamp was retrieved.
  </summary>
</histogram>

<histogram name="NewTabPage.ActionAndroid" enum="NewTabPageActionAndroid">
  <obsolete>
    Deprecated as of 01/2017. Replaced by NewTabPage.ActionAndroid2.
  </obsolete>
  <owner>newt@chromium.org</owner>
  <summary>
    Actions taken by users from the new tab page on Android. These actions may
    navigate away from the NTP (e.g. searching in the omnibox or opening a
    bookmark), but can also happen without navigating away from the NTP (e.g.
    opening a bookmark in a new tab).
  </summary>
</histogram>

<histogram name="NewTabPage.ActionAndroid2" enum="NewTabPageActionAndroid2">
  <owner>finkm@chromium.org</owner>
  <summary>
    Actions taken from the new tab page on Android. These actions may navigate
    away from the NTP (e.g. searching in the omnibox or opening a bookmark), but
    can also happen without navigating away from the NTP (e.g. opening a content
    suggestion in a new tab).
  </summary>
</histogram>

<histogram name="NewTabPage.ActioniOS" enum="NewTabPageActioniOS">
  <owner>justincohen@chromium.org</owner>
  <summary>
    Actions taken by users from the new tab page on iOS. These actions may
    navigate away from the NTP (e.g. searching in the omnibox or opening a
    bookmark), but can also happen without navigating away from the NTP (e.g.
    opening a bookmark in a new tab).
  </summary>
</histogram>

<histogram name="NewTabPage.AnimatedLogoDownloadTime" units="ms">
  <owner>treib@chromium.org</owner>
  <summary>
    The amount of time it takes to download the animated logo. Android only.
  </summary>
</histogram>

<histogram name="NewTabPage.AppsPageDragSource" enum="AppsPageDragSource"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Histogram for the source of app page drags. For any succesful drop onto an
    apps pane of the NTP, this logs where the drag originated.
  </summary>
</histogram>

<histogram name="NewTabPage.BackgroundService.Albums.RequestLatency" units="ms"
    expires_after="M74">
  <owner>ramyan@chromium.org</owner>
  <owner>yyushkina@chromium.org</owner>
  <summary>
    The time it took until a request from the New Tab Page for Google Photos
    albums was served.
  </summary>
</histogram>

<histogram name="NewTabPage.BackgroundService.Collections.RequestLatency"
    units="ms" expires_after="M74">
  <owner>ramyan@chromium.org</owner>
  <owner>yyushkina@chromium.org</owner>
  <summary>
    The time it took until a request from the New Tab Page for Backdrop
    Collections was served.
  </summary>
</histogram>

<histogram name="NewTabPage.BackgroundService.Images.RequestLatency" units="ms"
    expires_after="M74">
  <owner>ramyan@chromium.org</owner>
  <owner>yyushkina@chromium.org</owner>
  <summary>
    The time it took until a request from the New Tab Page for Backdrop Images
    was served.
  </summary>
</histogram>

<histogram name="NewTabPage.BackgroundService.Photos.RequestLatency" units="ms"
    expires_after="M74">
  <owner>ramyan@chromium.org</owner>
  <owner>yyushkina@chromium.org</owner>
  <summary>
    The time it took until a request from the New Tab Page for Google Photos (in
    a specific album) was served.
  </summary>
</histogram>

<histogram name="NewTabPage.BookmarkActionAndroid"
    enum="NewTabPageBookmarkActionAndroid">
  <obsolete>
    Deprecated on M33 with the change to native NTP.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Actions taken by users on partner bookmarks (editing / renaming) on the NTP
    on Android.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.ArticleFaviconFetchResult"
    enum="FaviconFetchResult">
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Android: Result of fetching a favicon for an article suggestion on the New
    Tab Page.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.ArticleFaviconFetchTime"
    units="ms">
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Android: Time it takes to fetch a favicon for an article suggestion on the
    New Tab Page.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.ArticlesListVisible"
    enum="BooleanVisible">
  <owner>huayinz@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Android: Whether article suggestions on New Tab Page are set visible by user
    on startup and when the visibility is changed.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.BackgroundFetchTrigger"
    enum="BackgroundFetchTrigger">
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Android: The type of trigger that caused a background fetch of NTP content
    suggestions from a suggestion server. Every background fetch is recorded.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.BreakingNews.MessageReceived"
    enum="ContentSuggestionsBreakingNewsMessageContainsNews">
  <obsolete>
    Deprecated in October 2017 (M64) and replaced by
    NewTabPage.ContentSuggestions.BreakingNews.ReceivedMessageAction, when
    adding support for push-to-refresh messages.
  </obsolete>
  <owner>vitaliii@chromium.org</owner>
  <summary>
    Android: Number of received messages and whether they contain pushed news. A
    message contains pushed news if the payload key exists in the message. The
    payload content is not checked at all (e.g. it may be empty). Recorded when
    a message is received.
  </summary>
</histogram>

<histogram
    name="NewTabPage.ContentSuggestions.BreakingNews.ReceivedMessageAction"
    enum="ContentSuggestionsBreakingNewsMessageAction">
  <owner>mamir@chromium.org</owner>
  <summary>
    Android: Action of a received message. An action can be either push-by-value
    or push-to-refresh. A message with a missing or invalid action is recorded
    as well. Recorded when a message is received.
  </summary>
</histogram>

<histogram
    name="NewTabPage.ContentSuggestions.BreakingNews.SubscriptionRequestStatus"
    enum="ContentSuggestionsStatusCode">
  <owner>vitaliii@chromium.org</owner>
  <summary>
    Android: The result of a subscription request for breaking news at the
    content suggestions server. Recorded when a request finishes. Analogous to
    NewTabPage.ContentSuggestions.BreakingNews.UnsubscriptionRequestStatus.
  </summary>
</histogram>

<histogram
    name="NewTabPage.ContentSuggestions.BreakingNews.TimeSinceLastTokenValidation"
    units="ms">
  <owner>vitaliii@chromium.org</owner>
  <summary>
    Android: Time between a token validation and the last successful token
    retrieval from InstanceID. Recorded when InstanceID answers our token
    request for a validation either with a token or an error. If the token was
    never received before the validation, the metric is not recorded.
  </summary>
</histogram>

<histogram
    name="NewTabPage.ContentSuggestions.BreakingNews.TokenRetrievalResult"
    enum="InstanceIDResult">
  <owner>vitaliii@chromium.org</owner>
  <summary>
    Android: The result of our inquiry to InstanceID to receive the current
    token. Recorded when InstanceID replies to our inquiry for a token
    (including for a validation).
  </summary>
</histogram>

<histogram
    name="NewTabPage.ContentSuggestions.BreakingNews.UnsubscriptionRequestStatus"
    enum="ContentSuggestionsStatusCode">
  <owner>vitaliii@chromium.org</owner>
  <summary>
    Android: The result of an unsubscription request for breaking news at the
    content suggestions server. Recorded when a request finishes. Analogous to
    NewTabPage.ContentSuggestions.BreakingNews.SubscriptionRequestStatus.
  </summary>
</histogram>

<histogram
    name="NewTabPage.ContentSuggestions.BreakingNews.WasTokenValidBeforeValidation"
    enum="ContentSuggestionsBreakingNewsTokenValidationOutcome">
  <owner>vitaliii@chromium.org</owner>
  <summary>
    Android: Whether a token validation detected an invalid token. This is
    recorded only for validations where no error occured and the token was
    actually retrieved.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.CategoryDismissed"
    enum="ContentSuggestionsCategory">
  <owner>treib@chromium.org</owner>
  <summary>
    Android: A category of content suggestions that was dismissed (by swiping
    away its empty state card).
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.CountOnNtpOpened">
  <obsolete>
    Deprecated in July 2017. This metric was replaced by
    CountOnNtpOpenedIfVisible. Initially the metric was not recorded properly if
    any category was not visible. This was fixed in
    https://codereview.chromium.org/2874213002/, however, not visible categories
    still were polluting the metric (they were recorded as showing 0
    suggestions).
  </obsolete>
  <owner>treib@chromium.org</owner>
  <summary>
    Android: The number of suggestion cards that were available at the time an
    NTP was opened.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.CountOnNtpOpenedIfVisible">
  <owner>vitaliii@chromium.org</owner>
  <summary>
    Android: The number of suggestion cards that were available at the time an
    NTP was opened. Only visible categories (i.e. which can be seen by the user
    on this NTP) are recorded, including empty ones.
  </summary>
</histogram>

<histogram
    name="NewTabPage.ContentSuggestions.CountOnNtpOpenedIfVisible.Articles.Prefetched.Offline">
  <obsolete>
    Deprecated in October 2017 (M63) and replaced by
    CountOnNtpOpenedIfVisible.Articles.Prefetched.Offline2, because
    underreported. UI checked whether a URL is prefetched asynchronously. As a
    result, there was a race condition and this metric could be reported before
    all URLs are checked.
  </obsolete>
  <owner>vitaliii@chromium.org</owner>
  <summary>
    Android: The number of prefetched suggestion cards that were available in
    Articles category if it was visible at the time an NTP was opened and the
    user was offline. Analogous to
    NewTabPage.ContentSuggestions.CountOnNtpOpenedIfVisible.
  </summary>
</histogram>

<histogram
    name="NewTabPage.ContentSuggestions.CountOnNtpOpenedIfVisible.Articles.Prefetched.Offline2"
    units="suggestions">
  <owner>vitaliii@chromium.org</owner>
  <summary>
    Android: The number of prefetched suggestion cards that were available in
    Articles category if it was visible at the time an NTP was opened and the
    user was offline. Analogous to
    NewTabPage.ContentSuggestions.CountOnNtpOpenedIfVisible, except that this
    metric is reported after all URL prefetched asynchronous checks finish.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.DismissedUnvisited"
    units="index">
  <owner>treib@chromium.org</owner>
  <summary>
    Android: The position of a suggestion card on the NTP that is dismissed,
    typically by swiping it away. The suggestion had a URL that was NOT visited
    before. We track the position the card had in the list when it was first
    seen by the user. This tracked position can be different from the position
    observed by the user, e.g. when the user dismissed some suggestions from the
    list or requested more that got inserted in the middle of the feed.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.DismissedVisited" units="index">
  <owner>treib@chromium.org</owner>
  <summary>
    Android: The position of a suggestion card on the NTP that is dismissed,
    typically by swiping it away. The suggestion had a URL that was visited
    before. We track the position the card had in the list when it was first
    seen by the user. This tracked position can be different from the position
    observed by the user, e.g. when the user dismissed some suggestions from the
    list or requested more that got inserted in the middle of the feed.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.MenuOpened" units="index">
  <owner>treib@chromium.org</owner>
  <summary>
    Android: The position of a suggestion card whose long-press menu was opened,
    analogous to NewTabPage.ContentSuggestions.Opened.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.MenuOpenedAge" units="ms">
  <owner>treib@chromium.org</owner>
  <summary>
    Android: The age of a suggestion card on the NTP whose long-press menu was
    opened, analogous to NewTabPage.ContentSuggestions.OpenedAge.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.MenuOpenedScore" units="score">
  <obsolete>
    Replaced by NewTabPage.ContentSuggestions.MenuOpenedScoreNormalized.
  </obsolete>
  <owner>treib@chromium.org</owner>
  <summary>
    Android: The relevance score of a suggestion card on the NTP whose
    long-press menu was opened, analogous to
    NewTabPage.ContentSuggestions.OpenedScore.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.MenuOpenedScoreNormalized"
    enum="NormalizedScore">
  <owner>tschumann@chromium.org</owner>
  <summary>
    Android: The relevance score of a suggestion card on the NTP whose
    long-press menu was opened, analogous to
    NewTabPage.ContentSuggestions.OpenedScoreNormalized. Scores (which are
    typically floats within (0,1]) get reported as discrete integers within
    [1,10]. For instance, the discrete value 1 represents score values from
    (0.0, 0.1]. The discrete value 11 is the overflow bucket for unexpectedly
    high scores.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.MoreButtonClicked" units="index">
  <owner>treib@chromium.org</owner>
  <summary>
    Android: The position of a &quot;More&quot; suggestion card that was clicked
    on the NTP. A card is considered shown when at least 2/3 of its height is
    visible on the screen. We track the position the card had in the list when
    it was first seen by the user. This tracked position can be different from
    the position observed by the user, e.g. when the user dismissed some
    suggestions from the list or requested more that got inserted in the middle
    of the feed.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.MoreButtonShown" units="index">
  <owner>treib@chromium.org</owner>
  <summary>
    Android: The position of a &quot;More&quot; suggestion card that was shown
    on the NTP. A card is considered shown when at least 2/3 of its height is
    visible on the screen. For each card, at most one impression is recorded per
    NTP instance. We track the position the card had in the list when it was
    first seen by the user. This tracked position can be different from the
    position observed by the user, e.g. when the user dismissed some suggestions
    from the list or requested more that got inserted in the middle of the feed.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.MovedUpCategoryNewIndex"
    units="index">
  <owner>vitaliii@chromium.org</owner>
  <summary>
    Android: The new index of a category on the NTP after it has been moved up
    due to a click. The index of a category, which has been overtaken, is not
    recorded here. This tracked index can be different from the position
    observed by the user, e.g. empty categories are not shown. This metric
    ignores all other order changes (e.g. dismissing a category or clearing
    history).
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.Notifications.Actions"
    enum="ContentSuggestionsNotificationsAction">
  <owner>sfiera@chromium.org</owner>
  <summary>
    Android: The number of actions taken on displayed notifications, either
    user-initiated (tapping to open or swiping to dismiss), or automatic (hiding
    due to a change in circumstances).
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.Notifications.AutoOptOuts"
    enum="ContentSuggestionsNotificationsOptOut">
  <owner>sfiera@chromium.org</owner>
  <summary>
    Android: The number of times a user opted out, keyed by method: IMPLICIT
    (user ignored enough notifications consecutively that we think they're not
    interested), or EXPLICIT (via explicit setting).
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.Notifications.Impressions"
    enum="ContentSuggestionsNotificationsImpression">
  <owner>sfiera@chromium.org</owner>
  <summary>
    Android: The number of notifications that were shown, keyed by category. One
    bucket counts the server-provided ARTICLES category; the other counts
    everything else.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.OpenDisposition"
    enum="WindowOpenDisposition">
  <owner>treib@chromium.org</owner>
  <summary>
    Android: How an article linked from a suggestion card on the NTP was opened
    (e.g. plain click, open in new tab, open in incognito).
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.Opened" units="index">
  <owner>treib@chromium.org</owner>
  <summary>
    Android: The position of the suggestion card on the NTP, that is clicked
    through to the host website of the content. We track the position the card
    had in the list when it was first seen by the user. This tracked position
    can be different from the position observed by the user, e.g. when the user
    dismissed some suggestions from the list or requested more that got inserted
    in the middle of the feed.
  </summary>
</histogram>

<histogram
    name="NewTabPage.ContentSuggestions.Opened.Articles.Prefetched.Offline"
    units="index">
  <owner>vitaliii@chromium.org</owner>
  <summary>
    Android: The position of the prefetched suggestion card on the NTP, that is
    clicked through to the host website of the content, when the user is
    offline. Analogous to NewTabPage.ContentSuggestions.Opened. That is we track
    the position the card had in the list when it was first seen by the user.
    This tracked position can be different from the position observed by the
    user, e.g. when the user dismissed some suggestions from the list or
    requested more that got inserted in the middle of the feed.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.OpenedAge" units="ms">
  <owner>treib@chromium.org</owner>
  <summary>
    Android: The age of a suggestion card on the NTP that is clicked through to
    the host website of the content. The age is measured from the moment the
    content has been published.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.OpenedCategoryIndex"
    units="index">
  <owner>vitaliii@chromium.org</owner>
  <summary>
    Android: The index of a category on the NTP, whose suggestion card is
    clicked through to the host website of the content. This tracked index can
    be different from the position observed by the user, e.g. for the user a
    category may be at the top of the NTP, but with index 1, because they
    dismissed the one that was previously at the top.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.OpenedScore" units="score">
  <obsolete>
    Replaced by NewTabPage.ContentSuggestions.OpenedScoreNormalized.
  </obsolete>
  <owner>treib@chromium.org</owner>
  <summary>
    Android: The score of a suggestion card on the NTP that is clicked through
    to the host website of the content. The recorded score is from the moment
    the suggestion was fetched, it could have changed since.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.OpenedScoreNormalized"
    enum="NormalizedScore">
  <owner>tschumann@chromium.org</owner>
  <summary>
    Android: The score of a suggestion card on the NTP that is clicked through
    to the host website of the content. The recorded score is from the moment
    the suggestion was fetched, it could have changed since. Scores (which are
    typically floats within (0,1]) get reported as discrete integers within
    [1,10]. For instance, the discrete value 1 represents score values from
    (0.0, 0.1]. The discrete value 11 is the overflow bucket for unexpectedly
    high scores.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.Preferences.RemoteSuggestions"
    enum="BooleanEnabled">
  <owner>dgn@chromium.org</owner>
  <owner>finkm@chromium.org</owner>
  <summary>
    Whether content suggestions from the remote service are enabled. It is
    recored at startup. Note: This histogram is not specific to the New Tab
    Page.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.SectionCountOnNtpOpened"
    units="sections">
  <owner>vitaliii@chromium.org</owner>
  <summary>
    Android: The number of suggestion sections that were shown at the time an
    NTP was opened. All shown sections (including empty ones) are counted.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.Shown" units="index">
  <owner>treib@chromium.org</owner>
  <summary>
    Android: The position of a suggestion card that was shown on the NTP. A card
    is considered shown when at least 2/3 of its height is visible on the
    screen. For each card, at most one impression is recorded per NTP instance.
    We track the position the card had in the list when it was first seen by the
    user. This tracked position can be different from the position observed by
    the user, e.g. when the user dismissed some suggestions from the list or
    requested more that got inserted in the middle of the feed.
  </summary>
</histogram>

<histogram
    name="NewTabPage.ContentSuggestions.Shown.Articles.Prefetched.Offline"
    units="index">
  <obsolete>
    Deprecated in October 2017 (M63) and replaced by
    Shown.Articles.Prefetched.Offline2, because underreported. UI checked
    whether a URL is prefetched asynchronously. As a result, there was a race
    condition and for suggestions immediately visible on the suggestions surface
    this metric could be reported before their URLs are actually checked.
  </obsolete>
  <owner>vitaliii@chromium.org</owner>
  <summary>
    Android: The position of a prefetched suggestion card that was shown on the
    NTP when offline. Analogous to NewTabPage.ContentSuggestions.Shown. That is
    a card is considered shown when at least 2/3 of its height is visible on the
    screen. For each card, at most one impression is recorded per NTP instance.
    We track the position the card had in the list when it was first seen by the
    user. This tracked position can be different from the position observed by
    the user, e.g. when the user dismissed some suggestions from the list or
    requested more that got inserted in the middle of the feed.
  </summary>
</histogram>

<histogram
    name="NewTabPage.ContentSuggestions.Shown.Articles.Prefetched.Offline2"
    units="index">
  <owner>vitaliii@chromium.org</owner>
  <summary>
    Android: The position of a prefetched suggestion card that was shown on the
    NTP when offline. Analogous to NewTabPage.ContentSuggestions.Shown. That is
    a card is considered shown when at least 2/3 of its height is visible on the
    screen. For each card, at most one impression is recorded per NTP instance.
    We track the position the card had in the list when it was first seen by the
    user. This tracked position can be different from the position observed by
    the user, e.g. when the user dismissed some suggestions from the list or
    requested more that got inserted in the middle of the feed. This metric is
    reported not immediately after the impression, but once the request to
    Offline Page model to check the URL finishes.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.ShownAge" units="ms">
  <owner>treib@chromium.org</owner>
  <summary>
    Android: The age of a suggestion card that was shown on the NTP. A card is
    considered shown when at least 2/3 of its height is visible on the screen.
    For each card, at most one impression is recorded per NTP instance.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.ShownScore" units="score">
  <obsolete>
    Replaced by NewTabPage.ContentSuggestions.ShownScoreNormalized.
  </obsolete>
  <owner>treib@chromium.org</owner>
  <summary>
    Android: The score of a suggestion card that was shown on the NTP. A card is
    considered shown when at least 2/3 of its height is visible on the screen.
    For each card, at most one impression is recorded per NTP instance.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.ShownScoreNormalized"
    enum="NormalizedScore">
  <owner>tschumann@chromium.org</owner>
  <summary>
    Android: The score of a suggestion card that was shown on the NTP. A card is
    considered shown when at least 2/3 of its height is visible on the screen.
    For each card, at most one impression is recorded per NTP instance. Scores
    (which are typically floats within (0,1]) get reported as discrete integers
    within [1,10]. For instance, the discrete value 1 represents score values
    from (0.0, 0.1]. The discrete value 11 is the overflow bucket for
    unexpectedly high scores.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.TimeSinceLastBackgroundFetch"
    units="ms">
  <obsolete>
    Replaced by NewTabPage.ContentSuggestions.TimeSinceSuggestionFetched.
  </obsolete>
  <owner>markusheintz@chromium.org</owner>
  <summary>
    Android: The time since the last successful background fetch of remote
    content suggestions. Recorded when the user looks at content suggestions on
    the NTP.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.TimeSinceSuggestionFetched"
    units="ms">
  <owner>markusheintz@chromium.org</owner>
  <summary>
    Android: The time since the displayed content suggestions was fetched.
    Recorded when the user looks at content suggestions on the NTP. The metric
    is only recorded for suggestions of the Articles for you section.
  </summary>
</histogram>

<histogram base="true"
    name="NewTabPage.ContentSuggestions.TimeUntilFirstShownTrigger" units="ms">
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Android: The time since the last fetch, recorded upon the first on-shown
    fetch trigger. The first on-shown trigger does not necessarily cause a fetch
    (if it comes before the end of the respective scheduling interval). This
    metric is recorded at most once after each fetch (and additionaly at most
    once after each startup of Chrome before the next fetch). This is used to
    understand how changing scheduling intervals will impact traffic of
    background fetches.
  </summary>
</histogram>

<histogram base="true"
    name="NewTabPage.ContentSuggestions.TimeUntilFirstSoftTrigger" units="ms">
  <obsolete>
    Deprecated as of July 2017, in favor of
    NewTabPage.ContentSuggestions.TimeUntilFirstShownTrigger and
    NewTabPage.ContentSuggestions.TimeUntilFirstStartupTrigger.
  </obsolete>
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Android: The time since the last fetch, recorded upon the first soft fetch
    trigger. The first soft trigger does not necessarily cause a fetch (if it
    comes before the end of the respective scheduling interval). This metric is
    recorded at most once after each fetch (and additionaly at most once after
    each startup of Chrome before the next fetch). This is used to understand
    how changing scheduling intervals will impact traffic of background fetches.
  </summary>
</histogram>

<histogram base="true"
    name="NewTabPage.ContentSuggestions.TimeUntilFirstStartupTrigger"
    units="ms">
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Android: The time since the last fetch, recorded upon the first startup
    fetch trigger. The first startup trigger does not necessarily cause a fetch
    (if it comes before the end of the respective scheduling interval). This
    metric is recorded at most once after each fetch (and additionaly at most
    once after each startup of Chrome before the next fetch). This is used to
    understand how changing scheduling intervals will impact traffic of
    background fetches.
  </summary>
</histogram>

<histogram base="true"
    name="NewTabPage.ContentSuggestions.TimeUntilPersistentFetch" units="ms">
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Android: The time since the last fetch, recorded upon a persistent fetch.
    This is used to understand what are the real persistent fetching intervals
    in the wild.
  </summary>
</histogram>

<histogram base="true" name="NewTabPage.ContentSuggestions.TimeUntilSoftFetch"
    units="ms">
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Android: The time since the last fetch, recorded upon a soft fetch. This is
    used to understand what are the real soft fetching intervals in the wild.
  </summary>
</histogram>

<histogram base="true"
    name="NewTabPage.ContentSuggestions.TimeUntilStartupFetch" units="ms">
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Android: The time since the last fetch, recorded upon a startup fetch. This
    is used to understand what are the real soft fetching intervals in the wild.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.UIUpdateResult"
    enum="ContentSuggestionsUIUpdateResult">
  <obsolete>
    Replaced by NewTabPage.ContentSuggestions.UIUpdateResult2 in January 2017.
  </obsolete>
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Android: The result of updating the list of content suggestions in the UI.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.UIUpdateResult2"
    enum="ContentSuggestionsUIUpdateResult2">
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Android: The result of updating the list of content suggestions in one UI
    section.
  </summary>
</histogram>

<histogram
    name="NewTabPage.ContentSuggestions.UIUpdateSuccessNumberOfSuggestionsSeen"
    units="suggestions">
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Android: The number of content suggestions that have been seen by the user
    in the UI section before the section was successfully updated. The seen
    suggestions were not removed in the update so that we do not change visible
    parts of the UI. This histogram is only recorded when the UIUpdateResult2 is
    &quot;Success (some suggestions replaced)&quot;.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.UsageTimeLocal">
  <owner>markusheintz@chromium.org</owner>
  <summary>
    Android: The time of day (in the local timezone) when the user used content
    suggestions. Recorded for example when the user scrolls to the articles
    suggestions or opens an article suggestions.
  </summary>
</histogram>

<histogram name="NewTabPage.ContentSuggestions.VisitDuration" units="ms">
  <owner>treib@chromium.org</owner>
  <summary>
    Android: Time spent reading the page linked by an opened suggestion card.
    Exit conditions include the tab not being in the foreground or starting a
    new navigation.
  </summary>
</histogram>

<histogram name="NewTabPage.CustomizationAvailability.Backgrounds"
    enum="NTPBackgroundCustomizationAvailability" expires_after="M74">
  <owner>ramyan@chromium.org</owner>
  <owner>yyushkina@chromium.org</owner>
  <summary>
    The availability of New Tab Page background customization features on
    Desktop, based on feature flags or other configuration settings; logged per
    NTP load.
  </summary>
</histogram>

<histogram name="NewTabPage.CustomizationAvailability.Shortcuts"
    enum="NTPShortcutCustomizationAvailability" expires_after="M74">
  <owner>ramyan@chromium.org</owner>
  <owner>yyushkina@chromium.org</owner>
  <summary>
    The availability of New Tab Page shortcut customization features on Desktop,
    based on feature flags or other configuration settings; logged per NTP load.
  </summary>
</histogram>

<histogram name="NewTabPage.CustomizeAction" enum="NTPCustomizeAction"
    expires_after="M74">
  <owner>ramyan@chromium.org</owner>
  <owner>yyushkina@chromium.org</owner>
  <summary>
    Customization actions performed by the user on the New Tab Page; logged as
    each interaction occurs. This may indicate popularity of a particular
    customization type.
  </summary>
</histogram>

<histogram name="NewTabPage.CustomizeChromeBackgroundAction"
    enum="NTPCustomizeChromeBackgroundAction" expires_after="M74">
  <owner>ramyan@chromium.org</owner>
  <owner>yyushkina@chromium.org</owner>
  <summary>
    Captures the actions performed when configuring a 'Chrome background' image
    on the New Tab Page. Since most actions are sequential, this may indicate
    steps in the configuration process where users drop off.
  </summary>
</histogram>

<histogram name="NewTabPage.Customized" enum="NTPCustomizedFeatures"
    expires_after="M74">
  <owner>ramyan@chromium.org</owner>
  <owner>yyushkina@chromium.org</owner>
  <summary>
    The New Tab Page features that have been customized by the user; logged per
    NTP load.
  </summary>
</histogram>

<histogram name="NewTabPage.CustomizeLocalImageBackgroundAction"
    enum="NTPCustomizeLocalImageBackgroundAction" expires_after="M74">
  <owner>ramyan@chromium.org</owner>
  <owner>yyushkina@chromium.org</owner>
  <summary>
    Captures the actions performed when uploading a local image as the
    background on the New Tab Page. Since most actions are sequential, this may
    indicate steps in the configuration process where users drop off.
  </summary>
</histogram>

<histogram name="NewTabPage.CustomizeShortcutAction"
    enum="NTPCustomizeShortcutAction" expires_after="M74">
  <owner>ramyan@chromium.org</owner>
  <owner>yyushkina@chromium.org</owner>
  <summary>
    Captures the actions performed when configuring shortcuts on the New Tab
    Page.
  </summary>
</histogram>

<histogram name="NewTabPage.DefaultPageType" enum="NtpPaneType">
  <obsolete>
    Deprecated 2016-02.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The default pane when the NTP is first opened.</summary>
</histogram>

<histogram name="NewTabPage.HoverTimeClicked">
  <obsolete>
    Deprecated 2016-02 (and not recorded for some time before that).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Histogram of the time, in milliseconds, users have the cursor over a most
    visited thumbnail before clicking.
  </summary>
</histogram>

<histogram name="NewTabPage.HoverTimeNotClicked">
  <obsolete>
    Deprecated 2016-02 (and not recorded for some time before that).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Histogram of the time, in milliseconds, users have the cursor over a most
    visited thumbnail before moving it away from the thumbnail without clicking.
  </summary>
</histogram>

<histogram name="NewTabPage.IconsColor">
  <obsolete>
    Deprecated 2017-04, replaced by NewTabPage.TileType and
    NewTabPage.SuggestionsImpression.IconsColor.
  </obsolete>
  <owner>newt@chromium.org</owner>
  <summary>
    The number of most visited tiles on the new tab page that are displayed
    using a fallback color (as opposed to having an icon, or simply being gray).
    Android only.
  </summary>
</histogram>

<histogram name="NewTabPage.IconsGray">
  <obsolete>
    Deprecated 2017-04, replaced by NewTabPage.TileType and
    NewTabPage.SuggestionsImpression.IconsGray.
  </obsolete>
  <owner>newt@chromium.org</owner>
  <summary>
    The number of most visited tiles on the new tab page that are displayed as
    gray (as opposed to having an icon, or a fallback color). Android only.
  </summary>
</histogram>

<histogram name="NewTabPage.IconsReal">
  <obsolete>
    Deprecated 2017-04, replaced by NewTabPage.TileType and
    NewTabPage.SuggestionsImpression.IconsReal.
  </obsolete>
  <owner>newt@chromium.org</owner>
  <summary>
    The number of most visited tiles on the new tab page that are displayed with
    the site's icon (as opposed using a fallback color or just gray). Android
    only.
  </summary>
</histogram>

<histogram name="NewTabPage.Interests.ImageDownloadSuccess"
    enum="BooleanSuccess">
  <obsolete>
    Deprecated 2017-05 (and not recorded for some time before that).
  </obsolete>
  <owner>knn@chromium.org</owner>
  <summary>
    Android: Whether an attempt to download the image for an interest was
    successful.
  </summary>
</histogram>

<histogram name="NewTabPage.Interests.InterestsFetchSuccess"
    enum="BooleanSuccess">
  <obsolete>
    Deprecated 2017-05 (and not recorded for some time before that).
  </obsolete>
  <owner>knn@chromium.org</owner>
  <summary>
    Android: Whether an attempt to fetch the interests for a user was
    successful.
  </summary>
</histogram>

<histogram name="NewTabPage.Interests.NumInterests" units="interests">
  <obsolete>
    Deprecated 2017-05 (and not recorded for some time before that).
  </obsolete>
  <owner>knn@chromium.org</owner>
  <summary>
    Android: The number of interests fetched for a user to display on the NTP.
  </summary>
</histogram>

<histogram name="NewTabPage.Languages.UILanguageRatioInTwoTopLanguages"
    units="%">
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Android: Percentage of how much in browsing is the UI language of Chrome
    used compared to overall use of the two top languages that are reported to
    Chrome content suggestion server.
  </summary>
</histogram>

<histogram name="NewTabPage.Layout" enum="NTPLayout">
  <obsolete>
    Deprecated 2018-04 with full launch of NTP condensed layout.
  </obsolete>
  <owner>peconn@chromium.org</owner>
  <summary>
    Android: A histogram detailing how the NewTabPageLayout is laid out on the
    device (eg, whether it fits fully above the fold or not). This is logged
    once per NewTabPageLayout creation (so once per NTP).
  </summary>
</histogram>

<histogram name="NewTabPage.LoadTime" units="ms">
  <owner>treib@chromium.org</owner>
  <summary>
    Histogram of the time, in milliseconds, it took for the NTP to load all of
    its tiles since navigation start.
  </summary>
</histogram>

<histogram name="NewTabPage.LoadType" enum="NTPLoadType">
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>
    Android: the type of load for the NTP, such as cold or warm start. It's a
    warm start if the native library is already loaded and initialized at the
    time the activity is created. This might happen if for example a service was
    already running.
  </summary>
</histogram>

<histogram name="NewTabPage.LogoClick" enum="NewTabPageLogoClick">
  <owner>treib@chromium.org</owner>
  <summary>
    The number of clicks on the static/call-to-action/animated logo on the NTP.
  </summary>
</histogram>

<histogram name="NewTabPage.LogoDownloadOutcome"
    enum="NewTabPageLogoDownloadOutcome">
  <owner>treib@chromium.org</owner>
  <summary>
    Outcome of downloading search provider's logos. It measures whether
    download/parsing is successful, revalidation and parsing work properly, etc.
  </summary>
</histogram>

<histogram name="NewTabPage.LogoDownloadTime" units="ms">
  <owner>treib@chromium.org</owner>
  <summary>
    The amount of time it took to download the static logo. This includes
    requests where there was no logo, or where an existing logo was revalidated
    (so no new image data was downloaded), but it does not include failed
    requests.
  </summary>
</histogram>

<histogram name="NewTabPage.LogoImageDownloaded" enum="BooleanFromHTTPCache">
  <owner>treib@chromium.org</owner>
  <summary>
    A logo image (static or CTA) was downloaded. Recorded only when the image
    was downloaded and decoded without errors.
  </summary>
</histogram>

<histogram name="NewTabPage.LogoShown" enum="NewTabPageLogoShown">
  <owner>treib@chromium.org</owner>
  <summary>
    The number of static logos and animated logos shown to users. Note that the
    base version of this histogram is recorded both for logos from the cache and
    for fresh logos, so it can be recorded twice per NTP impression.
  </summary>
</histogram>

<histogram name="NewTabPage.LogoShownTime" units="ms">
  <obsolete>
    Deprecated 2017-08 because it was only recorded for cached logos. Replaced
    by LogoShownTime2.
  </obsolete>
  <owner>treib@chromium.org</owner>
  <summary>
    The amount of time between opening an NTP and the logo appearing. Only
    recorded when there is a logo, and only recorded once per NTP. Android only.
  </summary>
</histogram>

<histogram name="NewTabPage.LogoShownTime2" units="ms">
  <owner>treib@chromium.org</owner>
  <summary>
    The amount of time between opening an NTP and the logo appearing. Only
    recorded when there is a logo, and only recorded once per NTP.
  </summary>
</histogram>

<histogram name="NewTabPage.MobileIsUserOnline" enum="Boolean">
  <owner>fserb@chromium.org</owner>
  <owner>zmin@chromium.org</owner>
  <summary>
    Record the network status when a new tab page is opened. True if user is
    online and false for offline.
  </summary>
</histogram>

<histogram name="NewTabPage.MobilePromo" enum="NewTabPageMobilePromo">
  <obsolete>
    Deprecated on M33 with the change to native NTP.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Android: Tallies counts for how the user interacted with the NTP promo page.
  </summary>
</histogram>

<histogram name="NewTabPage.MostVisited" enum="MostVisitedTileIndex">
  <owner>justincohen@chromium.org</owner>
  <owner>mastiz@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <summary>
    Histogram for user clicks of the most visited tile. The value is equal to
    the index of the tile.
  </summary>
</histogram>

<histogram name="NewTabPage.MostVisitedAction" enum="NtpFollowAction">
  <obsolete>
    Deprecated 2016-02 (and not recorded for some time before that).
  </obsolete>
  <owner>beaudoin@chromium.org</owner>
  <owner>justincohen@chromium.org</owner>
  <owner>newt@chromium.org</owner>
  <summary>
    Action taken by the user on the Most Visited NTP pane.  If the user switches
    panes during this use of the NTP, this action is sometimes not recorded. Ask
    mpearson@ for details.
  </summary>
</histogram>

<histogram name="NewTabPage.MostVisitedAge" units="seconds">
  <owner>mastiz@chromium.org</owner>
  <summary>
    The age of the data at click time, that is, the elapsed time since the
    suggestion was generated by a ranking algorithm.
  </summary>
</histogram>

<histogram name="NewTabPage.MostVisitedScheme" enum="NtpMostVisitedScheme">
  <obsolete>
    Deprecated 2016-05.
  </obsolete>
  <owner>treib@chromium.org</owner>
  <summary>
    The schemes of URLs of most visited thumbnails that the user clicked on.
  </summary>
</histogram>

<histogram name="NewTabPage.MostVisitedTilePlacementExperiment"
    enum="NtpTileExperimentActions">
  <obsolete>
    Deprecated 2016-02 (and not recorded for some time before that).
  </obsolete>
  <owner>beaudoin@chromium.org</owner>
  <owner>justincohen@chromium.org</owner>
  <owner>newt@chromium.org</owner>
  <summary>
    Records anomalous events for the Most Visited Tile Placement experiment,
    where it is unable to operate as expected. These are recorded during New Tab
    Page load time, once for every NTP.
  </summary>
</histogram>

<histogram name="NewTabPage.MostVisitedTime" units="ms">
  <owner>treib@chromium.org</owner>
  <summary>
    The time from the New Tab page being shown until the user to clicked on a
    most visited tile. Only recorded if the user clicked on a tile, as opposed
    to e.g. searching via the omnibox. Only measured on Android.
  </summary>
</histogram>

<histogram name="NewTabPage.NonVisibleScreenshots">
  <obsolete>
    Deprecated 2016-02 (and not recorded for some time before that).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of screenshots that were cached for the non-visible but ranked
    suggestions on the Suggested NTP pane.
  </summary>
</histogram>

<histogram name="NewTabPage.NonVisibleSuggestedSiteRank">
  <obsolete>
    Deprecated 2016-02 (and not recorded for some time before that).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Given that the user has typed a URL, and given that that specific URL was
    ranked but not visible on the Suggested pane of the NTP, this is the rank
    that the Suggested pane had for that URL.
  </summary>
</histogram>

<histogram name="NewTabPage.NumberOfExternalTileFallbacks">
  <obsolete>
    Deprecated 2016-07.
  </obsolete>
  <owner>beaudoin@chromium.org</owner>
  <summary>
    The number of tiles for which we relied on external tiles as a fallback
    because a local screenshot was not available to be used as a thumbnail.
    External tiles are those for which the visuals are handled by the page
    itself, not by the iframe. Recorded before reloading the suggestions,
    navigating to a URL, switching tabs, changing the active window, or closing
    the tab/shutting down Chrome.
  </summary>
</histogram>

<histogram name="NewTabPage.NumberOfExternalTiles">
  <obsolete>
    Deprecated 2016-07.
  </obsolete>
  <owner>beaudoin@chromium.org</owner>
  <summary>
    The number of external tiles that are displayed on the NTP. External tiles
    are those for which the visuals are handled by the page itself, not by the
    iframe. Recorded before reloading the suggestions, navigating to a URL,
    switching tabs, changing the active window or closing the tab/shutting down
    Chrome.
  </summary>
</histogram>

<histogram name="NewTabPage.NumberOfGrayTileFallbacks">
  <obsolete>
    Deprecated 2016-07.
  </obsolete>
  <owner>beaudoin@chromium.org</owner>
  <summary>
    The number of tiles for which we displayed a gray tile with the domain name
    as a fallback because a local screenshot was not available to be used as a
    thumbnail. Recorded before reloading the suggestions, navigating to a URL,
    switching tabs, changing the active window or closing the tab/shutting down
    Chrome.
  </summary>
</histogram>

<histogram name="NewTabPage.NumberOfGrayTiles">
  <obsolete>
    Deprecated 2016-07.
  </obsolete>
  <owner>beaudoin@chromium.org</owner>
  <summary>
    The number of tiles for which no thumbnail was specified, but a domain was
    so we displayed a gray tile with the domain name in it. Recorded before
    reloading the suggestions, navigating to a URL, switching tabs, changing the
    active window or closing the tab/shutting down Chrome.
  </summary>
</histogram>

<histogram name="NewTabPage.NumberOfMouseOvers">
  <obsolete>
    Deprecated 2016-07.
  </obsolete>
  <owner>beaudoin@chromium.org</owner>
  <summary>
    The total number of times the user hovered the mouse over Most Visited tile
    or title elements before changing focus away from the NTP, be it by
    navigating to a URL, switching tabs, changing the active window or closing
    the tab/shutting down Chrome.
  </summary>
</histogram>

<histogram name="NewTabPage.NumberOfThumbnailAttempts">
  <obsolete>
    Deprecated 01/2014. Replaced by NewTabPage.NumberOfThumbnailTiles.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of tiles for which we attempted to use a local screenshot as a
    thumbnail. Recorded before reloading the suggestions, navigating to a URL,
    switching tabs, changing the active window or closing the tab/shutting down
    Chrome.
  </summary>
</histogram>

<histogram name="NewTabPage.NumberOfThumbnailErrors">
  <obsolete>
    Deprecated 2016-07.
  </obsolete>
  <owner>beaudoin@chromium.org</owner>
  <summary>
    The number of thumbnails for which a local screenshot was not available so
    we were not able to display them on the Most Visited section of the NTP.
    Recorded before reloading the suggestions, navigating to a URL, switching
    tabs, changing the active window or closing the tab/shutting down Chrome.
  </summary>
</histogram>

<histogram name="NewTabPage.NumberOfThumbnailTiles">
  <obsolete>
    Deprecated 2016-07.
  </obsolete>
  <owner>beaudoin@chromium.org</owner>
  <summary>
    The number of tiles for which we attempted to use a local screenshot as a
    thumbnail. Recorded before reloading the suggestions, navigating to a URL,
    switching tabs, changing the active window or closing the tab/shutting down
    Chrome.
  </summary>
</histogram>

<histogram name="NewTabPage.NumberOfTiles">
  <owner>treib@chromium.org</owner>
  <summary>
    The number of tiles that are on the NTP, no matter if they are thumbnails,
    gray tiles, or external tiles. Recorded before reloading the suggestions,
    navigating to a URL, switching tabs, changing the active window or closing
    the tab/shutting down Chrome. The sum of this histogram does not have to
    equal to the total count of tile impressions (such as the total count in
    NewTabPage.TileType). The reason is that not all tiles have to be impressed
    initially (e.g., the second row of tiles may be initially out of sight on
    iOS).
  </summary>
</histogram>

<histogram name="NewTabPage.OfflineUrlsLoadTime" units="ms">
  <owner>dewittj@chromium.org</owner>
  <summary>
    The amount of time spent waiting for the offline page model to return which
    New Tab Page URLs are available offline.
  </summary>
</histogram>

<histogram name="NewTabPage.OneGoogleBar.RequestLatency" units="ms">
  <owner>treib@chromium.org</owner>
  <summary>
    The time it took until a request from the New Tab page for the OneGoogleBar
    script was served. Recorded only on the local NTP.
  </summary>
</histogram>

<histogram name="NewTabPage.OneGoogleBar.ShownTime" units="ms">
  <owner>treib@chromium.org</owner>
  <summary>
    Histogram of the time, in milliseconds since navigation start, it took until
    the OneGoogleBar showed up on the NTP. Recorded only on the local NTP.
  </summary>
</histogram>

<histogram name="NewTabPage.OtherSessionsMenu" enum="OtherSessionsActions">
  <obsolete>
    Deprecated 05/2015. Feature was removed.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Histogram for usage of the menu on the NTP that allows the user to access
    tabs from other devices.
  </summary>
</histogram>

<histogram name="NewTabPage.PreviousSelectedPageType" enum="NtpPaneType">
  <obsolete>
    Deprecated 2016-02.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The pane that had been previously selected when the user switches panes in
    the NTP.
  </summary>
</histogram>

<histogram name="NewTabPage.Promo.Bubble" enum="NtpPromoAction">
  <obsolete>
    Deprecated 2016-02 (and not recorded for some time before that).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Histogram for NTP bubble promo activity.</summary>
</histogram>

<histogram name="NewTabPage.Promo.Notification" enum="NtpPromoAction">
  <obsolete>
    Deprecated 2016-02 (and not recorded for some time before that).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Histogram for NTP notification promo activity.</summary>
</histogram>

<histogram name="NewTabPage.RecentTabsPage.TimeVisibleAndroid" units="ms">
  <owner>pkotwicz@chromium.org</owner>
  <summary>
    Records the amount of time that the &quot;Recent Tabs&quot; page is visible
    and Chrome is in the foreground on Android. The metric is recorded whenever
    the &quot;Recent Tabs&quot; page moves out of the foreground. The metric is
    recorded when the &quot;Recent Tabs&quot; page is closed, when the user
    switches from the &quot;Recent Tabs&quot; page to a different tab and when
    Chrome is backgrounded.
  </summary>
</histogram>

<histogram name="NewTabPage.RequestThrottler.PerDay" units="requests">
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Records how many background requests of the given type the browser tried to
    perform each day where the type is specified by the _suffix of the
    histogram. The histogram is emitted only after midnight of the given day
    passes - right before the first following request (which can be several days
    later if the user does not use Chrome in the meantime). The histogram counts
    requests with both QUOTA_GRANTED and QUOTA_EXCEEDED status, i.e. the count
    can easily exceed the daily quota.
  </summary>
</histogram>

<histogram name="NewTabPage.RequestThrottler.PerDayInteractive"
    units="requests">
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Records how many interactive requests of the given type the browser tried to
    perform each day where the type is specified by the _suffix of the
    histogram. The histogram is emitted only after midnight of the given day
    passes - right before the first following request (which can be several days
    later if the user does not use Chrome in the meantime). The histogram counts
    requests with both QUOTA_GRANTED and QUOTA_EXCEEDED status, i.e. the count
    can easily exceed the daily quota.
  </summary>
</histogram>

<histogram name="NewTabPage.RequestThrottler.RequestStatus"
    enum="NtpRequestThrottlerStatus">
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Records the status w.r.t. the quota for all requests of the given type. The
    type of request is specified by the _suffix of the histogram.
  </summary>
</histogram>

<histogram name="NewTabPage.SearchAvailableLoadTime.ColdStart" units="ms">
  <obsolete>
    Deprecated February 2017.
  </obsolete>
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>
    The time until the search box became available on the NTP in a cold start.
    It's a cold start if the native library is not already loaded and
    initialized at the time the activity is created. Only measured on Android.
  </summary>
</histogram>

<histogram name="NewTabPage.SearchAvailableLoadTime.WarmStart" units="ms">
  <obsolete>
    Deprecated February 2017.
  </obsolete>
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>
    The time until the search box became available on the NTP in a warm start.
    It's a warm start if the native library is already loaded and initialized at
    the time the activity is created. This might happen if for example a service
    was already running. Only measured on Android.
  </summary>
</histogram>

<histogram name="NewTabPage.SearchAvailableLoadTime2.ColdStart" units="ms">
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>
    The time until the search box became available on the NTP in a cold start.
    It's a cold start if the native library is not already loaded and
    initialized at the time the activity is created. Only measured on Android.
  </summary>
</histogram>

<histogram name="NewTabPage.SearchAvailableLoadTime2.WarmStart" units="ms">
  <owner>mvanouwerkerk@chromium.org</owner>
  <summary>
    The time until the search box became available on the NTP in a warm start.
    It's a warm start if the native library is already loaded and initialized at
    the time the activity is created. This might happen if for example a service
    was already running. Only measured on Android.
  </summary>
</histogram>

<histogram name="NewTabPage.SearchURLs.Total">
  <obsolete>
    Deprecated 2016-02 (and not recorded for some time before that).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>TBD.</summary>
</histogram>

<histogram name="NewTabPage.SelectedPageType" enum="NtpPaneType">
  <obsolete>
    Deprecated 2016-02.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The pane selected when the user switches panes in the NTP.</summary>
</histogram>

<histogram name="NewTabPage.SessionRestore">
  <obsolete>
    Deprecated 2016-02 (and not recorded for some time before that).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Histogram for user clicks of the Recently Closed items. The value is the
    recency of the entry being restored (0 is most recent).
  </summary>
</histogram>

<histogram name="NewTabPage.SingleSessionPageSwitches">
  <obsolete>
    Deprecated 2016-02 (and not recorded for some time before that).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Histogram to track how many times a user switched pages in a single NTP
    session.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.CardClicked">
  <obsolete>
    Replaced by NewTabPage.ContentSuggestions.Opened.
  </obsolete>
  <owner>knn@chromium.org</owner>
  <summary>
    Android: The position of the snippets card on the NTP, that is clicked
    through to the host website of the content. We track the position the
    snippet had in the list when NTP was loaded. This tracked position is thus
    different from the position observed by the user whenever before scrolling
    down to the given snippet, the user discards some snippets in the top of the
    list.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.CardClickedAge" units="ms">
  <obsolete>
    Replaced by NewTabPage.ContentSuggestions.OpenedAge.
  </obsolete>
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Android: The age of the snippets card on the NTP, that is clicked through to
    the host website of the content. The age is measured from the moment the
    content has been published. In each &quot;_x_y&quot; suffix of the
    histogram, only snippets on positions \gt;=x and \lt;=y are tracked. We
    track the position the snippet had in the list when NTP was loaded. This
    tracked position is thus different from the position observed by the user
    whenever before scrolling down to the given snippet, the user discards some
    snippets in the top of the list.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.CardClickedScore" units="score">
  <obsolete>
    Deprecated as of 6/2016
  </obsolete>
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Android: The score of the snippets card on the NTP, that is clicked through
    to the host website of the content. The recorded score is from the moment
    the snippet was fetched, it could have changed since. In each &quot;_x&quot;
    suffix  of the histogram, only snippets on positions \lt;=x are tracked. We
    track the position the snippet had in the list when NTP was loaded. This
    tracked position is thus different from the position observed by the user
    whenever before scrolling down to the given snippet, the user discards some
    snippets in the top of the list.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.CardClickedScoreNew" units="score">
  <obsolete>
    Replaced by NewTabPage.ContentSuggestions.OpenedScore.
  </obsolete>
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Android: The score of the snippets card on the NTP, that is clicked through
    to the host website of the content. The recorded score is from the moment
    the snippet was fetched, it could have changed since. In each &quot;_x&quot;
    suffix  of the histogram, only snippets on positions \lt;=x are tracked. We
    track the position the snippet had in the list when NTP was loaded. This
    tracked position is thus different from the position observed by the user
    whenever before scrolling down to the given snippet, the user discards some
    snippets in the top of the list. In contrast to CardClickedScore, this
    histogram has a proper maximal value of 100 000.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.CardExpanded">
  <obsolete>
    Deprecated as of 4/2016
  </obsolete>
  <owner>knn@chromium.org</owner>
  <summary>
    Android: The position of the snippets card on the NTP, that is expanded to
    reveal more content.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.CardHidden">
  <obsolete>
    Deprecated as of 4/2016
  </obsolete>
  <owner>knn@chromium.org</owner>
  <summary>
    Android: The position of the snippets card on the NTP, for which the
    expanded content was minimized/hidden.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.CardLongPressed" units="index">
  <obsolete>
    Replaced by NewTabPage.ContentSuggestions.MenuOpened.
  </obsolete>
  <owner>peconn@chromium.org</owner>
  <summary>
    Android: The position of a snippet card when it is long pressed, analagous
    to NewTabPage.Snippets.CardClicked.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.CardLongPressedAge" units="ms">
  <obsolete>
    Replaced by NewTabPage.ContentSuggestions.MenuOpenedAge.
  </obsolete>
  <owner>peconn@chromium.org</owner>
  <summary>
    Android: The time difference between when a snippet card is long pressed and
    when its content was published. Analagous to
    NewTabPage.Snippets.CardClickedAge.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.CardLongPressedScoreNew" units="score">
  <obsolete>
    Replaced by NewTabPage.ContentSuggestions.MenuOpenedScore.
  </obsolete>
  <owner>peconn@chromium.org</owner>
  <summary>
    Android: The relevance score of an interest card that is long pressed,
    analagous to NewTabPage.Snippets.CardClickedScoreNew.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.CardShown">
  <obsolete>
    Replaced by NewTabPage.ContentSuggestions.Shown.
  </obsolete>
  <owner>knn@chromium.org</owner>
  <summary>
    Android: The position of the snippets card that is shown on the NTP. Each
    snippet (its position) is recorded whenever at least 2/3 of its height
    becomes visible by scrolling through the NTP. Each snippet is recorded at
    most once for a given instance of NTP and a given data set of snippets that
    is shown. We track the position the snippet had in the list when NTP was
    loaded. This tracked position is thus different from the position observed
    by the user whenever before scrolling down to the given snippet, the user
    discards some snippets in the top of the list. Previously (in the code
    before 2016/05/27), this histogram was recorded each time a snippet became
    visible (e.g. by scrolling up and down) at least by 1px; the first snippet
    was thus recorded even without scrolling down.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.CardShownAge" units="ms">
  <obsolete>
    Replaced by NewTabPage.ContentSuggestions.ShownAge.
  </obsolete>
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Android: The age of the snippets card that is shown on the NTP. Each snippet
    (its age) is recorded whenever at least 2/3 of its height becomes visible by
    scrolling through the NTP. Each snippet is recorded at most once for a given
    instance of NTP and a given data set of snippets that is shown. The age is
    measured from the moment the content has been published. In each
    &quot;_x_y&quot; suffix of the histogram, only snippets on positions \gt;=x
    and \lt;=y are tracked. By this, we mean the position the snippet had in the
    list when NTP was loaded. This tracked position is thus different from the
    position observed by the user whenever before scrolling down to the given
    snippet, the user discards some snippets in the top of the list.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.CardShownScore" units="score">
  <obsolete>
    Deprecated as of 6/2016
  </obsolete>
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Android: The score of the snippets card that is shown on the NTP. Each
    snippet (its score) is recorded whenever at least 2/3 of its height becomes
    visible by scrolling through the NTP. Each snippet is recorded at most once
    for a given instance of NTP and a given data set of snippets that is shown.
    The recorded score is from the moment the snippet was fetched, it could have
    changed since. In each &quot;_x&quot; suffix  of the histogram, only
    snippets on positions \lt;=x are tracked. By this, we mean the position the
    snippet had in the list when NTP was loaded. This tracked position is thus
    different from the position observed by the user whenever before scrolling
    down to the given snippet, the user discards some snippets in the top of the
    list.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.CardShownScoreNew" units="score">
  <obsolete>
    Replaced by NewTabPage.ContentSuggestions.ShownScore.
  </obsolete>
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Android: The score of the snippets card that is shown on the NTP. Each
    snippet (its score) is recorded whenever at least 2/3 of its height becomes
    visible by scrolling through the NTP. Each snippet is recorded at most once
    for a given instance of NTP and a given data set of snippets that is shown.
    The recorded score is from the moment the snippet was fetched, it could have
    changed since. In each &quot;_x&quot; suffix  of the histogram, only
    snippets on positions \lt;=x are tracked. By this, we mean the position the
    snippet had in the list when NTP was loaded. This tracked position is thus
    different from the position observed by the user whenever before scrolling
    down to the given snippet, the user discards some snippets in the top of the
    list. In contrast to CardShownScore, this histogram has a proper maximal
    value of 100 000.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.DatabaseLoadTime" units="ms">
  <owner>treib@chromium.org</owner>
  <summary>
    Android: The time it took to load the database of persisted content
    suggestions. Recorded only when the database is loaded successfully.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.EnteredState" enum="NTPSnippetsState">
  <owner>treib@chromium.org</owner>
  <summary>
    Android: The state of the RemoteSuggestionsProvider. Recorded when the state
    changes, typically once at startup and rarely afterwards, e.g. on database
    errors.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.FetchHttpResponseOrErrorCode"
    enum="CombinedHttpResponseAndNetErrorCode">
  <owner>mastiz@chromium.org</owner>
  <summary>
    Response or error codes encountered when attempting to fetch snippets.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.FetchResult" enum="NtpSnippetsFetchResult">
  <owner>mastiz@chromium.org</owner>
  <summary>
    Result of attempting a fetch, logged once per issued trigger.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.FetchTime" units="ms">
  <owner>mastiz@chromium.org</owner>
  <summary>
    Time spent fetching snippets. Only recorded for fetch attempts that resulted
    in an actual network request.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.FetchTimeLocal" units="minutes">
  <owner>finkm@chromium.org</owner>
  <summary>
    Records the time of the day in minutes when a snippets background fetch was
    initiated. Counts minutes since midnight UTC.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.FetchTimeUTC" units="minutes">
  <owner>finkm@chromium.org</owner>
  <summary>
    Records the time of the day in minutes when a snippets background fetch was
    initiated. Counts minutes since midnight local time.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.IncompleteSnippetsAfterFetch"
    enum="Boolean">
  <owner>maybelle@chromium.org</owner>
  <summary>
    Whether we discarded any of the snippets after fetching them due to having
    incomplete metadata.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.Interactions" enum="SnippetsInteractions">
  <obsolete>
    Removed 2016-10.
  </obsolete>
  <owner>knn@chromium.org</owner>
  <summary>
    Android: A histogram giving an overall summary of important events like
    impressions, scroll events, clicks etc.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.NumArticles" units="articles">
  <owner>treib@chromium.org</owner>
  <summary>
    Android: The number of snippet articles available to show on the NTP, logged
    once every time the list is updated.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.NumArticlesFetched" units="articles">
  <owner>mastiz@chromium.org</owner>
  <summary>
    Android: The number of valid snippet articles fetched from the server,
    logged every time a fetch finishes successfully.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.NumArticlesOnScrolledBelowTheFoldOnce"
    units="articles">
  <obsolete>
    Removed 2016-10.
  </obsolete>
  <owner>mastiz@chromium.org</owner>
  <summary>
    Android: The number of snippet articles available to the user in the UI,
    logged when the user scrolls below the fold (at max once per NTP load).
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.NumArticlesZeroDueToDiscarded"
    units="articles">
  <owner>mastiz@chromium.org</owner>
  <summary>
    Android: The number of snippet articles discarded by the user, logged every
    time the list is updated resulting in an empty list (all articles
    discarded).
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.NumIncompleteSnippets" units="snippets">
  <owner>treib@chromium.org</owner>
  <summary>
    The number of snippets that we discard per fetch due to having incomplete
    data.
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.OpenMethod" enum="SnippetOpenMethod">
  <obsolete>
    Replaced by NewTabPage.ContentSuggestions.OpenDisposition.
  </obsolete>
  <owner>peconn@chromium.org</owner>
  <summary>
    Android: A histogram detailing how the articles linked from snippets are
    opened (eg, plain click, open in new tab, open in incognito).
  </summary>
</histogram>

<histogram name="NewTabPage.Snippets.VisitDuration" units="ms">
  <obsolete>
    Replaced by NewTabPage.ContentSuggestions.VisitDuration.
  </obsolete>
  <owner>mastiz@chromium.org</owner>
  <summary>
    Android: Time spent reading the page linked by an opened (clicked) snippet
    card. Exit conditions include the tab not being in the foreground or
    starting a new navigation.
  </summary>
</histogram>

<histogram name="NewTabPage.SuggestedSite">
  <obsolete>
    Deprecated 2016-02 (and not recorded for some time before that).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Histogram for user clicks of the suggested site thumbnails. The value is
    equal to the index of the thumbnail.
  </summary>
</histogram>

<histogram name="NewTabPage.SuggestedSitesAction" enum="NtpFollowAction">
  <obsolete>
    Deprecated 2016-02 (and not recorded for some time before that).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Action taken by the user on the Suggested Sites NTP pane.</summary>
</histogram>

<histogram name="NewTabPage.SuggestedSitesLoadTime">
  <obsolete>
    Deprecated 2016-02 (and not recorded for some time before that).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Time to load the Suggested Sites NTP pane, in milliseconds.</summary>
</histogram>

<histogram name="NewTabPage.SuggestedSitesViewTime">
  <obsolete>
    Deprecated 2016-02 (and not recorded for some time before that).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Time spent on the Suggested Sites NTP pane, in seconds.</summary>
</histogram>

<histogram name="NewTabPage.SuggestionsImpression" enum="MostVisitedTileIndex">
  <owner>treib@chromium.org</owner>
  <summary>
    Histogram for impressions on the various most visited tiles. The value is
    equal to the index of the thumbnail.
  </summary>
</histogram>

<histogram name="NewTabPage.SuggestionsImpressionAge" units="seconds">
  <owner>mastiz@chromium.org</owner>
  <summary>
    The age of the data at impression time, that is, the elapsed time since the
    suggestion was generated by a ranking algorithm.
  </summary>
</histogram>

<histogram name="NewTabPage.SuggestionsType" enum="NtpSuggestionsType">
  <obsolete>
    Deprecated 2016-07.
  </obsolete>
  <owner>beaudoin@chromium.org</owner>
  <summary>
    Indicate, for each impression of the New Tab Page, whether the suggestions
    were obtained from the client or server. Recorded before changing focus away
    from the NTP, be it by navigating to a URL, switching tabs, changing the
    active window or closing the tab/shutting down Chrome.
  </summary>
</histogram>

<histogram name="NewTabPage.ThumbnailErrorRate">
  <obsolete>
    Deprecated 01/2014. Replaced by NewTabPage.NumberOfThumbnailAttempts and
    NewTabPage.NumberOfThumbnailErrors.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The percentage of errors per attempts to load image thumbnails on the New
    Tab Page. When an error occurs, a grey tile is shown instead of a thumbnail
    image. We measure the rate instead of the number of errors because multiple
    attempts are made to load images at different times during the NTP's
    lifetime. Each NTP session's error rate is logged after the user navigates
    to a new URL from that NTP.
  </summary>
</histogram>

<histogram name="NewTabPage.ThumbnailFallbackRate" units="%">
  <obsolete>
    Deprecated 01/2014. Replaced by NewTabPage.NumberOfGrayTileFallbacks and
    NewTabPage.NumberOfExternalFallbacks.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The percentage of times most visited tiles use the fallback thumbnail. Only
    requests that actually specify a fallback thumbnail are considered here. We
    measure the rate instead of the number of errors because multiple attempts
    are made to load thumbnails at different times during the NTP's lifetime.
    Each NTP session's error rate is logged after the user navigates to a new
    URL from that NTP.
  </summary>
</histogram>

<histogram name="NewTabPage.TileFaviconFetchStatus.Server"
    enum="GoogleFaviconServerRequestStatus">
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Mobile only. The result of fetching a favicon for a tile on the New Tab
    Page. This is recorded for each gray MostVisited tile on the New Tab Page
    once per impression of the tile.
  </summary>
</histogram>

<histogram name="NewTabPage.TileFaviconFetchSuccess.Popular"
    enum="BooleanSuccess">
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Mobile only. The result of fetching a favicon for a tile on the New Tab
    Page. This is recorded for each gray PopularSites tile on the New Tab Page
    once per updating the set of tiles (notably upon each NTP impression).
  </summary>
</histogram>

<histogram name="NewTabPage.TileFaviconFetchSuccess.Server"
    enum="BooleanSuccess">
  <obsolete>
    Deprecated 06/2017. Replaced by NewTabPage.TileFaviconFetchStatus.Server.
  </obsolete>
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Mobile only. The result of fetching a favicon for a tile on the New Tab
    Page. This is recorded for each gray MostVisited tile on the New Tab Page
    once per lifetime of Chrome (there as an in-memory cache of failed
    requests).
  </summary>
</histogram>

<histogram name="NewTabPage.TileFaviconType" enum="FaviconType">
  <owner>mastiz@chromium.org</owner>
  <summary>
    The favicon type that was chosen to represent a most visited tile displayed
    on the new tab page, logged at impression time. Note that these values don't
    involve an actual icon being displayed because a scrabble time might have
    been displayed instead (see NewTabPage.TileType).
  </summary>
</histogram>

<histogram name="NewTabPage.TileFaviconTypeClicked" enum="FaviconType">
  <owner>mastiz@chromium.org</owner>
  <summary>
    The favicon type that was chosen to represent a most visited tile displayed
    on the new tab page, logged when a tile is clicked. Note that these values
    don't involve an actual icon being displayed (see
    NewTabPage.TileTypeClicked).
  </summary>
</histogram>

<histogram name="NewTabPage.TileOfflineAvailable" enum="MostVisitedTileIndex">
  <owner>treib@chromium.org</owner>
  <summary>
    The number of times a tile was available offline, per tile index - compare
    to the NewTabPage.SuggestionsImpression.* histograms. This is recorded when
    the NTP finishes loading. Only measured on Android.
  </summary>
</histogram>

<histogram name="NewTabPage.TilesReceivedTime" units="ms">
  <owner>treib@chromium.org</owner>
  <summary>
    Histogram of the time, in milliseconds since navigation start, it took for
    the NTP most visited iframe to receive the data for all of its tiles. This
    does not include actually loading the DOM elements for the tiles, in
    particular the thumbnail images; see NewTabPage.LoadTime for that.
  </summary>
</histogram>

<histogram name="NewTabPage.TileTitle" enum="NTPTileTitleSource">
  <owner>fhorschig@chromium.org</owner>
  <summary>
    Records the source of the title for each most visited tiled displayed when
    an NTP is opened, e.g. a short_name from a manifest, or the page title.
  </summary>
</histogram>

<histogram name="NewTabPage.TileTitleClicked" enum="NTPTileTitleSource">
  <owner>fhorschig@chromium.org</owner>
  <summary>
    Records the source for the name a most visited tile showed when the user
    clicked it, e.g. a URL, or the page title.
  </summary>
</histogram>

<histogram name="NewTabPage.TileType" enum="NTPTileVisualType">
  <owner>mastiz@chromium.org</owner>
  <summary>
    The visual type of each most visited tile displayed on the new tab page,
    e.g. actual thumbnail or placeholder thumbnail. This is recorded for each
    most visited item when the NTP is opened.
  </summary>
</histogram>

<histogram name="NewTabPage.TileTypeClicked" enum="NTPTileVisualType">
  <owner>mastiz@chromium.org</owner>
  <summary>
    The visual type of the most visited item that the user clicked on, e.g.
    actual thumbnail or placeholder thumbnail.
  </summary>
</histogram>

<histogram name="NewTabPage.TimeSpent" units="ms">
  <owner>bauerb@chromium.org</owner>
  <summary>
    The time spent on the new tab page as measured from when it was loaded or
    last brought to the foreground until it was navigated away from or hidden.
    Only measured on Android.
  </summary>
</histogram>

<histogram name="NewTabPage.URLState" enum="NewTabURLState">
  <owner>treib@chromium.org</owner>
  <summary>
    Records the status of the New Tab page URL when an NTP is opened.
  </summary>
</histogram>

<histogram name="NewTabPage.UserClassifier.AverageHoursToOpenNTP" units="hours">
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Android: The estimated average number of hours between two successive times
    when a new tab page is opened. Recorded after each opening of a NTP (and
    after updating the model used for the estimate).
  </summary>
</histogram>

<histogram name="NewTabPage.UserClassifier.AverageHoursToShowSuggestions"
    units="hours">
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Android: The estimated average number of hours between two successive times
    when the list of content suggestions on a new tab page is shown (i.e. when
    the user scrolls below the fold). Recorded after each time the suggestions
    are shown (and after updating the model used for the estimate).
  </summary>
</histogram>

<histogram name="NewTabPage.UserClassifier.AverageHoursToUseSuggestions"
    units="hours">
  <owner>jkrcal@chromium.org</owner>
  <summary>
    Android: The estimated average number of hours between two successive times
    when the user opens a content suggestion or clicks on the &quot;More&quot;
    button. Recorded after each time a suggestion or a More button is clicked
    (and after updating the model used for the estimate).
  </summary>
</histogram>

<histogram name="NewTabPage.VisibleScreenshots">
  <obsolete>
    Deprecated 2016-02 (and not recorded for some time before that).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of screenshots that were cached for the visible suggestions on
    the Suggested NTP pane.
  </summary>
</histogram>

<histogram name="NewTabPage.VisibleSuggestedSiteRank">
  <obsolete>
    Deprecated 2016-02 (and not recorded for some time before that).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Given that the user has typed a URL, and given that that specific URL was
    visible on the Suggested pane of the NTP, this is the rank that the
    Suggested pane had for that URL.
  </summary>
</histogram>

<histogram name="NewTabPage.VoiceActions" enum="NewTabPageVoiceAction">
  <owner>treib@chromium.org</owner>
  <summary>
    Actions taken by users of Voice Search on the local New Tab Page on Desktop.
    These actions may navigate away from the NTP (e.g. submitting a speech
    query), but can also happen without navigating away from the NTP (e.g.
    initiating or retrying Voice Search).
  </summary>
</histogram>

<histogram name="NewTabPage.VoiceErrors" enum="NewTabPageVoiceError">
  <owner>treib@chromium.org</owner>
  <summary>
    Errors that occur during Voice Search use on the local New Tab Page on
    Desktop. These may be user-induced (e.g. the user's utterance could not be
    recognized - no match), or resulting from external circumstances (e.g.
    offline, lack of microphone permission).
  </summary>
</histogram>

<histogram name="Notifications.Actions" enum="NotificationActionType">
  <owner>dewittj@chromium.org</owner>
  <summary>
    The actions taken on notifications, recorded every time they happen.  This
    histogram will record every single event that happens separately.
  </summary>
</histogram>

<histogram name="Notifications.Android.JobStartDelay" units="ms">
  <owner>awdf@chromium.org</owner>
  <summary>
    Records the delay between scheduling a job with the JobScheduler (with a
    desired latency of 0ms, in response to a notification click) and receiving
    the onStartJob callback. Only measured on Android N and above.
  </summary>
</histogram>

<histogram name="Notifications.AppNotificationStatus"
    enum="NotificationAppStatus">
  <owner>peter@chromium.org</owner>
  <summary>
    Records whether notifications are enabled for Chrome, as the Android app,
    for each Web Notification that is being shown to the user.
  </summary>
</histogram>

<histogram name="Notifications.AuthorDataSize" units="bytes">
  <owner>peter@chromium.org</owner>
  <summary>
    The size, in bytes, of the author-provided data associated with a Web
    Notification. Recorded when a persistent Web Notification is being shown by
    the developer.
  </summary>
</histogram>

<histogram name="Notifications.AuthorDataSizeKB" units="KB">
  <obsolete>
    Replaced by Notifications.AuthorDataSize in February 2016.
  </obsolete>
  <owner>peter@chromium.org</owner>
  <summary>
    The size, in kilobytes, of the author-provided data associated with a Web
    Notification. Recorded when a persistent Web Notification is being shown by
    the developer.
  </summary>
</histogram>

<histogram name="Notifications.Database.DeleteBeforeWriteResult"
    enum="NotificationDatabaseStatus">
  <owner>peter@chromium.org</owner>
  <summary>
    Records the result status codes of deleting notification data from the Web
    Notification database that share their tag (replacement identifier) with a
    notification that's about to be shown.
  </summary>
</histogram>

<histogram name="Notifications.Database.DeleteResult"
    enum="NotificationDatabaseStatus">
  <owner>peter@chromium.org</owner>
  <summary>
    Records the result status codes of deleting notification data from the Web
    Notification database.
  </summary>
</histogram>

<histogram name="Notifications.Database.DeleteServiceWorkerRegistrationResult"
    enum="NotificationDatabaseStatus">
  <owner>peter@chromium.org</owner>
  <summary>
    Records the result status codes of deleting all notification data associated
    with a Service Worker registration ID.
  </summary>
</histogram>

<histogram name="Notifications.Database.DestroyResult"
    enum="NotificationDatabaseStatus">
  <owner>peter@chromium.org</owner>
  <summary>
    Records the result status codes of destroying the Web Notification database
    altogether.
  </summary>
</histogram>

<histogram name="Notifications.Database.OpenAfterCorruptionResult"
    enum="NotificationDatabaseStatus">
  <owner>peter@chromium.org</owner>
  <summary>
    Records the result status codes of opening the Web Notification database
    after it has been destroyed in response to data corruption.
  </summary>
</histogram>

<histogram name="Notifications.Database.OpenResult"
    enum="NotificationDatabaseStatus">
  <owner>peter@chromium.org</owner>
  <summary>
    Records the result status codes of opening the Web Notification database.
  </summary>
</histogram>

<histogram name="Notifications.Database.ReadForServiceWorkerResult"
    enum="NotificationDatabaseStatus">
  <owner>peter@chromium.org</owner>
  <summary>
    Records the result status codes of reading data of all notifications
    associated with a Service Worker from the Web Notification database.
  </summary>
</histogram>

<histogram name="Notifications.Database.ReadResult"
    enum="NotificationDatabaseStatus">
  <owner>peter@chromium.org</owner>
  <summary>
    Records the result status codes of reading data of a single notification
    from the Web Notification database.
  </summary>
</histogram>

<histogram name="Notifications.Database.WriteResult"
    enum="NotificationDatabaseStatus">
  <owner>peter@chromium.org</owner>
  <summary>
    Records the result status codes of writing data for a notification to the
    Web Notification database.
  </summary>
</histogram>

<histogram name="Notifications.DifferentRequestingEmbeddingOrigins"
    enum="Boolean">
  <obsolete>
    Deprecated July 2015. No longer tracked since M42.
  </obsolete>
  <owner>peter@chromium.org</owner>
  <summary>
    Records if the requesting and embedding origins are different when
    requesting permission to display Web Notifications.
  </summary>
</histogram>

<histogram name="Notifications.Display" enum="NotifierType">
  <obsolete>
    Deprecated October 2017 (fullscreen notifications feature enabled by
    default).
  </obsolete>
  <owner>bmalcolm@chromium.org</owner>
  <summary>
    Counts the number of times a notification was shown for the various types of
    sources. The suffix distinguishes between the window state of the app or
    webpage that sent the notification. This will be used to determine whether a
    legacy mode is required when we allow apps or webpages to display
    notifications over fullscreen content in the future.
  </summary>
</histogram>

<histogram name="Notifications.ExtensionNotificationActionCount"
    units="buttons">
  <owner>dewittj@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    The number of action buttons the developer provided for a notification
    created using the extensions notification API. Logged when creating the
    notification.
  </summary>
</histogram>

<histogram name="Notifications.ExtensionNotificationIdLength"
    units="characters">
  <owner>peter@chromium.org</owner>
  <summary>
    The length, in characters, of the id given to an extension notification.
    These can be automatically generated, in which case they will be either 36
    bytes (GUID) or 16 bytes (random data) in length, or provided by the
    developer. Measured when the notification is being displayed through the
    chrome.notifications.create() extension API.
  </summary>
</histogram>

<histogram name="Notifications.ExtensionNotificationType"
    enum="ExtensionNotificationType">
  <owner>dewittj@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    The type of a notification created using the extensions notification API.
    Logged when creating the notification.
  </summary>
</histogram>

<histogram base="true" name="Notifications.Freedesktop.Capabilities"
    enum="BooleanSupported">
<!-- Name completed by histogram_suffixes name="FreedesktopNotificationCapabilitiesId" -->

  <owner>thomasanderson@chromium.org</owner>
  <summary>
    Whether the notification server supports the capability in question.  (Linux
    only) Logged when the proxy to /org/Freedesktop/Notifications is set up
    successfully, which happens at most once on startup.
  </summary>
</histogram>

<histogram name="Notifications.Icon.FileSize" units="bytes">
  <obsolete>
    Deprecated Nov 2016 in favor of Notifications.LoadFileSize.*
  </obsolete>
  <owner>peter@chromium.org</owner>
  <summary>The number of bytes loaded for a Web Notification icon.</summary>
</histogram>

<histogram name="Notifications.Icon.LoadFailTime" units="ms">
  <obsolete>
    Deprecated Nov 2016 in favor of Notifications.LoadFailTime.*
  </obsolete>
  <owner>peter@chromium.org</owner>
  <summary>
    The number of milliseconds it took to fail loading an icon for a Web
    Notification.
  </summary>
</histogram>

<histogram name="Notifications.Icon.LoadFinishTime" units="ms">
  <obsolete>
    Deprecated Nov 2016 in favor of Notifications.LoadFinishTime.*
  </obsolete>
  <owner>peter@chromium.org</owner>
  <summary>
    The number of milliseconds it took to finish successfully loading an icon
    for a Web Notification.
  </summary>
</histogram>

<histogram name="Notifications.Icon.ScaleDownTime" units="ms">
  <obsolete>
    Deprecated Nov 2016 in favor of Notifications.LoadScaleDownTime.*
  </obsolete>
  <owner>peter@chromium.org</owner>
  <summary>
    The number of milliseconds it took to scale down an icon for a Web
    Notification.
  </summary>
</histogram>

<histogram name="Notifications.Linux.BridgeInitializationStatus"
    enum="LinuxNotificationBridgeStatusCode">
  <owner>thomasanderson@chromium.org</owner>
  <summary>
    The status code for initializing NotificationPlatformBridgeLinux.  (Linux
    only) Logged on each start up.
  </summary>
</histogram>

<histogram name="Notifications.LoadFailTime" units="ms">
<!-- Name completed by histogram_suffixes name="NotificationImageTypes" -->

  <owner>johnme@chromium.org</owner>
  <summary>
    The number of milliseconds it took to fail loading an icon/image for a Web
    Notification.
  </summary>
</histogram>

<histogram name="Notifications.LoadFileSize" units="bytes">
<!-- Name completed by histogram_suffixes name="NotificationImageTypes" -->

  <owner>johnme@chromium.org</owner>
  <summary>
    The number of bytes loaded for a Web Notification icon/image.
  </summary>
</histogram>

<histogram name="Notifications.LoadFinishTime" units="ms">
<!-- Name completed by histogram_suffixes name="NotificationImageTypes" -->

  <owner>johnme@chromium.org</owner>
  <summary>
    The number of milliseconds it took to finish successfully loading an
    icon/image for a Web Notification.
  </summary>
</histogram>

<histogram name="Notifications.LoadScaleDownTime" units="ms">
<!-- Name completed by histogram_suffixes name="NotificationImageTypes" -->

  <owner>johnme@chromium.org</owner>
  <summary>
    The number of milliseconds it took to scale down an icon/image for a Web
    Notification.
  </summary>
</histogram>

<histogram name="Notifications.NotificationHelper.ComServerModuleStatus"
    enum="NotificationHelperComServerModuleStatus">
  <owner>chengx@chromium.org</owner>
  <summary>
    The execute status of a ComServerModule class instance. Logged whenever a
    notification_helper process is launched by Windows.
  </summary>
</histogram>

<histogram
    name="Notifications.NotificationHelper.NotificationActivatorPrimaryStatus"
    enum="NotificationHelperNotificationActivatorPrimaryStatus">
  <owner>chengx@chromium.org</owner>
  <owner>finnur@chromium.org</owner>
  <summary>
    The primary execute status of NotificationActivator::Activate. Logged
    whenever a notification_helper process is launched by Windows.
  </summary>
</histogram>

<histogram
    name="Notifications.NotificationHelper.NotificationActivatorSecondaryStatus"
    enum="NotificationHelperNotificationActivatorSecondaryStatus">
  <owner>chengx@chromium.org</owner>
  <owner>finnur@chromium.org</owner>
  <summary>
    The secondary execute status of NotificationActivator::Activate. Logged
    whenever a notification_helper process is launched by Windows.
  </summary>
</histogram>

<histogram name="Notifications.NotificationHelper.NotificationActivatorStatus"
    enum="NotificationHelperNotificationActivatorStatus">
  <obsolete>
    Deprecated 06/2018. Replaced by NotificationActivatorPrimaryStatus and
    NotificationActivatorSecondaryStatus.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>
    The execute status of NotificationActivator::Activate. Logged whenever a
    notification_helper process is launched by Windows.
  </summary>
</histogram>

<histogram name="Notifications.NotificationHelper.ServerRuntime" units="ms">
  <owner>chengx@chromium.org</owner>
  <summary>
    The runtime of the notification_helper server process. This process is
    created when a notification is activated from the Windows Action Center.
    Once created, this process does some COM class registration work, so that
    Windows can call certain APIs to handle the notification activation. Upon
    finishing the API calls, Windows signals this process to exit.
  </summary>
</histogram>

<histogram name="Notifications.PerNotificationActions"
    enum="NotificationActionType">
  <owner>dewittj@chromium.org</owner>
  <summary>
    The actions taken on notifications, recorded once per notification, when it
    is closed.  This differs from the Notifications.Actions histogram in that
    multiple events of the same type on a single notification will only record a
    single UMA event.
  </summary>
</histogram>

<histogram name="Notifications.PersistentNotificationActionCount"
    units="buttons">
  <owner>johnme@chromium.org</owner>
  <summary>
    The number of action buttons the developer provided for a persistent Web
    Notification. Logged whenever showNotification is called.
  </summary>
</histogram>

<histogram name="Notifications.PersistentNotificationDataDeleted"
    enum="BooleanSuccess">
  <obsolete>
    Deprecated 01/2016, no longer used.
  </obsolete>
  <owner>peter@chromium.org</owner>
  <owner>deepak.m1@samsung.com</owner>
  <summary>
    Recorded when the data associated with a persistent Web Notification gets
    deleted. The value will be true if data deletion succeeded, and false if
    there was an error.
  </summary>
</histogram>

<histogram name="Notifications.PersistentWebNotificationClickResult"
    enum="PlatformNotificationStatus">
  <owner>peter@chromium.org</owner>
  <owner>deepak.m1@samsumg.com</owner>
  <summary>
    Recorded delivery status for persistent notification clicks to a Service
    Worker when handling a click on a persistent WebNotification has finished.
  </summary>
</histogram>

<histogram name="Notifications.PersistentWebNotificationCloseResult"
    enum="PlatformNotificationStatus">
  <owner>peter@chromium.org</owner>
  <owner>nsatragno@chromium.org</owner>
  <summary>
    Records delivery status for persistent notification close events sent to a
    Service Worker when the event has been handled.
  </summary>
</histogram>

<histogram name="Notifications.UsingNativeNotificationCenter"
    enum="BooleanNativeNotifications">
  <owner>thomasanderson@chromium.org</owner>
  <summary>
    Indicates if Chrome is using system notifications or the Chrome notification
    center.  Logged on each start up.
  </summary>
</histogram>

<histogram name="Notifications.Windows.ActivationStatus"
    enum="WindowsNotificationActivationStatus">
  <owner>finnur@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <owner>chengx@chromium.org</owner>
  <summary>
    The status of Activation requests in NotificationPlatformBridgeWin (Windows
    only). Logged whenever an activation from a notification occurs.
  </summary>
</histogram>

<histogram name="Notifications.Windows.CloseStatus"
    enum="WindowsNotificationCloseStatus">
  <owner>finnur@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    The status of Close requests in NotificationPlatformBridgeWin (Windows
    only). Logged whenever a notification is closed.
  </summary>
</histogram>

<histogram name="Notifications.Windows.DisplayStatus"
    enum="WindowsNotificationDisplayStatus">
  <owner>finnur@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    The status of Display requests in NotificationPlatformBridgeWin (Windows
    only). Logged whenever a notification is displayed.
  </summary>
</histogram>

<histogram name="Notifications.Windows.GetDisplayedLaunchIdStatus"
    enum="WindowsNotificationGetDisplayedLaunchIdStatus">
  <owner>finnur@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    The status of decoding launch ids while processing a GetDisplayed requests
    in NotificationPlatformBridgeWin (Windows only). Logged whenever a request
    to retrieve all displayed notifications comes in.
  </summary>
</histogram>

<histogram name="Notifications.Windows.GetDisplayedStatus"
    enum="WindowsNotificationGetDisplayedStatus">
  <owner>finnur@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    The status of GetDisplayedStatus requests in NotificationPlatformBridgeWin
    (Windows only). Logged whenever a request to retrieve all displayed
    notifications comes in.
  </summary>
</histogram>

<histogram name="Notifications.Windows.GetNotificationLaunchIdStatus"
    enum="WindowsNotificationGetNotificationLaunchIdStatus">
  <owner>finnur@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    The status of GetNotificationLaunchId requests in
    NotificationPlatformBridgeWin (Windows only). Logged whenever a request to
    decode the GetNotificationLaunchId comes in.
  </summary>
</histogram>

<histogram name="Notifications.Windows.GetSettingPolicy"
    enum="WindowsNotificationGetSettingPolicy">
  <owner>finnur@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    The policy value provided by get_Setting in NotificationPlatformBridgeWin
    (Windows only). Logged whenever a request to show a notification comes in.
  </summary>
</histogram>

<histogram name="Notifications.Windows.GetSettingStatus"
    enum="WindowsNotificationGetSettingStatus">
  <owner>finnur@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    The return value of get_Setting calls in NotificationPlatformBridgeWin
    (Windows only). Logged whenever a request to show a notification comes in.
  </summary>
</histogram>

<histogram name="Notifications.Windows.HandleEventStatus"
    enum="WindowsNotificationHandleEventStatus">
  <owner>finnur@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    The status of HandleEvent requests in NotificationPlatformBridgeWin (Windows
    only). Logged whenever a notification event is being handled.
  </summary>
</histogram>

<histogram name="Notifications.Windows.HistoryStatus"
    enum="WindowsNotificationHistoryStatus">
  <owner>finnur@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    The status of History requests in NotificationPlatformBridgeWin (Windows
    only). Logged whenever history is requested for notifications.
  </summary>
</histogram>

<histogram name="Notifications.Windows.LaunchIdDecodeStatus"
    enum="WindowsNotificationLaunchIdDecodeStatus">
  <owner>chengx@chromium.org</owner>
  <owner>finnur@chromium.org</owner>
  <summary>
    Used to indicate the status of decoding an input launch id string (Windows
    only). Logged whenever a notification event is being handled.
  </summary>
</histogram>

<histogram name="Notifications.Windows.OnDismissedStatus"
    enum="WindowsNotificationOnDismissedStatus">
  <owner>chengx@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    The status of OnDismissed requests in NotificationPlatformBridgeWin (Windows
    only). Logged whenever a dismiss event is handled.
  </summary>
</histogram>

<histogram name="Notifications.Windows.OnFailedStatus"
    enum="WindowsNotificationOnFailedStatus">
  <owner>chengx@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    The status of OnFailed requests in NotificationPlatformBridgeWin (Windows
    only). Logged whenever a failed event is handled.
  </summary>
</histogram>

<histogram name="Notifications.Windows.SetReadyCallbackStatus"
    enum="WindowsNotificationSetReadyCallbackStatus">
  <obsolete>
    Replaced with Notifications.Windows.SetReadyCallbackStatus2 which is not
    skewed.
  </obsolete>
  <owner>finnur@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    The status of SetReadyCallback requests in NotificationPlatformBridgeWin
    (Windows only). Logged once at startup.
  </summary>
</histogram>

<histogram name="Notifications.Windows.SetReadyCallbackStatus2"
    enum="WindowsNotificationSetReadyCallbackStatus2">
  <owner>chengx@chromium.org</owner>
  <owner>finnur@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    The status of SetReadyCallback requests in NotificationPlatformBridgeWin
    (Windows only). Logged once at startup.
  </summary>
</histogram>

<histogram name="Notifications.Windows.StartMenuShortcutStatus"
    enum="WindowsNotificationStartMenuShortcutStatus">
  <owner>chengx@chromium.org</owner>
  <owner>finnur@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    Used to indicate the status of start menu shortcut (Windows only). Logged
    whenever a notification display attempt is made.
  </summary>
</histogram>

<histogram name="Notifications.Windows.StartMenuShortStatus"
    enum="WindowsNotificationStartMenuShortStatus">
  <obsolete>
    Deprecated 06/2018. Replaced with
    Notifications.Windows.StartMenuShortcutStatus where typo is fixed.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <owner>finnur@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    Used to indicate the status of start menu shortcut (Windows only). Logged
    whenever a notification display attempt is made.
  </summary>
</histogram>

<histogram name="Notifications.Windows.UserManagerShowupStatus"
    enum="WindowsNotificationUserManagerShowupStatus">
  <obsolete>
    Deprecated 05/2018 as this is no longer needed.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    Used to indicate the code path where the user profile manager shows up
    during startup (Windows only). Logged whenever a notification event is being
    handled.
  </summary>
</histogram>

<histogram name="Notifications.XPCConnectionEvent" enum="XPCConnectionEvent">
  <owner>miguelg@chromium.org</owner>
  <owner>rsesek@chromium.org</owner>
  <summary>
    Mac only. Records the different events of a Notification XPC connection.
    These are recorded by monitoring the different error callbacks provided by
    the XPC connection object.
  </summary>
</histogram>

<histogram name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff"
    units="kbps">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the difference between the estimated downstream throughput (in
    kilobits per second) and the observed downstream throughput (in kilobits per
    second). Downstream throughput estimated by the network quality estimator at
    the time of navigation start is compared with the downstream throughput
    observed during the specified time interval following the start of the
    navigation.
  </summary>
</histogram>

<histogram name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff"
    units="Effective connection type">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the difference between the estimated effective connection type and
    the observed effective connection type. Effective connection type is
    estimated by the network quality estimator at the time of navigation start
    is compared with the effective connection type observed during the specified
    time interval following the start of the navigation.
  </summary>
</histogram>

<histogram name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff" units="ms">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the difference between the estimated HTTP RTT and the observed HTTP
    RTT. HTTP RTT estimated by the network quality estimator at the time of
    navigation start is compared with the HTTP RTT observed during the specified
    time interval following the start of the navigation.
  </summary>
</histogram>

<histogram name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff" units="ms">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the difference between the estimated transport RTT and the observed
    transport RTT. Transport RTT estimated by the network quality estimator at
    the time of navigation start is compared with the transport RTT observed
    during the specified time interval following the start of the navigation.
  </summary>
</histogram>

<histogram name="NQE.BDPComputationKbps.OnECTComputation" units="Kbps">
  <owner>devdeepray@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    The value of the downstream throughput used to compute the bandwidth delay
    product. The 80th percentile throughput observation is used to calculate the
    bandwidth delay product. This gets recorded everytime the BDP is computed.
  </summary>
</histogram>

<histogram name="NQE.BDPComputationTransportRTT.OnECTComputation" units="ms">
  <owner>devdeepray@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    The value of the TransportRTT used to compute the bandwidth delay product.
    The 20th percentile TransportRTT observation is used to calculate the
    bandwidth delay product. This gets recorded everytime the BDP is computed.
  </summary>
</histogram>

<histogram name="NQE.BDPKbits.OnECTComputation" units="kbits">
  <owner>devdeepray@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    An estimate of the bandwidth delay product which is computed on main-frame
    requests. It is calculated using the 80th percentile throughput and 20th
    percentile TransportRTT values whenever |ComputeEffectiveConnectionType| is
    called and the throughput and TransportRTT estimates are available.
  </summary>
</histogram>

<histogram name="NQE.CachedNetworkQualityAvailable" enum="BooleanAvailable">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records if the cached network quality (from memory or from a persistent
    source) was available. Recorded right after connection change event.
  </summary>
</histogram>

<histogram name="NQE.CellularSignalStrength.LevelAvailable"
    enum="BooleanAvailable">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Whether the signal strength for the cellular network was available or not.
    Recorded right before a connection change event. Recorded only on cellular
    connections on Android platform.
  </summary>
</histogram>

<histogram name="NQE.CellularSignalStrength.LevelDifference"
    units="Signal Strength Level">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Difference between the minimum and the maximum received signal strength
    since the last connection change event. Recorded only on cellular
    connections on Android platform when the cellular signal strength was
    available. Recorded right before a connection change event.
  </summary>
</histogram>

<histogram name="NQE.CellularSignalStrengthAvailable" enum="BooleanAvailable">
  <obsolete>
    Replaced by NQE.CellularSignalStrength.LevelAvailable in June 2017.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Whether the signal strength for the cellular network was available or not.
    Recorded right before a connection change event. Recorded only on cellular
    connections on Android platform.
  </summary>
</histogram>

<histogram name="NQE.CellularSignalStrengthDifference" units="dBm">
  <obsolete>
    Replaced by NQE.CellularSignalStrength.LevelDifference in June 2017.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Difference between the minimum and the maximum received signal strength
    since the last connection change event. Recorded only on cellular
    connections on Android platform when the cellular signal strength was
    available. Recorded right before a connection change event.
  </summary>
</histogram>

<histogram name="NQE.ContentObserver.NetworkQualityMeaningfullyChanged"
    enum="BooleanChanged">
  <owner>tbansal@chromium.org</owner>
  <summary>
    This metric is recorded when the network quality change notification is
    received by content and before the network quality change is notified to the
    renderers. Records true if the notified network quality change is
    meaningfully different from the last network quality notified to the
    renderers.
  </summary>
</histogram>

<histogram name="NQE.Correlation.ResourceLoadTime.0Kb_128Kb">
  <obsolete>
    Obsoleted in December 2017.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records estimated network quality (estimated RTT, estimated downlink
    bandwidth), resource load size, and the resource load time in a single UMA
    sample. This metric is recorded randomly when a resource load finishes. Each
    sample in this sparse histogram consists of multiple metrics (each occupying
    few bits in the sample). The data in the histogram would be analyzed using
    custom scripts. A sample is recorded only when the resource size is between
    0 Kilobits (inclusive) and 128 Kilobits (exclusive).
  </summary>
</histogram>

<histogram name="NQE.DifferenceRTTActualAndEstimated" units="ms">
  <obsolete>
    Replaced in June 2016 by NQE.Accuracy.HttpRTT.* metrics.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Difference between the actual RTT observation and the estimated RTT. This
    metric is recorded on every request when the actual observation is higher
    than the estimated value.
  </summary>
</histogram>

<histogram name="NQE.DifferenceRTTEstimatedAndActual" units="ms">
  <obsolete>
    Replaced in June 2016 by NQE.Accuracy.HttpRTT.* metrics.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Difference between the estimated RTT and the actual RTT observation. This
    metric is recorded on every request when the estimated value is higher than
    the actual observation.
  </summary>
</histogram>

<histogram name="NQE.EffectiveConnectionType.OnECTComputation"
    enum="NQEEffectiveConnectionType">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Effective connection type estimated by the network quality estimator.
    Recorded every time the effective connection type is computed.
  </summary>
</histogram>

<histogram name="NQE.EndToEndRTT.OnECTComputation" units="ms">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Rough estimate of the computed end-to-end round trip time. Recorded by the
    network quality estimator every time the effective connection type is
    computed.
  </summary>
</histogram>

<histogram name="NQE.EstimateAvailable.MainFrame" enum="Boolean">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    This histogram records whether the estimate of the network quality metric
    was available or not. Recorded at every main frame request.
  </summary>
</histogram>

<histogram name="NQE.ExternalEstimateProvider.DownlinkBandwidth" units="Kbps">
  <obsolete>
    Obsoleted in February 2018.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records the estimate of the downlink bandwidth (in Kbps) provided by the
    external estimate provided. Recorded every time the external estimate
    provider provides a valid downlink bandwidth estimate to the network quality
    estimator.
  </summary>
</histogram>

<histogram name="NQE.ExternalEstimateProvider.RTT" units="ms">
  <obsolete>
    Obsoleted in February 2018.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records the estimate of the RTT provided by the external estimate provided.
    Recorded every time the external estimate provider provides a valid RTT
    estimate to the network quality estimator.
  </summary>
</histogram>

<histogram
    name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff"
    units="ms">
  <obsolete>
    Obsoleted in February 2018.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the difference between the HTTP RTT estimated by the external
    estimate provider and the observed HTTP RTT. The HTTP RTT estimated by the
    external estimate provider at the time of navigation start is compared with
    the HTTP RTT observed during the specified time interval following the start
    of the navigation.
  </summary>
</histogram>

<histogram name="NQE.ExternalEstimateProviderStatus"
    enum="NQEExternalEstimateProviderStatus">
  <obsolete>
    Obsoleted in February 2018.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records the interaction (availability and query count) of Network Quality
    Estimator with external estimates provider. Logged on network change events,
    everytime external estimate provider is queried for an updated estimate, and
    when it proactively notifies that an updated estimate is available.
  </summary>
</histogram>

<histogram name="NQE.FastestRTT" units="ms">
  <obsolete>
    Obsoleted in August 2017
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Rough estimate of the fastest round-trip-time, before a connectivity change
    is detected.

    This metric is recorded when a connectivity change is detected. This will
    miss data from users whose connection type never changes and will be biased
    to users whose connection type changes frequently.
  </summary>
</histogram>

<histogram name="NQE.Kbps.ObservationSource" enum="NQEObservationSource">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Number of Kbps observations indexed by the source of the observation.
    Recorded by the network quality estimator every time a new observation is
    made or synthesized.
  </summary>
</histogram>

<histogram name="NQE.Kbps.OnECTComputation" units="Kbps">
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Rough estimate of the downstream peak throughput (in kilobits per second).
    Recorded by the network quality estimator every time the effective
    connection type is computed.
  </summary>
</histogram>

<histogram name="NQE.Kbps.RawObservation" units="Kbps">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Downstream throughput observation received or synthesized by network quality
    estimator. Observations from different sources are recorded in separate
    histograms.
  </summary>
</histogram>

<histogram name="NQE.MainFrame.EffectiveConnectionType"
    enum="NQEEffectiveConnectionType">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Effective connection type estimated by network quality estimator. Suffixed
    with the connection type reported by the operating system.

    This metric is recorded on main-frame requests.
  </summary>
</histogram>

<histogram name="NQE.MainFrame.Kbps" units="Kbps">
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Rough estimate of the downstream peak throughput at different percentiles.

    This metric is recorded on main-frame requests.
  </summary>
</histogram>

<histogram name="NQE.MainFrame.RTT" units="ms">
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Rough estimate of the computed round trip time at the URLRequest layer at
    different percentiles.

    This metric is recorded on main-frame requests.
  </summary>
</histogram>

<histogram name="NQE.MainFrame.TransportRTT" units="ms">
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Rough estimate of the computed round trip time at the transport layer at
    different percentiles.

    This metric is recorded on main-frame requests.
  </summary>
</histogram>

<histogram name="NQE.NetworkIdAvailable" enum="BooleanAvailable">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Whether the NetworkID (SSID of the Wi-Fi network, or the MCC/MNC operator of
    the cellular network) was available or not. Recorded only on Wi-Fi and
    cellular networks. Recorded right after the connection type changes.
  </summary>
</histogram>

<histogram name="NQE.PeakKbps" units="Kbps">
  <obsolete>
    Obsoleted in August 2017
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Rough estimate of downstream peak throughput, before a connectivity change
    is detected.

    This metric is recorded when a connectivity change is detected. This will
    miss data from users whose connection type never changes and will be biased
    to users whose connection type changes frequently.
  </summary>
</histogram>

<histogram name="NQE.Prefs.ReadCount" units="count">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Number of times the network quality prefs were read by the network quality
    estimator.
  </summary>
</histogram>

<histogram name="NQE.Prefs.ReadSize" units="count">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Count of the number of network IDs in the prefs read by the network quality
    estimator.
  </summary>
</histogram>

<histogram name="NQE.Prefs.WriteCount" units="count">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Number of times the network quality prefs were written by the network
    quality estimator.
  </summary>
</histogram>

<histogram name="NQE.RatioEstimatedToActualRTT" units="100 times">
  <obsolete>
    Replaced in June 2016 by NQE.Accuracy.HttpRTT.* metrics.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Ratio of the estimated RTT to the actual RTT observation multiplied by 100.
  </summary>
</histogram>

<histogram name="NQE.RenderThreadNotified" enum="BooleanHit">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Count of the number of times renderers were notified of the changes in the
    network quality estimator. This metric makes sense to compare in frequency
    relative to other events like the number of page loads or the number of
    renderers seen.  It is expected that we will see at least 1 notification per
    renderer (on average), and less than 100.
  </summary>
</histogram>

<histogram name="NQE.RTT" units="ms">
  <obsolete>
    Deprecated 01/2018.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Rough estimate of the computed round trip time at the URLRequest layer at
    different percentiles.

    This metric is recorded immediately after a connectivity change is detected.
    The metric name is suffixed with the connection type before the connectivity
    change was detected. This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NQE.RTT.HangingRequest" units="ms">
  <owner>tbansal@chromium.org</owner>
  <summary>
    HTTP RTT observation received by the network quality estimator.  Recorded
    when the request is detected as hanging.
  </summary>
</histogram>

<histogram name="NQE.RTT.NotAHangingRequest.HttpRTT" units="ms">
  <owner>tbansal@chromium.org</owner>
  <summary>
    HTTP RTT observation received by the network quality estimator.  Recorded
    when the request is detected as not hanging because it was comparable to the
    HTTP RTT estimate.
  </summary>
</histogram>

<histogram name="NQE.RTT.NotAHangingRequest.MinHttpBound" units="ms">
  <owner>tbansal@chromium.org</owner>
  <summary>
    HTTP RTT observation received by the network quality estimator.  Recorded
    when the request is detected as not hanging because the RTT value was lower
    than the minimum threshold RTT needed to be categorized as a hanging
    request.
  </summary>
</histogram>

<histogram name="NQE.RTT.NotAHangingRequest.TransportRTT" units="ms">
  <owner>tbansal@chromium.org</owner>
  <summary>
    HTTP RTT observation received by the network quality estimator.  Recorded
    when the request is detected as not hanging because it was comparable to the
    transport RTT estimate.
  </summary>
</histogram>

<histogram name="NQE.RTT.ObservationSource" enum="NQEObservationSource">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Number of RTT observations indexed by the source of the observation.
    Recorded by the network quality estimator every time a new observation is
    made or synthesized.
  </summary>
</histogram>

<histogram name="NQE.RTT.OnECTComputation" units="ms">
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Rough estimate of the round trip time at the URLRequest layer.  Recorded by
    the network quality estimator every time the effective connection type is
    computed.
  </summary>
</histogram>

<histogram name="NQE.RTT.RawObservation" units="ms">
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    RTT observation received or synthesized by network quality estimator.
    Observations from different sources are recorded in separate histograms.
  </summary>
</histogram>

<histogram name="NQE.RTTObservations" units="ms">
  <obsolete>
    Replaced in May 2016 by NQE.MainFrame.RTT.* metrics.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    RTT observations at the URLRequest layer made by network quality estimator,
    recorded on every request.
  </summary>
</histogram>

<histogram name="NQE.ThroughputAnalyzer.HangingRequests.Erased" units="count">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Count of the requests that were marked as hanging by the heuristic algorithm
    in the throughput analyzer in the network quality estimator. A sample is
    recorded everytime the heuristic algorithm is run.
  </summary>
</histogram>

<histogram name="NQE.ThroughputAnalyzer.HangingRequests.NotErased"
    units="count">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Count of the requests that were not marked as hanging by the heuristic
    algorithm in the throughput analyzer in the network quality estimator. A
    sample is recorded everytime the heuristic algorithm is run.
  </summary>
</histogram>

<histogram name="NQE.ThroughputObservation.Hanging" units="Kbps">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Throughput observation made by network quality estimator, and eventually
    discarded because the window (over which the througput was computed) was
    detected as hanging.
  </summary>
</histogram>

<histogram name="NQE.ThroughputObservation.NotHanging" units="Kbps">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Throughput observation made by network quality estimator, and used when the
    window (over which the througput was computed) was detected as not hanging.
  </summary>
</histogram>

<histogram name="NQE.TransportRTT" units="ms">
  <obsolete>
    Deprecated 01/2018.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Rough estimate of the computed round trip time at the transport layer at
    different percentiles.

    This metric is recorded immediately after a connectivity change is detected.
    The metric name is suffixed with the connection type before the connectivity
    change was detected. This will miss data from users whose connection type
    never changes and will be biased to users whose connection type changes
    frequently.
  </summary>
</histogram>

<histogram name="NQE.TransportRTT.OnECTComputation" units="ms">
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Rough estimate of the computed round trip time at the transport layer.
    Recorded by the network quality estimator every time the effective
    connection type is computed.
  </summary>
</histogram>

<histogram name="NQE.UnweightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff"
    units="ms">
  <obsolete>
    Obsoleted in August 2017.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the difference between the estimated HTTP RTT and the observed HTTP
    RTT. HTTP RTT estimated by the network quality estimator at the time of
    navigation start is compared with the HTTP RTT observed during the specified
    time interval following the start of the navigation. Both the estimated and
    the observed RTT are computed using average algorithm that assigns equal
    weight to all observations.
  </summary>
</histogram>

<histogram name="NQE.UnweightedAverage.MainFrame.RTT" units="ms">
  <obsolete>
    Obsoleted in August 2017.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Rough estimate of the computed round trip time at the URLRequest layer
    computed using average algorithm that assigns equal weight to all
    observations.

    This metric is recorded on main-frame requests.
  </summary>
</histogram>

<histogram name="NQE.WeightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff"
    units="ms">
  <obsolete>
    Obsoleted in August 2017.
  </obsolete>
  <owner>tbansal@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Records the difference between the estimated HTTP RTT and the observed HTTP
    RTT. HTTP RTT estimated by the network quality estimator at the time of
    navigation start is compared with the HTTP RTT observed during the specified
    time interval following the start of the navigation. Both the estimated and
    the observed RTT are computed using weighted average algorithm.
  </summary>
</histogram>

<histogram name="NQE.WeightedAverage.MainFrame.RTT" units="ms">
  <obsolete>
    Obsoleted in August 2017.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Rough estimate of the computed round trip time at the URLRequest layer
    computed using weighted average algorithm.

    This metric is recorded on main-frame requests.
  </summary>
</histogram>

<histogram name="ntp.searchurls.total">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>TBD</summary>
</histogram>

<histogram name="NtpHandler.AttachShownPageType" enum="NtpPaneType">
  <obsolete>
    Deprecated 10/2011. No longer tracked, replaced with
    NewTabPage.DefaultPageType
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The default pane when the NTP is first opened.</summary>
</histogram>

<histogram name="NtpHandler.SelectedShownPageType" enum="NtpPaneType">
  <obsolete>
    Deprecated 10/2011. No longer tracked, replaced with
    NewTabPage.SelectedPageType
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The pane selected when the user switches panes in the NTP.</summary>
</histogram>

<histogram name="OAuth2Login.AccountRevoked.IsEmailId" enum="Boolean">
  <owner>knn@chromium.org</owner>
  <summary>
    This histogram records whether the account ID is actually an email if we
    detect an account that has an account ID but not email.
  </summary>
</histogram>

<histogram name="OAuth2Login.AccountRevoked.MigrationState"
    enum="OAuth2LoginAccountRevokedMigrationState">
  <owner>knn@chromium.org</owner>
  <summary>
    This histogram records the account ID migration status from email to GAIA ID
    if we detect an account that has an account ID but not email.
  </summary>
</histogram>

<histogram name="OAuth2Login.GetOAuth2AccessTokenFailure"
    enum="GoogleServiceAuthError">
  <owner>zelidrag@chromium.org</owner>
  <summary>
    Failure reason of final OAuth2 access token retrieval call during Chrome OS
    login.
  </summary>
</histogram>

<histogram name="OAuth2Login.GetOAuth2AccessTokenRetry"
    enum="GoogleServiceAuthError">
  <owner>zelidrag@chromium.org</owner>
  <summary>
    Retry reason of failed OAuth2 access token retrieval call during Chrome OS
    login.
  </summary>
</histogram>

<histogram name="OAuth2Login.ListAccountsFailure" enum="GoogleServiceAuthError">
  <obsolete>
    Deprecated 2015-05-22. Replaced by Signin.ListAccountsFailure.
  </obsolete>
  <owner>zelidrag@chromium.org</owner>
  <summary>
    Failure reason of final ListAccounts call failure during Chrome OS login.
    This data is now included in Signin.ListAccountsFailure.
  </summary>
</histogram>

<histogram name="OAuth2Login.ListAccountsRetry" enum="GoogleServiceAuthError">
  <obsolete>
    Deprecated 2015-05-22. Replaced by Signin.ListAccountsRetry.
  </obsolete>
  <owner>zelidrag@chromium.org</owner>
  <summary>
    Retry reason of failed ListAccounts call during Chrome OS login. This data
    is now included in Signin.ListAccountsRetry.
  </summary>
</histogram>

<histogram name="OAuth2Login.MergeSessionFailure" enum="GoogleServiceAuthError">
  <owner>zelidrag@chromium.org</owner>
  <summary>
    Failure reason of MergeSession call during Chrome OS login, Chrome Signin or
    account addition. On all OSes as of M44 (previously CrOS only).
  </summary>
</histogram>

<histogram name="OAuth2Login.MergeSessionRetry" enum="GoogleServiceAuthError">
  <owner>zelidrag@chromium.org</owner>
  <summary>
    Retry reason of failed MergeSession call during Chrome OS login, Chrome
    Signin or account addition. On all OSes as of M44 (previously CrOS only).
  </summary>
</histogram>

<histogram name="OAuth2Login.OAuthLoginGaiaCredFailure"
    enum="GoogleServiceAuthError">
  <owner>zelidrag@chromium.org</owner>
  <summary>
    Failure reason of final OAuthLogin (with SID+LSID) call during Chrome OS
    login.
  </summary>
</histogram>

<histogram name="OAuth2Login.OAuthLoginGaiaCredRetry"
    enum="GoogleServiceAuthError">
  <owner>zelidrag@chromium.org</owner>
  <summary>
    Retry reason of failed OAuthLogin (with SID+LSID) call during Chrome OS
    login.
  </summary>
</histogram>

<histogram name="OAuth2Login.OAuthLoginUberTokenFailure"
    enum="GoogleServiceAuthError">
  <obsolete>
    Deprecated 2015-05-22
  </obsolete>
  <owner>zelidrag@chromium.org</owner>
  <summary>
    Failure reason of final OAuthLogin (with uber token) call during Chrome OS
    login. This data is now (M44+) included in Signin.UberTokenFailure.
  </summary>
</histogram>

<histogram name="OAuth2Login.OAuthLoginUberTokenRetry"
    enum="GoogleServiceAuthError">
  <obsolete>
    Deprecated 2015-05-22
  </obsolete>
  <owner>zelidrag@chromium.org</owner>
  <summary>
    Retry reason of failed OAuthLogin (with uber token) call during Chrome OS
    login. This data is now (M44+) included in Signin.UberTokenRetry.
  </summary>
</histogram>

<histogram name="OAuth2Login.PostMergeVerification"
    enum="PostMergeVerificationOutcome">
  <owner>zelidrag@chromium.org</owner>
  <summary>
    Outcome of Chrome OS GAIA cookie post-merge session verification process. It
    measures how often /MergeSession request collided with browser session
    restore process resulting in partially authenticated primary GAIA session.
  </summary>
</histogram>

<histogram name="OAuth2Login.PreMergeVerification"
    enum="PostMergeVerificationOutcome">
  <owner>zelidrag@chromium.org</owner>
  <summary>
    Outcome of Chrome OS GAIA cookie pre-merge session verification process. It
    measures how often we need to perform /MergeSession request to
    re-authenticated exisitng user with GAIA.
  </summary>
</histogram>

<histogram name="OAuth2Login.SeedState" enum="OAuth2LoginSeedState">
  <owner>knn@chromium.org</owner>
  <summary>
    Only applicable on M47 on Android. Measure the frequency of a suppressed
    error state when the account is not seeded.
  </summary>
</histogram>

<histogram name="OAuth2Login.SessionRestore" enum="GaiaSessionRestoreOutcome">
  <owner>zelidrag@chromium.org</owner>
  <summary>Outcome of Chrome OS GAIA cookie session restore process.</summary>
</histogram>

<histogram name="OAuth2Login.SessionRestoreTimeToFailure" units="ms">
  <owner>zelidrag@chromium.org</owner>
  <summary>How long it takes for the session restore to fail.</summary>
</histogram>

<histogram name="OAuth2Login.SessionRestoreTimeToSuccess" units="ms">
  <owner>zelidrag@chromium.org</owner>
  <summary>
    How long it takes for the session restore to finish succeessfully.
  </summary>
</histogram>

<histogram name="OfflineIndicator.CTR" enum="OfflineIndicatorCTREvent"
    expires_after="2019-06-30">
  <owner>dimich@chromium.org</owner>
  <owner>jianli@chromium.org</owner>
  <summary>
    Records events related to click through rate (CTR) calculation for Offline
    Indicator UI. The CTR can be calculated by computing Clicked/Displayed.
  </summary>
</histogram>

<histogram base="true" name="OfflinePages.AccessCount">
  <owner>jianli@chromium.org</owner>
  <summary>
    Number of accesses to the offline page since its creation. This is reported
    when the offline page was deleted.
  </summary>
</histogram>

<histogram name="OfflinePages.AccessEntryPoint"
    enum="OfflinePagesAccessEntryPoint">
  <owner>jianli@chromium.org</owner>
  <summary>
    Logs the UI location from which an offline page was launched.
  </summary>
</histogram>

<histogram name="OfflinePages.AccessPageCount"
    enum="OfflinePagesNamespaceEnumeration">
  <owner>romax@chromium.org</owner>
  <summary>
    Counts the number of times an offline page is accessed. Events are reported
    per offline pages namespace.
  </summary>
</histogram>

<histogram name="OfflinePages.AggregatedRequestResult"
    enum="OfflinePagesAggregatedRequestResult">
  <obsolete>
    Deprecated 2016-10, and replaced by OfflinePages.AggregatedRequestResult2.
  </obsolete>
  <owner>dimich@chromium.org</owner>
  <owner>jianli@chromium.org</owner>
  <summary>Result of servicing requests that may contain offline page.</summary>
</histogram>

<histogram name="OfflinePages.AggregatedRequestResult2"
    enum="OfflinePagesAggregatedRequestResult">
  <owner>dimich@chromium.org</owner>
  <owner>jianli@chromium.org</owner>
  <summary>Result of servicing requests that may contain offline page.</summary>
</histogram>

<histogram base="true"
    name="OfflinePages.ArchiveManager.ArchiveDirsCreationResult"
    enum="PlatformFileError">
  <obsolete>
    Deprecated 2017-10, and replaced by
    OfflinePages.ArchiveManager.ArchiveDirsCreationResult2 with suffixes for
    temporary and persistent pages.
  </obsolete>
  <owner>romax@chromium.org</owner>
  <summary>
    This is recorded every time the archive directory is being created. It
    doesn't include the case which the archive directory exists.
  </summary>
</histogram>

<histogram name="OfflinePages.ArchiveManager.ArchiveDirsCreationResult2"
    enum="PlatformFileError">
  <owner>romax@chromium.org</owner>
  <summary>
    This is recorded every time the archive directory is being created. It
    doesn't include the case which the archive directory exists. It has suffixes
    indicating results for temporary or persistent archives directories.
  </summary>
</histogram>

<histogram name="OfflinePages.Background.BackgroundLoadingFailedCode"
    enum="NetErrorCodes">
  <owner>chili@chromium.org</owner>
  <summary>The error codes that caused a page load failure.</summary>
</histogram>

<histogram name="OfflinePages.Background.CctApiDisableStatus"
    enum="OfflinePagesCctApiPrerenderAllowedStatus">
  <owner>petewil@chromium.org</owner>
  <summary>
    Reason for the Chrome Custom Tabs API prerender call to be ignored.

    There are several causes for the Chrome Custom Tabs API calls to be ignored,
    this tracks the potential causes so we can see how often the prerenderer
    doesn't prerender due to these being switched off.  Since this is checked
    elsewhere (CCTAPI), this only catches the user switching off the third party
    cookies or navigation prediction after the CCT API has checked.
  </summary>
</histogram>

<histogram
    name="OfflinePages.Background.EffectiveConnectionType.OffliningStartType"
    enum="NQEEffectiveConnectionType">
  <owner>petewil@chromium.org</owner>
  <summary>
    Effective connection type at the start of an offlining attempt for an
    attempt that eventually failed.

    This metric is recorded for RequestCoordinator::SavePageLater API calls.
  </summary>
</histogram>

<histogram name="OfflinePages.Background.EffectiveConnectionType.PauseRequests"
    enum="NQEEffectiveConnectionType">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Effective connection type when pausing one or more background loads is
    requested.

    This metric is recorded for RequestCoordinator::PauseRequests API calls.
  </summary>
</histogram>

<histogram
    name="OfflinePages.Background.EffectiveConnectionType.RemoveRequests"
    enum="NQEEffectiveConnectionType">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Effective connection type when removing one or more background loads is
    requested.

    This metric is recorded for RequestCoordinator::RemoveRequests API calls.
  </summary>
</histogram>

<histogram
    name="OfflinePages.Background.EffectiveConnectionType.ResumeRequests"
    enum="NQEEffectiveConnectionType">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Effective connection type when resuming one or more background loads is
    requested.

    This metric is recorded for RequestCoordinator::ResumeRequests API calls.
  </summary>
</histogram>

<histogram name="OfflinePages.Background.EffectiveConnectionType.SavePageLater"
    enum="NQEEffectiveConnectionType">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Effective connection type when a background load is requested.

    This metric is recorded for RequestCoordinator::SavePageLater API calls.
  </summary>
</histogram>

<histogram name="OfflinePages.Background.FinalSavePageResult"
    enum="OfflinePagesBackgroundSavePageResult">
  <owner>chili@chromium.org</owner>
  <summary>
    Status code of background offlining requests at the final step.
  </summary>
</histogram>

<histogram name="OfflinePages.Background.ImmediateStart.AvailableRequestCount">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Number of queued background load requests available for processing when
    processing starts immediately (vs. scheduled). This is for non-svelte
    devices (where svelte is determined by base::SysInfo::IsLowEnd()).
  </summary>
</histogram>

<histogram
    name="OfflinePages.Background.ImmediateStart.AvailableRequestCount.Svelte">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Number of queued background load requests available for processing when
    processing starts immediately (vs. scheduled). This is for svelte devices
    (where svelte is determined by base::SysInfo::IsLowEnd()).
  </summary>
</histogram>

<histogram
    name="OfflinePages.Background.ImmediateStart.UnavailableRequestCount">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Number of queued background load requests unavailable for processing when
    processing starts immediately (vs. scheduled). This is for non-svelte
    devices (where svelte is determined by base::SysInfo::IsLowEnd()).
  </summary>
</histogram>

<histogram
    name="OfflinePages.Background.ImmediateStart.UnavailableRequestCount.Svelte">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Number of queued background load requests unavailable for processing when
    processing starts immediately (vs. scheduled). This is for svelte devices
    (where svelte is determined by base::SysInfo::IsLowEnd()).
  </summary>
</histogram>

<histogram name="OfflinePages.Background.ImmediateStartStatus"
    enum="OfflinePagesBackgroundImmediateStartStatus">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Status of attempt to immediately start offlining a page in the background
    while application is still concurrently using the foreground. This may be
    attempted when an web page download is initially requested or resumed.
  </summary>
</histogram>

<histogram name="OfflinePages.Background.LoadingErrorStatusCode"
    enum="CombinedHttpResponseAndNetErrorCode">
  <owner>chili@chromium.org</owner>
  <summary>
    The combined http and net error codes that caused a page load failure.
  </summary>
</histogram>

<histogram name="OfflinePages.Background.OfflinerRequestStatus"
    enum="OfflinePagesBackgroundOfflinerRequestStatus">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Status code of background offlining (loading and saving) requests.
  </summary>
</histogram>

<histogram name="OfflinePages.Background.OffliningPreviewStatus"
    enum="BooleanEnabled">
  <owner>petewil@chromium.org</owner>
  <summary>
    Whether any previews were selected for a page we were asked to make
    available offline.
  </summary>
</histogram>

<histogram name="OfflinePages.Background.RequestFailure.StartedAttemptCount">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Number of started attempts by failed background load requests.
  </summary>
</histogram>

<histogram name="OfflinePages.Background.RequestSuccess.StartedAttemptCount">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Number of started attempts by successful background load requests.
  </summary>
</histogram>

<histogram name="OfflinePages.Background.ResourceCompletion.Css"
    enum="BooleanEnabled">
  <owner>petewil@chromium.org</owner>
  <summary>
    True if all requested CSS was loaded when a background page loaded.
  </summary>
</histogram>

<histogram name="OfflinePages.Background.ResourceCompletion.Image"
    enum="BooleanEnabled">
  <owner>petewil@chromium.org</owner>
  <summary>
    True if all requested images were loaded when a background page loaded.
  </summary>
</histogram>

<histogram name="OfflinePages.Background.ResourceCompletion.Xhr"
    enum="BooleanEnabled">
  <owner>petewil@chromium.org</owner>
  <summary>
    True if all requested XHRs were completed when a background page loaded.
  </summary>
</histogram>

<histogram name="OfflinePages.Background.SavePageFromCCT">
  <owner>chili@chromium.org</owner>
  <summary>Whether the save page result came from chrome custom tabs.</summary>
</histogram>

<histogram name="OfflinePages.Background.ScheduledStart.AvailableRequestCount">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Number of queued background load requests available for processing when
    background scheduled processing starts. This is for non-svelte devices
    (where svelte is determined by base::SysInfo::IsLowEnd()).
  </summary>
</histogram>

<histogram
    name="OfflinePages.Background.ScheduledStart.AvailableRequestCount.Svelte">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Number of queued background load requests available for processing when
    background scheduled processing starts. This is for svelte devices (where
    svelte is determined by base::SysInfo::IsLowEnd()).
  </summary>
</histogram>

<histogram
    name="OfflinePages.Background.ScheduledStart.UnavailableRequestCount">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Number of queued background load requests unavailable for processing when
    background scheduled processing starts. This is for non-svelte devices
    (where svelte is determined by base::SysInfo::IsLowEnd()).
  </summary>
</histogram>

<histogram
    name="OfflinePages.Background.ScheduledStart.UnavailableRequestCount.Svelte">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Number of queued background load requests unavailable for processing when
    background scheduled processing starts. This is for svelte devices (where
    svelte is determined by base::SysInfo::IsLowEnd()).
  </summary>
</histogram>

<histogram name="OfflinePages.Background.TimeToCanceled" units="seconds">
  <owner>dougarnett@chromium.org</owner>
  <summary>Time from background request until it was canceled.</summary>
</histogram>

<histogram name="OfflinePages.Background.TimeToSaved" units="seconds">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Time from background request until it was successfully saved.
  </summary>
</histogram>

<histogram name="OfflinePages.Background.TimeToStart" units="ms">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Time from background request until processing it was first started. This is
    for non-svelte devices.
  </summary>
</histogram>

<histogram name="OfflinePages.Background.TimeToStart.Svelte" units="ms">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Time from background request until processing it was first started on svelte
    device. Svelte is determined by base::SysInfo::IsLowEnd().
  </summary>
</histogram>

<histogram name="OfflinePages.Background.UnsupportedScheme.ConnectionType"
    enum="NetworkConnectionType">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Connection type when prerenderer reports Unsupported Scheme error.

    To give insight about Unsupported Scheme errors that may be due to lost
    network connection (as data URL used for rendering an error page will
    manifest as an Unsupported Scheme error by the prerenderer).
  </summary>
</histogram>

<histogram name="OfflinePages.BatchDelete.Count">
  <obsolete>
    Deprecated 2/2018. No longer used.
  </obsolete>
  <owner>jianli@chromium.org</owner>
  <summary>Number of offline pages that are deleted in a batch.</summary>
</histogram>

<histogram name="OfflinePages.BatchDelete.TotalPageSize" units="KB">
  <owner>jianli@chromium.org</owner>
  <summary>
    Total size, in kilobytes, of all offline pages that are deleted in a batch.
  </summary>
</histogram>

<histogram name="OfflinePages.CanSaveRecentPage" enum="Boolean"
    expires_after="2018-12-31">
  <owner>carlosk@chromium.org</owner>
  <owner>fgorski@chromium.org</owner>
  <summary>
    Can a recent page be saved or not? Logged for all attempts to save
  </summary>
</histogram>

<histogram name="OfflinePages.CleanupThumbnails.Count" units="thumbnails">
  <owner>harringtond@chromium.org</owner>
  <summary>Number of thumbnails removed by the thumbnail cleanup task.</summary>
</histogram>

<histogram name="OfflinePages.ClearAllStatus" enum="OfflinePagesClearAllStatus">
  <obsolete>
    Deprecated 3/2016, and replaced by OfflinePages.ClearAllStatus2.
  </obsolete>
  <owner>jianli@chromium.org</owner>
  <summary>Status code of wiping out the offline page data.</summary>
</histogram>

<histogram name="OfflinePages.ClearAllStatus2"
    enum="OfflinePagesClearAllStatus">
  <owner>jianli@chromium.org</owner>
  <summary>Status code of wiping out the offline page data.</summary>
</histogram>

<histogram name="OfflinePages.ClearStorageBatchSize" units="pages">
  <obsolete>
    Deprecated as of Jan 2018, replaced by
    OfflinePages.ClearTemporaryPages.BatchSize.
  </obsolete>
  <owner>romax@chromium.org</owner>
  <summary>
    Number of pages deleted in a batch during one clear-storage request.
  </summary>
</histogram>

<histogram name="OfflinePages.ClearStoragePreRunUsage" units="bytes">
  <obsolete>
    Deprecated in Oct 2017 and replaced by OfflinePages.ClearStoragePreRunUsage2
    as it was reporting data in bytes instead of the expected MiB.
  </obsolete>
  <owner>petewil@chromium.org</owner>
  <summary>
    The total storage size used by all offline pages from a specific client
    namespace.
  </summary>
</histogram>

<histogram name="OfflinePages.ClearStoragePreRunUsage2" units="KiB">
  <owner>carlosk@chromium.org</owner>
  <summary>
    The total disk storage size used by all offline pages from a specific client
    namespace.
  </summary>
</histogram>

<histogram name="OfflinePages.ClearStorageResult"
    enum="OfflinePagesClearStorageResult">
  <obsolete>
    Deprecated as of Jan 2018, replaced by
    OfflinePages.ClearTemporaryPages.Result.
  </obsolete>
  <owner>romax@chromium.org</owner>
  <summary>Result of asking storage manager to clear storage.</summary>
</histogram>

<histogram name="OfflinePages.ClearTemporaryPages.BatchSize" units="pages">
  <owner>romax@chromium.org</owner>
  <summary>
    Number of pages deleted in a batch in one clear storage task.
  </summary>
</histogram>

<histogram name="OfflinePages.ClearTemporaryPages.Result"
    enum="OfflinePagesClearStorageResult">
  <owner>romax@chromium.org</owner>
  <summary>
    Result of clearing temporary pages to release storage space.
  </summary>
</histogram>

<histogram name="OfflinePages.ClearTemporaryPages.TimeSinceCreation"
    units="minutes">
  <owner>carlosk@chromium.org</owner>
  <summary>
    When a temporary page is deleted due to storage pressure, reports the time
    since its creation. This metric should be useful to track the occurrence of
    &quot;content thrashing&quot;, when automatically created temporary pages
    are forcing the deletion of recently saved temporary pages.
  </summary>
</histogram>

<histogram name="OfflinePages.Consistency.DeleteOrphanedArchivesResult"
    enum="BooleanSuccess">
  <obsolete>
    Deprecated 12/2017, replaced by
    OfflinePages.ConsistencyCheck.Temporary.Result and
    OfflinePages.ConsistencyCheck.Persistent.Result.
  </obsolete>
  <owner>romax@chromium.org</owner>
  <summary>
    Whether an attempt to delete archive files without metadata was successful.
  </summary>
</histogram>

<histogram name="OfflinePages.Consistency.DeletePagesMissingArchiveFileResult"
    enum="OfflinePagesDeletePageResult">
  <obsolete>
    Deprecated 12/2017, replaced by
    OfflinePages.ConsistencyCheck.Temporary.Result and
    OfflinePages.ConsistencyCheck.Persistent.Result.
  </obsolete>
  <owner>romax@chromium.org</owner>
  <summary>
    Whether an attempt to delete pages without archives was successful.
  </summary>
</histogram>

<histogram name="OfflinePages.Consistency.ExpirePagesMissingArchiveFileResult"
    enum="BooleanSuccess">
  <obsolete>
    Deprecated 11/2016, replaced by
    OfflinePages.Consistency.DeletePagesMissingArchiveFileResult.
  </obsolete>
  <owner>romax@chromium.org</owner>
  <summary>
    Whether an attempt to expire pages without archives was successful.
  </summary>
</histogram>

<histogram name="OfflinePages.Consistency.OrphanedArchivesCount">
  <obsolete>
    Deprecated 12/2017, replaced by
    OfflinePages.ConsistencyCheck.Temporary.PagesMissingDbEntryCount and
    OfflinePages.ConsistencyCheck.Persistent.PagesMissingDbEntryCount.
  </obsolete>
  <owner>romax@chromium.org</owner>
  <summary>
    Number of archives without metadata entry when checking consistency.
  </summary>
</histogram>

<histogram name="OfflinePages.Consistency.PagesMissingArchiveFileCount">
  <obsolete>
    Deprecated 12/2017, replaced by
    OfflinePages.ConsistencyCheck.Temporary.PagesMissingArchiveFileCount and
    OfflinePages.ConsistencyCheck.Persistent.PagesMissingArchiveFileCount.
  </obsolete>
  <owner>romax@chromium.org</owner>
  <summary>
    Number of offline pages without archive file when checking consistency.
  </summary>
</histogram>

<histogram name="OfflinePages.ConsistencyCheck.Legacy.DeletedHeadlessFileCount"
    units="files">
  <owner>romax@chromium.org</owner>
  <summary>
    Number of files which are deleted during legacy dir clearing since they have
    no associated DB entry and live in private directory.
  </summary>
</histogram>

<histogram name="OfflinePages.ConsistencyCheck.Persistent.ExpiredEntryCount"
    units="entries">
  <owner>romax@chromium.org</owner>
  <summary>
    Number of DB entries (in persistent namespaces) that have been missing their
    files for longer than 365 days, and deleted during maintenance task.
  </summary>
</histogram>

<histogram name="OfflinePages.ConsistencyCheck.Persistent.MissingFileCount"
    units="files">
  <owner>romax@chromium.org</owner>
  <summary>
    Number of files that are found missing during maintenance task, which is
    also the number of DB entries that are updated with valid file missing time.
  </summary>
</histogram>

<histogram
    name="OfflinePages.ConsistencyCheck.Persistent.PagesMissingArchiveFileCount"
    units="pages">
  <obsolete>
    Deprecated 04/2018, since saving public offline pages to external download
    directory needs a different consistency check strategy.
  </obsolete>
  <owner>romax@chromium.org</owner>
  <summary>
    Number of persistent offline pages without archive file when checking
    consistency. It will only be reported if the number is larger than 0.
  </summary>
</histogram>

<histogram
    name="OfflinePages.ConsistencyCheck.Persistent.PagesMissingDbEntryCount"
    units="pages">
  <obsolete>
    Deprecated 04/2018, since saving public offline pages to external download
    directory needs a different consistency check strategy.
  </obsolete>
  <owner>romax@chromium.org</owner>
  <summary>
    Number of archives without database entry when checking persistent page
    consistency. It will only be reported if the number is larger than 0.
  </summary>
</histogram>

<histogram name="OfflinePages.ConsistencyCheck.Persistent.ReappearedFileCount"
    units="files">
  <owner>romax@chromium.org</owner>
  <summary>
    Number of files that were marked as missing reappeared in the file system,
    which is also the number of DB entries that removes file missing time.
  </summary>
</histogram>

<histogram name="OfflinePages.ConsistencyCheck.Persistent.Result"
    enum="OfflinePagesSyncOperationResult">
  <owner>romax@chromium.org</owner>
  <summary>Result of persistent page consistency check.</summary>
</histogram>

<histogram
    name="OfflinePages.ConsistencyCheck.Temporary.PagesMissingArchiveFileCount"
    units="pages">
  <owner>romax@chromium.org</owner>
  <summary>
    Number of temporary offline pages without archive file when checking
    consistency. It will only be reported if the number is larger than 0.
  </summary>
</histogram>

<histogram
    name="OfflinePages.ConsistencyCheck.Temporary.PagesMissingDbEntryCount"
    units="pages">
  <owner>romax@chromium.org</owner>
  <summary>
    Number of archives without database entry when checking temporary page
    consistency. It will only be reported if the number is larger than 0.
  </summary>
</histogram>

<histogram name="OfflinePages.ConsistencyCheck.Temporary.Result"
    enum="OfflinePagesSyncOperationResult">
  <owner>romax@chromium.org</owner>
  <summary>Result of temporary page consistency check.</summary>
</histogram>

<histogram name="OfflinePages.DeletePage.AccessCount">
  <obsolete>
    Deprecated as of 12/2017. Replaced by OfflinePages.AccessCount.
  </obsolete>
  <owner>jianli@chromium.org</owner>
  <summary>
    Number of accesses to the offline page since its creation. This is reported
    when the offline page was deleted.
  </summary>
</histogram>

<histogram name="OfflinePages.DeletePage.FreeSpaceMB" units="MB">
  <obsolete>
    Deprecated 2/2018. No longer used, duplicate of
    OfflinePages.SavePage.FreeSpaceMB.
  </obsolete>
  <owner>jianli@chromium.org</owner>
  <summary>
    The amount of free space available, in megabytes, on the user's device after
    the page is deleted.

    Note that before M52 this operation was started before delete operation.
  </summary>
</histogram>

<histogram name="OfflinePages.DeletePage.FreeSpacePercentage" units="%">
  <obsolete>
    Deprecated as of 5/2016. Marginal applicability.
  </obsolete>
  <owner>jianli@chromium.org</owner>
  <summary>
    The percentage of free space available on the user's device when the page is
    being deleted.
  </summary>
</histogram>

<histogram name="OfflinePages.DeletePage.LastOpenToCreated" units="minutes">
  <obsolete>
    Deprecated as of 01/2018. Replaced by OfflinePages.PageAccessInterval.
  </obsolete>
  <owner>jianli@chromium.org</owner>
  <summary>
    Length of time between when an offline page was created and was opened last
    time. This is reported when the page was deleted.
  </summary>
</histogram>

<histogram name="OfflinePages.DeletePage.PageSize" units="KB">
  <obsolete>
    Deprecated 2/2018. No longer used, duplicate of OfflinePages.PageSize.
  </obsolete>
  <owner>jianli@chromium.org</owner>
  <summary>Size of the offline page, in kilobytes, that was deleted.</summary>
</histogram>

<histogram name="OfflinePages.DeletePage.TimeSinceLastOpen" units="minutes">
  <obsolete>
    Deprecated as of 01/2018. Replaced by OfflinePages.PageAccessInterval.
  </obsolete>
  <owner>jianli@chromium.org</owner>
  <summary>
    Length of time between when an offline page was last opened and was deleted.
  </summary>
</histogram>

<histogram name="OfflinePages.DeletePage.TotalPageSizeAsPercentageOfFreeSpace"
    units="%">
  <obsolete>
    Deprecated as of 03/2018. Replaced by similar metric
    OfflinePages.StorageInfo.InternalUsagePercentage and
    OfflinePages.StorageInfo.ExternalUsagePercentage.
  </obsolete>
  <owner>fgorski@chromium.org</owner>
  <owner>jianli@chromium.org</owner>
  <summary>
    The percentage of space taken by offline pages from the free space that
    could be available, if the feature was not present. I.e. considering
    situation where the user has: Free Space, Offline content, other apps and
    data. This is a percentage of: Offline content / (Offline content + Free
    Space).

    The value will be recorded after user deletes a single or multiple offline
    pages. In case pages are removed in bulk, this value will be reported once.
    This value is only reported with deleting, as we are trying to infer if lack
    of free space might have caused the user to delete.
  </summary>
</histogram>

<histogram name="OfflinePages.DeletePageCount"
    enum="OfflinePagesNamespaceEnumeration">
  <owner>romax@chromium.org</owner>
  <summary>
    Counts the number of times an offline page is deleted. Events are reported
    per offline pages namespace.
  </summary>
</histogram>

<histogram name="OfflinePages.DeletePageResult"
    enum="OfflinePagesDeletePageResult">
  <owner>jianli@chromium.org</owner>
  <summary>Result of removing an offline copy for a page.</summary>
</histogram>

<histogram name="OfflinePages.DownloadDeletedPageDuplicateCount" units="pages">
  <obsolete>
    Deprecated 2/2018. No longer used.
  </obsolete>
  <owner>dewittj@chromium.org</owner>
  <owner>dimich@chromium.org</owner>
  <summary>
    The number of downloaded pages with the same URL that exist at the time that
    we delete a downloaded page.
  </summary>
</histogram>

<histogram name="OfflinePages.DownloadRequestTimeSinceDuplicateRequested"
    units="seconds">
  <owner>dewittj@chromium.org</owner>
  <owner>fgorski@chromium.org</owner>
  <summary>
    If at request time there is another request with the same URL, this tracks
    this amount of time between creation of the most recent request and the
    current request.
  </summary>
</histogram>

<histogram name="OfflinePages.DownloadRequestTimeSinceDuplicateSaved"
    units="seconds">
  <owner>dewittj@chromium.org</owner>
  <owner>fgorski@chromium.org</owner>
  <summary>
    If at request time there is another downloaded page with the same URL, this
    tracks this amount of time between creation of the most recent existing page
    and the current request.
  </summary>
</histogram>

<histogram name="OfflinePages.DownloadSavedPageDuplicateCount" units="pages">
  <obsolete>
    Deprecated 2/2018. No longer used.
  </obsolete>
  <owner>dewittj@chromium.org</owner>
  <owner>dimich@chromium.org</owner>
  <summary>
    The number of downloaded pages with the same URL that exist at the time that
    we save a downloaded page.
  </summary>
</histogram>

<histogram name="OfflinePages.DownloadSavedPageTimeSinceDuplicateSaved"
    units="seconds">
  <obsolete>
    Deprecated 2/2018. No longer used.
  </obsolete>
  <owner>dewittj@chromium.org</owner>
  <owner>dimich@chromium.org</owner>
  <summary>
    If at save time there is another downloaded page with the same URL, this
    tracks this amount of time between creation of the most recent existing page
    and the current page.
  </summary>
</histogram>

<histogram name="OfflinePages.DownloadUI.PrefetchedItemHasThumbnail"
    enum="BooleanAvailable">
  <owner>harringtond@chromium.org</owner>
  <summary>
    Whether or not a thumbnail was provided for a prefetched offline article.
    Recorded when the item is shown in Downloads Home.
  </summary>
</histogram>

<histogram name="OfflinePages.Edit.BookmarkUrlChangedForOfflinePage"
    enum="BooleanMatched">
  <obsolete>
    Deprecated 5/2016. Offline pages no longer depend on bookmarks UI.
  </obsolete>
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Whether a user-edited bookmark URL had a saved offline page.
  </summary>
</histogram>

<histogram name="OfflinePages.ExpirePage.BatchSize">
  <obsolete>
    Deprecated 11/2016. Offline pages no longer use two-step expiration.
  </obsolete>
  <owner>romax@chromium.org</owner>
  <summary>Number of pages that are expired in a batch.</summary>
</histogram>

<histogram name="OfflinePages.ExpirePage.PageLifetime" units="minutes">
  <obsolete>
    Deprecated 11/2016. Offline pages no longer use two-step expiration.
  </obsolete>
  <owner>romax@chromium.org</owner>
  <summary>
    Length of time between when an offline page was created and was expired.
  </summary>
</histogram>

<histogram name="OfflinePages.ExpirePage.StoreUpdateResult"
    enum="BooleanSuccess">
  <obsolete>
    Deprecated 11/2016. Offline pages no longer use two-step expiration.
  </obsolete>
  <owner>romax@chromium.org</owner>
  <summary>Result of updating expired page in store.</summary>
</histogram>

<histogram name="OfflinePages.ExpirePage.TimeSinceLastAccess" units="minutes">
  <obsolete>
    Deprecated 11/2016. Offline pages no longer use two-step expiration.
  </obsolete>
  <owner>romax@chromium.org</owner>
  <summary>
    Length of time between when an offline page was last opened and was expired.
  </summary>
</histogram>

<histogram name="OfflinePages.Filter.OnlineWhenEntering" enum="Boolean">
  <obsolete>
    Deprecated 5/2016. Offline pages no longer depend on bookmarks UI.
  </obsolete>
  <owner>fgorski@chromium.org</owner>
  <owner>jianli@chromium.org</owner>
  <summary>
    Whether user is connected when entering the filter with offline only
    content.
  </summary>
</histogram>

<histogram name="OfflinePages.Filter.OnlineWhenLeaving" enum="Boolean">
  <obsolete>
    Deprecated 5/2016. Offline pages no longer depend on bookmarks UI.
  </obsolete>
  <owner>fgorski@chromium.org</owner>
  <owner>jianli@chromium.org</owner>
  <summary>
    Whether user is connected when leaving the filter with offline only content.
  </summary>
</histogram>

<histogram name="OfflinePages.FirstOpenSinceCreated" units="minutes">
  <obsolete>
    Deprecated 2/2018. Merged to OfflinePages.PageAccessInterval.
  </obsolete>
  <owner>jianli@chromium.org</owner>
  <summary>
    The time elapsed between creation of the offline page and the first time it
    was opened.
  </summary>
</histogram>

<histogram name="OfflinePages.IncognitoSave" enum="Boolean">
  <obsolete>
    Deprecated 5/2016. Not longer needed.
  </obsolete>
  <owner>jianli@chromium.org</owner>
  <summary>
    Whether the page that was being saved offline was in incognito mode.
  </summary>
</histogram>

<histogram name="OfflinePages.LastN.IsSavingSamePage"
    enum="OfflinePagesLastNIsSavingSamePageEnum" expires_after="2018-12-31">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Upon starting saving a new last_n offline page snapshot, report if that is
    being done for a page that is new (a navigation happened) or for one that
    has been previously saved in the same session (no navigation happened). This
    metric will assist in determining if there is the need to better track
    actual content changes in pages saved more than once by last_n.
  </summary>
</histogram>

<histogram name="OfflinePages.LaunchLocation" enum="StarsLaunchLocation">
  <obsolete>
    Deprecated 5/2016. Offline pages no longer depend on bookmarks UI.
  </obsolete>
  <owner>fgorski@chromium.org</owner>
  <owner>jianli@chromium.org</owner>
  <summary>Logs a UI location from which an offline page is launched.</summary>
</histogram>

<histogram name="OfflinePages.LoadStatus" enum="OfflinePagesLoadStatus">
  <owner>jianli@chromium.org</owner>
  <summary>
    Status code of loading from the offline pages metadata store.
  </summary>
</histogram>

<histogram name="OfflinePages.LoadSuccess" enum="BooleanSuccess">
  <obsolete>
    Deprecated 10/2015, and replaced by OfflinePages.LoadStatus.
  </obsolete>
  <owner>jianli@chromium.org</owner>
  <summary>
    Whether an attempt to load the offline pages metadata store was successful.
  </summary>
</histogram>

<histogram name="OfflinePages.Model.ArchiveDirCreationTime" units="ms">
  <obsolete>
    Deprecated 2/2018. No longer used.
  </obsolete>
  <owner>dewittj@chromium.org</owner>
  <owner>jianli@chromium.org</owner>
  <summary>
    The amount of time to create the offline pages archive directory.
  </summary>
</histogram>

<histogram name="OfflinePages.Model.ConstructionToLoadedEventTime" units="ms">
  <owner>dewittj@chromium.org</owner>
  <owner>jianli@chromium.org</owner>
  <summary>
    The amount of time to create the offline pages archive directory and load
    the offline page model.
  </summary>
</histogram>

<histogram name="OfflinePages.Model.FinalLoadSuccessful" enum="Boolean">
  <obsolete>
    Deprecated 2/2018. No longer used.
  </obsolete>
  <owner>dimich@chromium.org</owner>
  <summary>
    Whether the metadata database was successfully loaded, after possibly
    several retries.
  </summary>
</histogram>

<histogram name="OfflinePages.Model.InitAttemptsSpent" units="attempts">
  <obsolete>
    Deprecated 2/2018. No longer used.
  </obsolete>
  <owner>dimich@chromium.org</owner>
  <summary>
    The count of attempts spent to open the metadata database. In the best case,
    it's 1. There is a small upper limit. This is recorded only at success.
    Failures are counted by OfflinePages.Model.FinalLoadSuccessful.
  </summary>
</histogram>

<histogram name="OfflinePages.OfflinePageCount">
  <obsolete>
    Deprecated 5/2016. This was the dup of OfflinePages.SavedPageCount.
  </obsolete>
  <owner>fgorski@chromium.org</owner>
  <owner>jianli@chromium.org</owner>
  <summary>Number of offline pages the user has. Android only.</summary>
</histogram>

<histogram name="OfflinePages.OfflineUsage" enum="OfflinePagesOfflineUsage">
  <owner>dimich@chromium.org</owner>
  <summary>
    Enum-based buckets reflect the number of days the Chrome was used in each
    specific way: - Not used at all during whole day. - Started, but failed to
    successfully navigate. - Only navigated to offline pages locally saved on
    the device. - Only navigated online. - Navigated to both online and offline
    pages. This data is accumulated locally and reported when connection is
    likely to succeed (usually after successful online navigation).
  </summary>
</histogram>

<histogram name="OfflinePages.OnlineOnOpen" enum="Boolean">
  <obsolete>
    Deprecated 5/2016. Offline pages no longer depend on bookmarks UI.
  </obsolete>
  <owner>jianli@chromium.org</owner>
  <summary>
    Whether the user was online when a saved page with offline copy was opened.
  </summary>
</histogram>

<histogram name="OfflinePages.OpenSinceLastOpen" units="minutes">
  <obsolete>
    Deprecated 2/2018. Merged to OfflinePages.PageAccessInterval.
  </obsolete>
  <owner>jianli@chromium.org</owner>
  <summary>Length of time between two consecutive opens.</summary>
</histogram>

<histogram base="true" name="OfflinePages.PageAccessInterval" units="minutes">
  <owner>romax@chromium.org</owner>
  <summary>
    Length of time between accesses to an offline page. This is the same time
    period used for expiring temporary pages. This metric is recorded when an
    offline page is accessed.
  </summary>
</histogram>

<histogram base="true" name="OfflinePages.PageLifetime" units="minutes">
  <owner>jianli@chromium.org</owner>
  <summary>
    Length of time between when an offline page was created and was removed.
  </summary>
</histogram>

<histogram base="true" name="OfflinePages.PageSize" units="KB">
  <owner>jianli@chromium.org</owner>
  <summary>Size of the saved copy of an offline page.</summary>
</histogram>

<histogram name="OfflinePages.PageSizeOnAccess.Offline" units="KiB">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Records the archive size of an offline page loaded during a navigation that
    took place while the device was considered to be offline or with poor
    connectivity.
  </summary>
</histogram>

<histogram name="OfflinePages.PageSizeOnAccess.Online" units="KiB">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Records the archive size of an offline page loaded during a navigation that
    took place while the device was considered to be online.
  </summary>
</histogram>

<histogram name="OfflinePages.PrefetchEnabled" enum="BooleanEnabled">
  <owner>dimich@chromium.org</owner>
  <summary>
    Whether the Offline Pages Prefetch was effectively enabled during the day.
    Determined by a combination of flags and user preferences. Reported at the
    same moment as OfflinePages.OfflineUsage.
  </summary>
</histogram>

<histogram name="OfflinePages.Prefetching.ActionAttempts" units="attempts">
  <owner>dewittj@chromium.org</owner>
  <summary>
    Number of attempts to perform a specific retriable pipeline action for each
    finished prefetch item.
  </summary>
</histogram>

<histogram name="OfflinePages.Prefetching.ActionRetryAttempts" units="attempts">
  <obsolete>
    Deprecated 9/2017. Replaced by OfflinePages.Prefetching.ActionAttempts
  </obsolete>
  <owner>carlosk@chromium.org</owner>
  <summary>
    Number of attempts to perform a specific retriable pipeline action for each
    finished prefetch item.
  </summary>
</histogram>

<histogram name="OfflinePages.Prefetching.DownloadedArchiveSizeVsExpected"
    enum="OfflinePrefetchArchiveActualSizeVsExpected">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Reports differences between the expected size of a prefetch archive -- as
    reported by the service -- and the actual downloaded file size.
  </summary>
</histogram>

<histogram name="OfflinePages.Prefetching.DownloadedFileSize" units="KiB">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Actual size of archive file successfully downloaded by offline page
    prefetching.
  </summary>
</histogram>

<histogram name="OfflinePages.Prefetching.DownloadExpectedFileSize" units="KiB">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Expected size of archive file that started being downloaded by offline page
    prefetching.
  </summary>
</histogram>

<histogram name="OfflinePages.Prefetching.DownloadFinishedUpdate"
    enum="OfflinePrefetchDownloadFinishedOutcome">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Reports the possible outcomes of an archive download finishing and its
    respective prefetch item being updated in the store. Downloads are expected
    to succeed or fail but a respective item should always exist and be updated.
    The &quot;item not found&quot; cases are exceptions.
  </summary>
</histogram>

<histogram name="OfflinePages.Prefetching.FetchThumbnail.Complete"
    enum="OfflinePagesThumbnailFetchStatus" expires_after="2018-11-30">
  <obsolete>
    Deprecated as of 5/2018. Replaced with
    OfflinePages.Prefetching.FetchThumbnail.Complete2.
  </obsolete>
  <owner>harringtond@chromium.org</owner>
  <summary>
    Records the final status of attempts to fetch thumbnails for prefetched
    offline pages.
  </summary>
</histogram>

<histogram name="OfflinePages.Prefetching.FetchThumbnail.Complete2"
    enum="OfflinePagesThumbnailFetchStatus" expires_after="2019-05-30">
  <owner>harringtond@chromium.org</owner>
  <owner>carlosk@chromium.org</owner>
  <summary>
    Records the final status of attempts to fetch thumbnails for prefetched
    offline pages. The 1st attempt takes place right after the prefetch item was
    sent to the cloud service as part of a request for the creation of its
    offline snapshot. The 2nd attempt occurs right after the offline snapshot
    was successfully downloaded by the client.
  </summary>
</histogram>

<histogram name="OfflinePages.Prefetching.FetchThumbnail.Start" enum="Boolean">
  <owner>harringtond@chromium.org</owner>
  <summary>Reports each time a thumbnail fetch is attempted.</summary>
</histogram>

<histogram name="OfflinePages.Prefetching.FinishedItemErrorCode"
    enum="OfflinePrefetchItemErrorCode">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Error code representing the reason why each offline prefetch item was
    finalized.
  </summary>
</histogram>

<histogram name="OfflinePages.Prefetching.ItemLifetime" units="seconds">
  <owner>carlosk@chromium.org</owner>
  <summary>
    The lifetime of an offline prefetch item, from creation until
    &quot;zombie-fication&quot; (after metrics collection).
  </summary>
</histogram>

<histogram name="OfflinePages.Prefetching.NotificationAction"
    enum="OfflinePagePrefetchNotificationAction">
  <owner>dewittj@chromium.org</owner>
  <summary>
    Actions taken with respect to the offline prefetch notification, includes
    show attempts to calculate CTR.
  </summary>
</histogram>

<histogram name="OfflinePages.Prefetching.OfflinePageImportResult"
    enum="OfflinePrefetchPageImportResult">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Final result of an attempt to import a prefetched article into the Offline
    Pages system.
  </summary>
</histogram>

<histogram name="OfflinePages.Prefetching.ServiceGetOperationStatus"
    enum="OfflinePrefetchRequestStatus">
  <owner>petewil@chromium.org</owner>
  <summary>
    Status returned by a request to the Offline Page Service's GetOperation
    method.
  </summary>
</histogram>

<histogram name="OfflinePages.Prefetching.ServiceGetPageBundleStatus"
    enum="OfflinePrefetchRequestStatus">
  <owner>petewil@chromium.org</owner>
  <summary>
    Status returned by a request to the Offline Page Service's GetPageBundle
    method.
  </summary>
</histogram>

<histogram name="OfflinePages.Prefetching.StateCounts"
    enum="OfflinePrefetchItemState">
  <owner>petewil@chromium.org</owner>
  <summary>
    A prefetch item was seen in this state when starting the background task.
  </summary>
</histogram>

<histogram name="OfflinePages.Prefetching.StuckItemState"
    enum="OfflinePrefetchItemState">
  <owner>petewil@chromium.org</owner>
  <summary>
    A prefetch item was found in this state after more than 7 days since its
    creation, time enough for it to have been finalized by the pipeline.
  </summary>
</histogram>

<histogram name="OfflinePages.Prefetching.UniqueUrlsAddedCount" units="urls">
  <owner>dewittj@chromium.org</owner>
  <summary>
    When receiving suggestions in the prefetch pipeline, emits the number of new
    suggestions added to the database. If there is an error, nothing is emitted.
  </summary>
</histogram>

<histogram name="OfflinePages.PrefetchStore.StoreEvent"
    enum="OfflinePagesStoreEvent">
  <owner>fgorski@chromium.org</owner>
  <summary>
    Counts when the offline pages prefetch store is opened or closed.
  </summary>
</histogram>

<histogram name="OfflinePages.PrefetchStore.TimeFromCloseToOpen" units="ms">
  <owner>fgorski@chromium.org</owner>
  <summary>
    Tracks the time between store closing and reopening again within a session.
    The store is meant to close itself after a period of inactivity. We are
    trying to assess how much time the store is unloaded from memory vs. time it
    is loaded and not used. This event will be reported when the store is opened
    after being closed within the same lifetime of Chrome.
  </summary>
</histogram>

<histogram name="OfflinePages.PrefetchUsage" enum="OfflinePagesPrefetchUsage">
  <owner>dimich@chromium.org</owner>
  <summary>
    Enum-based buckets reflect the number of days the Offline Pages Prefetch was
    able to fetch new pages, and/or user was opening those pages. This data is
    accumulated locally when fetch operations complete or when prefetched pages
    are opened (often happens in background or while offline respectively), and
    reported when connection is likely to succeed (usually after successful
    online navigation).
  </summary>
</histogram>

<histogram name="OfflinePages.PublishArchive.CreateDirectoryError"
    enum="PlatformFileError">
  <owner>petewil@chromium.org</owner>
  <summary>
    When publishing an archive, we create the download directory if it doesn't
    already exist.  If we get an error, we record it here.
  </summary>
</histogram>

<histogram name="OfflinePages.PublishArchive.MoveFileError"
    enum="PopularOSErrno">
  <owner>petewil@chromium.org</owner>
  <summary>
    When publishing an offline page, the move file step can fail.  This returns
    the reason for failure as a linux errno.
  </summary>
</histogram>

<histogram name="OfflinePages.PublishArchive.MoveFileFailureReason"
    enum="OfflinePagesPublishArchiveMoveFileFailureReason">
  <owner>petewil@chromium.org</owner>
  <summary>
    When a move file fails for publishing, what caused the failure.
  </summary>
</histogram>

<histogram name="OfflinePages.PublishArchive.PublishSource"
    enum="OfflinePagesPublishSource">
  <owner>petewil@chromium.org</owner>
  <summary>
    When publishing an offline page, a page might not be found.  This returns
    the publishing path that was used (ex: by Guid or by OfflineId).
  </summary>
</histogram>

<histogram name="OfflinePages.PublishPageResult"
    enum="OfflinePagesSavePageResult">
  <owner>petewil@chromium.org</owner>
  <summary>
    Failure attempting to move a file while publishing downloaded page.
  </summary>
</histogram>

<histogram name="OfflinePages.RedirectResult" enum="OfflinePagesRedirectResult">
  <obsolete>
    Deprecated 8/2016. Use OfflinePages.RequestResult instead.
  </obsolete>
  <owner>dimich@chromium.org</owner>
  <summary>
    Result of automatic redirect to offline version of the page or back. Emitted
    exactly once when offline-to-online or online-to-offline redirect is
    determined to be needed and conveys the outcome of redirect.
  </summary>
</histogram>

<histogram name="OfflinePages.RedirectToOfflineCount" units="count">
  <obsolete>
    Deprecated 6/2016. Refactored into OfflinePages.RedirectResult.
  </obsolete>
  <owner>jianli@chromium.org</owner>
  <summary>
    Number of times an offline copy was loaded instead when the user is trying
    to load the online version of a saved page and there is no network
    connection.
  </summary>
</histogram>

<histogram name="OfflinePages.RedirectToOnlineCount" units="count">
  <obsolete>
    Deprecated 6/2016. Refactored into OfflinePages.RedirectResult.
  </obsolete>
  <owner>jianli@chromium.org</owner>
  <summary>
    Number of times an online version was loaded instead when the user is trying
    to load the offline copy of a saved page and there is network connection.
    connection.
  </summary>
</histogram>

<histogram name="OfflinePages.RequestJob.IntentDataChangedAfterValidation"
    enum="BooleanChanged">
  <owner>jianli@chromium.org</owner>
  <summary>
    Records whether the content read from intent URI (file:// or content://)
    changed after the initial validation that was done to route the request when
    the intent was received. This is recorded at the time that Offline Page
    Request Handler tried to read the data, in preparation to show an offline
    page to a user.
  </summary>
</histogram>

<histogram name="OfflinePages.RequestJob.OpenFileErrorCode"
    enum="NetErrorCodes">
  <owner>jianli@chromium.org</owner>
  <summary>
    Positive net error code for opening the underlying file to serve the offline
    page, including net::OK.
  </summary>
</histogram>

<histogram name="OfflinePages.RequestJob.RangeHeader" enum="BooleanExists">
  <owner>jianli@chromium.org</owner>
  <summary>
    Track whether the range header is provided when an offline page is served.
  </summary>
</histogram>

<histogram name="OfflinePages.RequestJob.ReadFileErrorCode"
    enum="NetErrorCodes">
  <owner>jianli@chromium.org</owner>
  <summary>
    Positive net error code for the failure to read the underlying file to serve
    the offline page. net::OK is not included.
  </summary>
</histogram>

<histogram name="OfflinePages.RequestJob.SeekFileErrorCode"
    enum="NetErrorCodes">
  <owner>jianli@chromium.org</owner>
  <summary>
    Positive net error code for the failure to seek the underlying file to serve
    the offline page. net::OK is not included.
  </summary>
</histogram>

<histogram name="OfflinePages.SavedPageCount" units="pages">
  <obsolete>
    Deprecated as of 2/2018. Replaced by OfflinePages.SavedPageCountUponQuery.
  </obsolete>
  <owner>jianli@chromium.org</owner>
  <summary>
    Number of saved pages restored from the offline pages metadata store when it
    is logged.
  </summary>
</histogram>

<histogram name="OfflinePages.SavedPageCountUponQuery" units="pages">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Total number of saved offline pages recorded when they are all queried from
    the store. This value is more meaningful when filtered by unique users as
    that eliminates multiple reports from the same Chrome instance.
  </summary>
</histogram>

<histogram name="OfflinePages.SavePage.FreeSpaceMB" units="MB">
  <obsolete>
    Deprecated as of 03/2018. Replaced by similar metric
    OfflinePages.StorageInfo.InternalFreeSpaceMB.
  </obsolete>
  <owner>jianli@chromium.org</owner>
  <summary>
    The amount of free space available, in megabytes, on the user's device after
    the page is saved.

    Note that before M52 this operation was started before save operation.
  </summary>
</histogram>

<histogram name="OfflinePages.SavePage.FreeSpacePercentage" units="%">
  <obsolete>
    Deprecated as of 5/2016. Marginal applicability.
  </obsolete>
  <owner>jianli@chromium.org</owner>
  <summary>
    The percentage of free space available on the user's device when the page is
    being saved.
  </summary>
</histogram>

<histogram name="OfflinePages.SavePage.PercentLoaded" units="%">
  <owner>dfalcantara@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <owner>ianwen@chromium.org</owner>
  <summary>
    The percentage of the page load completed when the button to save an offline
    page is pressed.
  </summary>
</histogram>

<histogram name="OfflinePages.SavePageCount"
    enum="OfflinePagesNamespaceEnumeration">
  <owner>romax@chromium.org</owner>
  <summary>
    Counts the number of times an offline page is saved. Events are reported per
    offline pages namespace.
  </summary>
</histogram>

<histogram base="true" name="OfflinePages.SavePageResult"
    enum="OfflinePagesSavePageResult">
  <owner>jianli@chromium.org</owner>
  <summary>Result of saving an offline copy for a page.</summary>
</histogram>

<histogram base="true" name="OfflinePages.SavePageTime" units="ms">
  <owner>jianli@chromium.org</owner>
  <summary>
    The amount of time taken to save an offline copy for a page.
  </summary>
</histogram>

<histogram name="OfflinePages.SharedPageWasOffline"
    enum="OfflinePagesSharedPageWasOffline">
  <owner>dewittj@chromium.org</owner>
  <summary>Whether a shared page was an offline page or not.</summary>
</histogram>

<histogram name="OfflinePages.Sharing.PublishInternalPageResult"
    enum="OfflinePagesSavePageResult">
  <owner>romax@chromium.org</owner>
  <summary>
    Result of publishing internal page while sharing. CANCELLED means the page
    to publish isn't found. ALREADY_EXISTS means the page have already been
    published before.
  </summary>
</histogram>

<histogram name="OfflinePages.ShowOfflinePageOnBadNetwork" enum="Boolean">
  <obsolete>
    Deprecated 6/2016. Refactored into OfflinePages.RedirectResult.
  </obsolete>
  <owner>jianli@chromium.org</owner>
  <summary>
    Whether an offline page is shown, instead of error page, when the network is
    disconnected or poor condition.
  </summary>
</histogram>

<histogram name="OfflinePages.SQLStorage.CreateDirectoryResult"
    enum="PlatformFileError">
  <owner>dimich@chromium.org</owner>
  <summary>
    If the directory to store the SQLite database file does not exist, it is
    created. This is recorded every time the database is opened, even if the
    directory already exists, in which case it's reported as FILE_OK.
  </summary>
</histogram>

<histogram name="OfflinePages.SQLStorage.StoreEvent"
    enum="OfflinePagesStoreEvent">
  <owner>fgorski@chromium.org</owner>
  <summary>
    Used as a counter to track different events related to offline page store
    inner working.
  </summary>
</histogram>

<histogram name="OfflinePages.SQLStorage.TimeFromCloseToOpen" units="ms">
  <owner>fgorski@chromium.org</owner>
  <summary>
    Tracks the time between store closing and reopening again. The store is
    meant to close itself after a period of inactivity. We are trying to assess
    how much time the store is unloaded from memory vs. time it is loaded and
    not used. This event will be reported when the store is opened after being
    closed within the same lifetime of Chrome.
  </summary>
</histogram>

<histogram name="OfflinePages.StorageInfo.ExternalArchiveSizeMiB" units="MiB">
  <owner>romax@chromium.org</owner>
  <summary>
    The storage space used by the archive files of offline pages, including all
    files in public directory with mhtml/mht extensions. Collected after every
    time an offline page is saved successfully.
  </summary>
</histogram>

<histogram name="OfflinePages.StorageInfo.ExternalFreeSpaceMiB" units="MiB">
  <owner>romax@chromium.org</owner>
  <summary>
    The amount of free space on the external drive (which contains the public
    download directory). Collected after every time an offline page is saved
    successfully.
  </summary>
</histogram>

<histogram name="OfflinePages.StorageInfo.ExternalUsagePercentage" units="%">
  <owner>romax@chromium.org</owner>
  <summary>
    The percentage of storage space on the external volume (that contains public
    download directory) used by offline pages archives.
  </summary>
</histogram>

<histogram name="OfflinePages.StorageInfo.InternalArchiveSizeMiB" units="MiB">
  <owner>romax@chromium.org</owner>
  <summary>
    The storage space used by the archive files of offline pages, including the
    files in temporary and private directory. Collected after every time an
    offline page is saved successfully.
  </summary>
</histogram>

<histogram name="OfflinePages.StorageInfo.InternalFreeSpaceMiB" units="MiB">
  <owner>romax@chromium.org</owner>
  <summary>
    The amount of free space on the internal drive (which contains the app
    directory). Collected after every time an offline page is saved
    successfully.
  </summary>
</histogram>

<histogram name="OfflinePages.StorageInfo.InternalUsagePercentage" units="%">
  <owner>romax@chromium.org</owner>
  <summary>
    The percentage of storage space on internal volume (that contains the app
    directory) used by offline pages archives.
  </summary>
</histogram>

<histogram name="OfflinePages.TabRestore" enum="OfflinePagesTabRestoreType">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Tracks the reload of contents of an existing tab that is being restored
    either because that tab is being presented for the first time after Chrome
    was restarted or because its contents were discarded. All buckets are
    mutually exclusive (adding up all reported values amounts to the total
    number of tracked tab restores). This metric is focused on last_n offline
    pages and is exclusive to Chrome on Android.
  </summary>
</histogram>

<histogram name="OfflinePages.TotalPageSize" units="MB">
  <obsolete>
    Deprecated as of 03/2018. Replaced by similar metric
    OfflinePages.StorageInfo.TotalArchiveSize.
  </obsolete>
  <owner>fgorski@chromium.org</owner>
  <owner>jianli@chromium.org</owner>
  <summary>
    Total size of all the offline pages saved by the user.

    This value is recorded whenever the number of pages change, meaning after a
    page is added or removed. If pages are removed in bulk, this value will be
    reported only once.
  </summary>
</histogram>

<histogram name="OfflinePages.TotalPageSizePercentage" units="%">
  <obsolete>
    Deprecated as of 5/2016. Marginal applicability.
  </obsolete>
  <owner>fgorski@chromium.org</owner>
  <owner>jianli@chromium.org</owner>
  <summary>
    Total size of all the offline pages saved by the user as a percentage of
    total storage size.

    This value is recorded whenever the number of pages change, meaning after a
    page is added or removed.
  </summary>
</histogram>

<histogram name="OfflinePages.TrustStateOnOpen" enum="OfflinePageTrustedState">
  <owner>jianli@chromium.org</owner>
  <summary>
    The trust state of the offline page. This is recorded when an offline page
    is being opened.
  </summary>
</histogram>

<histogram name="OfflinePages.Wakeup.BatteryPercentage" units="%">
  <owner>petewil@chromium.org</owner>
  <owner>jianli@chromium.org</owner>
  <summary>
    Percentage of battery remaining when the offline page background loading
    task wakes up to check for work.
  </summary>
</histogram>

<histogram name="OfflinePages.Wakeup.ConnectedToPower" enum="BooleanConnected">
  <owner>petewil@chromium.org</owner>
  <owner>jianli@chromium.org</owner>
  <summary>
    Whether the device is plugged in when the offline page background load task
    wakes up to check or work.
  </summary>
</histogram>

<histogram name="OfflinePages.Wakeup.DelayTime" units="ms">
  <owner>petewil@chromium.org</owner>
  <owner>jianli@chromium.org</owner>
  <summary>
    Time delay from a dinosaur page to connection being available.
  </summary>
</histogram>

<histogram name="OfflinePages.Wakeup.NetworkAvailable"
    enum="NetworkConnectionType">
  <owner>petewil@chromium.org</owner>
  <owner>jianli@chromium.org</owner>
  <summary>
    Which network is available (if any) when the offling page background loading
    task wakes up to check for work.
  </summary>
</histogram>

<histogram
    name="OfflinePages.WebsiteSettings.ConnectedWhenOpenOnlineButtonClicked"
    enum="BooleanConnected">
  <owner>fgorski@chromium.org</owner>
  <summary>
    Indicates whether the browser was connected when Open online button was
    clicked on Page Info popup, which causes a reload of an offline page to
    online version.
  </summary>
</histogram>

<histogram name="OfflinePages.WebsiteSettings.OpenOnlineButtonVisible"
    enum="BooleanVisible">
  <owner>fgorski@chromium.org</owner>
  <summary>
    Indicates whether Open online was visible in Page Info popup, when it was
    shown for an offline page. (The button is visible only when Chrome is
    connected when the Page Info popup is opened for offline page.)
  </summary>
</histogram>

<histogram name="OfflinePolicy.SuccessfulResourceLoadPercentage" units="%">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    When a page is loaded in offline mode, the percentage of resources on that
    page that were successfully loaded.
  </summary>
</histogram>

<histogram name="Omnibox.AggressiveHistoryURLProviderFieldTrialBeacon"
    enum="OmniboxAggressiveHistoryURLProviderFieldTrialBeacon">
  <obsolete>
    Aggressive HistoryURL provider field trial deleted in spring 2012.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    A number that indicates what omnibox ranking behavior the user is seeing as
    part of the OmniboxAggressiveHistoryURLProvider field trial
    (OmniboxAggressiveHistoryURLProvider).
  </summary>
</histogram>

<histogram name="Omnibox.AnswerParseSuccess" enum="BooleanSuccess">
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    For each answer received in suggest responses, the number that are
    well-formed and contain all the required elements.
  </summary>
</histogram>

<histogram name="Omnibox.AnswerParseType" enum="SuggestionAnswerType">
  <owner>jdonnelly@chromium.org</owner>
  <summary>
    The number of times each omnibox suggestion answer type (e.g., weather,
    sports score) was received and parsed successfully. Can be normalized with
    the count of emits to Omnibox.SuggestRequest.Success.GoogleResponseTime,
    which counts all successful suggest responses from Google, not just those
    with answers attached. Note that GoogleResponseTime is technically off given
    that it will still count cases where we fail to extract, deserialize, or
    parse the response. But these cases are rare to non-existent.
  </summary>
</histogram>

<histogram name="Omnibox.CharTypedToRepaintLatency" units="ms">
  <owner>asvitkine@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <summary>
    Records the time taken between a keystroke being typed in the omnibox and
    the text being painted. If there are multiple keystrokes before a paint,
    logs the time since the earliest one.

    This duration is composed of three parts:

    a) the time spent processing the initial input event

    b) the time spent for the repaint task to be scheduled on the message loop

    c) the time spent painting the Omnibox

    d) (on views platforms) the time until the pixels are actually composited

    There's a number of breakdown metrics to help diagnose a regression. First,
    Omnibox.CharTypedToRepaintLatency.ToPaint measures the combined time of (a)
    and (b). Omnibox.QueryTime2 is a good proxy for just (a). And there's also
    Omnibox.PaintTime that corresponds to (c). We don't have a direct metric for
    (d), but if neither Omnibox.CharTypedToRepaintLatency.ToPaint nor
    Omnibox.PaintTime regressed, then the regression must be in (d).

    It's also possible to get insight into (b) via the UMA Task Profiler
    dashboard by looking at &quot;average queue time&quot; of the task
    DisplayScheduler::ScheduleBeginFrameDeadline.

    Note: The semantics of this metric on views platforms changed in M62, as
    previously time (d) was not included in the metric.
  </summary>
</histogram>

<histogram name="Omnibox.CharTypedToRepaintLatency.Composited" units="ms">
  <obsolete>
    This became the new implementation of Omnibox.CharTypedToRepaintLatency as
    of 08/2017.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <summary>
    A refinement of the Omnibox.CharTypedToRepaintLatency metric that attempts
    to more accurately track the latency by measuring until the point when the
    compositor has actually put pixels on the screen. In particular, this will
    capture the time used to also paint the Omnibox result views as a result of
    the character insertion, which is not covered by
    Omnibox.CharTypedToRepaintLatency. If there are multiple keystrokes before a
    paint, logs the time since the earliest one.
  </summary>
</histogram>

<histogram name="Omnibox.CharTypedToRepaintLatency.ToPaint" units="ms">
  <owner>asvitkine@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <summary>
    Records the time taken between a keystroke being typed in the omnibox and
    the time when we're ready to paint the omnibox. This is a breakdown
    diagnostic metric for Omnibox.CharTypedToRepaintLatency, to help diagnose
    regressions in that metric. See that metric's description for more info.
  </summary>
</histogram>

<histogram name="Omnibox.ClipboardSuggestionShownAge" units="ms">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Recorded every time the omnibox is focussed and a recent URL from the user's
    clipboard is suggested.  The value indicates the estimated age of the
    clipboard.  (If Chrome observed the clipboard modification, this age is
    exact.  If Chrome did not observe the modification, then it's a conservative
    estimate: the last time Chrome observed a clipboard modification, which is
    certainly older than the current clipboard.  If Chrome never observed a
    clipboard modification, no clipboard suggestion is shown, meaning this
    histogram will never be emitted to.)

    Intended to be compared with MobileOmnibox.PressedClipboardSuggestionAge.
  </summary>
</histogram>

<histogram name="Omnibox.ClipboardSuggestionShownNumTimes">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Recorded every time the omnibox is focussed and a recent URL from the user's
    clipboard is suggested.  The number emitted is the number of times the URL
    has been suggested within the same session including the current time. Thus,
    the third time it is shown, we'll emit a three to this histogram, and this
    histogram will have previously seen emits of one and two.  If the clipboard
    content was the same during a previous run of Chrome and this URL was
    suggested during that run, those impressions are not counted.  Also, if the
    clipboard content changes during a particular run of Chrome to another URL,
    the omnibox is focused and that URL is suggested, then content changes back
    and Chrome starts suggesting the older URL again, the counts start again
    from scratch. Chrome only remembers the number of times the URL was shown
    consecutively.

    This value is useful to compare with the number of times a clipboard
    suggestion has been shown when it is clicked.  This value can be obtained
    from OmniboxEvent records in which the selected suggestion is from Clipboard
    provider.  In those cases, look in the Clipboard provider's ProviderInfo
    field for |times_returned_results_in_session|.  Note that at the time of
    this writing that OmniboxEvent logs aren't recorded in incognito whereas
    histograms are.  Thus, the total counts will not be comparable, though the
    distributions should be.
  </summary>
</histogram>

<histogram name="Omnibox.ClipboardSuggestionShownWithCurrentURL"
    enum="BooleanPresent">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Recorded every time the omnibox is focussed and a recent URL from the user's
    clipboard is suggested.  The value indicates whether the current URL was
    shown (which would appear above the clipboard URL suggestion) or was absent
    (which ought to only happen when the omnibox is empty / the user is on the
    NTP).

    On Android, the total count for this histogram can be usefully compared with
    the count of the user action FocusLocation in order to determine the rate at
    which a clipboard URL suggestion is shown in the omnibox.  To determine the
    same rate on iOS, one needs to compare this histogram's count with the sum
    of the user actions MobileFocusedOmniboxOnNtp, MobileFocusedFakeboxOnNtp,
    and MobileFocusedOmniboxNotOnNtp.

    Furthermore, on either platform, this histogram's count can be usefully
    compared with the count in the clipboard bucket of the
    Omnibox.SuggestionUsed.Provider histogram to determine the clickthrough rate
    on these suggestions.
  </summary>
</histogram>

<histogram name="Omnibox.CutOrCopyAllText" units="count">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The number of cut or copy commands on all selected text in the omnibox.
    Gathered on desktop platforms (Win, Mac, Linux, Chrome OS).
  </summary>
</histogram>

<histogram name="Omnibox.DocumentSuggest.Requests"
    enum="OmniboxDocumentSuggestRequests">
  <owner>skare@chromium.org</owner>
  <summary>
    Counts the number of document suggest requests the omnibox sent, were
    invalidated, and were completed successfully.
  </summary>
</histogram>

<histogram name="Omnibox.DocumentSuggest.ResultCount" units="count"
    expires_after="M72">
  <owner>skare@chromium.org</owner>
  <summary>
    Number of results returned in each document suggestion reply. Logged for
    successful requests where the provider returned a parseable result set.
  </summary>
</histogram>

<histogram name="Omnibox.EnteredKeywordMode" enum="OmniboxEnteredKeywordMode">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The number of times users enter keyword hint mode &quot;Search ___
    for:&quot; and how.
  </summary>
</histogram>

<histogram name="Omnibox.FocusToEditTime" units="ms">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The length of time between when a user focused on the omnibox and first
    modifies the omnibox.
  </summary>
</histogram>

<histogram name="Omnibox.FocusToOpenTime" units="ms">
  <obsolete>
    Replaced with Omnibox.FocusToOpenTimeAnyPopupState in April 2014.
  </obsolete>
  <owner>mpearson@chromium.org</owner>
  <summary>
    The length of time between when a user focused on the omnibox and opened an
    omnibox match (which could be what they typed or a suggestion).
  </summary>
</histogram>

<histogram name="Omnibox.FocusToOpenTimeAnyPopupState" units="ms">
  <obsolete>
    Replaced with Omnibox.FocusToOpenTimeAnyPopupState2 in August, 2016.
  </obsolete>
  <owner>mpearson@chromium.org</owner>
  <summary>
    The length of time between when a user focused on the omnibox and opened an
    omnibox match (which could be what they typed or a suggestion).  This is
    recorded regardless of whether the omnibox dropdown (a.k.a. popup) is open.
  </summary>
</histogram>

<histogram name="Omnibox.FocusToOpenTimeAnyPopupState2" units="ms">
  <obsolete>
    Replaced with Omnibox.FocusToOpenTimeAnyPopupState3 in January, 2017, which
    only differs in the bucketing and range.
  </obsolete>
  <owner>mpearson@chromium.org</owner>
  <summary>
    The length of time between when a user focused on the omnibox and opened an
    omnibox match (which could be what they typed or a suggestion).  This is
    recorded regardless of whether the omnibox dropdown (a.k.a. popup) is open.
    It is not recorded if a match is opened without triggering a focus event,
    e.g., when a user drags a URL to the omnibox to navigate.

    To know how common this last condition is, compare the total count of this
    histogram to the total number of omnibox events.
  </summary>
</histogram>

<histogram name="Omnibox.FocusToOpenTimeAnyPopupState3" units="ms">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The length of time between when a user focused on the omnibox and opened an
    omnibox match (which could be what they typed or a suggestion).  This is
    recorded regardless of whether the omnibox dropdown (a.k.a. popup) is open.
    It is not recorded if a match is opened without triggering a focus event,
    e.g., when a user drags a URL to the omnibox to navigate.

    To know how common this last condition is, compare the total count of this
    histogram to the total number of omnibox events.
  </summary>
</histogram>

<histogram name="Omnibox.HardwareKeyboardModeEnabled" enum="BooleanEnabled">
  <owner>lpromero@chromium.org</owner>
  <summary>
    iOS: Records whether a hardware keyboard is used to input text. This is
    recorded each time a UIKeyboardWillChangeFrameNotification is sent while
    editing the omnibox text.
  </summary>
</histogram>

<histogram name="Omnibox.HasLegalDefaultMatchWithoutCompletion" enum="Boolean">
  <obsolete>
    Deprecated 2015-01-27
  </obsolete>
  <owner>mpearson@chromium.org</owner>
  <summary>
    Whether there was at least one legal default match without an
    |inline_autocompletion|.  Recorded every time
    AutocompleteResult::SortAndCull() is called, which could happen multiple
    times on each keystroke.
  </summary>
</histogram>

<histogram name="Omnibox.HistoryQuickHistoryIDSetFromWords" units="ms">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Times URLIndexPrivateData::HistoryIDSetFromWords(), which is called by the
    omnibox's HistoryQuick provider.
    URLIndexPrivateData::HistoryIDSetFromWords() can be called multiple times
    per keystroke due to, for example, the cursor being in the middle of the
    input string or SearchProvider's calls to Classify().
  </summary>
</histogram>

<histogram name="Omnibox.InputType" enum="OmniboxInputType">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The kind of input the user provided when using the omnibox to go somewhere.
    The type can be misleading.  For example if the user typed 'http:/', it gets
    marked as a query because it cannot be opened as a URL even though the user
    probably wanted and selected a URL from the list of suggestions.
  </summary>
</histogram>

<histogram name="Omnibox.IsPasteAndGo" enum="Boolean">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Whether an omnibox interaction is a paste-and-search/paste-and-go action.
    (This histogram records both of these in the &quot;True&quot; bucket for
    this histogram because both of these are referred to as paste-and-go in the
    code.)  These typically involve right-clicking in the omnibox and selecting
    that option from the dropdown.
  </summary>
</histogram>

<histogram name="Omnibox.IsPopupOpen" enum="Boolean">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Whether the omnibox popup (a.k.a. dropdown) is open at the time the user
    used the omnibox to go somewhere.  It can be closed if, for instance, the
    user clicked in the omnibox and hit return to reload the same page.  Also,
    because paste-and-search/paste-and-go actions ignore the current content of
    the omnibox dropdown (if it is open) when they happen, we pretend the
    dropdown is closed when logging these.
  </summary>
</histogram>

<histogram name="Omnibox.JustDeletedText" enum="Boolean">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Whether the user deleted text immediately before selecting an omnibox
    suggestion.  This is usually the result of pressing backspace or delete.
  </summary>
</histogram>

<histogram name="Omnibox.NumEvents" enum="UsedOmnibox">
  <owner>mpearson@chromium.org</owner>
  <summary>The number of times users used the omnibox to go somewhere.</summary>
</histogram>

<histogram name="Omnibox.NumTypedTerms" units="terms">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The number of terms in the text the user entered in the omnibox when they
    used the omnibox to go somewhere.  Terms are defined by splitting on
    whitespace.  All values larger than 6 are recorded in bucket 6.
  </summary>
</histogram>

<histogram name="Omnibox.PageContext" enum="OmniboxPageContext">
  <owner>mpearson@chromium.org</owner>
  <summary>
    What the user was viewing when the user used the omnibox to go somewhere.
  </summary>
</histogram>

<histogram name="Omnibox.PaintTime" units="ms">
  <owner>asvitkine@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <summary>
    Records the time to paint the omnibox contents. This is a subcomponent of
    Omnibox.CharTypedToRepaintLatency. Implemented on desktop platforms.
  </summary>
</histogram>

<histogram name="Omnibox.Paste" units="count">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The number of paste commands on the text in the omnibox. Reported every time
    a paste command is done.
  </summary>
</histogram>

<histogram name="Omnibox.PasteAndGo" units="count" expires_after="2018-08-30">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The number of paste-and-go commands on the text in the omnibox. Reported
    every time a paste-and-go command is done.
  </summary>
</histogram>

<histogram name="Omnibox.PhysicalWebProvider.SuggestionUsedWithoutOmniboxFocus"
    enum="Boolean">
  <obsolete>
    Obsolete 4/2018, Physical Web is disabled (crbug.com/826540).
  </obsolete>
  <owner>cco3@chromium.org</owner>
  <owner>mattreynolds@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <summary>
    Records a boolean value indicating whether the Physical Web provider was
    invoked by focusing the omnibox during the current omnibox session. This is
    unexpected; it's probably a bug somwhere. Recorded when the user selects an
    omnibox suggestion. Does not record when the Physical Web omnibox provider
    is disabled.
  </summary>
</histogram>

<histogram name="Omnibox.PhysicalWebProviderMatches">
  <obsolete>
    Obsolete 4/2018, Physical Web is disabled (crbug.com/826540).
  </obsolete>
  <owner>cco3@chromium.org</owner>
  <owner>mattreynolds@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <summary>
    The number of matches returned by PhysicalWebProvider. Emitted when the
    omnibox is first focused, unless the user is in incognito mode. Capped at
    10.
  </summary>
</histogram>

<histogram name="Omnibox.ProgressBarBreakPointUpdateCount"
    units="break point updates">
  <obsolete>
    Obsolete 05/16/2017. Data is unused (crbug.com/719801).
  </obsolete>
  <owner>kkimlabs@chromium.org</owner>
  <summary>
    The number of progress bar break point updates from page load started to
    page load finished.
  </summary>
</histogram>

<histogram name="Omnibox.ProgressBarUpdateCount" units="frame updates">
  <obsolete>
    Obsolete 05/16/2017. Data is unused (crbug.com/719801).
  </obsolete>
  <owner>kkimlabs@chromium.org</owner>
  <summary>
    The number of progress bar frame updates from page load started to page load
    finished. If there is no animation, this matches
    Omnibox.ProgressBarBreakPointUpdateCount. Note that there can be additional
    updates after page load finished, animating to 100%, but this histogram
    doesn't include them.
  </summary>
</histogram>

<histogram name="Omnibox.ProviderTime" units="ms">
  <obsolete>
    Deprecated 2015-06-12. Replaced by Omnibox.ProviderTime2.
  </obsolete>
  <owner>mpearson@chromium.org</owner>
  <summary>
    The length of time taken by the named provider&quot;s synchronous pass.
  </summary>
</histogram>

<histogram name="Omnibox.ProviderTime2" units="ms">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The length of time taken by the named provider&quot;s synchronous pass.
  </summary>
</histogram>

<histogram name="Omnibox.QueryBookmarksTime">
  <obsolete>
    Deprecated 2012-11-14. Replaced by Omnibox.ProviderTime.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time the HistoryContentProvider takes to perform a bookmark search.
  </summary>
</histogram>

<histogram name="Omnibox.QueryGeolocationAcquisitionTime" units="ms">
  <owner>stkhapugin@chromium.org</owner>
  <summary>
    The elapsed time to acquire the location sent in the X-Geo header for an
    Omnibox query.
  </summary>
</histogram>

<histogram name="Omnibox.QueryGeolocationHorizontalAccuracy" units="meters">
  <owner>stkhapugin@chromium.org</owner>
  <summary>
    The estimated horizontal accuracy of the location sent in the X-Geo header
    for an Omnibox query.
  </summary>
</histogram>

<histogram name="Omnibox.QueryIosLocationAuthorizationStatus"
    enum="IosLocationAuthorizationStatus">
  <owner>kiyun@chromium.org</owner>
  <summary>
    For iOS, whether the application is authorized to use location services when
    the user enters a search query into the Omnibox.
  </summary>
</histogram>

<histogram name="Omnibox.QueryTime" units="ms">
  <obsolete>
    Deprecated 2015-06-12. Replaced by Omnibox.QueryTime2.
  </obsolete>
  <owner>mpearson@chromium.org</owner>
  <summary>
    Time it takes for the omnibox to become responsive to user input after the
    user has typed N characters. This measures the time it takes to start all
    the asynchronous autocomplete providers (but not wait for them to finish).
  </summary>
</histogram>

<histogram name="Omnibox.QueryTime2" units="ms">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Time it takes for the omnibox to become responsive to user input after the
    user has typed N characters. This measures the time it takes to start all
    autocomplete providers (but not wait for the asynchronous ones to finish).
  </summary>
</histogram>

<histogram name="Omnibox.SaveStateForTabSwitch.UserInputInProgress"
    units="count">
  <owner>mpearson@chromium.org</owner>
  <summary>
    When a user switches tabs, whether the omnibox had an edit in progress.
  </summary>
</histogram>

<histogram name="Omnibox.SearchEngine" enum="OmniboxSearchEngine">
  <obsolete>
    Made obsolete around Chrome 32.  Use Omnibox.SearchEngineType instead.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The id of search engine that was used for search in omnibox. See
    src/chrome/browser/search_engines/template_url_prepopulate_data.cc for more
    info.
  </summary>
</histogram>

<histogram name="Omnibox.SearchEngineType" enum="OmniboxSearchEngineType">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The type of search engine associated with a match opened from the omnibox.
  </summary>
</histogram>

<histogram name="Omnibox.SearchProvider.AddHistoryResultsTime" units="ms">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Time it takes to add all the raw history results to the list of matches.
  </summary>
</histogram>

<histogram name="Omnibox.SearchProvider.ConvertResultsTime" units="ms"
    expires_after="2018-08-30">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Time it takes to convert all the results to matches and add them to a map,
    to keep the most relevant match for each result.
  </summary>
</histogram>

<histogram
    name="Omnibox.SearchProvider.GetMostRecentKeywordTermsDefaultProviderTime"
    units="ms" expires_after="2018-08-30">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Time it takes for the omnibox to search the previous query history database
    for queries that start with the omnibox text.
  </summary>
</histogram>

<histogram name="Omnibox.SearchProviderMatches">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The number of matches returned by SearchProvider.  Emitted on every call to
    SearchProvider::Start(), which effectively means every key stroke in the
    omnibox.
  </summary>
</histogram>

<histogram name="Omnibox.SelectedPosition" units="position">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The index of the item that the user selected in the omnibox popup (a.k.a.
    dropdown) list.  0 means the inline suggestion shown within the omnibox.
    This is also the same suggestion shown as the top item in the dropdown.  The
    second item in the dropdown will be recorded as bucket 1. The selected
    position is always set to 0 when the popup is closed at the time of
    navigation or if the user did a paste-and-search or paste-and-go action.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestionUsed.NearbyURLCount" units="URLs">
  <obsolete>
    Deprecated in M58, replaced with
    Omnibox.SuggestionUsed.NearbyURLCount.AtFocus and
    Omnibox.SuggestionUsed.NearbyURLCount.AtMatchCreation.
  </obsolete>
  <summary>
    The number of nearby Physical Web URLs when the user focused the omnibox.
    Recorded when the user accepts an omnibox suggestion, regardless of whether
    the suggestion came from PhysicalWebProvider. Capped at 50.

    In M57, the values recorded by this histogram were determined to be bugged.
    It's believed that it was recording uninitialized values due to a corner
    case on Android that allows an omnibox suggestion to be selected without
    first focusing the omnibox. In addition to the new histograms,
    Omnibox.PhysicalWebProvider.SuggestionUsedWithoutOmniboxFocus was added to
    detect this case. https://crbug.com/691059
  </summary>
</histogram>

<histogram name="Omnibox.SuggestionUsed.NearbyURLCount.AtFocus" units="URLs">
  <obsolete>
    Obsolete 4/2018, Physical Web is disabled (crbug.com/826540).
  </obsolete>
  <owner>cco3@chromium.org</owner>
  <owner>mattreynolds@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <summary>
    The number of nearby Physical Web URLs when Physical Web Provider was last
    focused (i.e., the start of the current session). Recorded when the user
    accepts an omnibox suggestion, regardless of whether the suggestion came
    from PhysicalWebProvider. Capped at 50.

    Does not record if the omnibox was not focused during the current session.
    Omnibox.PhysicalWebProvider.SuggestionUsedWithoutOmniboxFocus records true
    when we hit this case.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestionUsed.NearbyURLCount.AtMatchCreation"
    units="URLs">
  <obsolete>
    Obsolete 4/2018, Physical Web is disabled (crbug.com/826540).
  </obsolete>
  <owner>cco3@chromium.org</owner>
  <owner>mattreynolds@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <summary>
    The number of nearby Physical Web URLs when Physical Web Provider last
    constructed matches. Recorded when the user accepts an omnibox suggestion,
    regardless of whether the suggestion came from PhysicalWebProvider. Capped
    at 50.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestionUsed.Provider" enum="OmniboxProviderType">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The provider of the suggestion the user selected when the user used the
    omnibox to go somewhere.
  </summary>
</histogram>

<histogram base="true" name="Omnibox.SuggestionUsed.Provider.ByPageContext"
    enum="OmniboxProviderType">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The provider of the suggestion the user selected when the user used the
    omnibox to go somewhere, only for omnibox interactions that start in the
    specified page context:
  </summary>
</histogram>

<histogram name="Omnibox.SuggestionUsed.ProviderAndResultType"
    enum="OmniboxProviderAndResultType">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The provider and result type of the suggestion the user selected when the
    user used the omnibox to go somewhere.
  </summary>
</histogram>

<histogram base="true"
    name="Omnibox.SuggestionUsed.ProviderAndResultType.ByPageContext"
    enum="OmniboxProviderAndResultType">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The provider and result type of the suggestion the user selected when the
    user used the omnibox to go somewhere, only for omnibox interactions that
    start in the specified page context:
  </summary>
</histogram>

<histogram
    name="Omnibox.SuggestionUsed.Search.Experimental.ForegroundToFirstMeaningfulPaint.Prerender"
    units="ms">
  <owner>lpy@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <summary>
    Measures the time from the page first appearing in the foreground to its
    first meaningful paint. Only recorded on navigations that use a prerender
    that is to a search query suggestion selected from the omnibox.
  </summary>
</histogram>

<histogram
    name="Omnibox.SuggestionUsed.Search.Experimental.NavigationToFirstMeaningfulPaint"
    units="ms">
  <owner>lpy@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <summary>
    Measures the time from navigation start to first meaningful paint. Only
    recorded for a search query suggestion selected from the omnibox.
  </summary>
</histogram>

<histogram
    name="Omnibox.SuggestionUsed.Search.ForegroundToFirstContentfulPaint.Prerender"
    units="ms">
  <owner>lpy@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <summary>
    Measures the time from the page first appearing in the foreground to its
    first contentful paint. Only recorded on navigations that use a prerender
    that is to a search query suggestion selected from the omnibox.
  </summary>
</histogram>

<histogram
    name="Omnibox.SuggestionUsed.Search.NavigationToFirstContentfulPaint"
    units="ms">
  <owner>lpy@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <summary>
    Measures the time from navigation start to first contentful paint. Only
    recorded for a search query suggestion selected from the omnibox.
  </summary>
</histogram>

<histogram
    name="Omnibox.SuggestionUsed.Search.NavigationToFirstForeground.Prerender"
    units="ms">
  <owner>lpy@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <summary>
    Measures the time from a page being navigated to in prerender to it first
    showing up in foreground. Only recorded on navigations that used a prerender
    that was to a search query suggestion selected from the omnibox. This is
    only recorded on pages that experience a first contentful paint.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestionUsed.SearchVsUrl"
    enum="OmniboxSummarizedResultType">
  <owner>mpearson@google.com</owner>
  <summary>
    The rough type of the suggestion the user selected when the user used the
    omnibox to go somewhere.
  </summary>
</histogram>

<histogram base="true" name="Omnibox.SuggestionUsed.SearchVsUrl.ByPageContext"
    enum="OmniboxSummarizedResultType">
  <owner>mpearson@google.com</owner>
  <summary>
    The rough type of the suggestion the user selected when the user used the
    omnibox to go somewhere, only for omnibox interactions that start in the
    specified page context:
  </summary>
</histogram>

<histogram
    name="Omnibox.SuggestionUsed.URL.Experimental.ForegroundToFirstMeaningfulPaint.Prerender"
    units="ms">
  <owner>lpy@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <summary>
    Measures the time from the page first appearing in the foreground to its
    first meaningful paint. Only recorded on navigations that use a prerender
    that is to a URL suggestion selected from the omnibox.
  </summary>
</histogram>

<histogram
    name="Omnibox.SuggestionUsed.URL.Experimental.NavigationToFirstMeaningfulPaint"
    units="ms">
  <owner>lpy@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <summary>
    Measures the time from navigation start to first meaningful paint. Only
    recorded for a URL suggestion selected from the omnibox.
  </summary>
</histogram>

<histogram
    name="Omnibox.SuggestionUsed.URL.ForegroundToFirstContentfulPaint.Prerender"
    units="ms">
  <owner>lpy@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <summary>
    Measures the time from the page first appearing in the foreground to its
    first contentful paint. Only recorded on navigations that use a prerender
    that is to a URL suggestion selected from the omnibox.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestionUsed.URL.NavigationToFirstContentfulPaint"
    units="ms">
  <owner>lpy@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <summary>
    Measures the time from navigation start to first contentful paint. Only
    recorded for a URL suggestion selected from the omnibox.
  </summary>
</histogram>

<histogram
    name="Omnibox.SuggestionUsed.URL.NavigationToFirstForeground.Prerender"
    units="ms">
  <owner>lpy@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <summary>
    Measures the time from a page being navigated to in prerender to it first
    showing up in foreground. Only recorded on navigations that used a prerender
    that was to a URL suggestion selected from the omnibox. This is only
    recorded on pages that experience a first contentful paint.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestRequest.Failure.GoogleResponseTime" units="ms">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The time elapsed between the sending of a suggest request to Google until
    the time the request was returned with status==failed. Ignores requests that
    were canceled before being returned.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestRequest.Success.GoogleResponseTime" units="ms">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The time elapsed between the sending of a suggest request to Google until
    the time the request was returned with status==success. Ignores requests
    that were canceled before being returned.
  </summary>
</histogram>

<histogram name="Omnibox.SuggestRequests" enum="OmniboxSuggestRequests">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Counts about the number of suggest requests the omnibox sent, invalidated,
    and replies received.
  </summary>
</histogram>

<histogram name="Omnibox.TypedLength" units="characters">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The length of the text the user entered in the omnibox when they used the
    omnibox to go somewhere.  Switched on March 27 2018 from an bucketing where
    every typed length is emitted exactly (up to 500) to ordinary exponential
    bucketing.
  </summary>
</histogram>

<histogram name="Omnibox.TypingDuration" units="ms">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The amount of time, in milliseconds, since the user first began modifying
    the text in the omnibox until the user used the omnibox to go somewhere. If
    at some point after modifying the text, the user reverted the modifications
    (thus seeing the current web page's URL again), then wrote in the omnibox
    again, this duration starts from the time of the second series of
    modification.
  </summary>
</histogram>

<histogram name="Omnibox.URLNavigationScheme" enum="NavigationScheme">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The scheme of the destination URL for the selected omnibox suggestion. This
    could be a what-you-typed suggestion (if the user fully typed a URL), an
    inline autocompletion, or something in the dropdown, anything as long as
    it's a URL navigation, not a search query.  Excludes omnibox URL navigations
    that are effectively reloads as well as cut-and-pastes of URLs.  Also does
    not take into account any redirects that destination URL may do before
    finally serving a page. In other words, it's the scheme of the first request
    in a possible chain.
  </summary>
</histogram>

<histogram name="Omnibox.URLNavigationTimeToRedirectToHTTPS" units="ms">
  <owner>cthomp@chromium.org</owner>
  <summary>
    The amount of time, in milliseconds, between the start of a typed URL
    navigation in the omnibox (the user typing a URL to completion, or selecting
    a URL from the inline autocomplete or dropdown) and the start of a redirect
    upgrading the URL to HTTPS. This is only recorded when the upgraded URL is
    the same except for the scheme and the addition/removal of a
    &quot;www.&quot; prefix.

    To calculate the percentage of HTTP URL navigations that have been upgraded
    in this way, divide the count of this histogram by the count for HTTP in
    Omnibox.URLNavigationScheme.
  </summary>
</histogram>

<histogram name="Omnibox.UserTextCleared" enum="OmniboxUserTextCleared">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>mpearson@chromium.org</owner>
  <summary>
    Counts the number of times that the user text is cleared.  IME users are
    sometimes in the situation that IME was unintentionally turned on and failed
    to input latin alphabets (ASCII characters) or the opposite case.  In that
    case, users may delete all the text and the user text gets cleared.  This
    histogram helps us estimate how often this scenario happens.

    Note that since we don't currently correlate &quot;text cleared&quot; events
    with IME usage, this also captures many other cases where users clear the
    text; though it explicitly doesn't log deleting all the permanent text as
    the first action of an editing sequence (see comments in
    OnAfterPossibleChange()).
  </summary>
</histogram>

<histogram name="Omnibox.ZeroSuggest.Eligible.OnFocus"
    enum="ZeroSuggestEligibleOnFocus">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Whether the user has settings configured so that the current page URL can be
    sent to the suggest server to request contextual suggestions.  For example,
    this is only supported for users who have Google as their default search
    engine (unmodified version of Google), have search suggest enabled, are
    signed-in and syncing without a custom passphrase, and don't have an
    incognito window open.  There are other criteria too.  Recorded on focus in
    the omnibox if there is default search provider and we've constructed a
    suggest URL.

    Some additional guidelines: if an incognito window is open, all focus events
    will go into the &quot;generally ineligible&quot; bucket. Likewise, if the
    current page is a search results page, we don't allow contextual suggestions
    either so focus events on those pages go in the &quot;generally
    ineligible&quot; bucket.  The difference between &quot;eligible&quot; and
    &quot;generally eligible but not this time&quot; depends only the properties
    of the current URL.

    Recorded regardless of whether contextual or non-contextual zero suggest is
    currently enabled on the user's platform.  However, if zero suggest (in all
    forms) is entirely disabled, the user will be perpetually ineligible.
  </summary>
</histogram>

<histogram name="Omnibox.ZeroSuggest.Eligible.OnProfileOpen"
    enum="BooleanSupported">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Whether the user has settings configured so that the current page URL could
    be sent to the suggest server to request contextual suggestions.  For
    example, this is only supported for users who have Google as their default
    search engine (unmodified version of Google), have search suggest enabled,
    and are signed-in and syncing without a custom passphrase.  There are other
    criteria too.  Recorded on profile open.  Note that opening an incognito
    window (if none are currently open under the given profile) counts as
    opening a new profile.

    Some additional guidelines: unlike Omnibox.ZeroSuggest.Eligible.OnFocus,
    because this is recorded on profile open, users cannot be declared
    ineligible because they have an incognito window open (it's impossible to
    have an incognito window open for a given profile at the time of profile
    open) and also cannot be declared ineligible because the user is viewing a
    search results page.  (We test this on-profile-open using an arbitrary URL.)

    Recorded regardless of whether contextual or non-contextual zero suggest is
    currently enabled on the user's platform.  However, if zero suggest (in all
    forms) is entirely disabled, the user will be perpetually ineligible.
  </summary>
</histogram>

<histogram name="Omnibox.ZeroSuggest.MostVisitedResultsCounterfactual">
  <owner>hfung@chromium.org</owner>
  <summary>
    The number of most visited suggestions returned when ZeroSuggest would have
    triggered.  The suggestions appear when the user has focused but not
    modified the omnibox.
  </summary>
</histogram>

<histogram name="Omnibox.ZeroSuggestRequests" enum="OmniboxZeroSuggestRequests">
  <owner>hfung@chromium.org</owner>
  <summary>
    Counts about the number of zero suggest requests (requests for suggestions
    when the user has focused but not modified the omnibox) the omnibox sent,
    invalidated, and replies received.
  </summary>
</histogram>

<histogram name="OOBE.BootToSignInCompleted" units="ms">
  <owner>merkulova@chromium.org</owner>
  <summary>Time from boot to sign-in completed.</summary>
</histogram>

<histogram name="OOBE.ErrorScreensTime.Enrollment" units="ms">
  <owner>achuith@chromium.org</owner>
  <summary>
    Time spent on error screens during enrollment or autoenrollment.
  </summary>
</histogram>

<histogram name="OOBE.ErrorScreensTime.Signin" units="ms">
  <owner>achuith@chromium.org</owner>
  <summary>Time spent on error screens during signin.</summary>
</histogram>

<histogram name="OOBE.ErrorScreensTime.Supervised" units="ms">
  <owner>achuith@chromium.org</owner>
  <summary>
    Time spent on error screens during supervised user creation.
  </summary>
</histogram>

<histogram name="OOBE.ErrorScreensTime.Update" units="ms">
  <owner>achuith@chromium.org</owner>
  <summary>Time spent on error screens during update.</summary>
</histogram>

<histogram name="OOBE.NetworkErrorShown.Enrollment" enum="NetworkErrorType">
  <owner>achuith@google.com</owner>
  <summary>
    Number of times error screen has appeared during enrollment or
    autoenrollment.
  </summary>
</histogram>

<histogram name="OOBE.NetworkErrorShown.Signin" enum="NetworkErrorType">
  <owner>achuith@google.com</owner>
  <summary>Number of times error screen has appeared during signin.</summary>
</histogram>

<histogram name="OOBE.NetworkErrorShown.Supervised" enum="NetworkErrorType">
  <owner>achuith@google.com</owner>
  <summary>
    Number of times error screen has appeared during supervised user creation.
  </summary>
</histogram>

<histogram name="OOBE.NetworkErrorShown.Update" enum="NetworkErrorType">
  <owner>achuith@google.com</owner>
  <summary>Number of times error screen has appeared during update.</summary>
</histogram>

<histogram name="OOBE.StepCompletionTime" units="ms">
  <owner>merkulova@chromium.org</owner>
  <summary>Time spent on specific OOBE screen.</summary>
</histogram>

<histogram name="OptimizationGuide.ProcessHintsResult"
    enum="OptimizationGuideProcessHintsResult">
  <owner>dougarnett@chromium.org</owner>
  <owner>sophiechang@chromium.org</owner>
  <summary>
    Whether processing the hints succeeded or failed at a particular step.
    Recorded when the OptimizationGuideService receives a notification to
    process hints.
  </summary>
</histogram>

<histogram name="OriginChip.Pressed">
  <obsolete>
    Deprecated with CL 731423002. OriginChip has been removed.
  </obsolete>
  <owner>gbillock@chromium.org</owner>
  <summary>The number of clicks on the origin chip.</summary>
</histogram>

<histogram name="OriginTrials.FeatureEnabled" enum="OriginTrialEnableResult">
  <obsolete>
    Obsolete as of Chrome 54. Sort of replaced by OriginTrials.ValidationResult.
  </obsolete>
  <owner>chasej@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <summary>
    Counts the results of origin trial checks to enable experimental features.
    The result for each feature check is counted at most once per execution
    context (e.g. page, worker).
  </summary>
</histogram>

<histogram name="OriginTrials.FeatureEnabled.MessageGenerated"
    enum="OriginTrialMessageGeneratedResult">
  <obsolete>
    Obsolete as of Chrome 54.
  </obsolete>
  <owner>chasej@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <summary>
    Counts how often an error message is generated for each origin trial check
    to enable an experimental feature.
  </summary>
</histogram>

<histogram name="OriginTrials.ValidationResult" enum="OriginTrialTokenStatus">
  <owner>chasej@chromium.org</owner>
  <owner>iclelland@chromium.org</owner>
  <summary>
    Counts the results of token validation checks to enable experimental
    features. The result for each token validation check is counted once per
    token per execution context (e.g. page, worker).
  </summary>
</histogram>

<histogram name="OSX.BluetoothAvailability" enum="BluetoothAvailability"
    expires_after="2018-08-30">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The availability and capabilities of the Bluetooth driver on OSX devices.
    This metric is logged on startup.
  </summary>
</histogram>

<histogram name="OSX.CatSixtyFour" enum="CatSixtyFour">
  <obsolete>
    Obsolete as of Chrome 43. See OmahaProxy for more relevant statistics.
  </obsolete>
  <owner>mark@chromium.org</owner>
  <summary>The cat's flavor and how many bits there are in it.</summary>
</histogram>

<histogram name="OSX.ExceptionHandlerEvents" enum="OSXExceptionHandlerEvents">
  <owner>mark@chromium.org</owner>
  <summary>Events seen by the OSX NSException swizzle.</summary>
</histogram>

<histogram name="OSX.Fullscreen.Enter" enum="OSXFullscreenParameters">
  <obsolete>
    Deprecated as of Chrome 40. See OSX.Fullscreen.Enter.Style,
    OSX.Fullscreen.Enter.WindowLocation and
    OSX.Settings.ScreensHaveSeparateSpaces.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    This event is recorded each time a user triggers fullscreen for a browser
    window. The value's bits reflect different parameters. Bit 0: Fullscreen
    entry mechanism (AppKit vs Immersive). Bit 1: Whether the window was on the
    primary screen (Primary vs. Secondary). Bit 2: Whether displays have
    separate spaces options is enabled (Seperate vs Shared). Bit 3: Whether
    there are multiple screens.
  </summary>
</histogram>

<histogram name="OSX.Fullscreen.Enter.Source" enum="OSXFullscreenSource">
  <owner>spqchan@chromium.org</owner>
  <summary>
    This event is recorded each time a user triggers fullscreen for a browser
    window. It indicates if the fullscreen is triggered for the browser or the
    tab content.
  </summary>
</histogram>

<histogram name="OSX.Fullscreen.Enter.Style" enum="OSXFullscreenStyle"
    expires_after="2018-08-30">
  <owner>erikchen@chromium.org</owner>
  <summary>
    This event is recorded each time a user triggers fullscreen for a browser
    window. It indicates the mechanism (immersive vs. AppKit) and the type of
    AppKit Fullscreen (Presentation Mode vs. Canonical Fullscreen).
  </summary>
</histogram>

<histogram name="OSX.Fullscreen.Enter.WindowLocation"
    enum="OSXFullscreenWindowLocation" expires_after="2018-08-30">
  <owner>erikchen@chromium.org</owner>
  <summary>
    This event is recorded each time a user triggers fullscreen for a browser
    window. It indicates the screen in which the window was fullscreened, and
    the number of screens available.
  </summary>
</histogram>

<histogram name="OSX.Fullscreen.ToolbarStyle" enum="OSXFullscreenToolbarStyle">
  <owner>spqchan@chromium.org</owner>
  <summary>
    This event is recorded each time a user triggers fullscreen and when the
    fullscreen toolbar is updated with a new style.
  </summary>
</histogram>

<histogram name="OSX.Handoff.Origin" enum="OSXHandoffOrigin"
    expires_after="2018-08-30">
  <owner>erikchen@chromium.org</owner>
  <summary>
    This event is recorded each time a Handoff is received by Chrome on OSX. The
    enumeration indicates the source of the Handoff.
  </summary>
</histogram>

<histogram name="OSX.KeychainReauthorizeIfNeeded" units="count">
  <owner>kerrnel@chromium.org</owner>
  <owner>mark@chromium.org</owner>
  <summary>
    The number of previous times that the keychain reauthorization did not
    complete, when run during the main browser launch.
  </summary>
</histogram>

<histogram name="OSX.KeychainReauthorizeIfNeededAtUpdate" units="count">
  <owner>kerrnel@chromium.org</owner>
  <owner>mark@chromium.org</owner>
  <summary>
    The number of previous times that the keychain reauthorization did not
    complete, when run at update time.
  </summary>
</histogram>

<histogram name="OSX.KeychainReauthorizeIfNeededAtUpdateSuccess" units="count">
  <owner>kerrnel@chromium.org</owner>
  <owner>mark@chromium.org</owner>
  <summary>
    How many times the keychain reauthorization ran before finally succeeding,
    when run at update time.
  </summary>
</histogram>

<histogram name="OSX.KeychainReauthorizeIfNeededSuccess" units="count">
  <owner>kerrnel@chromium.org</owner>
  <owner>mark@chromium.org</owner>
  <summary>
    How many times the keychain reauthorization ran before finally succeeding,
    when run during the main browser launch.
  </summary>
</histogram>

<histogram name="OSX.NativeShare" units="BooleanSuccess">
  <owner>lgrey@chromium.org</owner>
  <summary>
    Whether the user successfully shared via a native sharing extensions after
    selecting it from the share menu. False can indicate failure or
    user-initiated cancellation.
  </summary>
</histogram>

<histogram name="OSX.RendererHost.SurfaceWaitTime" units="ms">
  <obsolete>
    Deprecated as of 11/2015.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    This event records the amount of time that the browser process main thread
    blocks, waiting for a frame with the right dimensions to arrive from the gpu
    process.
  </summary>
</histogram>

<histogram name="OSX.Settings.ScreensHaveSeparateSpaces"
    enum="OSXScreensHaveSeparateSpaces">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The configuration of the setting &quot;Screens Have Separate Spaces&quot;
    available in OSX 10.9+.
  </summary>
</histogram>

<histogram name="OSX.SharedMemory.Mechanism" enum="OSXSharedMemoryMechanism">
  <obsolete>
    Deprecated as of Chrome 51 since Mach has become the default mechanism.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    A histogram entry is emitted each time a base::SharedMemory object is
    constructed. The value of the entry indicates the mechanism used to back the
    shared memory region.
  </summary>
</histogram>

<histogram name="OSX.SystemHotkeyMap.LoadSuccess" enum="BooleanSuccess"
    expires_after="2018-08-30">
  <owner>erikchen@chromium.org</owner>
  <summary>
    Whether an attempt to load the system hotkeys on a Mac was successful.
  </summary>
</histogram>

<histogram name="OutdatedUpgradeBubble.NumLaterPerEnableAU">
  <owner>mad@chromium.org</owner>
  <summary>
    Counts the number of times the user clicked on the later button of the
    outdated upgrade bubble, before clicking on the enable updates button in the
    same Chrome session.
  </summary>
</histogram>

<histogram name="OutdatedUpgradeBubble.NumLaterPerReinstall">
  <owner>mad@chromium.org</owner>
  <summary>
    Counts the number of times the user clicked on the later button of the
    outdated upgrade bubble, before clicking on the reinstall button in the same
    Chrome session.
  </summary>
</histogram>

<histogram name="OutOfProcessHeapProfiling.ProfiledProcess.Type"
    enum="OutOfProcessHeapProfilingProcessType">
  <owner>erikchen@chromium.org</owner>
  <summary>
    One metric is emitted every 24-hours after Chrome is launched for every
    process that is being profiled. The timer is reset if Chrome exits.
  </summary>
</histogram>

<histogram name="OutOfProcessHeapProfiling.ProfilingMode"
    enum="OutOfProcessHeapProfilingMode">
  <owner>erikchen@chromium.org</owner>
  <summary>
    One metric is emitted every 24-hours after Chrome is launched for every
    Chrome instance that is using out of process heap profiling. The timer is
    reset if Chrome exits.
  </summary>
</histogram>

<histogram name="OutOfProcessHeapProfiling.RecordTrace.Success"
    enum="BooleanSuccess">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The metric is emitted each time Chrome attempts to record a memory-infra
    trace to upload an out-of-process heap-profiling memory dump.
  </summary>
</histogram>

<histogram name="OutOfProcessHeapProfiling.UploadTrace.Size" units="bytes">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The metric is emitted each time Chrome uploads a trace. It reflects the
    uncompressed size of the trace.
  </summary>
</histogram>

<histogram name="OutOfProcessHeapProfiling.UploadTrace.Success"
    enum="BooleanSuccess">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The metric is emitted each time Chrome uploads a trace. It reflects whether
    the upload was successful.
  </summary>
</histogram>

<histogram name="Overscroll.Cancelled" enum="NavigationDirection">
  <obsolete>
    Deprecated as of Chrome 59 in favour of Overscroll.Cancelled3.
  </obsolete>
  <owner>rbyers@chromium.org</owner>
  <owner>mfomitchev@chromium.org</owner>
  <summary>
    Overscroll gestures that were aborted before they were completed.
  </summary>
</histogram>

<histogram name="Overscroll.Cancelled3" enum="OverscrollNavigationType">
  <owner>mfomitchev@chromium.org</owner>
  <summary>
    Overscroll gestures that were aborted before they were completed.
  </summary>
</histogram>

<histogram name="Overscroll.Completed" enum="OverscrollMode">
  <obsolete>
    Deprecated as of Chrome 44 in favour of Overscroll.Cancelled and
    Overscroll.Navigated2.
  </obsolete>
  <owner>rbyers@chromium.org</owner>
  <owner>mfomitchev@chromium.org</owner>
  <summary>Completed overscroll gestures.</summary>
  <details>
    An overscroll gesture starts when user scrolls past the edge of the web page
    and continues scrolling in the same direction. An overscroll gesture is
    completed when user stops scrolling (e.g. by lifting the fingers from the
    touchscreen or touchpad).
  </details>
</histogram>

<histogram name="Overscroll.Navigated" enum="OverscrollMode">
  <obsolete>
    Deprecated as of Chrome 44 to switch to NavigationDirection enum.
  </obsolete>
  <owner>rbyers@chromium.org</owner>
  <owner>mfomitchev@chromium.org</owner>
  <summary>
    Navigations that were triggered due to completed overscroll gesture. Note
    that not all completed overscroll gestures trigger a navigation.
  </summary>
</histogram>

<histogram name="Overscroll.Navigated2" enum="NavigationDirection">
  <obsolete>
    Deprecated as of Chrome 59 in favour of Overscroll.Navigated3.
  </obsolete>
  <owner>rbyers@chromium.org</owner>
  <owner>mfomitchev@chromium.org</owner>
  <summary>
    Navigations that were triggered due to completed overscroll gesture. Note
    that not all completed overscroll gestures trigger a navigation.
  </summary>
</histogram>

<histogram name="Overscroll.Navigated3" enum="OverscrollNavigationType">
  <owner>mfomitchev@chromium.org</owner>
  <summary>
    Navigations that were triggered due to completed overscroll gesture. Note
    that not all completed overscroll gestures trigger a navigation.
  </summary>
</histogram>

<histogram name="Overscroll.Started" enum="OverscrollMode">
  <obsolete>
    Deprecated as of Chrome 44 to switch to NavigationDirection enum.
  </obsolete>
  <owner>rbyers@chromium.org</owner>
  <owner>mfomitchev@chromium.org</owner>
  <summary>
    Overscroll gestures initiated by the user. Note that not all overcroll
    gestures started are completed (e.g. the overscroll gesture is aborted if
    user clicks or presses a key during the gesture).
  </summary>
</histogram>

<histogram name="Overscroll.Started2" enum="NavigationDirection">
  <obsolete>
    Deprecated as of Chrome 59 in favour of Overscroll.Started3.
  </obsolete>
  <owner>rbyers@chromium.org</owner>
  <owner>mfomitchev@chromium.org</owner>
  <summary>
    Overscroll gestures initiated by the user. Note that not all overscroll
    gestures started are completed (e.g. the overscroll gesture is aborted if
    user clicks or presses a key during the gesture).
  </summary>
</histogram>

<histogram name="Overscroll.Started3" enum="OverscrollNavigationType">
  <owner>mfomitchev@chromium.org</owner>
  <summary>
    Overscroll gestures initiated by the user. Note that not all overscroll
    gestures started are completed (e.g. the overscroll gesture is aborted if
    user clicks or presses a key during the gesture).
  </summary>
</histogram>

<histogram name="Ozone.TouchNoiseFilter.FarApartTapDistance"
    units="squared pixels">
  <owner>pkotwicz@google.com</owner>
  <summary>
    The squared distance between taps which occur in quick succession. Only
    reported when the taps are far apart and touch noise filtering is enabled.
  </summary>
</histogram>

<histogram name="Ozone.TouchNoiseFilter.HorizontallyAlignedDistance"
    units="pixels">
  <owner>pkotwicz@google.com</owner>
  <summary>
    The horizontal distance from a &quot;touch press&quot; to the closest other
    touch. Only reported if there are two or more fingers onscreen and touch
    noise filtering is enabled.
  </summary>
</histogram>

<histogram name="Ozone.TouchNoiseFilter.TimeSinceLastNoiseOccurrence"
    units="ms">
  <owner>pkotwicz@google.com</owner>
  <summary>
    The amount of time between noisy touches. The amount of time since Chrome
    startup is recorded for the first noisy touch after startup.
  </summary>
</histogram>

<histogram name="Ozone.TouchNoiseFilter.TouchesAtSinglePositionDuration"
    units="ms">
  <owner>pkotwicz@google.com</owner>
  <summary>
    The time between taps which occur in quick succession at the same screen
    location. Only reported when touch noise filtering is enabled.
  </summary>
</histogram>

<histogram name="P2P.Client.Canceled.WaitingTimeSeconds" units="seconds">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The wall-clock time spent until a lookup was canceled.  This is reported
    every time p2p is used to find a candidate but the request was canceled.
  </summary>
</histogram>

<histogram name="P2P.Client.Found.CandidateCount" units="count">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The number of candidates on the LAN, i.e. the number of peers on the LAN
    offering at least N bytes of the requested file X. This is reported after
    examining responses from all peers on the LAN and picking a candidate.
  </summary>
</histogram>

<histogram name="P2P.Client.Found.ConnectionCount" units="count">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The number of p2p downloads of the peer that the returned URL points to.
    This is reported after examining responses from all peers on the LAN and
    picking a candidate.
  </summary>
</histogram>

<histogram name="P2P.Client.Found.WaitingTimeSeconds" units="seconds">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The wall-clock time spent waiting for the LAN-wide number of p2p downloads
    (i.e. the sum of p2p downloads from each peer on the LAN) to drop below the
    threshold.  This is reported after examining responses from all peers on the
    LAN and picking a candidate.
  </summary>
</histogram>

<histogram name="P2P.Client.LookupResult" enum="P2PLookupResult">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The result of the lookup. Possible values include &quot;Found&quot; (if a
    candidate - i.e. a peer offering at least N bytes of file X - was chosen),
    &quot;Not Found&quot; (if no candidate could be found), &quot;Vanished&quot;
    (if a candidate was found but vanished while waiting in line),
    &quot;Canceled&quot; (if a candidate was found but the request was canceled
    while waiting in line), and &quot;Filtered&quot; (if it was detected that
    mDNS was filtered). This is reported after examining responses from all
    peers on the LAN when p2p is used to find a candidate.
  </summary>
</histogram>

<histogram name="P2P.Client.NumPeers" units="count">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The number of peers implementing p2p file sharing on the network. This is
    reported every time p2p is used to look up a resource on a network where
    mDNS is not filtered.
  </summary>
</histogram>

<histogram name="P2P.Client.Vanished.WaitingTimeSeconds" units="seconds">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The wall-clock time spent waiting for one or more candidates (i.e. peers
    offering at least N bytes of file X) that all vanished before the LAN-wide
    number of p2p downloads dropped below the threshold. This is reported every
    time candidates were found using p2p but then vanished.
  </summary>
</histogram>

<histogram name="P2P.Server.ClientCount" units="count">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The number of currently connected HTTP clients. This is reported every time
    a HTTP client connects.
  </summary>
</histogram>

<histogram name="P2P.Server.ContentServedInterruptedMB" units="MB">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    Number of megabytes (1,000,000 bytes) served from the device (via HTTP)
    where the client disconnects prematurely. This is reported every time a file
    is served and the client disconnects before receiving all data.
  </summary>
</histogram>

<histogram name="P2P.Server.ContentServedSuccessfullyMB" units="MB">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    Number of megabytes (1,000,000 bytes) served from the device (via HTTP).
    This is reported every time a file have been served successfully.
  </summary>
</histogram>

<histogram name="P2P.Server.DownloadSpeedKBps" units="kB/s">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The average speed at which the download was served at, in kB/s. This is
    reported every time a file have been served successfully.
  </summary>
</histogram>

<histogram name="P2P.Server.FileCount" units="count">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The number of files available via p2p. This is reported every time a file is
    added or removed to the /var/cache/p2p directory.
  </summary>
</histogram>

<histogram name="P2P.Server.RangeBeginPercentage" units="%">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    When a client resumes a download, the HTTP request includes range specifier
    to skip the bytes it already has. This metric conveys this as a percentage
    of the file size.  This is reported every time a file is served, even if the
    request does not include a range specifier (in which case 0 is reported).
  </summary>
</histogram>

<histogram name="P2P.Server.RequestResult" enum="P2PServerResult">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The result of the HTTP request. Possible values include &quot;Response
    Sent&quot; (the resource was found and the response was successfully sent),
    &quot;Response Interrupted&quot; (the resource was found but the client
    disconnected), &quot;Malformed&quot; (the request was malformed), &quot;Not
    Found&quot; (the request was for a resource that was not found), and
    &quot;Index&quot; (the request was for the '/' or '/index.html' resource).
    This is reported for every HTTP request handled.
  </summary>
</histogram>

<histogram name="PageActionController.ExtensionsWithPageActions">
  <owner>finnur@chromium.org</owner>
  <summary>
    The number of Extensions that have Page Actions. Measured once per startup
    per profile.
  </summary>
</histogram>

<histogram name="PageImportanceSignals.HadFormInteraction.OnCommitLoad"
    enum="HadFormInteraction">
  <owner>kouhei@chromium.org</owner>
  <summary>
    Number of pages that had any HTML form interaction before next page load.
  </summary>
</histogram>

<histogram base="true" name="PageLoad.AbortTiming.Background" units="ms">
  <obsolete>
    Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent.
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    This metric is still experimental and not yet ready to be relied upon.
    Measures the time from navigation start to the time the page load was
    aborted due to being backgrounded.
  </summary>
</histogram>

<histogram base="true" name="PageLoad.AbortTiming.ClientRedirect" units="ms">
  <obsolete>
    Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    This metric is still experimental and not yet ready to be relied upon.
    Measures the time from navigation start to the time the page load was
    aborted by a client side redirect (Javascript navigation).
  </summary>
</histogram>

<histogram base="true" name="PageLoad.AbortTiming.Close" units="ms">
  <obsolete>
    Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    This metric is still experimental and not yet ready to be relied upon.
    Measures the time from navigation start to the time the page load was
    aborted by the user closing the tab or browser.
  </summary>
</histogram>

<histogram base="true" name="PageLoad.AbortTiming.ForwardBackNavigation"
    units="ms">
  <obsolete>
    Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    This metric is still experimental and not yet ready to be relied upon.
    Measures the time from navigation start to the time the page load was
    aborted by a forward or back navigation.
  </summary>
</histogram>

<histogram base="true" name="PageLoad.AbortTiming.NewNavigation" units="ms">
  <obsolete>
    Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    This metric is still experimental and not yet ready to be relied upon.
    Measures the time from navigation start to the time the page load was
    aborted by a new navigation.
  </summary>
</histogram>

<histogram base="true" name="PageLoad.AbortTiming.Other" units="ms">
  <obsolete>
    Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    This metric is still experimental and not yet ready to be relied upon.
    Measures the time from navigation start to the time the page load was
    aborted. The abort cause is unknown.
  </summary>
</histogram>

<histogram base="true" name="PageLoad.AbortTiming.Reload" units="ms">
  <obsolete>
    Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    This metric is still experimental and not yet ready to be relied upon.
    Measures the time from navigation start to the time the page load was
    aborted by a reload.
  </summary>
</histogram>

<histogram base="true" name="PageLoad.AbortTiming.Stop" units="ms">
  <obsolete>
    Deprecated in favor of PageLoad.Experimental.AbortTiming equivalent.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    This metric is still experimental and not yet ready to be relied upon.
    Measures the time from navigation start to the time the page load was
    aborted by the user pressing stop.
  </summary>
</histogram>

<histogram name="PageLoad.AbortTiming.UnknownNavigation" units="ms">
  <obsolete>
    We now have sufficient infrastructure to always characterize aborts that
    resulted in new navigations.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    This metric is still experimental and not yet ready to be relied upon.
    Measures the time from navigation start to the time the page load was
    aborted by a navigation with unknown transition type.
  </summary>
</histogram>

<histogram name="PageLoad.Bytes.AdFrames.Aggregate.Network" units="KB">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The size (in KB) of the resources loaded for all of the ad frames on the
    page that loaded over the network.

    Only recorded if the page has at least one identified ad frame. Bytes are
    measured as over-the-wire (e.g., compressed) response body KBs and do not
    include header bytes. An ad frame consists of the identified ad frame and
    all of its children (which may also be ads, but are counted as part of the
    ancestor ad frame).
  </summary>
</histogram>

<histogram name="PageLoad.Bytes.AdFrames.Aggregate.PercentNetwork" units="%">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The percentage of bytes loaded for all ad frames that were loaded over the
    network.

    Only recorded if the page has at least one identified ad frame. Bytes are
    measured as over-the-wire (e.g., compressed) response body KBs and do not
    include header bytes. An ad frame consists of the identified ad frame and
    all of its children (which may also be ads, but are counted as part of the
    ancestor ad frame).
  </summary>
</histogram>

<histogram name="PageLoad.Bytes.AdFrames.Aggregate.Total" units="KB">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The size (in KB) of the resources loaded for all of the ad frames on the
    page.

    Only recorded if the page has at least one identified ad frame. Bytes are
    measured as over-the-wire (e.g., compressed) response body KBs and do not
    include header bytes. An ad frame consists of the identified ad frame and
    all of its children (which may also be ads, but are counted as part of the
    ancestor ad frame).
  </summary>
</histogram>

<histogram name="PageLoad.Bytes.AdFrames.PerFrame.Network" units="KB">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The size (in KB) of the resources loaded for an ad frame from the network.

    Only recorded if the page has at least one identified ad frame. Bytes are
    measured as over-the-wire (e.g., compressed) response body KBs and do not
    include header bytes. An ad frame consists of the identified ad frame and
    all of its children (which may also be ads, but are counted as part of the
    ancestor ad frame).
  </summary>
</histogram>

<histogram name="PageLoad.Bytes.AdFrames.PerFrame.PercentNetwork" units="%">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The percentage of bytes loaded for a single ad frame that were loaded over
    the network.

    Only recorded if the page has at least one identified ad frame. Bytes are
    measured as over-the-wire (e.g., compressed) response body KBs and do not
    include header bytes. An ad frame consists of the identified ad frame and
    all of its children (which may also be ads, but are counted as part of the
    ancestor ad frame).
  </summary>
</histogram>

<histogram name="PageLoad.Bytes.AdFrames.PerFrame.Total" units="KB">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The size (in KB) of the resources loaded for an ad frame.

    Only recorded if the page has at least one identified ad frame. Bytes are
    measured as over-the-wire (e.g., compressed) response body KBs and do not
    include header bytes. An ad frame consists of the identified ad frame and
    all of its children (which may also be ads, but are counted as part of the
    ancestor ad frame).
  </summary>
</histogram>

<histogram name="PageLoad.Bytes.FullPage.Network" units="KB">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The size (in KB) of all of the page's resources that loaded over the
    network.

    Only recorded if the page has at least one identified ad frame. Bytes are
    measured as over-the-wire (e.g., compressed) response body KBs and do not
    include header bytes.
  </summary>
</histogram>

<histogram name="PageLoad.Bytes.FullPage.Network.PercentAds" units="%">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The percentage of bytes loaded for the page (from the network) that came
    from resource loads in ad frames (from the network).

    Only recorded if the page has at least one identified ad frame. Bytes are
    measured as over-the-wire (e.g., compressed) response body KBs and do not
    include header bytes. An ad frame consists of the identified ad frame and
    all of its children (which may also be ads, but are counted as part of the
    ancestor ad frame).
  </summary>
</histogram>

<histogram name="PageLoad.Bytes.FullPage.Total" units="KB">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The size (in KB) of all of the page's resources.

    Only recorded if the page has at least one identified ad frame. Bytes are
    measured as over-the-wire (e.g., compressed) response body KBs and do not
    include header bytes.
  </summary>
</histogram>

<histogram name="PageLoad.Bytes.FullPage.Total.PercentAds" units="%">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The percentage of bytes loaded for the page that came from resource loads in
    ad frames.

    Only recorded if the page has at least one identified ad frame. Bytes are
    measured as over-the-wire (e.g., compressed) response body KBs and do not
    include header bytes. An ad frame consists of the identified ad frame and
    all of its children (which may also be ads, but are counted as part of the
    ancestor ad frame).
  </summary>
</histogram>

<histogram name="PageLoad.Bytes.NonAdFrames.Aggregate.Total" units="KB">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The size (in KB) of all of the page's resources except for those loaded in
    ad frames.

    Only recorded if the page has at least one identified ad frame. Bytes are
    measured as over-the-wire (e.g., compressed) response body KBs and do not
    include header bytes. An ad frame consists of the identified ad frame and
    all of its children (which may also be ads, but are counted as part of the
    ancestor ad frame).
  </summary>
</histogram>

<histogram name="PageLoad.Clients.Ads.All.Navigations.AdFrameRenavigatedToAd"
    enum="DidNavigateToAd">
  <obsolete>
    Deprecated In July 2018, metric was buggy for subresource filter ads.
  </obsolete>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    When a frame that is (or previously was) an ad frame renavigates, record
    whether it renavigated to an ad frame or a non-ad frame.

    An ad frame consists of the identified ad frame and all of its children. Its
    children (which may also be ads) are not counted when they renavigate.

    This metric is recorded as the event happens. Note that this is unlike most
    other Clients.Ads metrics, which are recorded when the page load is
    complete.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.Ads.All.Navigations.NonAdFrameRenavigatedToAd"
    enum="DidNavigateToAd">
  <obsolete>
    Deprecated In July 2018.
  </obsolete>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    When a frame that has never been part of an ad frame renavigates, record
    whether it renavigated to an ad frame or a non-ad frame.

    This metric is recorded as the event happens. Note that this is unlike most
    other Clients.Ads metrics, which are recorded when the page load is
    complete.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.Ads.All.ParentExistsForSubFrame"
    enum="ParentFrameKnown">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Records whether or not a parent frame is found for a subframe that finishes
    navigating.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.Ads.All.ResourceTypeWhenNoFrameFound"
    enum="ContentResourceType2">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Records the content::ResourceType when a resource finishes loading but the
    ads metrics aren't aware of a committed frame for the resource.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.Ads.Google.FrameCounts.MainFrameParent.AdFrames"
    units="Frames">
  <obsolete>
    Deprecated In May 2017.
  </obsolete>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The number of frames (with parent frame of main frame) that are on the page
    identified as Google Ad Frames.

    Only recorded if the page has at least one identified ad frame. Child frames
    of an ad frame are not included in the count.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.Ads.Google.FrameCounts.MainFrameParent.PercentAdFrames"
    units="%">
  <obsolete>
    Deprecated In May 2017.
  </obsolete>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The percentage of frames (with parent frame of main frame) on the page that
    are identified as Google Ad Frames.

    Only recorded if the page has at least one identified ad frame. An ad frame
    consists of the identified ad frame and all of its children (which may also
    be ads, but are counted as part of the ancestor ad frame).
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.Ads.Google.FrameCounts.MainFrameParent.TotalFrames"
    units="Frames">
  <obsolete>
    Deprecated In May 2017.
  </obsolete>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The number of frames (with parent frame of main frame) on the page.

    Only recorded if the page has at least one identified ad frame.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.Ads.Google.Navigations.AdFrameRenavigatedToAd"
    enum="DidNavigateToAd">
  <obsolete>
    Deprecated In July 2017. Use
    PageLoad.Clients.Ads.All.Navigations.AdFrameRenavigatedToAd instead.
  </obsolete>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    When a frame that is (or previously was) an ad frame renavigates, record
    whether it renavigated to an ad frame or a non-ad frame.

    An ad frame consists of the identified ad frame and all of its children. Its
    children (which may also be ads) are not counted when they renavigate.

    This metric is recorded as the event happens. Note that this is unlike most
    other Clients.Ads metrics, which are recorded when the page load is
    complete.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.Ads.Google.Navigations.NonAdFrameRenavigatedToAd"
    enum="DidNavigateToAd">
  <obsolete>
    Deprecated In July 2017. Use
    PageLoad.Clients.Ads.All.Navigations.NonAdFrameRenavigatedToAd instead.
  </obsolete>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    When a frame that has never been part of an ad frame renavigates, record
    whether it renavigated to an ad frame or a non-ad frame.

    This metric is recorded as the event happens. Note that this is unlike most
    other Clients.Ads metrics, which are recorded when the page load is
    complete.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.Ads.Google.ParentExistsForSubFrame"
    enum="ParentFrameKnown">
  <obsolete>
    Deprecated In July 2017. Use
    PageLoad.Clients.Ads.All.ParentExistsForSubFrame instead.
  </obsolete>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Records whether or not a parent frame is found for a subframe that finishes
    navigating.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.Ads.Google.ResourceTypeWhenNoFrameFound"
    enum="ContentResourceType2">
  <obsolete>
    Deprecated In July 2017. Use
    PageLoad.Clients.Ads.All.ResourceTypeWhenNoFrameFound instead.
  </obsolete>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Records the content::ResourceType when a resource finishes loading but the
    ads metrics aren't aware of a committed frame for the resource.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.AMP.SameDocumentView"
    enum="PageLoadMetricsAMPViewType">
  <owner>bmcquade@chromium.org</owner>
  <summary>Count of same document page views for AMP pages.</summary>
</histogram>

<histogram
    name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.CompressionRatio"
    units="%">
  <owner>bengr@chromium.org</owner>
  <owner>ryansturm@chromium.org</owner>
  <summary>
    100 times the ratio of network bytes received to network bytes the user
    would have seen without data reduction proxy (not including headers) in a
    page load that had its main resource loaded through data reduction proxy.
    Recorded as a percent if the data reduction proxy saved the user data.
    Recorded per page load when the user navigates away, hides the tab, or
    backgrounds the app.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.Inflation"
    units="KB">
  <owner>bengr@chromium.org</owner>
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The number of network kilobytes (not including headers) that the data
    reduction proxy inflated for the user in a page load that had its main
    resource was loaded through data reduction proxy. Recorded per page load
    when the user navigates away, hides the tab, or backgrounds the app.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.InflationPercent"
    units="%">
  <owner>bengr@chromium.org</owner>
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The inflation in network kilobytes (not including headers) the user saw due
    to using data reduction proxy in a page load that had its main resource was
    loaded through data reduction proxy. Recorded as a percent when the user saw
    inflated data. Recorded per page load when the user navigates away, hides
    the tab, or backgrounds the app.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.NonProxied"
    units="KB">
  <owner>bengr@chromium.org</owner>
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The number of network kilobytes that were not fetched through the data
    reduction proxy (not including headers) in a page load that had its main
    resource was loaded through data reduction proxy. Recorded per page load
    when the user navigates away, hides the tab, or backgrounds the app.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.Original"
    units="KB">
  <owner>bengr@chromium.org</owner>
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The number of network kilobytes (not including headers) that the user would
    have seen without using data reduction proxy in a page load that had its
    main resource was loaded through data reduction proxy. Recorded per page
    load when the user navigates away, hides the tab, or backgrounds the app.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.PercentProxied"
    units="%">
  <owner>bengr@chromium.org</owner>
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The percent of network kilobytes (not including headers) in a page load that
    went through data reduction proxy when the main resource was loaded through
    data reduction proxy. Recorded per page load when the user navigates away,
    hides the tab, or backgrounds the app.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.Proxied"
    units="KB">
  <owner>bengr@chromium.org</owner>
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The number of network kilobytes that were fetched through the data reduction
    proxy (not including headers) in a page load that had its main resource was
    loaded through data reduction proxy. Recorded per page load when the user
    navigates away, hides the tab, or backgrounds the app.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.Savings"
    units="KB">
  <owner>bengr@chromium.org</owner>
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The number of network kilobytes (not including headers) that the data
    reduction proxy saved the user in a page load that had its main resource was
    loaded through data reduction proxy. Recorded per page load when the user
    navigates away, hides the tab, or backgrounds the app.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.DataReductionProxy.Experimental.CompletedResources.Network.PercentProxied"
    units="%">
  <owner>bengr@chromium.org</owner>
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The percent of completed resources loaded from network in a page load that
    use data reduction proxy when the main resource was loaded through data
    reduction proxy.  Recorded per page load when the user navigates away, hides
    the tab, or backgrounds the app.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.DelayNavigation.Delay.Actual" units="ms">
  <obsolete>
    Deprecated March 2018
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    The actual delay added to page loads by DelayNavigationThrottle, for page
    loads that started in the foreground and reached first paint in the
    foreground.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.DelayNavigation.Delay.Delta" units="ms">
  <obsolete>
    Deprecated March 2018
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    The absolute delta between the specified and actual delays added to main
    frame navigations by DelayNavigationThrottle, for page loads that started in
    the foreground and reached first paint in the foreground.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.DelayNavigation.Delay.Specified" units="ms">
  <obsolete>
    Deprecated March 2018
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    The specified delay added to main frame navigations by
    DelayNavigationThrottle, for page loads that started in the foreground and
    reached first paint in the foreground.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.DocWrite.Block.Count" enum="Boolean">
  <owner>bmcquade@chromium.org</owner>
  <summary>
    Counts the number of pages where a script loaded via document.write could
    have been blocked.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.DocWrite.Block.DocumentWriteLoadingBehavior"
    enum="DocumentWriteLoadingBehavior">
  <owner>shivanisha@chromium.org</owner>
  <owner>bmcquade@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    This metric measures the counts of pages for various loading behaviors of
    document.written scripts.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.DocWrite.Block.ReloadCount">
  <owner>shivanisha@chromium.org</owner>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    This metric measures reloads in pages that have synchronous, cross-origin
    document.written scripts that could be blocked if document.write script
    blocking feature is enabled.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.GoogleCaptcha.Events"
    enum="GoogleCaptchaEvent">
  <obsolete>
    Deprecated May 2018
  </obsolete>
  <owner>mdw@chromium.org</owner>
  <summary>Events related to Google CAPTCHA pages being seen by users.</summary>
</histogram>

<histogram name="PageLoad.Clients.LoFi.Experimental.Bytes.Network.LoFi"
    units="KB">
  <owner>bengr@chromium.org</owner>
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The number of network kilobytes (not including headers) that LoFi resources
    used in a page load that had at least one LoFi resource. Recorded per page
    load when the user navigates away, hides the tab, or backgrounds the app.
  </summary>
</histogram>

<histogram
    name="PageLoad.Clients.LoFi.Experimental.CompletedResources.Network.LoFi"
    units="KB">
  <owner>bengr@chromium.org</owner>
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The number of network LoFi resources in a page load that had at least one
    LoFi resource. Recorded per page load when the user navigates away, hides
    the tab, or backgrounds the app.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.MultiTabLoading.NumTabsWithInflightLoad"
    units="tabs">
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Records the number of tabs with inflight loading activities. Recorded when a
    new page load starts.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.ServiceWorker.PageTransition"
    enum="CorePageTransition">
  <obsolete>
    Deprecated June 2018 (M69) in favor of
    PageLoad.Clients.ServiceWorker2.PageTransition.
  </obsolete>
  <owner>falken@chromium.org</owner>
  <summary>
    The core transition type for main frame page loads controlled by a service
    worker.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.ServiceWorker2.PageTransition"
    enum="CorePageTransition">
  <owner>falken@chromium.org</owner>
  <summary>
    The core transition type for main frame page loads controlled by a service
    worker that has a fetch event handler.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.SubresourceFilter.ActivationDecision"
    enum="SubresourceFilterActivationDecision">
  <obsolete>
    Deprecated May 2018 (M68) in favor of
    SubresourceFilter.PageLoad.ActivationDecision
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    Records the policy decision to activate subresource filtering for a page
    load. 'Activated' indicates that subresource filtering was activated. All
    other reasons indicate that subresource filtering was not activated. Page
    loads where subresource filtering was activated ('Activated') and at least
    one subresource matched the subresource filter are counted in
    PageLoad.Clients.SubresourceFilter.Count.
  </summary>
</histogram>

<histogram name="PageLoad.Clients.SubresourceFilter.Count" enum="Boolean">
  <obsolete>
    Deprecated May 2018 (M68) in favor of
    SubresourceFilter.PageLoad.NumSubresourceLoads.MatchedRules (e.g. by looking
    at 0 and non-zero buckets).
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    Records 'true' for page loads where the subresource filter matched a
    subresource loaded by the page. Includes dryrun matches. To compute the
    percentage of total page loads affected by subresource filtering, divide by
    the sum of counts for (PageLoad.ParseTiming.NavigationToParseStart +
    PageLoad.ParseTiming.NavigationToParseStart.Background).
  </summary>
</histogram>

<histogram name="PageLoad.CSSTiming.Parse.BeforeFirstContentfulPaint"
    units="ms">
  <obsolete>
    Deprecated in May 2018 (M69).
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The time spent parsing author style sheets before the first contentful
    paint.
  </summary>
</histogram>

<histogram name="PageLoad.CSSTiming.ParseAndUpdate.BeforeFirstContentfulPaint"
    units="ms">
  <obsolete>
    Deprecated in May 2018 (M69).
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The sum of CSSTiming.Update and CSSTiming.Parse variants for this page load.
  </summary>
</histogram>

<histogram name="PageLoad.CSSTiming.Update.BeforeFirstContentfulPaint"
    units="ms">
  <obsolete>
    Deprecated in May 2018 (M69).
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The time spent in Document::updateStyle before the first contentful paint.
  </summary>
</histogram>

<histogram
    name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"
    units="ms">
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    DOMContentLoaded event is fired, for main frame documents.
  </summary>
</histogram>

<histogram name="PageLoad.DocumentTiming.NavigationToFirstLayout" units="ms">
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    first layout is performed, for main frame documents.
  </summary>
</histogram>

<histogram name="PageLoad.DocumentTiming.NavigationToLoadEventFired" units="ms">
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    load event is fired, for main frame documents.
  </summary>
</histogram>

<histogram name="PageLoad.EventCounts" enum="PageLoadEvent">
  <obsolete>
    deprecated in favor of PageLoad.Events.*
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    Captures counts of various page load events. These are enumerated in the
    enum page_load_metrics::PageLoadEvent, and include events like 'page load
    aborted before first layout'
  </summary>
</histogram>

<histogram name="PageLoad.Events.Committed" enum="CommittedLoadEvent">
  <obsolete>
    Deprecated in favor of PageLoad.Timing2.NavigationToCommit and
    PageLoad.AbortTiming.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    Captures counts of load events post-commit, on relevant page loads (i.e.
    http/https, not same-page, not an error page). These events include aborts
    before first layout and successful first layouts. Note that the event
    'Committed load started' when segmented by background/foreground specifies
    whether the eventually committed load started in the background or
    foreground, not whether we backgrounded before the actual commit event. This
    is because we don't have all the data to filter relevant page loads on
    provisional loads.
  </summary>
</histogram>

<histogram name="PageLoad.Events.InternalError" enum="InternalErrorLoadEvent">
  <obsolete>
    Deprecated in favor of PageLoad.Internal.ErrorCode.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    Counts of various internal error conditions in the page_load_metrics system.
  </summary>
</histogram>

<histogram name="PageLoad.Events.Provisional" enum="ProvisionalLoadEvent">
  <obsolete>
    Deprecated Feb 2016 in favor of PageLoad.AbortTiming and
    PageLoad.Timing2.NavigationToFailedProvisionalLoad. Note that the
    corresponding background enumerations are no longer being tracked in the
    timing histograms.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    Captures counts of provisional load events. These include aborted, failed,
    and successful (committed) provisional loads.
  </summary>
</histogram>

<histogram base="true" name="PageLoad.Experimental.AbortTiming.Background"
    units="ms">
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    This metric is still experimental and not yet ready to be relied upon.
    Measures the time from navigation start to the time the page load was
    aborted due to being backgrounded.
  </summary>
</histogram>

<histogram base="true" name="PageLoad.Experimental.AbortTiming.ClientRedirect"
    units="ms">
  <obsolete>
    Deprecated in favor of PageLoad.Internal.ClientRedirect.*.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    This metric is still experimental and not yet ready to be relied upon.
    Measures the time from navigation start to the time the page load was
    aborted by a client side redirect (Javascript navigation).
  </summary>
</histogram>

<histogram base="true" name="PageLoad.Experimental.AbortTiming.Close"
    units="ms">
  <owner>csharrison@chromium.org</owner>
  <summary>
    This metric is still experimental and not yet ready to be relied upon.
    Measures the time from navigation start to the time the page load was
    aborted by the user closing the tab or browser.
  </summary>
</histogram>

<histogram base="true"
    name="PageLoad.Experimental.AbortTiming.ForwardBackNavigation" units="ms">
  <owner>csharrison@chromium.org</owner>
  <summary>
    This metric is still experimental and not yet ready to be relied upon.
    Measures the time from navigation start to the time the page load was
    aborted by a forward or back navigation.
  </summary>
</histogram>

<histogram base="true" name="PageLoad.Experimental.AbortTiming.NewNavigation"
    units="ms">
  <owner>csharrison@chromium.org</owner>
  <summary>
    This metric is still experimental and not yet ready to be relied upon.
    Measures the time from navigation start to the time the page load was
    aborted by a new navigation.
  </summary>
</histogram>

<histogram base="true" name="PageLoad.Experimental.AbortTiming.Other"
    units="ms">
  <owner>csharrison@chromium.org</owner>
  <summary>
    This metric is still experimental and not yet ready to be relied upon.
    Measures the time from navigation start to the time the page load was
    aborted. The abort cause is unknown.
  </summary>
</histogram>

<histogram base="true" name="PageLoad.Experimental.AbortTiming.Reload"
    units="ms">
  <owner>csharrison@chromium.org</owner>
  <summary>
    This metric is still experimental and not yet ready to be relied upon.
    Measures the time from navigation start to the time the page load was
    aborted by a reload.
  </summary>
</histogram>

<histogram base="true" name="PageLoad.Experimental.AbortTiming.Stop" units="ms">
  <owner>csharrison@chromium.org</owner>
  <summary>
    This metric is still experimental and not yet ready to be relied upon.
    Measures the time from navigation start to the time the page load was
    aborted by the user pressing stop.
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.Bytes.Cache" units="KB">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The number of prefiltered (e.g., compressed) KiloBytes loaded from the cache
    via the browser process for a page load. Recorded when the page load is
    terminated.
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.Bytes.Network" units="KB">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The number of prefiltered (e.g., compressed) KiloBytes loaded over the
    network via the browser process for a page load. Recorded when the page load
    is terminated.
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.Bytes.Total" units="KB">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The number of prefiltered (e.g., compressed) KiloBytes loaded via the
    browser process for a page load. Recorded when the page load is terminated.
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.Cache.RequestPercent.ParseStop"
    units="%">
  <obsolete>
    Removed Jan 2018
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The percent of resources loaded from cache for the given page load. Recorded
    at the end of HTML parsing.
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.Cache.TotalRequests.ParseStop"
    units="requests">
  <obsolete>
    Removed Jan 2018
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The number of resources a given page finished loading from cache at parse
    stop.
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.CompletedResources.Cache"
    units="resources">
  <owner>csharrison@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The number of completed resources loaded from the cache via the browser
    process for a page load. Recorded when the page load is terminated.
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.CompletedResources.Network"
    units="resources">
  <owner>csharrison@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The number of completed resources loaded from the network via the browser
    process for a page load. Recorded when the page load is terminated.
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.CompletedResources.Total"
    units="resources">
  <owner>csharrison@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The total number of completed resources loaded via the browser process for a
    page load. Recorded when the page load is terminated.
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.NavigationToInteractive" units="ms">
  <owner>dproy@chromium.org</owner>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Measures Time to Interactive, a metric based on main thread and network
    heuristics to approximate the point in time when the page feels interactive
    to the user. See https://goo.gl/TFw6xz for detailed explanation. This
    histogram uses First Meaningful Paint as the lower bound for quiescent
    windows.
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.PageTiming.FirstPaintToFirstBackground"
    units="ms">
  <obsolete>
    Deprecated in favor of PageLoad.PageTiming.ForegroundDuration.AfterPaint.
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    Measures the total time the page load was active after first paint, up until
    being backgrounded, prior to the page load terminating. Recorded only for
    page loads that started in the foreground.
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.PageTiming.FirstPaintToPageEnd"
    units="ms">
  <obsolete>
    Deprecated in favor of PageLoad.PageTiming.ForegroundDuration.AfterPaint.
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    Measures the total time the page load was active after first paint, for page
    loads that spend the entire time in the foreground.
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.PageTiming.NavigationToFirstBackground"
    units="ms">
  <obsolete>
    Deprecated in favor of PageLoad.PageTiming.ForegroundDuration.
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    Measures the total time the page load was active, up until being
    backgrounded, for page loads that started in the foreground.
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.PageTiming.NavigationToPageEnd"
    units="ms">
  <obsolete>
    Deprecated in favor of PageLoad.PageTiming.ForegroundDuration.
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    Measures the total time the page load was active, for page loads that spend
    the entire time in the foreground.
  </summary>
</histogram>

<histogram
    name="PageLoad.Experimental.PaintTiming.FirstMeaningfulPaintSignalStatus"
    enum="FirstMeaningfulPaintSignalStatus">
  <obsolete>
    Deprecated in favor of
    PageLoad.Experimental.PaintTiming.FirstMeaningfulPaintSignalStatus2.
  </obsolete>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Whether the user had any interaction on the page (except mouse move) after
    first paint, and whether the user left the page before network stable or
    not.
  </summary>
</histogram>

<histogram
    name="PageLoad.Experimental.PaintTiming.FirstMeaningfulPaintSignalStatus2"
    enum="FirstMeaningfulPaintSignalStatus">
  <obsolete>
    Deprecated as of 05/17/2017.
  </obsolete>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Whether the user had any interaction on the page (except mouse move) after
    first paint, and whether the user left the page before network stable or
    not. Not logged if page load was aborted before first paint.
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.PaintTiming.FirstMeaningfulPaintStatus"
    enum="FirstMeaningfulPaintStatus">
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Records whether the First Meaningful Paint metric was reported for the page
    load, or why it wasn't if not. See http://bit.ly/ttfmp-doc for the
    definition of First Meaningful Paint.
  </summary>
</histogram>

<histogram
    name="PageLoad.Experimental.PaintTiming.FirstMeaningfulPaintToNetworkStable"
    units="ms">
  <obsolete>
    Deprecated as of 05/17/2017.
  </obsolete>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Measures the time between when the first meaningful paint
    (http://bit.ly/ttfmp-doc) was computed to have happened, and when we
    actually logged the metric.

    This metric is useful in helping us tweak when FirstMeaningfulPaintDetector
    should stop observing layout operations.
  </summary>
</histogram>

<histogram
    name="PageLoad.Experimental.PaintTiming.ForegroundToFirstMeaningfulPaint"
    units="ms">
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Measures the time from a background tab being switched to the foreground to
    the time the first meaningful paint is performed, for main frame documents.
  </summary>
</histogram>

<histogram
    name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"
    units="ms">
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the first
    meaningful paint (http://bit.ly/ttfmp-doc), for main frame documents.
  </summary>
</histogram>

<histogram
    name="PageLoad.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"
    units="ms">
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Measures the time from when the HTML parser started, to the first meaningful
    paint (http://bit.ly/ttfmp-doc), for main frame documents.
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.ParseDuration.CachedPercent.0-50"
    units="ms">
  <obsolete>
    Removed Jan 2018
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The parse duration of the page load where 0-50% of all subresources (loaded
    during parsing) were served from the HTTP cache (including 304s).
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.ParseDuration.CachedPercent.51-100"
    units="ms">
  <obsolete>
    Removed Jan 2018
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The parse duration of the page load where 51-100% of all subresources
    (loaded during parsing) were served from the HTTP cache (including 304s).
  </summary>
</histogram>

<histogram
    name="PageLoad.Experimental.Renderer.FirstMeaningfulPaintDetector.FirstMeaningfulPaintOrdering"
    enum="FirstMeaningfulPaintOrdering">
  <obsolete>
    Renamed to
    PageLoad.Internal.Renderer.FirstMeaningfulPaintDetector.FirstMeaningfulPaintOrdering
  </obsolete>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Whether the two variants of First Meaningful Paint reported different
    values, and if so, which one was reported first.
  </summary>
</histogram>

<histogram
    name="PageLoad.Experimental.Renderer.FirstMeaningfulPaintDetector.HadNetworkQuiet"
    enum="NetworkQuietStatus">
  <obsolete>
    Renamed to
    PageLoad.Internal.Renderer.FirstMeaningfulPaintDetector.HadNetworkQuiet
  </obsolete>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Recorded when the page load reached network 0-quiet (no active network
    connection for 0.5 seconds), or network 2-quiet (no more than 2 active
    network connections for 2 seconds).
    PageLoad.Experimental.PaintTiming.FirstMeaningfulPaintSignalStatus2
    histogram gives the fraction of page loads that had network 2-quiet, so it
    can be used as a baseline.
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.TimeToInteractiveStatus"
    enum="TimeToInteractiveStatus">
  <owner>tdresser@chromium.org</owner>
  <owner>dproy@chromium.org</owner>
  <summary>
    Records whether the Time To Interactive metric was reported for the page
    load, or why it wasn't if not. See https://goo.gl/TFw6xz for definition of
    Time to Interactive.
  </summary>
</histogram>

<histogram name="PageLoad.Experimental.TotalRequests.ParseStop"
    units="requests">
  <obsolete>
    Removed Jan 2018
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The number of resources a given page finished loading at parse stop.
  </summary>
</histogram>

<histogram name="PageLoad.FrameCounts.AdFrames.PerFrame.CrossOrigin"
    enum="CrossOriginAd">
  <obsolete>
    Removed April 2018, replaced by OriginStatus.
  </obsolete>
  <owner>ericrobinson@chromium.org</owner>
  <summary>
    For each identified ad frame, whether the origin of the ad matches the
    origin of the main frame.

    An ad frame consists of the identified ad frame and all of its children
    (which may also be ads, but are counted as part of the ancestor ad frame).
    Frames of zero bytes (e.g., never had a document or their document was
    doc.written and no sub-resources were loaded) are not counted.
  </summary>
</histogram>

<histogram name="PageLoad.FrameCounts.AdFrames.PerFrame.OriginStatus"
    enum="CrossOriginAdStatus">
  <owner>ericrobinson@chromium.org</owner>
  <summary>
    For each identified ad frame, whether the origin of the ad matches the
    origin of the main frame, differs from the origin of the main frame, or is
    indeterminable.

    An ad frame consists of the identified ad frame and all of its children
    (which may also be ads, but are counted as part of the ancestor ad frame).
    Frames of zero bytes (e.g., never had a document or their document was
    doc.written and no sub-resources were loaded) are not counted.
  </summary>
</histogram>

<histogram name="PageLoad.FrameCounts.AnyParentFrame.AdFrames"
    units="Ad frames">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The number of frames on the page that have loaded more than 0 bytes of
    content.

    For pages with zero ad frames, the other PageLoad.Clients.Ads metrics are
    not recorded unless otherwise specified.

    Child frames of an ad frame are not included in the count.
  </summary>
</histogram>

<histogram name="PageLoad.InputTiming.NavigationToFirstNonScroll.AfterPaint"
    units="ms">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Measures the time to first non-scroll input after the first paint.
  </summary>
</histogram>

<histogram name="PageLoad.InputTiming.NavigationToFirstScroll.AfterPaint"
    units="ms">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Measures the time to first scroll input after the first paint.
  </summary>
</histogram>

<histogram name="PageLoad.InteractiveTiming.FirstInputDelay" units="ms">
  <owner>tdresser@chromium.org</owner>
  <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.
  </summary>
</histogram>

<histogram name="PageLoad.InteractiveTiming.FirstInputTimestamp" units="ms">
  <owner>tdresser@chromium.org</owner>
  <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>
</histogram>

<histogram name="PageLoad.InteractiveTiming.InputDelay" units="ms">
  <owner>tdresser@chromium.org</owner>
  <summary>
    The duration between the hardware timestamp and the start of event
    processing on the main thread for a meaningful input. In ms.
  </summary>
</histogram>

<histogram name="PageLoad.InteractiveTiming.InputTimestamp" units="ms">
  <owner>tdresser@chromium.org</owner>
  <summary>
    The duration between navigation start and the hardware timestamp of a
    meaningful input. In ms.
  </summary>
</histogram>

<histogram name="PageLoad.InteractiveTiming.LongestInputDelay" units="ms">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Measures longest Input Delay, the longest duration between the hardware
    timestamp and the start of event processing on the main thread for the
    meaningful input per navigation. In ms.
  </summary>
</histogram>

<histogram name="PageLoad.InteractiveTiming.LongestInputTimestamp" units="ms">
  <owner>tdresser@chromium.org</owner>
  <summary>
    The duration between navigation start and the hardware timestamp of the
    meaningful input with longest queuing delay per navigation. In ms.
  </summary>
</histogram>

<histogram name="PageLoad.Internal.ClientRedirect.FirstPaintToNavigation"
    units="ms">
  <owner>bmcquade@chromium.org</owner>
  <summary>
    The delay between first paint and a client-side redirect navigation, for
    pages that reported a first paint. This metric is only intended to help in
    choosing a heuristic delay to distinguish between client-side redirects and
    other client initiated navigations, and will be deprecated in M54. Please
    contact bmcquade@chromium.org before using this metric.
  </summary>
</histogram>

<histogram name="PageLoad.Internal.ClientRedirect.NavigationWithoutPaint"
    enum="Boolean">
  <owner>bmcquade@chromium.org</owner>
  <summary>
    Counts how often a client-side redirect was initiated from a page that did
    not report a first paint. This metric is only intended to help in choosing a
    heuristic delay to distinguish between client-side redirects and other
    client initiated navigations, and will be deprecated in M54. Please contact
    bmcquade@chromium.org before using this metric.
  </summary>
</histogram>

<histogram name="PageLoad.Internal.ClientRedirectDelayAfterPaint" units="ms">
  <obsolete>
    Deprecated in favor of
    PageLoad.Internal.ClientRedirect.FirstPaintToNavigation and
    PageLoad.Internal.ClientRedirect.NavigationWithoutPaint.
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    The delay between first paint and a client-side redirection. This metric is
    only intended to help in choosing a heuristic delay to distinguish between
    client-side redirects and other client initiated navigations, and will be
    deprecated in M54. Please contact bmcquade@chromium.org before using this
    metric.
  </summary>
</histogram>

<histogram name="PageLoad.Internal.CommitToComplete.NoTimingIPCs" units="ms">
  <obsolete>
    Deprecated on 10/14/2016. No longer needed.
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    The delay between commit and completion, for page loads that did not receive
    any timing IPCs. This metric is only intended to help understand the cases
    where committed page loads don't receive timing IPCs. Please contact
    bmcquade@chromium.org before using this metric.
  </summary>
</histogram>

<histogram name="PageLoad.Internal.ErrorCode" enum="InternalErrorLoadEvent">
  <owner>csharrison@chromium.org</owner>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    Counts of various internal error conditions in the page_load_metrics system.
  </summary>
</histogram>

<histogram name="PageLoad.Internal.InteractiveToInteractiveDetection"
    units="ms">
  <owner>dproy@chromium.org</owner>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Measures time delta between Time to Interactive and when we can detect TTI.
    TTI cannot be detected in real time - we have to wait sufficiently long to
    determine main thread and network quiescence. See https://goo.gl/TFw6xz for
    detailed explanation of Time to Interactive. This histogram uses First
    Meaningful Paint as the lower bound for quiescent windows.
  </summary>
</histogram>

<histogram name="PageLoad.Internal.NavigationStartedInForeground"
    enum="BooleanForeground">
  <owner>bmcquade@chromium.org</owner>
  <summary>Whether a navigation started in the foreground.</summary>
</histogram>

<histogram name="PageLoad.Internal.OutOfOrderInterFrameTiming" units="ms">
  <owner>bmcquade@chromium.org</owner>
  <summary>
    The difference in magnitude between existing and updated timing, for
    inter-frame timings that are received out of order. Page load metrics
    observes timing updates in all frames on a page. It's possible for timings
    in different frames to arrive out of order. This metric tracks how often
    this happens, along with the magnitude of the difference.
  </summary>
</histogram>

<histogram name="PageLoad.Internal.PageLoadCompleted.AfterAppBackground"
    enum="BooleanStartedCompleted">
  <owner>bmcquade@chromium.org</owner>
  <summary>
    Whether a page load completed after the app entered the background. We log a
    'Started' value for each PageLoadTracker that is active when the app enters
    the background, and a 'Completed' value for each of those PageLoadTrackers
    that successfully runs its destructor. This helps to understand how many
    trackers are destroyed while the app is in the background before they are
    able to run their destructor. This metric is only intended to help in
    understanding how often app background leads to data loss, and will be
    deprecated in a subsequent release. Please contact bmcquade@chromium.org
    before using this metric.
  </summary>
</histogram>

<histogram name="PageLoad.Internal.PageLoadTimingStatus"
    enum="PageLoadTimingStatus">
  <owner>bmcquade@chromium.org</owner>
  <summary>
    The status of PageLoadTiming structs received from the render process over
    IPC.
  </summary>
</histogram>

<histogram
    name="PageLoad.Internal.PaintTiming.HadUserInputBeforeFirstMeaningfulPaint"
    enum="HadUserInput">
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Whether the user had any interaction on the page before
    FirstMeaningfulPaint. Recorded when the page load reaches network idle.
  </summary>
</histogram>

<histogram name="PageLoad.Internal.Prerender" enum="BooleanHit">
  <owner>bmcquade@chromium.org</owner>
  <summary>
    Counts the number of prerender navigations. Only logs true values.
  </summary>
</histogram>

<histogram name="PageLoad.Internal.ProvisionalAbortChainSize.ForwardBack"
    units="length" expires_after="2018-08-30">
  <owner>csharrison@chromium.org</owner>
  <summary>
    This histogram counts the number of provisional loads aborted by other
    navigations, until a final forward back navigation commits.
  </summary>
</histogram>

<histogram name="PageLoad.Internal.ProvisionalAbortChainSize.NewNavigation"
    units="length">
  <owner>csharrison@chromium.org</owner>
  <summary>
    This histogram counts the number of provisional loads aborted by new
    navigations, until a final new navigation commits.
  </summary>
</histogram>

<histogram name="PageLoad.Internal.ProvisionalAbortChainSize.NoCommit"
    units="length" expires_after="2018-08-30">
  <owner>csharrison@chromium.org</owner>
  <summary>
    This histogram counts the number of provisional loads aborted by new
    navigations. In this case the chain never ends with a commit. This is logged
    on the next abort signal comes in (e.g. tab close or new navigation).
  </summary>
</histogram>

<histogram name="PageLoad.Internal.ProvisionalAbortChainSize.Reload"
    units="length" expires_after="2018-08-30">
  <owner>csharrison@chromium.org</owner>
  <summary>
    This histogram counts the number of provisional loads aborted by other
    navigations, until a final reload navigation commits.
  </summary>
</histogram>

<histogram name="PageLoad.Internal.ProvisionalAbortChainSize.SameURL"
    units="length" expires_after="2018-08-30">
  <owner>csharrison@chromium.org</owner>
  <summary>
    This histogram counts the number of consecutive provisional loads aborted by
    other navigations with the same url (before redirects). It's logged when a
    provisional abort does not share a URL, or when a load finally commits. Note
    that we don't log chains of length 0.
  </summary>
</histogram>

<histogram
    name="PageLoad.Internal.Renderer.FirstMeaningfulPaintDetector.FirstMeaningfulPaintOrdering"
    enum="FirstMeaningfulPaintOrdering">
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Whether the two variants of First Meaningful Paint reported different
    values, and if so, which one was reported first.
  </summary>
</histogram>

<histogram
    name="PageLoad.Internal.Renderer.FirstMeaningfulPaintDetector.HadNetworkQuiet"
    enum="NetworkQuietStatus">
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Recorded when the page load reached network 0-quiet (no active network
    connection for 0.5 seconds), or network 2-quiet (no more than 2 active
    network connections for 2 seconds).
    PageLoad.Experimental.PaintTiming.FirstMeaningfulPaintSignalStatus2
    histogram gives the fraction of page loads that had network 2-quiet, so it
    can be used as a baseline.
  </summary>
</histogram>

<histogram name="PageLoad.Internal.Renderer.PaintTiming.SwapResult"
    enum="SwapResult">
  <owner>panicker@chromium.org</owner>
  <summary>
    For first paint, first contentful paint, first meaningful paint, first text
    paint, and first image paint, we use the swap timestamp of the corresponding
    paint, which is the timestamp the CC SwapPromise was positively fulfilled
    (i.e. DidSwap() was invoked). If the swap did not occur (DidNotSwap() was
    invoked), we use the timestamp when the swap promise fails. However, in the
    future we may stop reporting timestamps for certain failure reasons. This
    metric records whether or not the swap occurred, and the reason for failure
    if it failed. The distribution of this metric will help determine the effect
    of not reporting timestamps in certain cases.
  </summary>
</histogram>

<histogram name="PageLoad.Internal.Renderer.PaintTiming.SwapTimeDelta"
    units="ms">
  <obsolete>
    deprecated May 2018: The swap-timestamp comes from a different process, and
    comparing that with the paint-time (which is from the local process) does
    not produce a reliable metric.
  </obsolete>
  <owner>panicker@chromium.org</owner>
  <summary>
    Records the delta between the renderer timestamp and swap timestamp for
    first paint, first contentful paint, first meaningful paint, first text
    paint, and first image paint. The renderer timestamp is recorded on the
    Paint path, while the swap timestamp is the result of a CC SwapPromise
    (queued on the Paint path) either being successfully fulfilled, or broken in
    cases where the swap did not occur. As we switch to using the swap
    timestamps in place of their renderer counterparts, this metric allows us to
    see the discrepancies between the two timestamps.
  </summary>
</histogram>

<histogram name="PageLoad.Navigation.RedirectChainLength" units="urls">
  <owner>csharrison@chromium.org</owner>
  <summary>
    The number of URLs in the redirect chain for this navigation. This excludes
    the first URL.
  </summary>
</histogram>

<histogram name="PageLoad.PageTiming.ForegroundDuration" units="ms">
  <owner>bmcquade@chromium.org</owner>
  <summary>
    For page loads that start in the foreground, measures the duration of time
    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>
</histogram>

<histogram
    name="PageLoad.PageTiming.ForegroundDuration.PageEndReason.ForwardBackNavigation.UserGesture"
    units="ms">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The time since navigation start before the user presses the back button on a
    page. Only measures page loads that remained in foreground and were created
    by user gesture inside the renderer (as opposed to browser UX gestures).
  </summary>
</histogram>

<histogram name="PageLoad.PageTiming.NavigationToFailedProvisionalLoad"
    units="ms">
  <owner>bmcquade@chromium.org</owner>
  <owner>shivanisha@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    provisional load failed. Only measures provisional loads that failed in the
    foreground.
  </summary>
</histogram>

<histogram name="PageLoad.PageTiming.NavigationToFirstForeground" units="ms">
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    user first foregrounds an initially backgrounded tab. Only measures
    navigations that started in the background.
  </summary>
</histogram>

<histogram name="PageLoad.PaintTiming.ForegroundToFirstContentfulPaint"
    units="ms">
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Measures the time from a background tab being switched to the foreground to
    the time the first contentful paint is performed, for main frame documents.
  </summary>
</histogram>

<histogram name="PageLoad.PaintTiming.ForegroundToFirstPaint" units="ms">
  <owner>pkotwicz@chromium.org</owner>
  <summary>
    Measures the time from a background tab being switched to the foreground to
    the time the first paint is performed, for main frame documents.
  </summary>
</histogram>

<histogram name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"
    units="ms">
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time from navigation start to first &quot;contentful&quot; paint.
  </summary>
</histogram>

<histogram name="PageLoad.PaintTiming.NavigationToFirstImagePaint" units="ms">
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    first image is painted, for main frame documents. For images that render
    progressively, this is recorded as soon as any image pixels have been drawn.
  </summary>
</histogram>

<histogram name="PageLoad.PaintTiming.NavigationToFirstPaint" units="ms">
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    first paint is performed, for main frame documents.
  </summary>
</histogram>

<histogram name="PageLoad.PaintTiming.NavigationToFirstTextPaint" units="ms">
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    first non-blank text is painted, for main frame documents.
  </summary>
</histogram>

<histogram name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"
    units="ms">
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time from when the HTML parser started, to when the page first
    paints content.
  </summary>
</histogram>

<histogram name="PageLoad.ParseTiming.NavigationToParseStart" units="ms">
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    parser started, for main frame documents.
  </summary>
</histogram>

<histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptExecution" units="ms">
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time that the HTML parser spent blocked on the execution of
    scripts, for main frame documents that finished parsing.
  </summary>
</histogram>

<histogram
    name="PageLoad.ParseTiming.ParseBlockedOnScriptExecutionFromDocumentWrite"
    units="ms">
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time that the HTML parser spent blocked on the execution of
    scripts inserted from document.write, for main frame documents that finished
    parsing.
  </summary>
</histogram>

<histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad" units="ms">
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time that the HTML parser spent blocked on the load of scripts,
    for main frame documents that finished parsing.
  </summary>
</histogram>

<histogram
    name="PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite"
    units="ms">
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time that the HTML parser spent blocked on the load of scripts
    inserted from document.write, for main frame documents that finished
    parsing.
  </summary>
</histogram>

<histogram name="PageLoad.ParseTiming.ParseDuration" units="ms">
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time that the HTML parser was active, for main frame documents
    that finished parsing.
  </summary>
</histogram>

<histogram name="PageLoad.Timing.NavigationToDOMContentLoadedEventFired"
    units="ms">
  <obsolete>
    deprecated in favor of PageLoad.Timing2.*
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    DOMContentLoaded event is fired, for main frame documents.
  </summary>
</histogram>

<histogram name="PageLoad.Timing.NavigationToFirstLayout" units="ms">
  <obsolete>
    deprecated in favor of PageLoad.Timing2.*
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    first layout is performed, for main frame documents.
  </summary>
</histogram>

<histogram name="PageLoad.Timing.NavigationToLoadEventFired" units="ms">
  <obsolete>
    deprecated in favor of PageLoad.Timing2.*
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    load event is fired, for main frame documents.
  </summary>
</histogram>

<histogram name="PageLoad.Timing2.DOMLoadingToDOMContentLoadedEventFired"
    units="ms">
  <obsolete>
    deprecated in favor of PageLoad.DocumentTiming.ParseDuration
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time from when DOM loading occurs (the time that HTML parsing
    begins) to the time the DOMContentLoaded event is fired, for main frame
    documents. This is equivalent to the time that the HTML document resource
    was being parsed.
  </summary>
</histogram>

<histogram name="PageLoad.Timing2.DOMLoadingToFirstContentfulPaint" units="ms">
  <obsolete>
    deprecated in favor of PageLoad.PaintTiming.ParseStartToFirstContentfulPaint
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time from when DOM loading occurs (the time that HTML parsing
    begins) to first &quot;contentful&quot; paint.
  </summary>
</histogram>

<histogram name="PageLoad.Timing2.ForegroundToFirstPaint" units="ms">
  <obsolete>
    deprecated in favor of PageLoad.PaintTiming.ForegroundToFirstPaint
  </obsolete>
  <owner>pkotwicz@chromium.org</owner>
  <summary>
    Measures the time from a background tab being switched to the foreground to
    the time the first paint is performed, for main frame documents.
  </summary>
</histogram>

<histogram name="PageLoad.Timing2.NavigationToCommit" units="ms">
  <obsolete>
    Deprecated in favor of PageLoad.ParseTiming.NavigationToParseStart
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    navigation committed, for main frame documents.
  </summary>
</histogram>

<histogram name="PageLoad.Timing2.NavigationToDOMContentLoadedEventFired"
    units="ms">
  <obsolete>
    deprecated in favor of
    PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    DOMContentLoaded event is fired, for main frame documents. This metric is
    being phased out in favor of the PageLoad.DocumentTiming equivalent and will
    be deprecated in M54.
  </summary>
</histogram>

<histogram name="PageLoad.Timing2.NavigationToFailedProvisionalLoad" units="ms">
  <obsolete>
    deprecated in favor of PageLoad.PageTiming.NavigationToFailedProvisionalLoad
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <owner>shivanisha@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    provisional load failed. Only measures provisional loads that failed in the
    foreground.
  </summary>
</histogram>

<histogram name="PageLoad.Timing2.NavigationToFirstBackground" units="ms">
  <obsolete>
    deprecated in favor of PageLoad.AbortTiming.Background.*
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    user first backgrounds the tab. Only measures navigations that started in
    the foreground.
  </summary>
</histogram>

<histogram name="PageLoad.Timing2.NavigationToFirstContentfulPaint" units="ms">
  <obsolete>
    deprecated in favor of PageLoad.PaintTiming.NavigationToFirstContentfulPaint
  </obsolete>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time from navigation start to first &quot;contentful&quot; paint.  This
    metric is being phased out in favor of the PageLoad.PaintTiming equivalent
    and will be deprecated in M54.
  </summary>
</histogram>

<histogram name="PageLoad.Timing2.NavigationToFirstForeground" units="ms">
  <obsolete>
    deprecated in favor of PageLoad.PageTiming.NavigationToFirstForeground
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    user first foregrounds an initially backgrounded tab. Only measures
    navigations that started in the background.
  </summary>
</histogram>

<histogram name="PageLoad.Timing2.NavigationToFirstImagePaint" units="ms">
  <obsolete>
    deprecated in favor of PageLoad.PaintTiming.NavigationToFirstImagePaint
  </obsolete>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    first image is painted, for main frame documents. For images that render
    progressively, this is recorded as soon as any image pixels have been drawn.
    This metric is being phased out in favor of the PageLoad.PaintTiming
    equivalent and will be deprecated in M54.
  </summary>
</histogram>

<histogram name="PageLoad.Timing2.NavigationToFirstLayout" units="ms">
  <obsolete>
    deprecated in favor of PageLoad.DocumentTiming.NavigationToFirstLayout
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    first layout is performed, for main frame documents. This metric is being
    phased out in favor of the PageLoad.DocumentTiming equivalent and will be
    deprecated in M54.
  </summary>
</histogram>

<histogram name="PageLoad.Timing2.NavigationToFirstPaint" units="ms">
  <obsolete>
    deprecated in favor of PageLoad.PaintTiming.NavigationToFirstPaint
  </obsolete>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    first paint is performed, for main frame documents. This metric is being
    phased out in favor of the PageLoad.PaintTiming equivalent and will be
    deprecated in M54.
  </summary>
</histogram>

<histogram name="PageLoad.Timing2.NavigationToFirstTextPaint" units="ms">
  <obsolete>
    deprecated in favor of PageLoad.PaintTiming.NavigationToFirstTextPaint
  </obsolete>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    first non-blank text is painted, for main frame documents. This metric is
    being phased out in favor of the PageLoad.PaintTiming equivalent and will be
    deprecated in M54.
  </summary>
</histogram>

<histogram name="PageLoad.Timing2.NavigationToLoadEventFired" units="ms">
  <obsolete>
    deprecated in favor of PageLoad.DocumentTiming.NavigationToLoadEventFired
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    load event is fired, for main frame documents. This metric is being phased
    out in favor of the PageLoad.DocumentTiming equivalent and will be
    deprecated in M54.
  </summary>
</histogram>

<histogram name="PageLoad.Timing2.ParseBlockedOnScriptLoad" units="ms">
  <obsolete>
    deprecated in favor of PageLoad.ParseTiming.ParseBlockedOnScriptLoad
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time that the HTML parser spent blocked on the load of scripts,
    for main frame documents that started parsing.
  </summary>
</histogram>

<histogram name="PageLoad.Timing2.ParseBlockedOnScriptLoad.ParseComplete"
    units="ms">
  <obsolete>
    deprecated in favor of PageLoad.ParseTiming.ParseBlockedOnScriptLoad
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time that the HTML parser spent blocked on the load of scripts,
    for main frame documents that finished parsing. This metric is being phased
    out in favor of the PageLoad.ParseTiming equivalent and will be deprecated
    in M54.
  </summary>
</histogram>

<histogram name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite"
    units="ms">
  <obsolete>
    deprecated in favor of
    PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time that the HTML parser spent blocked on the load of scripts
    inserted from document.write, for main frame documents that started parsing.
  </summary>
</histogram>

<histogram
    name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite.ParseComplete"
    units="ms">
  <obsolete>
    deprecated in favor of
    PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time that the HTML parser spent blocked on the load of scripts
    inserted from document.write, for main frame documents that finished
    parsing. This metric is being phased out in favor of the
    PageLoad.ParseTiming equivalent and will be deprecated in M54.
  </summary>
</histogram>

<histogram name="PageLoad.Timing2.ParseDuration" units="ms">
  <obsolete>
    deprecated in favor of PageLoad.ParseTiming.ParseDuration
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time that the HTML parser was active, for main frame documents
    that finished parsing. This metric is being phased out in favor of the
    PageLoad.ParseTiming equivalent and will be deprecated in M54.
  </summary>
</histogram>

<histogram name="PageLoad.Timing2.ParseStartToFirstContentfulPaint" units="ms">
  <obsolete>
    deprecated in favor of PageLoad.PaintTiming.ParseStartToFirstContentfulPaint
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time from when the HTML parser started, to when the page first
    paints content. This metric is being phased out in favor of the
    PageLoad.PaintTiming equivalent and will be deprecated in M54.
  </summary>
</histogram>

<histogram name="PageScheduler.PageLifecycleStateTransition"
    enum="PageLifecycleStateTransition">
  <owner>fmeawad@chromium.org</owner>
  <owner>panicker@chromium.org</owner>
  <summary>
    Tracks the transitions of the page between the various PageLifecycleStates:
    active, hidden/backgrounded, hidden/foregrounded, and frozen. A page is
    considered active if is visible. A page is considered backgrounded if not
    visible and not currently providing a useful service, such as playing audio.
    A page is considered foregrounded if it is not backgrounded. A page can be
    frozen due to being hidden/backgrounded for a specified amount of time, or
    frozen due to critical resources.
  </summary>
</histogram>

<histogram
    name="PageSerialization.MhtmlGeneration.BrowserWaitForRendererTime.FrameTree"
    units="ms">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Total time the browser process waited for all render processes to save their
    respective frames while saving a page into MHTML.
  </summary>
</histogram>

<histogram
    name="PageSerialization.MhtmlGeneration.BrowserWaitForRendererTime.SingleFrame"
    units="ms">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Time the browser process waited on a single frame to be saved by a render
    processes while saving a page into MHTML.
  </summary>
</histogram>

<histogram name="PageSerialization.MhtmlGeneration.EncodingTime.SingleFrame"
    units="microseconds">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Time taken to encode into MTHML the fully serialized contents of a frame.

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

<histogram name="PageSerialization.MhtmlGeneration.FinalSaveStatus"
    enum="MhtmlGenerationFinalSaveStatus">
  <owner>carlosk@chromium.org</owner>
  <summary>Final status of the MHTML save operation for a page.</summary>
</histogram>

<histogram name="PageSerialization.MhtmlGeneration.FullPageSavingTime"
    units="ms">
  <owner>carlosk@chromium.org</owner>
  <summary>Time taken to save a page into an MHTML file.</summary>
</histogram>

<histogram name="PageSerialization.MhtmlGeneration.PopupOverlaySkipped"
    enum="BooleanSkipped">
  <owner>jianli@chromium.org</owner>
  <summary>
    Recorded when the popup overlays are removed from MHTML serialization.
  </summary>
</histogram>

<histogram
    name="PageSerialization.MhtmlGeneration.RendererMainThreadTime.FrameTree"
    units="ms">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Time spent by the main threads of all involved render processes while saving
    the frame tree of a page to MHTML.
  </summary>
</histogram>

<histogram
    name="PageSerialization.MhtmlGeneration.RendererMainThreadTime.SingleFrame"
    units="ms">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Time spent by the renderer main thread while saving one frame of a page to
    MHTML.
  </summary>
</histogram>

<histogram
    name="PageSerialization.MhtmlGeneration.RendererMainThreadTime.SlowestFrame"
    units="ms">
  <owner>carlosk@chromium.org</owner>
  <summary>
    The longest time taken by the main thread of a render processes to save one
    frame of a page being saved to MHTML. In other words this is the maximum
    value reported in
    PageSerialization.MhtmlGeneration.RendererMainThreadTime.SingleFrame for one
    page save operation.
  </summary>
</histogram>

<histogram
    name="PageSerialization.MhtmlGeneration.SerializationTime.SingleFrame"
    units="microseconds">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Time taken to fully serialize the contents of a frame, including HTML and
    CSS and image resources.
  </summary>
</histogram>

<histogram name="PageSerialization.MhtmlGeneration.WriteToDiskTime.SingleFrame"
    units="ms">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Time spent writing a frame's encoded MHTML data to the file on disk.
  </summary>
</histogram>

<histogram name="PageSerialization.ProblemDetection.LoadedCSSPercentage"
    units="%">
  <owner>romax@chromium.org</owner>
  <summary>
    Percentage of loaded CSS elements in the main frame at the time of
    serialization.
  </summary>
</histogram>

<histogram name="PageSerialization.ProblemDetection.LoadedImagePercentage"
    units="%">
  <owner>romax@chromium.org</owner>
  <summary>
    Percentage of loaded images in the main frame at the time of serialization.
  </summary>
</histogram>

<histogram name="PageSerialization.ProblemDetection.TotalCSSCount">
  <owner>romax@chromium.org</owner>
  <summary>
    Total number of CSS elements in the main frame for serialization.
  </summary>
</histogram>

<histogram name="PageSerialization.ProblemDetection.TotalImageCount">
  <owner>romax@chromium.org</owner>
  <summary>Total number of images in the main frame for serialization.</summary>
</histogram>

<histogram name="PageSerialization.SerializationTime.CSSElement"
    units="microseconds">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Time spent serializing a CSS element (including embedded &quot;sub&quot;-CSS
    and images).

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

<histogram name="PageSerialization.SerializationTime.Html" units="microseconds">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Time taken to generate HTML data from a frame's DOM and serialize it
    (without sub-resources like CSS and images).

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

<histogram name="PageSerialization.SerializationTime.ImageElement"
    units="microseconds">
  <owner>carlosk@chromium.org</owner>
  <summary>
    Time spent serializing an image element.

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

<histogram name="Parser.AppendBytesDelay" units="ms">
  <obsolete>
    Deprecated Aug 2017
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The delay from when bytes are received on the main thread to when the
    BackgroundHTMLParser starts tokenizing them. Always a shorter time than the
    time emitted to Parser.PreloadTokenizeDelay.
  </summary>
</histogram>

<histogram name="Parser.ChunkEnqueueTime" units="ms">
  <obsolete>
    Deprecated May 2017
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The time it takes to enqueue a ParsedChunk onto the shared parser queue.
  </summary>
</histogram>

<histogram name="Parser.DiscardedTokenCount" units="tokens"
    expires_after="2018-08-30">
  <owner>csharrison@chromium.org</owner>
  <summary>
    The number of speculative tokens discarded by the parser when a rewind is
    needed.
  </summary>
</histogram>

<histogram name="Parser.PeakPendingChunkCount" units="chunks">
  <obsolete>
    Deprecated Aug 2017
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The maximum number of pending Chunks in the ParsedChunkQueue after the
    parser is detached.
  </summary>
</histogram>

<histogram name="Parser.PeakPendingTokenCount" units="tokens">
  <obsolete>
    Deprecated Aug 2017
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The maximum number of pending tokens in the ParsedChunkQueue after the
    parser is detached.
  </summary>
</histogram>

<histogram name="Parser.PreloadTokenizeDelay" units="ms">
  <obsolete>
    Deprecated May 2017
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The delay from when bytes are received on the main thread to when they are
    tokenized and preloads are sent back to the main parser. Always a greater
    time than the time emitted to Parser.AppendBytesDelay.
  </summary>
</histogram>

<histogram name="PartitionAlloc.CommittedSize" units="MB">
  <owner>haraken@chromium.org</owner>
  <summary>
    The committed memory size in PartitionAlloc. The value is reported when we
    see the highest memory usage we've ever seen in the renderer process.
  </summary>
</histogram>

<histogram name="PartnerBookmark.Count" units="bookmarks">
  <obsolete>
    Deprecated 2017-12 by PartnerBookmark.Count2.
  </obsolete>
  <owner>wychen@chromium.org</owner>
  <summary>
    The number of partner bookmark entries. Note that zero would be
    under-represented because reading is throttled if the last result is zero.
    Logged when using the bookmark, not skipped (PartnerBookmark.Skipped ==
    False), and at most once per cold start. Note that the distribution is
    weighted by bookmark usage.
  </summary>
</histogram>

<histogram name="PartnerBookmark.Count2" units="bookmarks">
  <owner>wychen@chromium.org</owner>
  <summary>
    The number of partner bookmark entries. Logged when using the bookmark, and
    at most once per cold start. Note that the distribution is weighted by
    bookmark usage.
  </summary>
</histogram>

<histogram name="PartnerBookmark.FaviconThrottleFetchResult"
    enum="PartnerBookmark.FaviconFetchResult">
  <owner>thildebr@chromium.org</owner>
  <summary>
    The response we got back from our favicon fetching throttler, once for each
    bookmark at each cold start. Only recorded on Android.
  </summary>
</histogram>

<histogram name="PartnerBookmark.LoadingTime" units="ms">
  <owner>wychen@chromium.org</owner>
  <summary>
    The time spent on loading partner bookmarks, from kickOffReading() to
    bookmarkModelLoaded() callback.
  </summary>
</histogram>

<histogram name="PartnerBookmark.Null" enum="BooleanNull">
  <obsolete>
    No longer recorded as of Apr 2018
  </obsolete>
  <owner>wychen@chromium.org</owner>
  <summary>
    Whether there's no partner bookmark provider. By default, the system image
    contains a dummy partner bookmarks provider that provides zero entries.
    Logged when using the bookmark, not skipped (PartnerBookmark.Skipped ==
    False), and at most once per cold start.
  </summary>
</histogram>

<histogram name="PartnerBookmark.Skipped" enum="BooleanSkipped">
  <obsolete>
    No longer recorded as of Apr 2018
  </obsolete>
  <owner>wychen@chromium.org</owner>
  <summary>
    Whether reading of partner bookmark is skipped. Logged when using the
    bookmark, and at most once per cold start.
  </summary>
</histogram>

<histogram name="PartnerBookmark.TimeSinceLastEmptyRead" units="ms">
  <obsolete>
    Deprecated 2017-12. Use PartnerBookmark.TimeSinceLastEmptyRead2.
  </obsolete>
  <owner>wychen@chromium.org</owner>
  <summary>
    When trying to load the partner bookmarks, if no partner bookmark is read
    last time, record the time elapsed since then. It is recorded no matter
    whether loading would be skipped.
  </summary>
</histogram>

<histogram name="PartnerBookmark.TimeSinceLastEmptyRead2" units="seconds">
  <obsolete>
    No longer recorded as of Apr 2018
  </obsolete>
  <owner>wychen@chromium.org</owner>
  <summary>
    When trying to load the partner bookmarks, if no partner bookmark is read
    last time, record the time elapsed since then. It is recorded no matter
    whether loading would be skipped.
  </summary>
</histogram>

<histogram name="PartnerBookmarksFaviconThrottle.NumEntries" units="entries">
  <owner>thildebr@chromium.org</owner>
  <summary>
    Number of elements read from the partner bookmarks favicon cache, recorded
    once per cold start when reading partner bookmarks. Only recorded on
    Android.
  </summary>
</histogram>

<histogram name="PasswordBubble.DisplayDisposition"
    enum="PasswordBubbleDisplayDisposition">
  <owner>vasilii@chromium.org</owner>
  <summary>
    When the password management bubble opened, what state was it in?
  </summary>
</histogram>

<histogram name="PasswordGeneration.Event" enum="PasswordGenerationEvent">
  <owner>gcasto@chromium.org</owner>
  <summary>
    Measures the frequency of various password generation events.

    Note that this histogram is logged from the renderer process, and
    consequently the numbers should not be directly compared to the other
    PasswordGeneration.* histograms, which are logged from the browser process.
    Histograms logged in different processes are lost at different rates, which
    introduces systematic bias between histograms logged in the renderer process
    vs. those logged in the browser process.
  </summary>
</histogram>

<histogram name="PasswordGeneration.GeneratedPasswordWasEdited"
    enum="BooleanGeneratedPasswordWasEdited">
  <owner>kolos@chromium.org</owner>
  <summary>
    Measures the frequency of user editing of generated passwords. Uploaded once
    per generated password save. Applicable to automatic and manual generations.
  </summary>
</histogram>

<histogram name="PasswordGeneration.IsTriggeredManually"
    enum="BooleanIsGenerationTriggeredManually">
  <owner>kolos@chromium.org</owner>
  <summary>
    Measures the frequency of manually triggered password generations.
  </summary>
</histogram>

<histogram name="PasswordGeneration.SubmissionAvailableEvent"
    enum="PasswordSubmissionEvent">
  <owner>gcasto@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <summary>
    Measures the frequency of submission events for passwords that could have
    been generated, but the user didn't choose to use the feature. This is to
    compare with PasswordGeneration.SubmssionEvent.
  </summary>
</histogram>

<histogram name="PasswordGeneration.SubmissionEvent"
    enum="PasswordSubmissionEvent">
  <owner>gcasto@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <summary>
    Measures the frequency of submission events for generated passwords. This is
    similar to PasswordManager.ActionsTakenWithPsl but only tracks events which
    are interesting for generated passwords.
  </summary>
</histogram>

<histogram name="PasswordGeneration.UploadStarted" enum="Boolean">
  <owner>gcasto@chromium.org</owner>
  <summary>
    The number of times that we try to upload a form that we believe should
    trigger password generation. False means that something about the form would
    not allow us to try upload (not an Autofillable field, uploading disabled,
    Autofill servers in backoff, etc.). True does not mean that the upload
    actually completed successfully, just that it was started.
  </summary>
</histogram>

<histogram name="PasswordHash.CreateTime">
  <owner>mlerman@chromium.org</owner>
  <summary>
    Time required to create the local hash of the user's GAIA password.
  </summary>
</histogram>

<histogram name="PasswordManager.AboutBlankPasswordSubmission"
    enum="BooleanMainFrame">
  <owner>alexmos@chromium.org</owner>
  <owner>battre@chromium.org</owner>
  <summary>
    Records attempts to submit a password on a form in an about:blank frame,
    indicating whether this attempt is for a main frame or subframe.  Recorded
    once per form submission.
  </summary>
</histogram>

<histogram name="PasswordManager.AcceptedSaveUpdateSubmissionIndicatorEvent"
    enum="SubmissionIndicatorEvent">
  <owner>dvadym@chromium.org</owner>
  <owner>vasilii@chromium.org</owner>
  <summary>
    The type of event that the Password Manager used for detecting a password
    form submission when saving or updating a password. Recorded each time a
    user accepts a password save/update prompt.
  </summary>
</histogram>

<histogram name="PasswordManager.AccessPasswordInSettings"
    enum="AccessPasswordInSettingsEvent">
  <owner>vabr@chromium.org</owner>
  <summary>
    Recorded whenever the user accesses the passwords in the settings page.
  </summary>
</histogram>

<histogram name="PasswordManager.AccountChooserDialog"
    enum="AccountChooserDismissalReason">
  <obsolete>
    Deprecated as of Chrome 56. See the histograms for one and more accounts.
  </obsolete>
  <owner>vasilii@chromium.org</owner>
  <summary>The dismissal reason of the account chooser.</summary>
</histogram>

<histogram name="PasswordManager.AccountChooserDialogAccounts" units="accounts">
  <owner>vasilii@chromium.org</owner>
  <summary>The number of accounts displayed in the account chooser.</summary>
</histogram>

<histogram name="PasswordManager.AccountChooserDialogEmptyAvatars"
    units="avatars">
  <owner>vasilii@chromium.org</owner>
  <summary>
    The count of the placeholder avatars shown in the account chooser.
  </summary>
</histogram>

<histogram name="PasswordManager.AccountChooserDialogMultipleAccounts"
    enum="AccountChooserDismissalReason">
  <owner>vasilii@chromium.org</owner>
  <summary>
    The dismissal reason of the account chooser with multiple accounts.
  </summary>
</histogram>

<histogram name="PasswordManager.AccountChooserDialogOneAccount"
    enum="AccountChooserDismissalReason">
  <owner>vasilii@chromium.org</owner>
  <summary>
    The dismissal reason of the account chooser with one account.
  </summary>
</histogram>

<histogram name="PasswordManager.AccountChooserDialogUsability"
    enum="AccountChooserUsabilityState">
  <owner>vasilii@chromium.org</owner>
  <summary>
    Whether the account chooser includes an empty username or any duplicates
  </summary>
</histogram>

<histogram name="PasswordManager.AccountsPerSite">
  <owner>gcasto@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <summary>
    The number of accounts stored per site in the password manager (one event
    per site)
  </summary>
</histogram>

<histogram name="PasswordManager.AccountsReusingPassword" units="accounts">
  <owner>engedy@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <summary>
    Records, for each account, the number of other accounts (across all sites
    and usernames) that reuse the same password. Only non-blacklisted,
    HTML-form-based accounts are considered.

    For each account, samples will only be recorded into the histograms that
    have the first suffix corresponding to whether that account was saved on a
    secure website or not. The second suffix is used to further categorize the
    other accounts that reuse the same password based on how they relate to the
    account in question, and whether they are secure. The number of other
    accounts in each category will be reported into histogram with the
    respective second suffixes.

    Metrics are collected once per browser start-up. In case of multiple
    profiles, the counts are for the profile for which a WebContents is first
    created.
  </summary>
</histogram>

<histogram name="PasswordManager.ActionsTaken"
    enum="PasswordManagerActionsTaken">
  <obsolete>
    Deprecated as of Chrome 32. See PasswordManagerActionsTakenWithPsl
  </obsolete>
  <owner>vabr@chromium.org</owner>
  <summary>
    Stats documenting how we handle every form containing a password, bucketed
    by the actions taken.
  </summary>
</histogram>

<histogram name="PasswordManager.ActionsTakenOnNonSecureForm"
    enum="PasswordManagerActionsTakenV3">
  <owner>estark@chromium.org</owner>
  <summary>
    Stats documenting how we handle every form containing a password on a
    non-secure page, bucketed by the actions taken.
  </summary>
</histogram>

<histogram name="PasswordManager.ActionsTakenV3"
    enum="PasswordManagerActionsTakenV3">
  <owner>vabr@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Stats documenting how we handle every form containing a password, bucketed
    by the actions taken.
  </summary>
</histogram>

<histogram name="PasswordManager.ActionsTakenWithPsl"
    enum="PasswordManagerActionsTakenWithPsl">
  <obsolete>
    Deprecated as of 3/18/2014. See PasswordManagerActionsTakenV3.
  </obsolete>
  <owner>vabr@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Stats documenting how we handle every form containing a password, bucketed
    by the actions taken.
  </summary>
</histogram>

<histogram name="PasswordManager.AffiliationBackend.FetchSize" units="facets">
  <owner>engedy@chromium.org</owner>
  <summary>
    The number of facets for which affiliation information was requested in a
    network fetch. Recorded for each network fetch.
  </summary>
</histogram>

<histogram name="PasswordManager.AffiliationBackend.FirstFetchDelay" units="ms">
  <owner>engedy@chromium.org</owner>
  <summary>
    The time elapsed between creation of the AffiliationBackend and the first
    time it needed to issue a network fetch.
  </summary>
</histogram>

<histogram name="PasswordManager.AffiliationBackend.SubsequentFetchDelay"
    units="ms">
  <owner>engedy@chromium.org</owner>
  <summary>
    The elapsed time between subsequent network fetches. Recorded whenever the
    AffiliationBackend initiated a network fetch, regardless of success or
    failure.
  </summary>
</histogram>

<histogram name="PasswordManager.AffiliationDummyData.RequestResultCount"
    units="results">
  <owner>engedy@chromium.org</owner>
  <summary>
    The number of facets affiliated with a dummy Web facet, according to the
    affiliation information retrieved from the cache. Recorded for each dummy
    Web facet, once shortly after start-up, and then periodically every hour;
    but only if getting affiliations succeeded for the Web facet.
  </summary>
</histogram>

<histogram name="PasswordManager.AffiliationDummyData.RequestSuccess"
    enum="BooleanSuccess">
  <owner>engedy@chromium.org</owner>
  <summary>
    Whether or not affiliations of a dummy Web facet could be successfully
    retrieved from the cache. Recorded for each dummy Web facet, once shortly
    after start-up, and then periodically every hour.
  </summary>
</histogram>

<histogram name="PasswordManager.AffiliationFetcher.FetchErrorCode"
    enum="NetErrorCodes">
  <owner>engedy@chromium.org</owner>
  <summary>
    The network error code, as reported by the underlying URLFetcher. Recorded
    only for each network fetch that failed due to network/server errors.
  </summary>
</histogram>

<histogram name="PasswordManager.AffiliationFetcher.FetchHttpResponseCode"
    enum="HttpResponseCode">
  <owner>engedy@chromium.org</owner>
  <summary>
    The HTTP response code, as reported by the underlying URLFetcher. Recorded
    only for each network fetch that failed due to network/server errors.
  </summary>
</histogram>

<histogram name="PasswordManager.AffiliationFetcher.FetchResult"
    enum="AffiliationFetchResult">
  <owner>engedy@chromium.org</owner>
  <summary>
    Whether the network fetch succeeded, failed due to network/server errors, or
    contained malformed data. Recorded for each network fetch.
  </summary>
</histogram>

<histogram name="PasswordManager.AllowToCollectURLBubble.UIDismissalReason"
    enum="PasswordManagerAllowToCollectURLBubble.UIDismissalReason">
  <obsolete>
    The bubble isn't shown anymore. Become obsolete in Feb. 2015.
  </obsolete>
  <owner>melandory@chromium.org</owner>
  <owner>vasilii@chromium.org</owner>
  <summary>Why was &quot;Allow to collect URL?&quot; bubble closed?</summary>
</histogram>

<histogram name="PasswordManager.Android.ExportPasswordsProgressBarUsage"
    enum="PasswordManagerAndroidExportPasswordsProgressBarUsage">
  <owner>vabr@chromium.org</owner>
  <summary>
    Records what happened to the progress bar during exporting passwords when
    its dismissal was requested.
  </summary>
</histogram>

<histogram name="PasswordManager.Android.PasswordCredentialEntry"
    enum="PasswordManagerAndroidPasswordEntryActions">
  <owner>jdoerrie@chromium.org</owner>
  <owner>melandory@chromium.org</owner>
  <summary>
    Records the action taken with a password credential entry on Android.
  </summary>
</histogram>

<histogram name="PasswordManager.Android.PasswordCredentialEntry.Password"
    enum="PasswordManagerAndroidWebsiteActions">
  <owner>jdoerrie@chromium.org</owner>
  <owner>melandory@chromium.org</owner>
  <summary>
    Records the action taken with a password of a password credential entry on
    Android.
  </summary>
</histogram>

<histogram name="PasswordManager.Android.PasswordCredentialEntry.Username"
    enum="PasswordManagerAndroidWebsiteActions">
  <owner>jdoerrie@chromium.org</owner>
  <owner>melandory@chromium.org</owner>
  <summary>
    Records the action taken with a username of a password credential entry on
    Android.
  </summary>
</histogram>

<histogram name="PasswordManager.Android.PasswordCredentialEntry.Website"
    enum="PasswordManagerAndroidWebsiteActions">
  <owner>jdoerrie@chromium.org</owner>
  <owner>melandory@chromium.org</owner>
  <summary>
    Records the action taken with a website of a password credential entry on
    Android.
  </summary>
</histogram>

<histogram name="PasswordManager.Android.PasswordExceptionEntry"
    enum="PasswordManagerAndroidPasswordEntryActions">
  <owner>jdoerrie@chromium.org</owner>
  <owner>melandory@chromium.org</owner>
  <summary>
    Records the action taken with a password exception entry on Android.
  </summary>
</histogram>

<histogram name="PasswordManager.Android.PasswordExceptionEntry.Website"
    enum="PasswordManagerAndroidWebsiteActions">
  <owner>jdoerrie@chromium.org</owner>
  <owner>melandory@chromium.org</owner>
  <summary>
    Records the action taken with a website of a password exception entry on
    Android.
  </summary>
</histogram>

<histogram name="PasswordManager.Android.PasswordSearchTriggered"
    enum="Boolean">
  <owner>fhorschig@chromium.org</owner>
  <summary>
    Records whether a user triggered the search function while visiting the
    password preferences page on Android.
  </summary>
</histogram>

<histogram name="PasswordManager.AutocompletePopupSuppressedByGeneration"
    enum="BooleanSuppressed">
  <owner>gcasto@chromium.org</owner>
  <summary>
    If the password manager UI was suppressed because generation UI was already
    being displayed for the same field.
  </summary>
</histogram>

<histogram name="PasswordManager.AutoSigninFirstRunDialog"
    enum="AutoSigninFirstRun">
  <owner>vasilii@chromium.org</owner>
  <summary>
    The dismissal reason of the auto-signin first run experience.
  </summary>
</histogram>

<histogram name="PasswordManager.BlacklistedDuplicates"
    units="duplicated forms" expires_after="M71">
  <owner>gemene@google.com</owner>
  <owner>jdoerrie@chromium.org</owner>
  <summary>
    The number of duplicates forms from the password store. Recorded once for
    the profile on startup.
  </summary>
</histogram>

<histogram name="PasswordManager.BlacklistedSites">
  <owner>gcasto@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <summary>
    The total number of sites that the user has blacklisted. Recorded by
    iterating over stored passwords once per run of Chrome.
  </summary>
</histogram>

<histogram name="PasswordManager.BlacklistedSites.NeedToBeCleaned"
    enum="BooleanNeedsClearing">
  <owner>vasilii@chromium.org</owner>
  <summary>
    Records once on startup whether the blacklisted sites in the password store
    need to be updated to remove username/password. Can be removed around Chrome
    M69 (https://crbug.com/817754).
  </summary>
</histogram>

<histogram name="PasswordManager.CertificateErrorsWhileSeeingForms"
    enum="PasswordCertificateError">
  <owner>battre@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <summary>
    When the password manager sees new forms on the page, it records in this
    histogram whether there were any SSL certificate errors. The presence of SSL
    errors likely means that the password manger will stop working, so the
    reporting is done at the last point when password manager is still
    guaranteed to be active. Some particular errors are distinguished, with the
    rest being reported in a catch-all bucket.
  </summary>
</histogram>

<histogram name="PasswordManager.EditsInSaveBubble"
    enum="PasswordManagerEditsInSaveBubbleEnum">
  <owner>battre@chromium.org</owner>
  <summary>
    Indication whether users change the credentials (username and password) in
    the save bubble of the password manager, considering only cases where the
    user saves a new credential or updates a credential.
  </summary>
</histogram>

<histogram name="PasswordManager.EmptyUsernames.CountInDatabase">
  <owner>vasilii@chromium.org</owner>
  <summary>
    Number of password forms with empty username in the Login Database. This is
    recorded on startup.
  </summary>
</histogram>

<histogram
    name="PasswordManager.EmptyUsernames.FormWithoutUsernameFieldIsPasswordChangeForm"
    enum="PasswordManagerEmptyUsernamePasswordChangeForm">
  <owner>msramek@chromium.org</owner>
  <owner>vasilii@chromium.org</owner>
  <summary>
    When parsing a password form, and no username field is detected, whether
    this was a password change form.
  </summary>
</histogram>

<histogram name="PasswordManager.EmptyUsernames.OfferedToSave"
    enum="PasswordManagerShowEmptyUsername">
  <owner>vasilii@chromium.org</owner>
  <summary>
    When offering to save a password, whether the username is empty.
  </summary>
</histogram>

<histogram name="PasswordManager.EmptyUsernames.ParsedUsernameField"
    enum="PasswordManagerEmptyUsernameField">
  <owner>vasilii@chromium.org</owner>
  <summary>
    When parsing a password form, whether a username field is detected.
  </summary>
</histogram>

<histogram name="PasswordManager.EmptyUsernames.PasswordFieldCount">
  <owner>msramek@chromium.org</owner>
  <owner>vasilii@chromium.org</owner>
  <summary>
    The number of password fields for password forms that do not have a username
    field. This is recorded every time such a password form is successfully
    parsed. Note that the parsing is attempted when the form is encountered (i.e
    when the document is loaded) and also when it is submitted.
  </summary>
</histogram>

<histogram name="PasswordManager.EmptyUsernames.TextAndPasswordFieldCount">
  <owner>msramek@chromium.org</owner>
  <owner>vasilii@chromium.org</owner>
  <summary>
    The total number of text and password fields for password forms that do not
    have a username field. This is recorded every time such a password form is
    successfully parsed. Note that the parsing is attempted when the form is
    encountered (i.e when the document is loaded) and also when it is submitted.
  </summary>
</histogram>

<histogram name="PasswordManager.EmptyUsernames.WithoutCorrespondingNonempty">
  <owner>msramek@chromium.org</owner>
  <owner>vasilii@chromium.org</owner>
  <summary>
    Number of password forms with empty username in the Login Database for which
    there is not another password form from the same realm with a nonempty
    username. In other words, number of password forms with empty username which
    we do not suspect to be reauthentication forms.
  </summary>
</histogram>

<histogram name="PasswordManager.Enabled" enum="BooleanEnabled">
  <owner>vabr@chromium.org</owner>
  <summary>
    Indicates whether the password manager is enabled when a tab is opened. This
    includes prerendered tabs.
  </summary>
</histogram>

<histogram name="PasswordManager.ExportedPasswordsPerUserInCSV">
  <owner>cfroussios@chromium.org</owner>
  <owner>ioanap@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <summary>The number of passwords exported in CSV format per user.</summary>
</histogram>

<histogram name="PasswordManager.ExportPasswordsToCSVResult"
    enum="ExportPasswordsResult">
  <owner>cfroussios@chromium.org</owner>
  <owner>ioanap@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <summary>The success or error type of exporting passwords into CSV.</summary>
</histogram>

<histogram name="PasswordManager.FilledCredentialWasFromAndroidApp"
    enum="PasswordManagerFilledAndroidCredentials">
  <owner>msramek@chromium.org</owner>
  <owner>engedy@chromium.org</owner>
  <summary>
    When a credential is filled, whether it comes from an Android app.
  </summary>
</histogram>

<histogram name="PasswordManager.FillSuggestionsIncludeAndroidAppCredentials"
    enum="PasswordManagerOfferedAndroidCredentials">
  <owner>msramek@chromium.org</owner>
  <owner>engedy@chromium.org</owner>
  <summary>
    When offering to fill the username and password, whether at least one of the
    credentials in the dropdown comes from an Android app.
  </summary>
</histogram>

<histogram name="PasswordManager.FormDataDeserializationStatus"
    enum="FormDataDeserializationStatus">
  <owner>gcasto@chromium.org</owner>
  <owner>dvadym@chromium.org</owner>
  <summary>
    The success or failure of deserializing saved FormData. Failure either
    indicates corrupted data or the presence of bugs in the serialization or
    deserialization code.
  </summary>
</histogram>

<histogram name="PasswordManager.GeneratedFormHasNoFormManager"
    enum="BooleanFormManager">
  <owner>gcasto@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <owner>deepak.m1@samsung.com</owner>
  <summary>
    When the generation state of a password was changed, records whether an
    existing form corresponding to the password was found.
  </summary>
</histogram>

<histogram name="PasswordManager.GetMediated" enum="CredentialManagerGetResult">
  <obsolete>
    Deprecated as of 05/2017. This metric has been replaced by
    PasswordManager.MediationOptional.
  </obsolete>
  <owner>vasilii@chromium.org</owner>
  <summary>
    Tracks result of navigator.credentials.get() with unmediated=false. That is
    the result of account chooser.
  </summary>
</histogram>

<histogram name="PasswordManager.GetUnmediated"
    enum="CredentialManagerGetResult">
  <obsolete>
    Deprecated as of 05/2017. This metric has been replaced by
    PasswordManager.MediationSilent.
  </obsolete>
  <owner>vasilii@chromium.org</owner>
  <summary>
    Tracks result of navigator.credentials.get() with unmediated=true. That is
    the result of auto sign-in.
  </summary>
</histogram>

<histogram name="PasswordManager.HttpPasswordMigrationCount"
    units="saved credentials">
  <owner>vasilii@chromium.org</owner>
  <summary>
    Number of HTTP saved passwords that were migrated to HTTPS. Recorded on
    HTTPS password form load when there are no credentials saved.
  </summary>
</histogram>

<histogram name="PasswordManager.HttpPasswordMigrationMode"
    enum="HttpPasswordMigrationMode">
  <owner>jdoerrie@chromium.org</owner>
  <summary>
    The mode of migration applied to HTTP passwords migrating to HTTPS. Recorded
    on HTTPS password form load when there are no credentials saved.
  </summary>
</histogram>

<histogram name="PasswordManager.IE7LookupResult" enum="IE7LookupResultStatus">
  <owner>vabr@chromium.org</owner>
  <summary>
    The result of importing passwords stored in IE7 into Chrome's password
    store.
  </summary>
</histogram>

<histogram name="PasswordManager.ImportedPasswordsPerUserInCSV">
  <owner>xunlu@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <summary>The number of passwords imported in CSV format per user</summary>
</histogram>

<histogram name="PasswordManager.ImportPasswordFromCSVResult"
    enum="PasswordImportFromCSVResult">
  <owner>xunlu@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <summary>
    The response code of successful or failed password import attempt from a CSV
    file.
  </summary>
</histogram>

<histogram name="PasswordManager.InaccessiblePasswords" units="saved passwords">
  <owner>vasilii@chromium.org</owner>
  <summary>
    The number of saved passwords in the store that could not be decrypted.
    Recorded once for the profile on startup.
  </summary>
</histogram>

<histogram name="PasswordManager.InfoBarResponse" enum="InfoBarResponse">
  <obsolete>
    Deprecated as of 03/2016. This metric has been replaced by
    PasswordManager.UIDismissalReason.
  </obsolete>
  <owner>vabr@chromium.org</owner>
  <summary>
    The distribution of responses to the &quot;Do you want Chrome to remember
    this password&quot;? info bar prompt.
  </summary>
</histogram>

<histogram name="PasswordManager.IsSyncPasswordHashSaved"
    enum="IsSyncPasswordHashSaved">
  <owner>dvadym@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    This metric reports whether a sync password hash is saved. Recorded shortly
    after Chrome startup.
  </summary>
</histogram>

<histogram
    name="PasswordManager.KeychainMigration.NumChromeOwnedInaccessiblePasswords">
  <obsolete>
    Deprecated as of 09/2016.
  </obsolete>
  <owner>vasilii@chromium.org</owner>
  <summary>
    After migration from the Mac Keychain fails, records the number of passwords
    in the Keychain owned by Chrome but not accessible by it.
  </summary>
</histogram>

<histogram name="PasswordManager.KeychainMigration.NumFailedPasswords">
  <owner>vasilii@chromium.org</owner>
  <summary>
    After migration from the Mac Keychain fails, records the number of passwords
    in the Chrome Password Manager database for which the corresponding values
    in the Keychain are not accessible by Chrome.
  </summary>
</histogram>

<histogram name="PasswordManager.KeychainMigration.NumPasswordsOnFailure">
  <owner>vasilii@chromium.org</owner>
  <summary>
    After migration from the Mac Keychain fails, records the number of passwords
    in the Chrome Password Manager database to be migrated. As there is no
    partial migration, it's the total number of passwords in the DB.
  </summary>
</histogram>

<histogram name="PasswordManager.KeychainMigration.Status"
    enum="KeychainMigrationStatus">
  <owner>vasilii@chromium.org</owner>
  <summary>
    The status of passwords migration from the Keychain. It's recorded shortly
    after startup.
  </summary>
</histogram>

<histogram name="PasswordManager.KWalletDeserializationStatus"
    enum="BooleanSuccess">
  <owner>gcasto@chromium.org</owner>
  <owner>dvadym@chromium.org</owner>
  <summary>
    The success or failure of deserializing PasswordForms in KWallet. Failure
    either indicates corrupted data or the presense of bugs in the
    deserialization code.
  </summary>
</histogram>

<histogram name="PasswordManager.LinuxBackendStatistics">
  <owner>dvadym@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <summary>
    Information about usage of password storage backends on Linux. It also
    includes whether a command line flag for a specific backend is given.
  </summary>
</histogram>

<histogram name="PasswordManager.LoginDatabaseFailedVersion">
  <owner>vasilii@chromium.org</owner>
  <summary>
    The version of LoginDatabase if the migration to a new one failed.
  </summary>
</histogram>

<histogram name="PasswordManager.LoginDatabaseInit"
    enum="LoginDatabaseInitError">
  <owner>vasilii@chromium.org</owner>
  <summary>An error on LoginDatabase initialization.</summary>
</histogram>

<histogram name="PasswordManager.MediationOptional"
    enum="CredentialManagerGetResult">
  <owner>jdoerrie@chromium.org</owner>
  <owner>vasilii@chromium.org</owner>
  <summary>
    Tracks result of navigator.credentials.get() with
    mediation=&quot;optional&quot;. That is the result of account chooser.
  </summary>
</histogram>

<histogram name="PasswordManager.MediationRequired"
    enum="CredentialManagerGetResult">
  <owner>jdoerrie@chromium.org</owner>
  <owner>vasilii@chromium.org</owner>
  <summary>
    Tracks result of navigator.credentials.get() with
    mediation=&quot;required&quot;. That is the result of forced account
    chooser.
  </summary>
</histogram>

<histogram name="PasswordManager.MediationSilent"
    enum="CredentialManagerGetResult">
  <owner>jdoerrie@chromium.org</owner>
  <owner>vasilii@chromium.org</owner>
  <summary>
    Tracks result of navigator.credentials.get() with
    mediation=&quot;silent&quot;. That is the result of auto sign-in.
  </summary>
</histogram>

<histogram name="PasswordManager.MultiAccountPasswordUpdateAction"
    enum="MultiAccountUpdateBubbleUserAction">
  <obsolete>
    Deprecated 03/2018 in favor of PasswordManager.UpdateUIDismissalReason.
  </obsolete>
  <owner>dvadym@chromium.org</owner>
  <summary>
    A user action when a password update bubble with multiple accounts is shown.
  </summary>
</histogram>

<histogram name="PasswordManager.NumPasswordsDeletedByBulkDelete">
  <owner>vabr@chromium.org</owner>
  <summary>
    Number of passwords deleted when the user chooses to clear passwords via the
    clear browsing data UI.
  </summary>
</histogram>

<histogram name="PasswordManager.NumPasswordsDeletedDuringRollback">
  <owner>vasilii@chromium.org</owner>
  <summary>
    Number of passwords deleted when browsing data is cleared during rollback.
  </summary>
</histogram>

<histogram name="PasswordManager.NumPasswordsDeletedWhenBlacklisting">
  <obsolete>
    Deprecated as of 08/2015.
  </obsolete>
  <owner>vabr@chromium.org</owner>
  <summary>
    When the user chooses to never remember passwords for a form, we remove all
    previously saved credentials for that form. This is the count of those
    credentials.
  </summary>
</histogram>

<histogram name="PasswordManager.NumPasswordsNotShown">
  <owner>vabr@chromium.org</owner>
  <summary>
    The password manager only shows those credentials that are considered the
    best match for a particular form. This stat keep track of the credentials
    that were not as good of a match and were suppressed.
  </summary>
</histogram>

<histogram name="PasswordManager.OsPasswordStatus"
    enum="PasswordManagerOsPasswordStatus">
  <owner>vabr@chromium.org</owner>
  <owner>wfh@chromium.org</owner>
  <summary>
    Indicates whether the user's OS password is blank or not at browser startup.
  </summary>
</histogram>

<histogram name="PasswordManager.OtherPossibleUsernamesUsage"
    enum="OtherPossibleUsernamesUsage">
  <owner>vabr@chromium.org</owner>
  <summary>
    Breakdown of how other possible usernames are displayed. Recorded every time
    we autofill a password form.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordReuse.MainFrameMatchCsdWhitelist"
    enum="Boolean">
  <obsolete>
    Deprecated as of May 17 2017. Replaced by
    PasswordProtection.RequestOutcome.ProtectedPasswordEntry.
  </obsolete>
  <owner>dvadym@chromium.org</owner>
  <owner>jialiul@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    A password reuse is an event when the user typed a string that is equal to a
    saved password on another domain, and this saved password is called reused
    password.

    This metric shows whether a password reuse happens on a page whose main
    frame url matches CSD whitelist.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordReuse.NumberOfMatches"
    units="credentials">
  <owner>dvadym@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    This metric shows how many saved credentials (num unique registry-controlled
    domains) have password that's equal to the reused password.

    Before M63 this logged a &quot;0&quot; for sync-reuse.

    A &quot;password reuse&quot; is when the user typed a string that is equal
    to a saved password on another domain or is equal to the sync password on a
    non google-login domain.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordReuse.PasswordFieldDetected"
    enum="PasswordReusePasswordFieldDetected">
  <owner>dvadym@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    This metric reports whether a password field had been detected on a page
    when a password reuse happened.

    A &quot;password reuse&quot; is when the user typed a string that is equal
    to a saved password on another domain or is equal to the sync password on a
    non google-login domain.


  </summary>
</histogram>

<histogram name="PasswordManager.PasswordReuse.PasswordLength"
    units="characters">
  <owner>dvadym@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    This metric shows the length of the reused password.

    Change in M63: If multiple passwords are matched simultaneously, this logs
    the length of the longest password. Also, before M63, a &quot;0&quot; was
    logged for sync-reuse.

    A &quot;password reuse&quot; is when the user typed a string that is equal
    to a saved password on another domain or is equal to the sync password on a
    non google-login domain.


  </summary>
</histogram>

<histogram name="PasswordManager.PasswordReuse.TotalPasswords"
    units="credentials">
  <owner>dvadym@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    This metric shows how many credentials are stored in Password Manager when a
    password reuse happened. This counts unique registry-controlled domains with
    passwords saved.

    A &quot;password reuse&quot; is when the user typed a string that is equal
    to a saved password on another domain or is equal to the sync password on a
    non google-login domain.

    During M61/M62 this metric logged a &quot;1&quot; for every sync-reuse. It
    was fixed in M63 such that it logs actual Password Manager credential count.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordSavedWithManualFallback"
    enum="BooleanPasswordSavedWithFallback">
  <owner>kolos@chromium.org</owner>
  <summary>
    Measures whether users save passwords with automatic prompt or manual
    fallback.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordSyncState" enum="PasswordSyncState">
  <owner>gcasto@chromium.org</owner>
  <owner>rouslan@chromium.org</owner>
  <summary>
    Whether the passwords are syncing and, if not, then what's causing sync
    failures. Recorded after the first sync attempt either succeeds or fails.
  </summary>
</histogram>

<histogram name="PasswordManager.PasswordUpdatedWithManualFallback"
    enum="BooleanPasswordSavedWithFallback">
  <obsolete>
    Deprecated as of 05/2018.
  </obsolete>
  <owner>kolos@chromium.org</owner>
  <summary>
    Measures whether users update passwords with automatic prompt or manual
    fallback.
  </summary>
</histogram>

<histogram name="PasswordManager.PrefilledUsernameFillOutcome"
    enum="PrefilledUsernameFillOutcome">
  <owner>ioanap@chromium.org</owner>
  <summary>
    Records successful fills of prefilled username values known as placeholders
    and unsuccessful fills that were blocked because the prefilled value was not
    identified as a placeholder. Recorded once per PasswordAutofillAgent
    instance,  when attempting to fill a password form that contains a username
    value which was prepopulated by the website.
  </summary>
</histogram>

<histogram name="PasswordManager.ProvisionalSaveFailure"
    enum="ProvisionalSaveFailure">
  <owner>vabr@chromium.org</owner>
  <summary>
    Breakdown of cases where a password is submitted, but we don't even try and
    save it. Recorded for every password form submit.
  </summary>
</histogram>

<histogram name="PasswordManager.PslDomainMatchTriggering"
    enum="PasswordManagerPslDomainMatchTriggering">
  <owner>vabr@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Breakdown on trigger rate of providing a password form autofill entry based
    on matching stored information using the public suffix list (PSL) for
    possible matches. In addition, this metric also counts cases where a
    existing federated entry was successfully matched via PSL. For example, this
    includes cases where an existing federated credential for
    https://example.com was used for https://subdomain.example.com.
  </summary>
</histogram>

<histogram name="PasswordManager.QueryingSuppressedAccountsFinished"
    enum="Boolean">
  <owner>engedy@chromium.org</owner>
  <summary>
    Records, for each password form seen by the password manager, whether the
    PasswordStore responded quickly enough so that
    PasswordManager.SuppressedAccount histogram samples could be computed.
  </summary>
</histogram>

<histogram name="PasswordManager.ReauthToAccessPasswordInSettings"
    enum="ReauthToAccessPasswordInSettingsEvent">
  <owner>vabr@chromium.org</owner>
  <summary>
    Recorded whenever the user interacts with reauthentication in order to
    access the passwords in settings, or when such reauthentication is skipped
    for a well-defined reason.
  </summary>
</histogram>

<histogram name="PasswordManager.RequirementsSpecFetcher.HttpResponseCode"
    enum="HttpResponseCode">
  <owner>battre@chromium.org</owner>
  <summary>
    HTTP response code of fetching a password requirements file.
  </summary>
</histogram>

<histogram name="PasswordManager.RequirementsSpecFetcher.NetErrorCode"
    enum="NetErrorCodes">
  <owner>battre@chromium.org</owner>
  <summary>
    Network error code of fetching a password requirements file.
  </summary>
</histogram>

<histogram name="PasswordManager.RequirementsSpecFetcher.NetworkDuration"
    units="ms">
  <owner>battre@chromium.org</owner>
  <summary>
    Time until the lookup for a password requirements file completed (or was
    aborted).
  </summary>
</histogram>

<histogram name="PasswordManager.RequirementsSpecFetcher.Result"
    enum="PasswordRequirementsFetcherResult">
  <owner>battre@chromium.org</owner>
  <summary>
    Result of fetching requirements for password during password generation.
  </summary>
</histogram>

<histogram name="PasswordManager.ReusedPasswordType" enum="ReusedPasswordType">
  <owner>dvadym@chromium.org</owner>
  <owner>jialiul@chromium.org</owner>
  <summary>
    Records the type of password (e.g saved password, sync password, enterprise
    password etc) reused by the user. This is logged when a password reuse
    happens.
  </summary>
</histogram>

<histogram name="PasswordManager.SavedEnterprisePasswordHashCount">
  <owner>dvadym@chromium.org</owner>
  <owner>jialiul@chromium.org</owner>
  <summary>
    Records the number of enterprise password hashes that have been saved for
    password reuse detection. This is logged during the initialization of
    PasswordStore class.
  </summary>
</histogram>

<histogram name="PasswordManager.SavedGaiaPasswordHashCount" units="count">
  <owner>dvadym@chromium.org</owner>
  <owner>jialiul@chromium.org</owner>
  <summary>
    Records the number of Gaia password hashes that have been saved for password
    reuse detection. This is logged during the initialization of PasswordStore
    class.
  </summary>
</histogram>

<histogram name="PasswordManager.SavePasswordPromptDisappearedQuickly"
    enum="Boolean">
  <obsolete>
    Deprecated as of 03/2016.
  </obsolete>
  <owner>vabr@chromium.org</owner>
  <summary>
    Indicates whether the save password prompt disappeared in less than one
    second. This most likely indicates that the prompt was dismissed
    automatically, e.g. due to a page navigation, before the user was able to
    respond to the infobar.
  </summary>
</histogram>

<histogram name="PasswordManager.SavePasswordPromptDisplayed" enum="Boolean">
  <obsolete>
    Deprecated as of 03/2016.
  </obsolete>
  <owner>vabr@chromium.org</owner>
  <summary>Indicates whether the save password prompt was displayed.</summary>
</histogram>

<histogram name="PasswordManager.SavePasswordPromptResponse"
    enum="SavePasswordPromptResponseType">
  <obsolete>
    Deprecated as of 03/2016.
  </obsolete>
  <owner>vabr@chromium.org</owner>
  <summary>
    Breakdown of which response the user selected from the save password prompt.
  </summary>
</histogram>

<histogram name="PasswordManager.SaveUIDismissalReason"
    enum="PasswordManagerUIDismissalReason">
  <owner>vasilii@chromium.org</owner>
  <summary>Why was the save password UI (bubble or infobar) closed?</summary>
</histogram>

<histogram name="PasswordManager.SettingsReconciliation.InitialAndFinalValues"
    enum="PasswordManagerPreferencesInitialAndFinalValues">
  <obsolete>
    Deprecated 06/2017
  </obsolete>
  <owner>engedy@chromium.org</owner>
  <owner>melandory@chromium.org</owner>
  <summary>
    Tracks the pair of initial values and pair of final values for the legacy
    preference for controlling the Chrome Password Manager and the new
    preference for controlling Smart Lock on Android. A single sample is
    recorded after sync has merged last snapshot and finished initialization for
    sync users, and on profile initialization for non-sync users.
  </summary>
</histogram>

<histogram name="PasswordManager.SettingsReconciliation.InitialValues"
    enum="PasswordManagerPreferencesInitialValues">
  <obsolete>
    Deprecated 06/2017
  </obsolete>
  <owner>engedy@chromium.org</owner>
  <owner>melandory@chromium.org</owner>
  <summary>
    Tracks the pair of initial values for both for the legacy preference for
    controlling the Chrome Password Manager and new preference for controlling
    Smart Lock on Android. Sample is recorded on every profile initialization
    before reconciliation logic is taken place, e.g. when user logs in to
    browser, on a startup of a browser.
  </summary>
</histogram>

<histogram
    name="PasswordManager.ShouldBlockPasswordForSameOriginButDifferentScheme"
    enum="BooleanBlocked">
  <owner>jdoerrie@chromium.org</owner>
  <summary>
    This metric is recorded every time Chrome detects a password form
    submission. The credential might be proposed to be saved, or it might be
    blocked. It is blocked if the previously detected password form submission
    was successful, and the current submission is from a URL with the same
    origin, but a different and insecure scheme. That is, if the previously
    provisionally saved credential is for https://example.com, a new credential
    for http://example.com would be blocked. More details can be found in the
    doc associated with http://crbug.com/571580.
  </summary>
</histogram>

<histogram name="PasswordManager.ShouldShowAutoSignInFirstRunExperience"
    enum="BooleanPending">
  <owner>vasilii@chromium.org</owner>
  <summary>
    Records if the user still has to click through the first run experience to
    benefit from auto sign-in behavior. Recorded on every start-up.
  </summary>
</histogram>

<histogram name="PasswordManager.ShouldShowPromptComparison"
    enum="ShouldShowPromptResults" expires_after="M70">
  <owner>dvadym@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <summary>
    Records results of the new and the old algorithm for detecting whether to
    show a password prompt to the user. Recorded on each password form
    successful submission.
  </summary>
</histogram>

<histogram name="PasswordManager.ShowAllSavedPasswordsAcceptedContext"
    enum="ShowAllSavedPasswordsContext">
  <owner>jdoerrie@chromium.org</owner>
  <owner>melandory@chromium.org</owner>
  <summary>
    Recorded when the &quot;Show all saved passwords&quot; fallback is accepted.
  </summary>
</histogram>

<histogram name="PasswordManager.ShowAllSavedPasswordsShownContext"
    enum="ShowAllSavedPasswordsContext">
  <owner>jdoerrie@chromium.org</owner>
  <owner>melandory@chromium.org</owner>
  <summary>
    Recorded when the &quot;Show all saved passwords&quot; fallback is shown.
  </summary>
</histogram>

<histogram name="PasswordManager.ShowedFormNotSecureWarningOnCurrentNavigation"
    enum="BooleanShown">
  <obsolete>
    Deprecated 05/2018 because the feature never launched.
  </obsolete>
  <owner>estark@chromium.org</owner>
  <summary>
    Recorded (at most once per main-frame navigation) when a password form shows
    a warning that the form is not secure.
  </summary>
</histogram>

<histogram name="PasswordManager.SignInPromo"
    enum="PasswordBubbleSignInPromoDismissalReason">
  <owner>vasilii@chromium.org</owner>
  <summary>
    User action on the Chrome Sync promo that appears in the password bubble.
    The promo offers to sign in to Chrome.
  </summary>
</histogram>

<histogram name="PasswordManager.SignInPromoCountTilClick">
  <obsolete>
    Deprecated as of 12/16/16. New statistic is
    PasswordManager.SignInPromoCountTil*.
  </obsolete>
  <owner>vasilii@chromium.org</owner>
  <summary>
    The number of times the Sign In promo in the password bubble was shown
    before user clicked on it.
  </summary>
</histogram>

<histogram name="PasswordManager.SignInPromoCountTilNoThanks">
  <owner>vasilii@chromium.org</owner>
  <summary>
    The number of times the Sign In promo in the password bubble was shown
    before user clicked on &quot;No thanks&quot;.
  </summary>
</histogram>

<histogram name="PasswordManager.SignInPromoCountTilSignIn">
  <owner>vasilii@chromium.org</owner>
  <summary>
    The number of times the Sign In promo in the password bubble was shown
    before user clicked on &quot;Sign in&quot;.
  </summary>
</histogram>

<histogram name="PasswordManager.SignInPromoDismissalCount">
  <owner>vasilii@chromium.org</owner>
  <summary>
    The number of times the Sign In promo in the password bubble was implcitly
    dismissed. Recorded each time the promo is implicitly dismissed.
  </summary>
</histogram>

<histogram name="PasswordManager.StorePasswordImportedFromCSVResult"
    enum="BooleanSuccess">
  <obsolete>
    Deprecated as of 14 September 2017, due to being no longer useful.
  </obsolete>
  <owner>xunlu@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <summary>
    Whether password manager stored passwords imported from CSV file
    successfully.
  </summary>
</histogram>

<histogram name="PasswordManager.StoreReadyWhenWiping" enum="Boolean">
  <owner>vabr@chromium.org</owner>
  <summary>
    When the user logs in with their sync credential, PasswordManager checks if
    there are any outdated copies of it in the password store, in order to purge
    them. This histogram records whether password store data are ready during
    this check.
  </summary>
</histogram>

<histogram name="PasswordManager.SubmitNavigatesToDifferentDomain"
    enum="PostSubmitNavigation">
  <owner>vabr@chromium.org</owner>
  <summary>
    Indicates whether submitting a password login form changes the registry
    controlled domain of the main frame.
  </summary>
</histogram>

<histogram name="PasswordManager.SubmittedFormFrame"
    enum="SubmittedPasswordFormFrame">
  <owner>dvadym@chromium.org</owner>
  <owner>vasilii@chromium.org</owner>
  <summary>
    Records a frame type (eg. main frame, iframe with the same url as the main
    frame) of a submitted password form.
  </summary>
</histogram>

<histogram name="PasswordManager.SubmittedFormType" enum="PasswordFormType">
  <owner>gcasto@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <summary>
    The type (e.g. signup, login, change password) of all submitted password
    forms. This is logged on form submission, but doesn't require that the
    password manager saves.
  </summary>
</histogram>

<histogram name="PasswordManager.SubmittedNonSecureFormType"
    enum="PasswordFormType">
  <owner>estark@chromium.org</owner>
  <summary>
    The type (e.g. signup, login, change password) of all submitted password
    forms on non-secure pages. This is logged on form submission, but doesn't
    require that the password manager saves.
  </summary>
</histogram>

<histogram name="PasswordManager.SuccessfulSubmissionIndicatorEvent"
    enum="SubmissionIndicatorEvent">
  <owner>dvadym@chromium.org</owner>
  <owner>engedy@chromium.org</owner>
  <summary>
    The type of event that the Password Manager used for detecting a password
    form submission. Recorded for each successful password form submission.
  </summary>
</histogram>

<histogram name="PasswordManager.SuggestionClicked"
    enum="PasswordSuggestionType">
  <owner>vasilii@chromium.org</owner>
  <summary>
    The type of password suggestion on iOS displayed in the keyboard accessory.
    Recorded for each tap on the suggestion.
  </summary>
</histogram>

<histogram name="PasswordManager.SuggestionShown" enum="PasswordSuggestionType">
  <owner>vasilii@chromium.org</owner>
  <summary>
    The type of password suggestions on iOS displayed in the keyboard accessory.
    Recorded each time the password suggestion is shown.
  </summary>
</histogram>

<histogram name="PasswordManager.SuppressedAccount"
    enum="PasswordManagerSuppressedAccountCrossActionsTaken">
  <owner>engedy@chromium.org</owner>
  <summary>
    Records, for each password form seen by the password manager, whether there
    were `suppressed` credentials, meaning stored credentials that were not
    filled because they were for an origin that was similar to, but not exactly
    (or PSL) matching the origin of the observed form (see the suffix
    description for the possible classes of such near-matches).  If there were
    such credentials, the histogram also records whether the username and
    password of such suppressed credentials matched those submitted.
  </summary>
</histogram>

<histogram name="PasswordManager.SyncCredentialFiltered"
    enum="CredentialFilteredType">
  <owner>gcasto@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <summary>
    This histogram is reported for those forms on accounts.google.com, on which
    Chrome is forced by Finch/flags during autofilling to remove sync
    credentials from password store results. It reports true if sync credentials
    were indeed removed from the store results, and false if there were no sync
    credentials in the results to begin with.
  </summary>
</histogram>

<histogram name="PasswordManager.SyncingAccountState"
    enum="PasswordManagerSyncingAccountState">
  <owner>gcasto@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <summary>
    Information about the user's current sync status crossed with whether their
    synced password is saved.
  </summary>
</histogram>

<histogram name="PasswordManager.SyncPasswordHashChange"
    enum="SyncPasswordHashChange">
  <owner>dvadym@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    This metric reports a type of a sync password hash change event. Recorded
    when a sync password hash is saved or cleared.
  </summary>
</histogram>

<histogram name="PasswordManager.TimeBetweenStoreAndServer" units="ms"
    expires_after="2018-11-01">
  <owner>dvadym@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <summary>
    The time between receiving saved credentials from the password store and
    predictions from the Autofill server. Recorded each time when predictions
    for a form are received.
  </summary>
</histogram>

<histogram name="PasswordManager.TimeReadingExportedPasswords" units="ms">
  <owner>cfroussios@chromium.org</owner>
  <owner>ioanap@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <summary>
    The time it takes to fetch and serialise the passwords for export.
  </summary>
</histogram>

<histogram name="PasswordManager.TimesGeneratedPasswordUsed">
  <obsolete>
    Deprecated as of 11/11/14. New statistic is
    PasswordManager.TimesPasswordUsed.AutoGenerated.
  </obsolete>
  <owner>gcasto@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <summary>
    The number of times each generated password has been used to log in.
    Recorded by iterating over stored passwords once per run. This information
    is persisted and synced.
  </summary>
</histogram>

<histogram name="PasswordManager.TimesPasswordUsed">
  <owner>gcasto@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <summary>
    The number of times each saved password has been used to log in. Does not
    include generated passwords. Recorded by iterating over stored passwords
    once per run. This information is persisted and synced.
  </summary>
</histogram>

<histogram name="PasswordManager.TotalAccounts">
  <owner>gcasto@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <summary>
    The number of accounts stored in the password manager (across all sites)
  </summary>
</histogram>

<histogram name="PasswordManager.TotalAccountsHiRes.WithScheme"
    units="accounts">
  <owner>engedy@chromium.org</owner>
  <owner>vabr@chromium.org</owner>
  <summary>
    The number of accounts stored in the password manager (across all sites) for
    origins with the scheme (e.g., HTTP, HTTPS, FTP) as given in the histogram
    suffix. For each scheme, the count is recorded once per browser start-up.
    (In case of multiple profiles, the counts are for the profile that first has
    a WebContents created.)
  </summary>
</histogram>

<histogram name="PasswordManager.UIDismissalReason"
    enum="PasswordManagerUIDismissalReason">
  <owner>vasilii@chromium.org</owner>
  <summary>
    Why was the password manager's UI (bubble or infobar) closed? Save and
    update UI are tracked separately.
  </summary>
</histogram>

<histogram name="PasswordManager.UpdatePasswordSubmissionEvent"
    enum="UpdatePasswordSubmissionEvent">
  <obsolete>
    Deprecated 03/2018 in favor of PasswordManager.UpdateUIDismissalReason.
  </obsolete>
  <owner>dvadym@chromium.org</owner>
  <owner>vasilii@chromium.org</owner>
  <summary>
    The password submission event happened when the user changes their password
    on a website, say foo.com or types new password on a sign-in form for saved
    credential (which might mean that the password was changed in a different
    browser). The later case called password overriding. This histogram measures
    whether the user has any passwords saved in the Chrome password manager for
    foo.com or the password was overriden on sign-in form, and what action the
    user performed on the offered bubble. It's recorded when the bubble is
    closed.
  </summary>
</histogram>

<histogram name="PasswordManager.UpdateUIDismissalReason"
    enum="PasswordManagerUIDismissalReason">
  <owner>vasilii@chromium.org</owner>
  <summary>Why was the update password UI (bubble or infobar) closed?</summary>
</histogram>

<histogram name="PasswordManager.UsernameCorrectionFound"
    enum="BooleanUsernameCorrectionVote">
  <owner>kolos@chromium.org</owner>
  <summary>
    Chrome saves locally all fields a user typed on a sign-up form. If Chrome
    saved an incorrect username and the user changes the username on a sign-in
    form to a value of another field from the sign-up form, then Chrome uploads
    a username correction vote which points to the correct username field. This
    histogram measures how many correction votes are uploaded.
  </summary>
</histogram>

<histogram name="PasswordManager.UsernameDetectionMethod"
    enum="UsernameDetectionMethod">
  <owner>kolos@chromium.org</owner>
  <summary>
    Measures what method was used for username field detection in the renderer
    code. The metric may be recorded several times for page visit because it is
    recorded at every PasswordForm creation. If a site changes HTML attributes
    of fields or server-side predictions is received, different values can be
    recorded for the same form. If an outcome of HTML classifier or a
    server-side prediction coincides with the outcome of base heuristic, the
    metric points to base heuristic method.
  </summary>
</histogram>

<histogram name="PasswordManager.UserStoredPasswordWithInvalidSSLCert"
    enum="Boolean">
  <obsolete>
    Deprecated 07/2016 because this information is no longer stored in
    PasswordForm. See also http://crbug.com/413020.
  </obsolete>
  <owner>xunlu@chromium.org</owner>
  <owner>gcasto@chromium.org</owner>
  <summary>
    Whether saved password for HTTPS site had a valid SSL cert when the password
    was saved.
  </summary>
</histogram>

<histogram name="PasswordProtection.ChromeSettingsAction"
    enum="PasswordProtectionWarningAction">
  <owner>jialiul@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    Records how a user interacts with the chrome://settings page that displays
    the password protection warning. Logged when the page is shown and when the
    user chooses to change their password on the page.
  </summary>
</histogram>

<histogram
    name="PasswordProtection.GaiaPasswordReusesBeforeGaiaPasswordChanged"
    units="reuses">
  <owner>jialiul@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    The number of Gaia password reuse warnings shown to user before user changes
    their password. Logged when we see that user has changed their Gaia
    password. The number of reuses will be reset to zero if current session of
    browser process ends. This count doesn't include the reuses that user marked
    as legitimate.
  </summary>
</histogram>

<histogram name="PasswordProtection.InterstitialAction"
    enum="PasswordProtectionWarningAction">
  <owner>jialiul@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    Records how a user interacts with the password protection interstitial
    (a.k.a chrome://reset-password page). Logged when the interstitial is shown
    and when the user chooses to change their password.
  </summary>
</histogram>

<histogram name="PasswordProtection.InterstitialActionByUserNavigation"
    enum="PasswordProtectionWarningAction" expires_after="M71">
  <owner>jialiul@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    When user manually navigates to chrome://reset-password page, records how
    this user interacts with this page. Logged when the interstitial is shown
    and when the user chooses to change their password.
  </summary>
</histogram>

<histogram name="PasswordProtection.InterstitialString"
    enum="PasswordProtectionInterstitialStringType">
  <owner>jialiul@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    Records the type of strings shown to the user on chrome://reset-password
    page. Logged when the interstitial in initialized.
  </summary>
</histogram>

<histogram name="PasswordProtection.ModalWarningDialogAction"
    enum="PasswordProtectionWarningAction">
  <owner>jialiul@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    Records how a user interacts with the password protection modal warning
    dialog. Logged when the dialog is shown and when the user chooses to change
    their password, ignore warning, or navigate away.
  </summary>
</histogram>

<histogram base="true"
    name="PasswordProtection.NumberOfCachedVerdictBeforeShutdown" units="count">
  <owner>jialiul@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    Number of password protection verdicts stored in content settings of a
    profile before this profile is destructed.
  </summary>
</histogram>

<histogram
    name="PasswordProtection.NumberOfVerdictsMigratedDuringInitialization"
    units="verdicts" expires_after="M70">
  <owner>jialiul@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    We start changing the way of caching password protection verdicts in M69.
    This histogram counts the number of verdicts migrated to the new way during
    initialization of PasswordProtectionService. It helps determine when we can
    remove migration code.
  </summary>
</histogram>

<histogram name="PasswordProtection.PageInfoAction"
    enum="PasswordProtectionWarningAction">
  <owner>jialiul@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    Records how a user interacts with page info bubble that displays the
    password protection warning. Logged when such page info bubble is shown and
    when the user chooses to change their password, ignore warning, or mark site
    as legitimate via buttons on the page info bubble.
  </summary>
</histogram>

<histogram base="true" name="PasswordProtection.PasswordAlertModeOutcome"
    enum="PasswordProtectionRequestOutcome">
  <owner>jialiul@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    Records the outcome of the password alert mode, indicating if password alert
    warning is shown successfully or if it is skipped for some reason.
  </summary>
</histogram>

<histogram name="PasswordProtection.PasswordProtectionResponseOrErrorCode"
    enum="CombinedHttpResponseAndNetErrorCode">
  <owner>jialiul@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    Response or error codes for PasswordProtectionRequest. Logged after chrome
    receives response of PasswordProtectionRequest from Safe Browsing service.
  </summary>
</histogram>

<histogram name="PasswordProtection.PasswordReuseEventVerdict"
    enum="PasswordProtectionVerdict">
  <obsolete>
    Deprecated since May 12 2017. Replaced by
    PasswordProtection.Verdict.ProtectedPasswordEntry.
  </obsolete>
  <owner>jialiul@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    Verdict types returned by Safe Browsing server for password reuse events.
  </summary>
</histogram>

<histogram name="PasswordProtection.PasswordReuseSyncAccountType"
    enum="PasswordProtectionSyncAccountType">
  <owner>jialiul@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    When password protection service detects a reuse of Chrome sync password,
    record the type of Chrome sync account on which the reuse happens (e.g.
    @gmail.com, @googlemail.com, or other dasher account).
  </summary>
</histogram>

<histogram name="PasswordProtection.ReferrerChainSize" units="referrers"
    expires_after="M71">
  <owner>drubery@chromium.org</owner>
  <owner>jialiul@chromium.org</owner>
  <summary>
    The referrer chain size of a password protection request. This is recorded
    when Chrome receives a verdict for this request.
  </summary>
</histogram>

<histogram name="PasswordProtection.RequestNetworkDuration" units="ms">
  <owner>jialiul@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    The time it takes for PasswordProtectionService request. It is not recorded
    for requests that were canceled.
  </summary>
</histogram>

<histogram base="true" name="PasswordProtection.RequestOutcome"
    enum="PasswordProtectionRequestOutcome">
  <owner>jialiul@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    Records the outcome of the password protection request, indicating if
    request is sent out successfully or if it is skipped or canceled for some
    reason.
  </summary>
</histogram>

<histogram name="PasswordProtection.UnfamiliarLoginPageVerdict"
    enum="PasswordProtectionVerdict">
  <obsolete>
    Deprecated since May 12 2017. Replaced by
    PasswordProtection.Verdict.PasswordFieldOnFocus.
  </obsolete>
  <owner>jialiul@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    Verdict types returned by Safe Browsing server for unfamiliar login pages.
  </summary>
</histogram>

<histogram name="PasswordProtection.UserClickedThroughSafeBrowsingInterstitial"
    enum="BooleanClickedThroughSBInterstitial">
  <owner>jialiul@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    Whether the user has clicked through the Safe Browsing interstitial before
    the password protection ping is triggered on the same page. Logged right
    before password protection ping is sent.
  </summary>
</histogram>

<histogram name="PasswordProtection.Verdict" enum="PasswordProtectionVerdict">
  <owner>jialiul@chromium.org</owner>
  <owner>nparker@chromium.org</owner>
  <summary>
    Verdict types returned by Safe Browsing server for a password protection
    request. Request can be triggered when user focuses on a password field or
    enters a protected password.
  </summary>
</histogram>

<histogram
    name="PaymentRequest.CanMakePayment.NotUsed.WithShowEffectOnCompletion"
    enum="PaymentRequestFlowCompletionStatus">
  <obsolete>
    M62+ Part of PaymentRequest.Events
  </obsolete>
  <owner>sebsg@chromium.org</owner>
  <summary>
    Whether the flow was completed when CanMakePayment was not called by the
    merchant.
  </summary>
</histogram>

<histogram name="PaymentRequest.CanMakePayment.Usage"
    enum="CanMakePaymentUsage">
  <obsolete>
    M62+ Part of PaymentRequest.Events
  </obsolete>
  <owner>sebsg@chromium.org</owner>
  <summary>
    Whether the merchant used the CanMakePayment method during a Payment
    Request.
  </summary>
</histogram>

<histogram name="PaymentRequest.CanMakePayment.Used.EffectOnShow"
    enum="PaymentRequestCanMakePaymentEffectOnShow">
  <obsolete>
    M62+ Part of PaymentRequest.Events
  </obsolete>
  <owner>sebsg@chromium.org</owner>
  <summary>
    The effect of the CanMakePayment return value on whether Show was called.
  </summary>
</histogram>

<histogram
    name="PaymentRequest.CanMakePayment.Used.FalseWithShowEffectOnCompletion"
    enum="PaymentRequestFlowCompletionStatus">
  <obsolete>
    M62+ Part of PaymentRequest.Events
  </obsolete>
  <owner>sebsg@chromium.org</owner>
  <summary>
    Whether the flow was completed when CanMakePayment was called by the
    merchant and returned false.
  </summary>
</histogram>

<histogram
    name="PaymentRequest.CanMakePayment.Used.TrueWithShowEffectOnCompletion"
    enum="PaymentRequestFlowCompletionStatus">
  <obsolete>
    M62+ Part of PaymentRequest.Events
  </obsolete>
  <owner>sebsg@chromium.org</owner>
  <summary>
    Whether the flow was completed when CanMakePayment was called by the
    merchant and returned true.
  </summary>
</histogram>

<histogram name="PaymentRequest.CheckoutFunnel.Aborted"
    enum="PaymentRequestAbortReason">
  <owner>sebsg@chromium.org</owner>
  <summary>The reason that lead to an abort of the Payment Request.</summary>
</histogram>

<histogram name="PaymentRequest.CheckoutFunnel.Completed" enum="BooleanHit">
  <obsolete>
    M62+ Part of PaymentRequest.Events
  </obsolete>
  <owner>sebsg@chromium.org</owner>
  <summary>When the merchant has processed the user's Payment Request.</summary>
</histogram>

<histogram name="PaymentRequest.CheckoutFunnel.Initiated" enum="BooleanHit">
  <obsolete>
    M62+ Part of PaymentRequest.Events
  </obsolete>
  <owner>sebsg@chromium.org</owner>
  <summary>When a Payment Request gets initiated by the user.</summary>
</histogram>

<histogram name="PaymentRequest.CheckoutFunnel.NoShow"
    enum="PaymentRequestNoShowReason">
  <owner>sebsg@chromium.org</owner>
  <summary>
    The reason that leads to the Payment Request not being shown to the user.
  </summary>
</histogram>

<histogram name="PaymentRequest.CheckoutFunnel.PayClicked" enum="BooleanHit">
  <obsolete>
    M62+ Part of PaymentRequest.Events
  </obsolete>
  <owner>sebsg@chromium.org</owner>
  <summary>
    When the user clicks the &quot;pay&quot; button in the Payment Request UI.
  </summary>
</histogram>

<histogram name="PaymentRequest.CheckoutFunnel.ReceivedInstrumentDetails"
    enum="BooleanHit">
  <obsolete>
    M62+ Part of PaymentRequest.Events
  </obsolete>
  <owner>sebsg@chromium.org</owner>
  <summary>
    When the browser retrieves the instrument details from the payment app to
    complete a purchase.
  </summary>
</histogram>

<histogram name="PaymentRequest.CheckoutFunnel.Shown" enum="BooleanHit">
  <obsolete>
    M62+ Part of PaymentRequest.Events
  </obsolete>
  <owner>sebsg@chromium.org</owner>
  <summary>
    When the Payment Request UI gets shown after initialization.
  </summary>
</histogram>

<histogram name="PaymentRequest.CheckoutFunnel.SkippedShow"
    enum="BooleanSkipped">
  <obsolete>
    M62+ Part of PaymentRequest.Events
  </obsolete>
  <owner>sebsg@chromium.org</owner>
  <summary>
    When the Payment Request UI gets skipped to go directly to the payment app.
  </summary>
</histogram>

<histogram name="PaymentRequest.Events" units="bitfield value">
  <owner>sebsg@chromium.org</owner>
  <summary>
    A bitfield representing the different events that happened during the
    Payment Request.
  </summary>
</histogram>

<histogram name="PaymentRequest.NumberOfSelectionAdds">
  <owner>sebsg@chromium.org</owner>
  <summary>
    The number of times the user added an entry during a Payment Request.
  </summary>
</histogram>

<histogram name="PaymentRequest.NumberOfSelectionChanges">
  <owner>sebsg@chromium.org</owner>
  <summary>
    The number of times the user changed an entry during a Payment Request.
  </summary>
</histogram>

<histogram name="PaymentRequest.NumberOfSelectionEdits">
  <owner>sebsg@chromium.org</owner>
  <summary>
    The number of times the user edited an entry during a Payment Request.
  </summary>
</histogram>

<histogram name="PaymentRequest.NumberOfSuggestionsShown">
  <owner>sebsg@chromium.org</owner>
  <summary>
    The number of suggestions shown to the user during a payment request.
  </summary>
</histogram>

<histogram name="PaymentRequest.RequestedInformation"
    enum="PaymentRequestRequestedInformation">
  <obsolete>
    M62+ Included in PaymentRequest.Events
  </obsolete>
  <owner>sebsg@chromium.org</owner>
  <summary>
    Tracks what user information is required by merchants to complete a Payment
    Request.
  </summary>
</histogram>

<histogram name="PaymentRequest.SelectedPaymentMethod"
    enum="PaymentRequestPaymentMethods">
  <obsolete>
    M62+ Included in PaymentRequest.Events
  </obsolete>
  <owner>sebsg@chromium.org</owner>
  <summary>
    Tracks what payment method was used to complete a transaction in Payment
    Request.
  </summary>
</histogram>

<histogram
    name="PaymentRequest.UserDidNotHaveCompleteSuggestionsForEverything.EffectOnCompletion"
    enum="PaymentRequestFlowCompletionStatus">
  <obsolete>
    M62+ Part of PaymentRequest.Events
  </obsolete>
  <owner>sebsg@chromium.org</owner>
  <summary>
    Whether the flow was completed when the user did not have a complete
    suggestion offered for each requested information.
  </summary>
</histogram>

<histogram
    name="PaymentRequest.UserDidNotHaveInitialFormOfPayment.EffectOnCompletion"
    enum="PaymentRequestFlowCompletionStatus">
  <obsolete>
    Replaced by PaymentRequest.NumberOfSuggestionsShown.PaymentMethod on July
    19th 2017.
  </obsolete>
  <owner>sebsg@chromium.org</owner>
  <summary>
    Whether the flow was completed when the user did not have a a form of
    payment on file when the Payment Request was shown.
  </summary>
</histogram>

<histogram
    name="PaymentRequest.UserDidNotHaveSuggestionsForEverything.EffectOnCompletion"
    enum="PaymentRequestFlowCompletionStatus">
  <obsolete>
    M62+ Part of PaymentRequest.Events
  </obsolete>
  <owner>sebsg@chromium.org</owner>
  <summary>
    Whether the flow was completed when the user did not have suggestions
    offered for each requested information.
  </summary>
</histogram>

<histogram
    name="PaymentRequest.UserHadCompleteSuggestionsForEverything.EffectOnCompletion"
    enum="PaymentRequestFlowCompletionStatus">
  <obsolete>
    M62+ Part of PaymentRequest.Events
  </obsolete>
  <owner>sebsg@chromium.org</owner>
  <summary>
    Whether the flow was completed when the user had at least one complete
    suggestion offered for each requested information.
  </summary>
</histogram>

<histogram name="PaymentRequest.UserHadInitialFormOfPayment.EffectOnCompletion"
    enum="PaymentRequestFlowCompletionStatus">
  <obsolete>
    Replaced by PaymentRequest.NumberOfSuggestionsShown.PaymentMethod on July
    19th 2017.
  </obsolete>
  <owner>sebsg@chromium.org</owner>
  <summary>
    Whether the flow was completed when the user had a form of payment on file
    when the Payment Request was shown.
  </summary>
</histogram>

<histogram
    name="PaymentRequest.UserHadSuggestionsForEverything.EffectOnCompletion"
    enum="PaymentRequestFlowCompletionStatus">
  <owner>sebsg@chromium.org</owner>
  <summary>
    Whether the flow was completed when the user had suggestions offered for
    each requested information.
  </summary>
</histogram>

<histogram name="PDF.Actions" enum="ChromePDFViewerActions">
  <owner>hnakashima@chromium.org</owner>
  <summary>
    Tracks user actions in the PDF viewer. Logged when the document is opened
    and when one of the relevant user actions is taken, such as opening the
    bookmarks bar or setting the zoom mode to fit-to-page. The enum values that
    are named &quot;First&quot; are logged only once per document, so that we
    can measure in what percentage of documents a given action was performed at
    least once.
  </summary>
</histogram>

<histogram name="PDF.AnnotationType" enum="ChromePDFViewerAnnotationType">
  <owner>hnakashima@chromium.org</owner>
  <summary>
    Tracks documents opened in the PDF viewer that displayed one or more pages
    with the given annotation type.
  </summary>
</histogram>

<histogram name="PDF.DocumentFeature" enum="PDFFeatures">
  <owner>tsergeant@chromium.org</owner>
  <summary>
    Tracks which features are used by documents opened in the PDF viewer, logged
    when the document finishes loading.
  </summary>
</histogram>

<histogram name="PDF.FileSizeInKB" units="KB">
  <owner>thestig@chromium.org</owner>
  <summary>The size of PDF documents opened in the PDF viewer.</summary>
</histogram>

<histogram name="PDF.FormType" enum="PDFFormTypes">
  <owner>rharrison@chromium.org</owner>
  <summary>
    Tracks what types of forms are present in PDF document, logged when the
    document finishes loading.
  </summary>
</histogram>

<histogram name="PDF.HasAttachment" enum="Boolean">
  <owner>hnakashima@chromium.org</owner>
  <summary>
    Measures if PDFs opened in the PDF viewer have attachments. This is logged
    whenever a document is opened in the PDF viewer.
  </summary>
</histogram>

<histogram name="PDF.IsFontSubstituted" enum="Boolean">
  <owner>npm@chromium.org</owner>
  <summary>
    Measures if PDFs opened in the PDF viewer require fonts to be substituted.
    This is logged whenever a document is opened in the PDF viewer.
  </summary>
</histogram>

<histogram name="PDF.IsLinearized" enum="Boolean">
  <owner>hnakashima@chromium.org</owner>
  <summary>
    Measures if PDFs opened in the PDF viewer are Linearized PDFs. This is
    logged whenever a document is opened in the PDF viewer.
  </summary>
</histogram>

<histogram name="PDF.IsTagged" enum="BooleanIsTagged">
  <owner>hnakashima@chromium.org</owner>
  <summary>
    Tracks documents opened in the PDF viewer that are Tagged PDFs.
  </summary>
</histogram>

<histogram name="PDF.LoadStatus" enum="ChromePDFViewerLoadStatus">
  <owner>tommycli@chromium.org</owner>
  <summary>
    Tracks what happens when Chrome tries to load a PDF. This metric tracks all
    cases, but is focused on measuring failed PDF embeds, which occur if the
    user is on Android, or if PDF plugin is disabled.
  </summary>
</histogram>

<histogram name="PDF.PageCount" units="pages">
  <owner>hnakashima@chromium.org</owner>
  <summary>
    Tracks the number of pages in PDF documents opened in the PDF viewer.
  </summary>
</histogram>

<histogram name="Pepper.BrokerAction" enum="PepperBrokerAction">
  <owner>raymes@chromium.org</owner>
  <summary>
    Counts various actions related to the Pepper Broker interface.
  </summary>
</histogram>

<histogram name="Pepper.Graphics3DHasShareGroup" units="BooleanShareGroup">
  <owner>jbauman@chromium.org</owner>
  <summary>
    True if a non-flash Pepper Graphics3D context has a share group.
  </summary>
</histogram>

<histogram name="Pepper.InterfaceUsed" enum="PepperInterface">
  <owner>sehr@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <owner>bbudge@chromium.org</owner>
  <owner>raymes@chromium.org</owner>
  <summary>
    The number of out-of-process plugin processes that have loaded a particular
    PPB interface version.
  </summary>
</histogram>

<histogram name="Pepper.PluginContextSecurity.TCPConnect" enum="BooleanSecure">
  <owner>raymes@chromium.org</owner>
  <owner>jww@chromium.org</owner>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    Whether a Pepper TCP connect attempt comes from a plugin in a secure or an
    insecure origin.
  </summary>
</histogram>

<histogram name="Pepper.PluginContextSecurity.UDPBind" enum="BooleanSecure">
  <owner>raymes@chromium.org</owner>
  <owner>jww@chromium.org</owner>
  <owner>rsleevi@chromium.org</owner>
  <summary>
    Whether a Pepper UDP bind attempt comes from a plugin in a secure or an
    insecure origin.
  </summary>
</histogram>

<histogram name="Pepper.SecureOrigin.MediaStreamRequest" enum="BooleanSecure">
  <obsolete>
    Deprecated as of 8/2017.
  </obsolete>
  <owner>raymes@chromium.org</owner>
  <summary>
    Whether a Pepper media stream request (mic/cam access) comes from a plugin
    in a secure or an insecure origin.
  </summary>
</histogram>

<histogram name="Performance.PerformanceMeasurePassedInParameter.EndMark"
    enum="PerformanceMeasurePassedInParameterType">
  <obsolete>
    Deprecated 05/2018. Made decision in issue 758385 with already acquired
    data. So this is no longer needed.
  </obsolete>
  <owner>maxlg@chromium.org</owner>
  <summary>
    The count of possible string of the endMark parameter in
    performance.measure().
  </summary>
</histogram>

<histogram name="Performance.PerformanceMeasurePassedInParameter.StartMark"
    enum="PerformanceMeasurePassedInParameterType">
  <obsolete>
    Deprecated 05/2018. Made decision in issue 758385 with already acquired
    data. So this is no longer needed.
  </obsolete>
  <owner>maxlg@chromium.org</owner>
  <summary>
    The count of possible string of the startMark parameter in
    performance.measure().
  </summary>
</histogram>

<histogram name="PerformanceMonitor.AverageCPU" units="PercentCPUUsage">
  <owner>oysteine@chromium.org</owner>
  <summary>
    Average CPU utilization of a process, read out at each two-minute interval.
    The utilization is in the 0-100% range per CPU, which is then summed up.
    I.e. a quadcore system fully loaded would read as 400%.
  </summary>
</histogram>

<histogram name="PerformanceMonitor.HighCPU" enum="BooleanHit">
  <owner>oysteine@chromium.org</owner>
  <summary>
    The number of times a process has continuously stayed above a certain
    threshold of CPU utilization over a certain time period (currently set to
    two minutes).
  </summary>
</histogram>

<histogram name="PerformanceMonitor.IdleWakeups" units="WakeupsPerSecond">
  <owner>lgrey@chromium.org</owner>
  <summary>
    The average CPU idle wakeups per second, sampled every two minutes.
  </summary>
</histogram>

<histogram name="PerformanceMonitor.PackageExitIdleWakeups"
    units="WakeupsPerSecond">
  <owner>lgrey@chromium.org</owner>
  <summary>
    (Mac only) The average package exit idle wakeups per second, sampled every
    two minutes. This is a subset of wakeups that indicate that the processor
    complex was taken out of low-power state. For more info, see the
    powermetrics man page on macOS.
  </summary>
</histogram>

<histogram name="Permissions.Action" enum="PermissionAction">
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <owner>miguelg@chromium.org</owner>
  <owner>mlamouri@chromium.org</owner>
  <summary>
    Tracks whether a permission was granted, rejected, etc. The suffix of the
    histogram indicates which particular permission.
  </summary>
</histogram>

<histogram name="Permissions.Action.InsecureOrigin" enum="PermissionAction">
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <owner>miguelg@chromium.org</owner>
  <owner>mlamouri@chromium.org</owner>
  <summary>
    Tracks whether a permission was granted, rejected, etc on an insecure
    origin. The suffix of the histogram indicates which particular permission.
  </summary>
</histogram>

<histogram name="Permissions.Action.SecureOrigin" enum="PermissionAction">
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <owner>miguelg@chromium.org</owner>
  <owner>mlamouri@chromium.org</owner>
  <summary>
    Tracks whether a permission was granted, rejected, etc on a secure origin.
    The suffix of the histogram indicates which particular permission.
  </summary>
</histogram>

<histogram name="Permissions.AutoBlocker.EmbargoPromptSuppression"
    enum="PermissionEmbargoStatus">
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    For every permission request that would show a prompt to the user, this
    metric tracks whether the request is suppressed by embargo (and the source
    of that embargo), or whether there is no embargo and the prompt is shown.
    This is the proportion of permission prompts that the user would have seen
    that have been blocked due to embargo.

    If the (origin, permission) pair was previously placed under embargo, no
    prompt is displayed and the reason for embargo is recorded. Otherwise, the
    prompt is shown and a no embargo reason is recorded.
  </summary>
</histogram>

<histogram name="Permissions.AutoBlocker.EmbargoStatus"
    enum="PermissionEmbargoStatus">
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    Tracks the reason that an (origin, permission) pair has been placed under
    embargo (blocked from making requests for that permission for a period of
    time). This is triggered when a permission is placed under embargo for
    blacklisting (once Safe Browsing has returned a result), when a permission
    prompt has been shown and it is placed under embargo for repeated
    dismissals, or when a permission prompt is shown and not embargoed.
  </summary>
</histogram>

<histogram name="Permissions.AutoBlocker.SafeBrowsingResponse"
    enum="SafeBrowsingResponse">
  <obsolete>
    Permission blacklisting was removed in M67.
  </obsolete>
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    Tracks the response (if received) from Safe Browsing when the API blacklist
    is queried for an (origin, permission) pair. The response could be that the
    origin was blacklisted, not blacklisted, or Safe Browsing timed out before a
    response was received.
  </summary>
</histogram>

<histogram name="Permissions.AutoBlocker.SafeBrowsingResponseTime" units="ms">
  <obsolete>
    Permission blacklisting was removed in M67.
  </obsolete>
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    Records the elapsed time between the client sending a request to Safe
    Browsing and receiving a result, or the maximum wait time is exceeded and
    Safe Browsing is deemed to have timed out.
  </summary>
</histogram>

<histogram name="Permissions.BatteryLevel.Accepted.Geolocation" units="%">
  <owner>timloh@chromium.org</owner>
  <summary>
    Battery percentage when a geolocation permission prompt was accepted on
    Android.
  </summary>
</histogram>

<histogram name="Permissions.BatteryLevel.Accepted.LocationSettingsDialog"
    units="%">
  <owner>timloh@chromium.org</owner>
  <summary>
    Battery percentage when a location settings dialog was accepted.
  </summary>
</histogram>

<histogram name="Permissions.BatteryLevel.Denied.Geolocation" units="%">
  <owner>timloh@chromium.org</owner>
  <summary>
    Battery percentage when a geolocation permission prompt was denied on
    Android.
  </summary>
</histogram>

<histogram name="Permissions.BatteryLevel.Denied.LocationSettingsDialog"
    units="%">
  <owner>timloh@chromium.org</owner>
  <summary>
    Battery percentage when a location settings dialog was denied.
  </summary>
</histogram>

<histogram name="Permissions.BatteryLevel.Dismissed.Geolocation" units="%">
  <owner>timloh@chromium.org</owner>
  <summary>
    Battery percentage when a geolocation permission prompt was dismissed on
    Android.
  </summary>
</histogram>

<histogram name="Permissions.Engagement.Accepted" units="%">
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <owner>timloh@chromium.org</owner>
  <summary>
    Tracks the engagement score for sites where permission prompts are accepted.
  </summary>
</histogram>

<histogram name="Permissions.Engagement.Denied" units="%">
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <owner>timloh@chromium.org</owner>
  <summary>
    Tracks the engagement score for sites where permission prompts are denied.
  </summary>
</histogram>

<histogram name="Permissions.Engagement.Dismissed" units="%">
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <owner>timloh@chromium.org</owner>
  <summary>
    Tracks the engagement score for sites where permission prompts are
    dismissed.
  </summary>
</histogram>

<histogram name="Permissions.Engagement.Ignored" units="%">
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <owner>timloh@chromium.org</owner>
  <summary>
    Tracks the engagement score for sites where permission prompts are ignored.
  </summary>
</histogram>

<histogram name="Permissions.Prompt.Accepted" enum="PermissionRequestType">
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    Tracks the permission bubbles (merged and non-merged) that are accepted.
    Merged bubbles are considered accepted if all permissions are allowed.
  </summary>
</histogram>

<histogram name="Permissions.Prompt.Accepted.Persisted" enum="BooleanPersisted">
  <obsolete>
    Persist toggle experiments ran from M56 to M59.
  </obsolete>
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    For each granted permission prompt displayed with a persistence toggle
    (remember my decision), records whether the persistence toggle was enabled
    (persist) or not enabled (don't persist).
  </summary>
</histogram>

<histogram name="Permissions.Prompt.Accepted.PriorDismissCount">
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    This metric, recorded at the time of a permission prompt accept, records the
    total number of prompt dismissal events for this origin since the last time
    the user cleared their history or site data and prior to the accept. The
    suffix of the histogram indicates which particular permission.
  </summary>
</histogram>

<histogram name="Permissions.Prompt.Accepted.PriorIgnoreCount">
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    This metric, recorded at the time of a permission prompt accept, records the
    total number of prompt ignore events for this origin since the last time the
    user cleared their history or site data and prior to the accept. The suffix
    of the histogram indicates which particular permission.
  </summary>
</histogram>

<histogram name="Permissions.Prompt.Denied" enum="PermissionRequestType">
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    Tracks the permission bubbles (merged and non-merged) that are denied.
    Merged bubbles are considered denied if any permission is denied.
  </summary>
</histogram>

<histogram name="Permissions.Prompt.Denied.Persisted" enum="BooleanPersisted">
  <obsolete>
    Persist toggle experiments ran from M56 to M59.
  </obsolete>
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    For each denied permission prompt displayed with a persistence toggle
    (remember my decision), records whether the persistence toggle was enabled
    (persist) or not enabled (don't persist).
  </summary>
</histogram>

<histogram name="Permissions.Prompt.Denied.PriorDismissCount">
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    This metric, recorded at the time of a permission prompt deny, records the
    total number of prompt dismissal events for this origin since the last time
    the user cleared their history or site data and prior to the accept. The
    suffix of the histogram indicates which particular permission.
  </summary>
</histogram>

<histogram name="Permissions.Prompt.Denied.PriorIgnoreCount">
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    This metric, recorded at the time of a permission prompt deny, records the
    total number of prompt ignore events for this origin since the last time the
    user cleared their history or site data and prior to the accept. The suffix
    of the histogram indicates which particular permission.
  </summary>
</histogram>

<histogram name="Permissions.Prompt.DismissCount">
  <obsolete>
    Renamed to Permissions.Prompt.Dismissed.PriorDismissCount on 17 August 2016.
  </obsolete>
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    This metric, recorded at the time of a permission prompt dismissal, records
    the total number of prompt dismissal events for this origin since the last
    time the user cleared their history or site data, inclusive of the current
    dismissal. Every event in a bucket larger than 1 in this histogram will also
    have an event in each smaller bucket. The suffix of the histogram indicates
    which particular permission.
  </summary>
</histogram>

<histogram name="Permissions.Prompt.Dismissed.PriorDismissCount">
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    This metric, recorded at the time of a permission prompt dismiss, records
    the total number of prompt dismissal events for this origin since the last
    time the user cleared their history or site data and prior to the dismiss.
    The suffix of the histogram indicates which particular permission.
  </summary>
</histogram>

<histogram name="Permissions.Prompt.Dismissed.PriorIgnoreCount">
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    This metric, recorded at the time of a permission prompt dismiss, records
    the total number of prompt ignore events for this origin since the last time
    the user cleared their history or site data and prior to the dismiss. The
    suffix of the histogram indicates which particular permission.
  </summary>
</histogram>

<histogram name="Permissions.Prompt.IgnoreCount">
  <obsolete>
    Renamed to Permissions.Prompt.Dismissed.PriorDismissCount on 17 August 2016.
  </obsolete>
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    This metric, recorded at the time of a permission prompt ignore, records the
    total number of prompt ignore events for this origin since the last time the
    user cleared their history or site data, inclusive of the current ignore.
    Every event in a bucket larger than 1 in this histogram will also have an
    event in each smaller bucket. The suffix of the histogram indicates which
    particular permission.
  </summary>
</histogram>

<histogram name="Permissions.Prompt.Ignored.PriorDismissCount">
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    This metric, recorded at the time of a permission prompt ignore, records the
    total number of prompt dismissal events for this origin since the last time
    the user cleared their history or site data and prior to the ignore. The
    suffix of the histogram indicates which particular permission.
  </summary>
</histogram>

<histogram name="Permissions.Prompt.Ignored.PriorIgnoreCount">
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    This metric, recorded at the time of a permission prompt ignore, records the
    total number of prompt ignore events for this origin since the last time the
    user cleared their history or site data and prior to the ignore. The suffix
    of the histogram indicates which particular permission.
  </summary>
</histogram>

<histogram name="Permissions.Prompt.MergedBubbleAccepted"
    enum="PermissionRequestType">
  <obsolete>
    Redundant since M61 (bug 728483) as we now only merge Mic+Camera. The same
    counts are available in Permissions.Prompt.Accepted.
  </obsolete>
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    Tracks acceptance of permission bubble request types that have been merged
    into coalesced bubbles.
  </summary>
</histogram>

<histogram name="Permissions.Prompt.MergedBubbleDenied"
    enum="PermissionRequestType">
  <obsolete>
    Redundant since M61 (bug 728483) as we now only merge Mic+Camera. The same
    counts are available in Permissions.Prompt.Denied.
  </obsolete>
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    Tracks denial of permission bubble request types that have been merged into
    coalesced bubbles.
  </summary>
</histogram>

<histogram name="Permissions.Prompt.MergedBubbleTypes"
    enum="PermissionRequestType">
  <obsolete>
    Redundant since M61 (bug 728483) as we now only merge Mic+Camera. The same
    counts are available in Permissions.Prompt.Shown.
  </obsolete>
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    Tracks the permission bubble request types that are being merged into
    coalesced bubbles.
  </summary>
</histogram>

<histogram name="Permissions.Prompt.RequestsPerPrompt">
  <obsolete>
    Redundant since M61 (bug 728483) as we now only merge Mic+Camera. The same
    counts are available in Permissions.Prompt.Shown.
  </obsolete>
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    How many permission requests each permissions prompt shown to the user
    contains.
  </summary>
</histogram>

<histogram name="Permissions.Prompt.Shown" enum="PermissionRequestType">
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    Tracks how many times permission prompts are shown to users.
  </summary>
</histogram>

<histogram name="Permissions.Requested.CrossOrigin" enum="PermissionStatus">
  <obsolete>
    Deprecated 02/2017, no longer used
  </obsolete>
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <owner>keenanb@google.com</owner>
  <owner>jww@chromium.org</owner>
  <summary>
    The embedder's permission setting at the time of a cross-origin iframe
    permission request for a given permission type. See the corresponding
    histogram suffixes.

    A request is when a website makes a permission request and the user has the
    permission set to prompt (i.e. not blocked or allowed).

    Note this is probably not the metric you want - it does not correspond to
    the total number of times websites request a permission. Also, because
    specific permissions have code that can automatically block or grant
    permissions based on things like incognito, installed extensions etc., this
    does also not correspond to the number of times users are prompted to allow
    permissions.

    See https://crbug.com/638076 for more details.
  </summary>
</histogram>

<histogram name="Permissions.Requested.SameOrigin" enum="PermissionType">
  <obsolete>
    Deprecated 02/2017, no longer used
  </obsolete>
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <owner>keenanb@google.com</owner>
  <owner>jww@chromium.org</owner>
  <summary>
    The permission type (geolocation, and such) of a same-origin permission
    request.

    A request is when a website makes a permission request and the user has the
    permission set to prompt (i.e. not blocked or allowed).

    Note this is probably not the metric you want - it does not correspond to
    the total number of times websites request a permission. Also, because
    specific permissions have code that can automatically block or grant
    permissions based on things like incognito, installed extensions etc., this
    does also not correspond to the number of times users are prompted to allow
    permissions.

    See https://crbug.com/638076 for more details.
  </summary>
</histogram>

<histogram name="PhysicalWeb.ActivityReferral"
    enum="PhysicalWebActivityReferer">
  <obsolete>
    Obsolete 4/2018, Physical Web is disabled (crbug.com/826540).
  </obsolete>
  <owner>cco3@chromium.org</owner>
  <owner>mattreynolds@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <summary>
    Referer used by user to reach the main Physical Web Activity.
  </summary>
</histogram>

<histogram name="PhysicalWeb.InitialState.IosChrome"
    enum="PhysicalWebInitialStateIosChrome">
  <obsolete>
    Obsolete 4/2018, Physical Web is disabled (crbug.com/826540).
  </obsolete>
  <owner>cco3@chromium.org</owner>
  <owner>mattreynolds@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <summary>Initial state of the Physical Web in Chrome for iOS.</summary>
</histogram>

<histogram name="PhysicalWeb.ReferralDelay.OptInNotification" units="ms">
  <obsolete>
    Deprecated 01/2017, no longer used
  </obsolete>
  <owner>cco3@chromium.org</owner>
  <owner>mattreynolds@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <summary>
    Time between the most recent opt in notification update and when the user
    arrives at the ListUrlsActivity.
  </summary>
</histogram>

<histogram name="PhysicalWeb.ReferralDelay.StandardNotification" units="ms">
  <obsolete>
    Deprecated 01/2017, no longer used
  </obsolete>
  <owner>cco3@chromium.org</owner>
  <owner>mattreynolds@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <summary>
    Time between the most recent standard notification update and when the user
    arrives at the ListUrlsActivity.
  </summary>
</histogram>

<histogram name="PhysicalWeb.ResolveTime.Background" units="ms">
  <obsolete>
    Obsolete 4/2018, Physical Web is disabled (crbug.com/826540).
  </obsolete>
  <owner>cco3@chromium.org</owner>
  <owner>mattreynolds@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <summary>
    Round trip time to the metadata server for a Physical Web URL resolution
    which the client requests during a background scan.
  </summary>
</histogram>

<histogram name="PhysicalWeb.ResolveTime.Foreground" units="ms">
  <obsolete>
    Obsolete 4/2018, Physical Web is disabled (crbug.com/826540).
  </obsolete>
  <owner>cco3@chromium.org</owner>
  <owner>mattreynolds@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <summary>
    Round trip time to the metadata server for a Physical Web URL resolution
    which the client requests during a foreground scan, that is not explicitly
    requested via a refresh.
  </summary>
</histogram>

<histogram name="PhysicalWeb.ResolveTime.Refresh" units="ms">
  <obsolete>
    Obsolete 4/2018, Physical Web is disabled (crbug.com/826540).
  </obsolete>
  <owner>cco3@chromium.org</owner>
  <owner>mattreynolds@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <summary>
    Round trip time to the metadata server for a Physical Web URL resolution
    which the client requests during a foreground scan, that is explicitly
    requested via a refresh.
  </summary>
</histogram>

<histogram name="PhysicalWeb.RoundTripTimeMilliseconds" units="ms">
  <obsolete>
    Obsolete 4/2018, Physical Web is disabled (crbug.com/826540).
  </obsolete>
  <owner>olivierrobin@chromium.org</owner>
  <summary>Round trip time to the metadata server for Physical web.</summary>
</histogram>

<histogram name="PhysicalWeb.State.Bluetooth" enum="BluetoothStatus">
  <obsolete>
    Obsolete 4/2018, Physical Web is disabled (crbug.com/826540).
  </obsolete>
  <owner>cco3@chromium.org</owner>
  <owner>mattreynolds@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <summary>Whether bluetooth is on, off, or unknown.</summary>
</histogram>

<histogram name="PhysicalWeb.State.DataConnectionActive" enum="BooleanActive">
  <obsolete>
    Obsolete 4/2018, Physical Web is disabled (crbug.com/826540).
  </obsolete>
  <owner>cco3@chromium.org</owner>
  <owner>mattreynolds@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <summary>Whether the data connection is active.</summary>
</histogram>

<histogram name="PhysicalWeb.State.LocationPermission" enum="BooleanAccepted">
  <obsolete>
    Obsolete 4/2018, Physical Web is disabled (crbug.com/826540).
  </obsolete>
  <owner>cco3@chromium.org</owner>
  <owner>mattreynolds@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <summary>Whether location permission has been accepted.</summary>
</histogram>

<histogram name="PhysicalWeb.State.LocationServices" enum="BooleanEnabled">
  <obsolete>
    Obsolete 4/2018, Physical Web is disabled (crbug.com/826540).
  </obsolete>
  <owner>cco3@chromium.org</owner>
  <owner>mattreynolds@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <summary>Whether location services are enabled.</summary>
</histogram>

<histogram name="PhysicalWeb.State.Preference"
    enum="PhysicalWebPreferenceStatus">
  <obsolete>
    Obsolete 4/2018, Physical Web is disabled (crbug.com/826540).
  </obsolete>
  <owner>cco3@chromium.org</owner>
  <owner>mattreynolds@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <summary>
    Whether the preference is on, off, or if the user is in an onboarding state
    when Chrome first starts up.
  </summary>
</histogram>

<histogram name="PhysicalWeb.TotalUrls.OnInitialDisplay" units="urls">
  <obsolete>
    Obsolete 4/2018, Physical Web is disabled (crbug.com/826540).
  </obsolete>
  <owner>cco3@chromium.org</owner>
  <owner>mattreynolds@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <summary>
    The number of URLs displayed to a user when a list of nearby URLs is first
    displayed.
  </summary>
</histogram>

<histogram name="PhysicalWeb.TotalUrls.OnRefresh" units="urls">
  <obsolete>
    Obsolete 4/2018, Physical Web is disabled (crbug.com/826540).
  </obsolete>
  <owner>cco3@chromium.org</owner>
  <owner>mattreynolds@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <summary>
    The number of URLs displayed to a user when a list of nearby URLs is
    displayed after refreshing.
  </summary>
</histogram>

<histogram name="PhysicalWeb.WebUI.ListViewUrlPosition" units="selections">
  <obsolete>
    Obsolete 4/2018, Physical Web is disabled (crbug.com/826540).
  </obsolete>
  <owner>cco3@chromium.org</owner>
  <owner>mattreynolds@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <summary>
    Count of how many times the user selected a nearby URL at the specified
    index in the Physical Web WebUI list view (zero-based). Capped at 50.
  </summary>
</histogram>

<histogram name="Platform.AnyCrashesDaily" units="count per day">
  <owner>semenzato@chromium.org</owner>
  <owner>bsimonnet@chromium.org</owner>
  <summary>
    Count of crashes (user, kernel, and unclean shutdowns) during the previous
    day, or the most recent day the device was in use.  Reported at most once a
    day.
  </summary>
</histogram>

<histogram name="Platform.AnyCrashesWeekly" units="count per week">
  <owner>semenzato@chromium.org</owner>
  <owner>bsimonnet@chromium.org</owner>
  <summary>
    Count of crashes (user, kernel, and unclean shutdowns) during the previous
    epoch-week, or the most recent epoch-week the device was in use.  Reported
    at most once a week.  Epoch-weeks divide the time in 7-day intervals
    starting at the UNIX epoch.
  </summary>
</histogram>

<histogram name="Platform.AsvGroup" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS (ARM Chromebooks using Exynos 5250 only) Adaptive Support Voltage
    Group, recorded once per bootup.  Indicates which &quot;bin&quot; the SoC is
    part of, which sets the voltage that different rails on the system will run
    at. The values 0-11 are valid.  A value of 12 indicates an error parsing
    dmesg and should be investigated.  See also Platform.LotIdEnum.
  </summary>
</histogram>

<histogram name="Platform.BatteryAbsent" enum="BooleanAbsent">
  <owner>cernekee@chromium.org</owner>
  <summary>
    Indicates whether the kernel's ACPI Smart Battery System driver logged an
    error trying to find the battery on boot.
  </summary>
</histogram>

<histogram name="Platform.BootMode.DevSwitch"
    enum="Platform.BootMode.SwitchStatus">
  <owner>mnissler@chromium.org</owner>
  <summary>
    Indicates the status of the developer switch on Chrome OS hardware. The
    developer switch allows users to run their own code on the device.
  </summary>
</histogram>

<histogram name="Platform.BootMode.FirmwareWriteProtect"
    enum="Platform.BootMode.FirmwareWriteProtect">
  <owner>mnissler@chromium.org</owner>
  <summary>
    On Chrome OS hardware, indicates whether flash write protection is enabled
    for the firmware indicated by the histogram suffix.
  </summary>
</histogram>

<histogram name="Platform.BootMode.WriteProtectSwitch"
    enum="Platform.BootMode.SwitchStatus">
  <owner>mnissler@chromium.org</owner>
  <summary>
    Indicates the status of the hardware write protect switch on Chrome OS
    hardware. The write protect switch protects firmware from being rewritten.
  </summary>
</histogram>

<histogram name="Platform.BootSectorsRead">
  <owner>sonnyrao@chromium.org</owner>
  <summary>
    Chrome OS number of disk sectors read at boot from kernel start to
    login-prompt-ready.
  </summary>
</histogram>

<histogram name="Platform.BootSectorsWritten">
  <owner>sonnyrao@chromium.org</owner>
  <summary>
    Chrome OS number of disk sectors written at boot from kernel start to
    login-prompt-ready.
  </summary>
</histogram>

<histogram name="Platform.Cast.MeminfoMemAvailable">
  <owner>halliwell@chromium.org</owner>
  <summary>
    /proc/meminfo's 'MemAvailable' in Mbytes. Collected on Cast devices with
    kernel version 3.14 and above and capped at 500.
  </summary>
</histogram>

<histogram name="Platform.Cast.MeminfoMemFreeDerived">
  <owner>halliwell@chromium.org</owner>
  <summary>
    free + buffers + cache memory in Mbytes on Cast devices, capped at 500.
  </summary>
</histogram>

<histogram name="Platform.CompressedSwapSize" units="MB">
  <owner>sonnyrao@chromium.org</owner>
  <summary>
    Chrome OS size of allocated swap area in megabytes (before compression)
  </summary>
</histogram>

<histogram name="Platform.CpuFrequencyThermalScaling" units="%">
  <owner>sonnyrao@chromium.org</owner>
  <summary>
    CPU frequency as percent of the baseline frequency, sampled every 30s. This
    may be throttled down from 100% due to power dissipation issues (too high
    temperature).  It may also be throttled up (turbo), but the kernel does not
    report the actual turbo frequency, so we put such samples in the 101%
    bucket.
  </summary>
</histogram>

<histogram name="Platform.CpuUsage" units="%">
  <owner>sonnyrao@chromium.org</owner>
  <owner>cast-analytics@google.com</owner>
  <summary>
    Peak total (single core) CPU usage for the last sample interval.  The sample
    interval may vary from seconds to several minutes.
  </summary>
</histogram>

<histogram name="Platform.Cr50.BoardIdFlags" enum="Cr50BoardIdFlags">
  <owner>vbendeb@chromium.org</owner>
  <summary>
    A sparse histogram of values of Board ID flags programmed in H1 devices in
    the field. Board ID flags is a 32 bit field, and while there only are a few
    expected values, conceivably any bit combination could be encountered.
  </summary>
</histogram>

<histogram name="Platform.Cr50.BoardIdOfRlzMismatch" enum="Cr50CrosRlzCodes">
  <owner>vbendeb@chromium.org</owner>
  <summary>
    A sparse histogram of values indexed by 4 byte Board ID code programmed in
    H1 reported by devices where there is a mismatch between the RLZ code and
    the Board ID value programmed in the H1.
  </summary>
</histogram>

<histogram name="Platform.Cr50.MatchingBoardId" enum="Cr50CrosRlzCodes">
  <owner>vbendeb@chromium.org</owner>
  <summary>
    A sparse histogram of values indexed by 4 byte Board ID code programmed in
    H1, reported by devices where there is no mismatch between the RLZ code and
    the Board ID value.
  </summary>
</histogram>

<histogram name="Platform.Cr50.RlzOfBoardIdMismatch" enum="Cr50CrosRlzCodes">
  <owner>vbendeb@chromium.org</owner>
  <summary>
    A sparse histogram of values indexed by 4 byte RLZ code reported by devices
    where there is a mismatch between the RLZ code and the Board ID value
    programmed in the H1. Since RLZ code could be misprogrammed, a sparse
    histogram is used to allow keeping track of outliers.
  </summary>
</histogram>

<histogram name="Platform.CrOSEvent" enum="CrosEventEnum">
  <owner>dkrahn@chromium.org</owner>
  <owner>jwerner@chromium.org</owner>
  <owner>vapier@chromium.org</owner>
  <summary>
    Generic event of interest from Chrome OS.  Intended mainly to help assess
    the frequency of rare error conditions.
  </summary>
</histogram>

<histogram name="Platform.Crouton.Started" enum="Platform.Crouton.Started">
  <owner>drinkcat@chromium.org</owner>
  <summary>
    Detects presence of /run/crouton, indicating that crouton has been started
    since the previous boot. Value 0/&quot;Total count&quot; is reported on
    boot, 1/&quot;Started&quot; is reported after the file presence is detected
    (checked periodically).
  </summary>
</histogram>

<histogram name="Platform.CumulativeCpuTime" units="seconds">
  <owner>semenzato@chromium.org</owner>
  <owner>bsimonnet@chromium.org</owner>
  <summary>
    Total CPU time accumulated since the last version update.  Reported at most
    once a day.
  </summary>
</histogram>

<histogram name="Platform.CumulativeUseTime" units="seconds">
  <owner>semenzato@chromium.org</owner>
  <owner>bsimonnet@chromium.org</owner>
  <summary>
    Total use time (device ON and not asleep) since last version update.
    Reported at most once a day.
  </summary>
</histogram>

<histogram name="Platform.DailyUseTime" units="seconds">
  <owner>semenzato@chromium.org</owner>
  <owner>bsimonnet@chromium.org</owner>
  <summary>
    Total use time (device ON and not asleep) in the previous day, or the most
    recent day the device was in use.  Reported at most once a day.
  </summary>
</histogram>

<histogram name="Platform.DetachableBase.ActivePercent" units="%">
  <owner>kitching@google.com</owner>
  <summary>
    Ratio of time a detachable base keyboard is active, i.e. when the USB
    interface is not auto-suspended.  Reported every 30 seconds when the base is
    connected.
  </summary>
</histogram>

<histogram name="Platform.DetachableBase.AttachedOnBoot" enum="BooleanAttached">
  <owner>kitching@google.com</owner>
  <summary>
    For devices with a detachable base: whether or not the base is connected on
    boot.  Recorded by upstart task on boot.
  </summary>
</histogram>

<histogram name="Platform.DetachableBase.PairResult"
    enum="DetachableBasePairResult">
  <owner>kitching@google.com</owner>
  <summary>Result of a detachable base pair operation.</summary>
</histogram>

<histogram name="Platform.DetachableBase.PendingRWUpdate"
    enum="DetachableBasePendingRWUpdate">
  <owner>kitching@google.com</owner>
  <summary>
    Detachable base firmware updates can be configured to only occur on boot. In
    this mode, any update will be considered &quot;pending&quot; until the
    system is rebooted, at which point the update may take place.  Every time a
    detachable base is connected to the system, a metric representing the
    pending update status is recorded.  Its possible values are as follows: (0)
    communication error; (1) no update available; (2) critical update available;
    or (3) non-critical update available.  The definition of
    &quot;critical&quot; is up to the software performing updates, and would
    typically be used in the case of a security issue, or broken functionality
    in a previous firmware version.
  </summary>
</histogram>

<histogram name="Platform.DetachableBase.ROUpdateResult"
    enum="DetachableBaseROUpdateResult">
  <owner>kitching@google.com</owner>
  <summary>Result of a detachable base RO firmware update.</summary>
</histogram>

<histogram name="Platform.DetachableBase.RWUpdateResult"
    enum="DetachableBaseRWUpdateResult">
  <owner>kitching@google.com</owner>
  <summary>Result of a detachable base RW firmware update.</summary>
</histogram>

<histogram name="Platform.DiskUsage.Cache_Avg" units="KB">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Average size of user's Cache directory. Logged once a day, if disk usage is
    high.
  </summary>
</histogram>

<histogram name="Platform.DiskUsage.Cache_Max" units="KB">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Maximum size of user's Cache directory. Logged once a day, if disk usage is
    high.
  </summary>
</histogram>

<histogram name="Platform.DiskUsage.Downloads_Avg" units="KB">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Average size of user's Cache directory. Logged once a day, if disk usage is
    high.
  </summary>
</histogram>

<histogram name="Platform.DiskUsage.Downloads_Max" units="KB">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Maximum size of user's Cache directory. Logged once a day, if disk usage is
    high.
  </summary>
</histogram>

<histogram name="Platform.DiskUsage.GCache_Avg" units="KB">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Average size of user's GCache directory. Logged once a day, if disk usage is
    high.
  </summary>
</histogram>

<histogram name="Platform.DiskUsage.GCache_Max" units="KB">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Maximum size of user's GCache directory. Logged once a day, if disk usage is
    high.
  </summary>
</histogram>

<histogram name="Platform.DiskUsage.LeastUsedAccountDays" units="days">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Days since the least frequently used account signed in. Logged once a day,
    if disk usage is high.
  </summary>
</histogram>

<histogram name="Platform.DiskUsage.NumUserHomeDirectories"
    units="home directories">
  <owner>achuith@chromium.org</owner>
  <owner>tls@chromium.org</owner>
  <summary>
    Number of users home directories on the device. Logged once a day.
  </summary>
</histogram>

<histogram name="Platform.DiskUsage.OldestUserOnDevice">
  <owner>achuith@chromium.org</owner>
  <owner>omrilio@chromium.org</owner>
  <summary>
    Days since last login of the least recently user on device. Logged once a
    day, if disk usage is high.
  </summary>
</histogram>

<histogram name="Platform.DiskUsage.UsersOnDevice">
  <owner>achuith@chromium.org</owner>
  <owner>omrilio@chromium.org</owner>
  <summary>
    Number of user home dirs on device. Logged once a day, if disk usage is
    high.
  </summary>
</histogram>

<histogram name="Platform.DiskUsageChronos" units="KB">
  <owner>keescook@google.com</owner>
  <summary>
    Chrome OS KB in use in the /home/chronos filesystem tree. Logged once a day
    during log file cleanup.
  </summary>
</histogram>

<histogram name="Platform.DiskUsageVar" units="KB">
  <owner>keescook@google.com</owner>
  <summary>
    Chrome OS KB in use in the /var filesystem tree. Logged once a day during
    log file cleanup.
  </summary>
</histogram>

<histogram name="Platform.Emmc.LifeUsed" enum="EmmcLifeUsed">
  <owner>gwendal@google.com</owner>
  <summary>
    eMMC [5.0] Device life time estimation for flash. This field provides an
    estimated indication about the device life time that is reflected by the
    averaged wear out of memory of a given type relative to its maximum
    estimated lifetime.
  </summary>
</histogram>

<histogram name="Platform.FileSystem.ErrorCount">
  <owner>gwendal@google.com</owner>
  <summary>
    Number of file system errors, as reported by dumpe2fs &quot;FS Error
    count&quot; field. Reported once per boot.
  </summary>
</histogram>

<histogram name="Platform.FileSystem.FsckNeeded" enum="Boolean">
  <owner>gwendal@google.com</owner>
  <summary>
    True when kernel reports that the file system needs deep recovery. File
    system has corruption the kernel can not fix by itself. Reported once per
    boot.
  </summary>
</histogram>

<histogram name="Platform.FileSystem.RecoveryNeeded" enum="Boolean">
  <owner>gwendal@google.com</owner>
  <summary>
    True when kernel reports that the file system needed recovery at boot. It
    indicates the filesytem was not properly unmounted, but was recovered.
    Reported once per boot.
  </summary>
</histogram>

<histogram name="Platform.IntelMaxMicroArchitecture"
    enum="IntelMaxMicroArchitecture">
  <owner>fbarchard@chromium.org</owner>
  <summary>
    The maximum supported micro-architecture on an Intel platform.  This value
    is logged at program start time.
  </summary>
</histogram>

<histogram name="Platform.KernelCrashesDaily" units="count per day">
  <owner>semenzato@chromium.org</owner>
  <owner>bsimonnet@chromium.org</owner>
  <summary>
    Count of kernel crashes during the previous day, or the most recent day the
    device was in use.  Reported at most once a day.
  </summary>
</histogram>

<histogram name="Platform.KernelCrashesPerActiveYear" units="count per year">
  <owner>semenzato@chromium.org</owner>
  <owner>bsimonnet@chromium.org</owner>
  <summary>
    Count of kernel crashes since the last OS update, normalized as number of
    crashes per year of active use (active use = device is ON and not asleep).
    Reported daily.
  </summary>
</histogram>

<histogram name="Platform.KernelCrashesPerCpuYear" units="count per CPU year">
  <owner>semenzato@chromium.org</owner>
  <owner>bsimonnet@chromium.org</owner>
  <summary>
    Count of kernel crashes since the last OS update, normalized as number
    crashes per year of CPU time.  Reported daily.
  </summary>
</histogram>

<histogram name="Platform.KernelCrashesSinceUpdate" units="count">
  <owner>semenzato@chromium.org</owner>
  <owner>bsimonnet@chromium.org</owner>
  <summary>
    Count of kernel crashes since the last OS update, reported daily.
  </summary>
</histogram>

<histogram name="Platform.KernelCrashesWeekly" units="count per week">
  <owner>semenzato@chromium.org</owner>
  <owner>bsimonnet@chromium.org</owner>
  <summary>
    Count of kernel crashes during the previous epoch-week, or the most recent
    epoch-week the device was in use.  Reported at most once a week. Epoch-weeks
    divide the time in 7-day intervals starting at the UNIX epoch.
  </summary>
</histogram>

<histogram name="Platform.KernelCrashInterval" units="seconds">
  <owner>semenzato@chromium.org</owner>
  <owner>bsimonnet@chromium.org</owner>
  <summary>
    Time elapsed between the last two kernel crashes.  Sent after every kernel
    crash.
  </summary>
</histogram>

<histogram name="Platform.KernelWarningHashes" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The 32-bit hash of a kernel warning.  This is the hash of the
    &quot;file:line&quot; string corresponding to the location of the warning,
    for instance: &quot;/mnt/host/source/src/third_party/kernel/files/drivers
    /gpu/drm/i915/intel_dp.c:351&quot; (ignore spurious spaces).  The hash is
    produced by this code: while (*string) hash = (hash &lt;&lt; 5) + hash +
    *string++;  Separately each warning is also collected (with its hash) via
    the crash reporter, but only its first occurrence in each boot session.
  </summary>
</histogram>

<histogram name="Platform.LogicalCpuCount">
  <owner>sonnyrao@chromium.org</owner>
  <summary>
    Number of logical processors. This includes Hyperthreaded cores.
  </summary>
</histogram>

<histogram name="Platform.LotIdEnum" enum="Exynos5250LotIdEnum"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS (ARM Chromebooks using Exynos 5250 only) indication about whether
    we're part of a special lot ID.  Special lot IDs are groups of chips that
    have special case handling in the kernel for the Adaptive Support Voltage
    code (the normal logic doesn't work).  See also Platform.AsvGroup.  Note
    that fused devices are never part of a special lot (currently) and only some
    unfused lots are &quot;special&quot;.
  </summary>
</histogram>

<histogram name="Platform.Mem" units="%">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <owner>sonnyrao@chromium.org</owner>
  <owner>semenzato@chromium.org</owner>
  <owner>bccheng@chromium.org</owner>
  <summary>
    Various memory usage % of total memory on Chrome OS devices (snapshotted
    every 30s).
  </summary>
</histogram>

<histogram name="Platform.Meminfo" units="KB">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <owner>sonnyrao@chromium.org</owner>
  <owner>semenzato@chromium.org</owner>
  <owner>bccheng@chromium.org</owner>
  <summary>
    Various memory usage amount on Chrome OS devices (snapshotted every 30s).
  </summary>
</histogram>

<histogram name="Platform.MemoryBandwidth.ReadWrite" units="MB/s">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <owner>cast-analytics@google.com</owner>
  <summary>
    Peak memory bandwith (read and write) usage during the last sample interval.
    The sample interval may vary from seconds to several minutes.
  </summary>
</histogram>

<histogram name="Platform.MemuseAnon0">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Chrome OS total anonymous memory (active + inactive) as % of total memory 1
    minute after boot.
  </summary>
</histogram>

<histogram name="Platform.MemuseAnon1">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Chrome OS total anonymous memory (active + inactive) as % of total memory 5
    minutes after boot.
  </summary>
</histogram>

<histogram name="Platform.MemuseAnon2">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Chrome OS total anonymous memory (active + inactive) as % of total memory 30
    minutes after boot.
  </summary>
</histogram>

<histogram name="Platform.MemuseAnon3">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Chrome OS total anonymous memory (active + inactive) as % of total memory
    150 minutes after boot.
  </summary>
</histogram>

<histogram name="Platform.MemuseAnon4">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Chrome OS total anonymous memory (active + inactive) as % of total memory
    750 minutes after boot.
  </summary>
</histogram>

<histogram name="Platform.MountEncrypted.EncryptionKeyStatus"
    enum="MountEncryptedEncryptionKeyStatus">
  <owner>apronin@chromium.org</owner>
  <owner>mnissler@chromium.org</owner>
  <summary>
    File system encryption key status for the encrypted stateful file system on
    Chrome OS. The encryption key is the one that is used by the kernel to
    protect actual file contents on disk.
  </summary>
</histogram>

<histogram name="Platform.MountEncrypted.SystemKeyStatus"
    enum="MountEncryptedSystemKeyStatus">
  <owner>apronin@chromium.org</owner>
  <owner>mnissler@chromium.org</owner>
  <summary>
    Type/Origin of the system key used for the encrypted stateful file system on
    Chrome OS. This key is used to wrap the actual file system encryption key.
  </summary>
</histogram>

<histogram name="Platform.PageFaultsLong" units="page faults/second">
  <owner>sonnyrao@chromium.org</owner>
  <summary>
    Page faults per second averaged over 30s interval, sampled continuously.
  </summary>
</histogram>

<histogram name="Platform.PageFaultsShort" units="page faults/second">
  <owner>sonnyrao@chromium.org</owner>
  <summary>
    Page faults per second averaged over 1s interval, sampled every 30s.
  </summary>
</histogram>

<histogram name="Platform.ReadSectorsLong">
  <owner>gwendal@google.com</owner>
  <summary>
    Number of disk sectors per second read by Chrome OS in a long interval
    (currently 30s)
  </summary>
</histogram>

<histogram name="Platform.ReadSectorsShort">
  <owner>gwendal@google.com</owner>
  <summary>
    Number of disk sectors per second read by Chrome OS in a short interval
    (currently 1s, sampled every 30s)
  </summary>
</histogram>

<histogram name="Platform.ServiceFailureHashes">
  <owner>ddavenport@chromium.org</owner>
  <summary>
    The 32-bit hash of the name of the service that failed. The name of the
    service is hashed using the same algorithm as used for the hashes in
    Platform.KernelWarningHashes. The first instance of each service failure is
    also collected separately via the crash reporter.
  </summary>
</histogram>

<histogram name="Platform.SmartTransferErrors">
  <owner>gwendal@google.com</owner>
  <summary>Disk communication errors (SMART 199), sent at boot.</summary>
</histogram>

<histogram name="Platform.SmartUncorrectableErrors">
  <owner>gwendal@google.com</owner>
  <summary>Uncorrectable disk errors (SMART 187), sent at boot.</summary>
</histogram>

<histogram name="Platform.SpringChargerType">
  <owner>vpalatin@google.com</owner>
  <summary>
    USB device ID of the charger plugged into a Spring device (if any), sent
    once a minute.  The Device ID is composed from the following 4 8-bit
    registers of the TSU6721 chip: ADC (07h), Device Type 3 (15h), Device Type 2
    (0Bh), Device Type 1 (0Ah).  Device Type 1/2/3 is a bitmap and most of bits
    are mutually exclusive (excepted VBUS debounce).  ADC is the 5-bit value of
    the ID pin, but for most types (as in Device Type), there are only one or
    two possible ID pin connections/values. The datasheet can be found here:
    http://www.ti.com/lit/ds/symlink/tsu6721.pdf.

    Note that different brand/models of the charger can have the same ID.
  </summary>
</histogram>

<histogram name="Platform.StatefulUsage" units="%">
  <owner>achuith@chromium.org</owner>
  <owner>omrilio@chromium.org</owner>
  <summary>Chrome OS stateful partition usage level.</summary>
</histogram>

<histogram name="Platform.Storage.Flash.BadBlocks">
  <owner>dehrenberg@chromium.org</owner>
  <owner>cast-analytics@google.com</owner>
  <summary>
    The number of blocks marked bad in an MTD partition. This is relevant for
    devices with raw NAND flash, such as Chromecast. Sampled once daily, if the
    Chromecast is on for any significant length of time in the day.
  </summary>
</histogram>

<histogram name="Platform.SwapInLong" units="pages/second">
  <owner>sonnyrao@chromium.org</owner>
  <summary>
    Average pages/second swapped IN over a 30s interval, sampled every 30s.
  </summary>
</histogram>

<histogram name="Platform.SwapInShort" units="pages/second">
  <owner>sonnyrao@chromium.org</owner>
  <summary>
    Average pages/second swapped IN over a 1s interval, sampled every 30s.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time1" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time2" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time3" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time4" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time1" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time2" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time3" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time4" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time1" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time2" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time3" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time4" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time1" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time2" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time3" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time4" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Faults.Swap0.Time1"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Faults.Swap0.Time2"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Faults.Swap0.Time3"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Faults.Swap0.Time4"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Faults.Swap1.Time1"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Faults.Swap1.Time2"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Faults.Swap1.Time3"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Faults.Swap1.Time4"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Faults.Swap2.Time1"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Faults.Swap2.Time2"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Faults.Swap2.Time3"
    units="page faults/second">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Faults.Swap2.Time4"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Faults.Swap3.Time1"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Faults.Swap3.Time2"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Faults.Swap3.Time3"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.Scroll.Faults.Swap3.Time4"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time1" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a tab
    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time2" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a tab
    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time3" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a tab
    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time4" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a tab
    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time1" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a tab
    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time2" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a tab
    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time3" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a tab
    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time4" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a tab
    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time1" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a tab
    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time2" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a tab
    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time3" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a tab
    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time4" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a tab
    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time1" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a tab
    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time2" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a tab
    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time3" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a tab
    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time4" units="%">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    CPU utilization for the specified swap group and time interval after a tab
    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap0.Time1"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap0.Time2"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap0.Time3"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap0.Time4"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap1.Time1"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap1.Time2"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap1.Time3"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap1.Time4"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap2.Time1"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap2.Time2"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap2.Time3"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap2.Time4"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap3.Time1"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap3.Time2"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap3.Time3"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap3.Time4"
    units="page faults/second">
  <obsolete>
    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Page faults/second for the specified swap group and time interval after a
    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
  </summary>
</histogram>

<histogram name="Platform.SwapOutLong" units="pages/second">
  <owner>sonnyrao@chromium.org</owner>
  <summary>
    Average pages/second swapped OUT over a 30s interval, sampled every 30s.
  </summary>
</histogram>

<histogram name="Platform.SwapOutShort" units="pages/second">
  <owner>sonnyrao@chromium.org</owner>
  <summary>
    Average pages/second swapped OUT over a 1s interval, sampled every 30s.
  </summary>
</histogram>

<histogram name="Platform.Temperature.Sensor00" units="Celsius"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Temperature reading at sensor 0 (I2C_CPU-Die) taken every 30s.
  </summary>
</histogram>

<histogram name="Platform.Temperature.Sensor01" units="Celsius">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Temperature reading at sensor 1 (I2C_CPU-Object) taken every 30s.
  </summary>
</histogram>

<histogram name="Platform.Temperature.Sensor02" units="Celsius"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Temperature reading at sensor 2 (I2C_PCH-Die) taken every 30s.
  </summary>
</histogram>

<histogram name="Platform.Temperature.Sensor03" units="Celsius"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Temperature reading at sensor 3 (I2C_PCH-Object) taken every 30s.
  </summary>
</histogram>

<histogram name="Platform.Temperature.Sensor04" units="Celsius"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Temperature reading at sensor 4 (I2C_DDR-Die) taken every 30s.
  </summary>
</histogram>

<histogram name="Platform.Temperature.Sensor05" units="Celsius"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Temperature reading at sensor 5 (I2C_DDR-Object) taken every 30s.
  </summary>
</histogram>

<histogram name="Platform.Temperature.Sensor06" units="Celsius"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Temperature reading at sensor 6 (Charger-Die), taken every 30s.
  </summary>
</histogram>

<histogram name="Platform.Temperature.Sensor07" units="Celsius"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Temperature reading at sensor 7 (Charger-Object) taken every 30s.
  </summary>
</histogram>

<histogram name="Platform.Temperature.Sensor08" units="Celsius"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Temperature reading at sensor 8 (ECInternal) taken every 30s.
  </summary>
</histogram>

<histogram name="Platform.Temperature.Sensor09" units="Celsius"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Temperature reading at sensor 9 (PECI) taken every 30s.</summary>
</histogram>

<histogram name="Platform.Thermal.Temperature.Cpu.0" units="Celsius">
  <owner>mka@chromium.org</owner>
  <summary>
    Temperature reading at sensor 0 of the CPU collected every few seconds (may
    vary between devices).

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="Platform.Thermal.Temperature.Wifi0" units="Celsius">
  <owner>mka@chromium.org</owner>
  <summary>
    Temperature reading at wireless interface 0 collected every few seconds (may
    vary between devices).

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="Platform.Thermal.Temperature.Wifi1" units="Celsius">
  <owner>mka@chromium.org</owner>
  <summary>
    Temperature reading at wireless interface 1 collected every few seconds (may
    vary between devices).

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="Platform.Thermal.Temperature.Wifi2" units="Celsius">
  <owner>mka@chromium.org</owner>
  <summary>
    Temperature reading at wireless interface 2 collected every few seconds (may
    vary between devices).

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="Platform.Thermal.Zone.Cpu.States" units="Thermal state">
  <owner>mka@chromium.org</owner>
  <summary>
    State of the thermal zone of the CPU collected every second. State depends
    on device, higher state corresponds to a higher temperature.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="Platform.Thermal.Zone.Wifi0.States" units="Thermal state">
  <owner>mka@chromium.org</owner>
  <summary>
    State of the thermal zone of wireless interface 0 collected every second.
    State depends on device, higher state corresponds to a higher temperature.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="Platform.Thermal.Zone.Wifi1.States" units="Thermal state">
  <owner>mka@chromium.org</owner>
  <summary>
    State of the thermal zone of wireless interface 1 collected every second.
    State depends on device, higher state corresponds to a higher temperature.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="Platform.Thermal.Zone.Wifi2.States" units="Thermal state">
  <owner>mka@chromium.org</owner>
  <summary>
    State of the thermal zone of wireless interface 2 collected every second.
    State depends on device, higher state corresponds to a higher temperature.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="Platform.TPM.AuthErrorCode" enum="TPMResultCodeEnum">
  <owner>semenzato@chromium.org</owner>
  <summary>
    Each sample is the result code of a TPM authorized command issued through
    tcsd.  Success is 0.  For the other error codes, see
    /usr/include/tss/tpm_error.h.
  </summary>
</histogram>

<histogram name="Platform.TPM.DictionaryAttackCounter">
  <owner>dkrahn@chromium.org</owner>
  <summary>
    Each sample is the value of the TPM dictionary attack counter reported at
    boot and hourly while running.  Any non-zero value is unexpected.
  </summary>
</histogram>

<histogram name="Platform.TPM.DictionaryAttackResetStatus"
    enum="CrosTPMDictionaryAttackResetStatusEnum">
  <owner>dkrahn@chromium.org</owner>
  <summary>
    Each sample is the status of an hourly attempt to reset the TPM dictionary
    attack counter.
  </summary>
</histogram>

<histogram name="Platform.TPM.ErrorCode" enum="TPMResultCodeEnum">
  <owner>semenzato@chromium.org</owner>
  <summary>
    Each sample is the result code of a TPM command issued through tcsd. Success
    is 0.  For the other error codes, see /usr/include/tss/tpm_error.h.
  </summary>
</histogram>

<histogram name="Platform.TPM.FirmwareUpdate.Attempts" units="attempts">
  <owner>mnissler@chromium.org</owner>
  <summary>
    Number of attempts until a successful TPM firmware update. This is the total
    sum of attempts, i.e. number of failed attempts + 1 for the final successful
    attempt. Note that we're not in a position to report UMA after failed
    attempts, so this will only be reported by devices that eventually see a
    successful attempt.
  </summary>
</histogram>

<histogram name="Platform.TPM.FirmwareUpdate.Result"
    enum="TPMFirmwareUpdateResult">
  <owner>mnissler@chromium.org</owner>
  <summary>Status of a complete TPM firmware update attempt.</summary>
</histogram>

<histogram name="Platform.TPM.FirmwareUpdate.Status"
    enum="TPMFirmwareUpdateStatus">
  <owner>mnissler@chromium.org</owner>
  <summary>Exit status of the TPM firmware updater script.</summary>
</histogram>

<histogram name="Platform.TPM.HardwareAlerts" enum="PlatformTPMHardwareAlerts">
  <owner>anatol@google.com</owner>
  <summary>
    Trusted Platform Module hardware alerts that signal about the chip abnormal
    situation.
  </summary>
</histogram>

<histogram name="Platform.TPM.VersionFingerprint" enum="TPMVersionFingerprint">
  <owner>mnissler@chromium.org</owner>
  <summary>
    Indicates a fingerprint of hardware + firmware versions for the TPM chip
    present in a Chrome OS device.
  </summary>
</histogram>

<histogram name="Platform.TPMForcedReboot" units="reboots">
  <owner>dkrahn@chromium.org</owner>
  <summary>
    Each sample is the number of consecutive reboots performed while attempting
    to clear a TPM (Trusted Platform Module) error.
  </summary>
</histogram>

<histogram name="Platform.Tps65090Retries">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Retries needed to enable a FET on tps65090 (AKA tpschrome).  Tps65090 is a
    power management unit (PMU) used on many ARM Chromebooks.  Until version ES7
    was rolled into production we would sometimes run into a problem where FET1
    (the FET used to switch on and off the backlight) wouldn't turn on properly.
    This problem was especially prevalent when the voltage was high (like when
    the device was plugged into the wall).  Retrying by turning the FET off and
    on again is nearly always effective, so the kernel will retry up to 5 times
    (currently) and will also log the fact that it needed to retry.  On newest
    kernels (kernel 3.8 and up) a kernel warning will be logged with WARN_ON if
    the FET still failed to turn on after 5 tries. Refer to the kernel warning
    reports to find that information.  For more details about this bug refer to
    http://crbug.com/338657 and http://crosbug.com/p/16009.  Note that we log
    retries on all 7 FETs even though we've only ever seen failures of FET1.
  </summary>
</histogram>

<histogram name="Platform.UncleanShutdownsDaily" units="count per day">
  <owner>semenzato@chromium.org</owner>
  <owner>bsimonnet@chromium.org</owner>
  <summary>
    Count of crashes (unclean shutdown) during the previous day, or the most
    recent day the device was in use.  Reported at most once a day.
  </summary>
</histogram>

<histogram name="Platform.UserCrashesDaily" units="count per day">
  <owner>semenzato@chromium.org</owner>
  <owner>bsimonnet@chromium.org</owner>
  <summary>
    Count of crashes (user) during the previous day, or the most recent day the
    device was in use.  Reported at most once a day.
  </summary>
</histogram>

<histogram name="Platform.Vpd.UnknownKeys">
  <owner>tnagel@chromium.org</owner>
  <summary>
    Number of unknown RW_VPD entries on Chrome OS, sent once per boot.
  </summary>
</histogram>

<histogram name="Platform.WiFiDeviceCount" units="wifi devices">
  <owner>cernekee@chromium.org</owner>
  <owner>semenzato@chromium.org</owner>
  <summary>
    Sample collected 10s after boot, showing how many WiFi interfaces are
    present.
  </summary>
</histogram>

<histogram name="Platform.WiFiStatusAfterForcedPCIRescan" enum="WiFiPCIStatus">
  <owner>rajatja@chromium.org</owner>
  <owner>kirtika@chromium.org</owner>
  <summary>
    Shows the wifi status after the pci bus is rescanned to recover wifi. The UI
    depends on shill noticing that wlan0 is back up, so the only happy case is
    one where shill recognizes wlan0 after the rescan completes.
  </summary>
</histogram>

<histogram name="Platform.WriteSectorsLong">
  <owner>gwendal@google.com</owner>
  <summary>
    Number of disk sectors per second written by Chrome OS in a long interval
    (currently 30s)
  </summary>
</histogram>

<histogram name="Platform.WriteSectorsShort">
  <owner>gwendal@google.com</owner>
  <summary>
    Number of disk sectors per second written by Chrome OS in a short interval
    (currently 1s, sampled every 30s)
  </summary>
</histogram>

<histogram name="Platform.ZramCompressedSize" units="MB">
  <owner>semenzato@google.com</owner>
  <summary>
    Compressed swap size in megabytes.  This is the actual amount of RAM used by
    the system to compress memory (i.e. after compression).  Snapshot every 30s.
  </summary>
</histogram>

<histogram name="Platform.ZramCompressionRatioPercent" units="%">
  <owner>semenzato@google.com</owner>
  <summary>
    The ratio of compressed memory (zram) before and after compression when the
    denominator at least 1 MB. Ratios of interest are between 1 and 6 (typically
    between 2 and 3), and we express them as a percentage (between 100% and
    600%). The size of memory before compression includes zero-filled pages.
    Values close to 100% indicate low compression effectiveness. Snapshot every
    30s.
  </summary>
</histogram>

<histogram name="Platform.ZramSavings" units="MB">
  <owner>semenzato@google.com</owner>
  <summary>
    RAM savings in megabytes from using memory compression.  This is the
    difference between the RAM size before and after compression.  Snapshot
    every 30s.
  </summary>
</histogram>

<histogram name="Platform.ZramZeroPages" units="pages">
  <owner>semenzato@google.com</owner>
  <summary>
    Number of zero-filled pages that the OS is compressing.  A large number
    suggests wasteful allocation.  Snapshot every 30s.
  </summary>
</histogram>

<histogram name="Platform.ZramZeroRatioPercent" units="%">
  <owner>semenzato@google.com</owner>
  <summary>
    The fraction of compressed memory that consists of zero-filled pages.
    Snapshot every 30s.
  </summary>
</histogram>

<histogram name="PlatformFile.FlushTime" units="ms">
  <obsolete>
    Deprecated as of 2016-07 because the histogram's purpose of adding colour to
    the description of File::Flush() has been fulfilled.
  </obsolete>
  <owner>tnagel@chromium.org</owner>
  <summary>The time it takes to run File::Flush().</summary>
</histogram>

<histogram name="PlatformFile.UnknownCreateFileErrors" units="code">
  <obsolete>
    Deprecated as of 2013-05, replaced by
    PlatformFile.UnknownCreateFileErrorsWin in chrome 29.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Errors returned by CreateFile on windows that PlatformFileError doesn't yet
    support.
  </summary>
</histogram>

<histogram name="PlatformFile.UnknownErrors.Posix" enum="PopularOSErrno">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Errors returned by CreateFile on POSIX that PlatformFileError doesn't yet
    support.
  </summary>
</histogram>

<histogram name="PlatformFile.UnknownErrors.Windows" enum="WinGetLastError">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Errors returned by CreateFile on Windows that PlatformFileError doesn't yet
    support.
  </summary>
</histogram>

<histogram name="PLT.Abandoned" enum="Abandoned">
  <obsolete>
    Deprecated as of 2014-06.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Distribution of actual finished pages, vs abandoned pages, where we needed
    to declare a finish time prematurely since the page was being closed
    (exited).
  </summary>
</histogram>

<histogram name="PLT.Abandoned.NoProxy.http" enum="Abandoned">
  <obsolete>
    Deprecated as of 2014-06.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.Abandoned.NoProxy.https" enum="Abandoned">
  <obsolete>
    Deprecated as of 2014-06.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.Abandoned.Proxy.http" enum="Abandoned">
  <obsolete>
    Deprecated as of 2014-06.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.Abandoned.Proxy.https" enum="Abandoned">
  <obsolete>
    Deprecated as of 2014-06.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.Abandoned_ExtensionAdblock" enum="Abandoned">
  <obsolete>
    Deprecated 6/2014. Replaced by Abandoned_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.Abandoned_ExtensionAdblockPlus" enum="Abandoned">
  <obsolete>
    Deprecated 6/2014. Replaced by Abandoned_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.Abandoned_ExtensionWebRequest" enum="Abandoned">
  <obsolete>
    Deprecated as of 2014-06.
  </obsolete>
  <owner>vabr@chromium.org</owner>
  <summary>
    The PLT.Abandoned histogram for pages loaded after WebRequest API was used.
  </summary>
</histogram>

<histogram name="PLT.Abandoned_ExtensionWebRequestAdblock" enum="Abandoned">
  <obsolete>
    Deprecated 6/2014. Replaced by Abandoned_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.Abandoned_ExtensionWebRequestAdblockPlus" enum="Abandoned">
  <obsolete>
    Deprecated 6/2014. Replaced by Abandoned_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.Abandoned_ExtensionWebRequestOther" enum="Abandoned">
  <obsolete>
    Deprecated 6/2014. Replaced by Abandoned_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.Abandoned_SpdyProxy" enum="Abandoned">
  <obsolete>
    Deprecated as of 2014-06.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.AbandonType" enum="AbandonType">
  <obsolete>
    Deprecated as of 2014-06.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Diagnose why a page load was considered abandoned.</summary>
</histogram>

<histogram name="PLT.BeginToCommit" units="ms">
  <obsolete>
    Use PageLoad.Timing2.NavigationToCommit instead.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from &quot;begin&quot; to &quot;commit.&quot;   &quot;Begin&quot;==
    &quot;request&quot; if user requested, and &quot;start&quot; otherwise.
    &quot;Request&quot;== time when user requested document. &quot;Start&quot;==
    time when renderer requested load of document, after any unload of last
    document. &quot;Commit&quot;== time when renderer got first byte of
    document.
  </summary>
</histogram>

<histogram name="PLT.BeginToFinish" units="ms">
  <obsolete>
    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>TBD</summary>
</histogram>

<histogram name="PLT.BeginToFinish_AfterPreconnectRequest" units="ms">
  <obsolete>
    Deprecated as of http://crrev.com/392823002
  </obsolete>
  <owner>kouhei@chromium.org</owner>
  <summary>
    PLT.BeginToFinish, but for pages requested just after a new preconnect
    request.
  </summary>
</histogram>

<histogram name="PLT.BeginToFinish_ContentPrefetcher" units="ms">
  <obsolete>
    No longer needed.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    PLT.BeginToFinish, but for pages which contained prefetch links.
  </summary>
</histogram>

<histogram name="PLT.BeginToFinish_ContentPrefetcherReferrer" units="ms">
  <obsolete>
    No longer needed.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    PLT.BeginToFinish, but for pages which were referred to by pages which
    contained prefetch links.
  </summary>
</histogram>

<histogram name="PLT.BeginToFinish_LinkLoadNormal_ExtensionAdblock" units="ms">
  <obsolete>
    Deprecated 6/2014. Replaced by
    BeginToFinish_LinkLoadNormal_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.BeginToFinish_LinkLoadNormal_ExtensionAdblockPlus"
    units="ms">
  <obsolete>
    Deprecated 6/2014. Replaced by
    BeginToFinish_LinkLoadNormal_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.BeginToFinish_LinkLoadNormal_ExtensionWebRequest"
    units="ms">
  <obsolete>
    No longer needed.
  </obsolete>
  <owner>vabr@chromium.org</owner>
  <summary>
    The PLT.BeginToFinish histogram for pages loaded by following a link, after
    WebRequest API was used.
  </summary>
</histogram>

<histogram name="PLT.BeginToFinish_LinkLoadNormal_ExtensionWebRequestAdblock"
    units="ms">
  <obsolete>
    Deprecated 6/2014. Replaced by
    BeginToFinish_LinkLoadNormal_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram
    name="PLT.BeginToFinish_LinkLoadNormal_ExtensionWebRequestAdblockPlus"
    units="ms">
  <obsolete>
    Deprecated 6/2014. Replaced by
    BeginToFinish_LinkLoadNormal_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.BeginToFinish_LinkLoadNormal_ExtensionWebRequestOther"
    units="ms">
  <obsolete>
    Deprecated 6/2014. Replaced by
    BeginToFinish_LinkLoadNormal_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.BeginToFinish_LinkLoadReload_ExtensionAdblock" units="ms">
  <obsolete>
    Deprecated 6/2014. Replaced by
    BeginToFinish_LinkLoadReload_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.BeginToFinish_LinkLoadReload_ExtensionAdblockPlus"
    units="ms">
  <obsolete>
    Deprecated 6/2014. Replaced by
    BeginToFinish_LinkLoadReload_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.BeginToFinish_LinkLoadReload_ExtensionWebRequest"
    units="ms">
  <obsolete>
    No longer needed.
  </obsolete>
  <owner>vabr@chromium.org</owner>
  <summary>
    The PLT.BeginToFinish histogram for pages reloaded by JavaScript or by
    following a link, after WebRequest API was used.
  </summary>
</histogram>

<histogram name="PLT.BeginToFinish_LinkLoadReload_ExtensionWebRequestAdblock"
    units="ms">
  <obsolete>
    Deprecated 6/2014. Replaced by
    BeginToFinish_LinkLoadReload_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram
    name="PLT.BeginToFinish_LinkLoadReload_ExtensionWebRequestAdblockPlus"
    units="ms">
  <obsolete>
    Deprecated 6/2014. Replaced by
    BeginToFinish_LinkLoadReload_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.BeginToFinish_LinkLoadReload_ExtensionWebRequestOther"
    units="ms">
  <obsolete>
    Deprecated 6/2014. Replaced by
    BeginToFinish_LinkLoadReload_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionAdblock" units="ms">
  <obsolete>
    Deprecated 6/2014. Replaced by
    BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionAdblockPlus"
    units="ms">
  <obsolete>
    Deprecated 6/2014. Replaced by
    BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest"
    units="ms">
  <obsolete>
    No longer needed.
  </obsolete>
  <owner>vabr@chromium.org</owner>
  <summary>
    The PLT.BeginToFinish histogram for pages loads initiated by back/forward
    buttons, or by a change of encoding, after WebRequest API was used.
  </summary>
</histogram>

<histogram name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionWebRequestAdblock"
    units="ms">
  <obsolete>
    Deprecated 6/2014. Replaced by
    BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram
    name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionWebRequestAdblockPlus"
    units="ms">
  <obsolete>
    Deprecated 6/2014. Replaced by
    BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionWebRequestOther"
    units="ms">
  <obsolete>
    Deprecated 6/2014. Replaced by
    BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionAdblock" units="ms">
  <obsolete>
    Deprecated 6/2014. Replaced by BeginToFinish_NormalLoad_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionAdblockPlus" units="ms">
  <obsolete>
    Deprecated 6/2014. Replaced by BeginToFinish_NormalLoad_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionWebRequest" units="ms">
  <obsolete>
    No longer needed.
  </obsolete>
  <owner>vabr@chromium.org</owner>
  <summary>
    The PLT.BeginToFinish histogram for pages loaded by entering a URL or a
    search query into Omnibox, after WebRequest API was used.
  </summary>
</histogram>

<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionWebRequestAdblock"
    units="ms">
  <obsolete>
    Deprecated 6/2014. Replaced by BeginToFinish_NormalLoad_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionWebRequestAdblockPlus"
    units="ms">
  <obsolete>
    Deprecated 6/2014. Replaced by BeginToFinish_NormalLoad_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionWebRequestOther"
    units="ms">
  <obsolete>
    Deprecated 6/2014. Replaced by BeginToFinish_NormalLoad_ExtensionWebRequest.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary/>
</histogram>

<histogram name="PLT.BeginToFinish_SpdyProxy" units="ms">
  <obsolete>
    Use PLT.PT_BeginToFinish_DataReductionProxy instead.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>PLT.BeginToFinish, but for pages fetched over a SPDY proxy.</summary>
</histogram>

<histogram name="PLT.BeginToFinishDoc">
  <obsolete>
    Use PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired instead.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>TBD</summary>
</histogram>

<histogram name="PLT.BeginToFinishDoc_AfterPreconnectRequest" units="ms">
  <obsolete>
    Deprecated as of http://crrev.com/392823002
  </obsolete>
  <owner>kouhei@chromium.org</owner>
  <summary>
    PLT.BeginToFinishDoc, but for pages requested just after a new preconnect
    request.
  </summary>
</histogram>

<histogram name="PLT.BeginToFinishDoc_ContentPrefetcher" units="ms">
  <obsolete>
    No longer needed.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    PLT.BeginToFinishDoc, but for pages which contained prefetch links.
  </summary>
</histogram>

<histogram name="PLT.BeginToFinishDoc_ContentPrefetcherReferrer" units="ms">
  <obsolete>
    No longer needed.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    PLT.BeginToFinishDoc, but for pages which were referred to by pages which
    contained prefetch links.
  </summary>
</histogram>

<histogram name="PLT.BeginToFinishDoc_SpdyProxy" units="ms">
  <obsolete>
    Use PLT.PT_BeginToFinishDoc_DataReductionProxy instead.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    PLT.BeginToFinshDoc, but for pages fetched over a SPDY proxy.
  </summary>
</histogram>

<histogram name="PLT.BeginToFirstPaint" units="ms">
  <obsolete>
    Use PageLoad.PaintTiming.NavigationToFirstContentfulPaint instead.
  </obsolete>
  <owner>pmeenan@chromium.org</owner>
  <summary>
    Time from &quot;begin&quot; to &quot;first paint.&quot;  &quot;Begin&quot;==
    &quot;request&quot; if user requested, and &quot;start&quot; otherwise.
    &quot;Request&quot;== time when user requested document. &quot;Start&quot;==
    time when renderer requested load of document, after any unload of last
    document. &quot;First paint&quot;== time when first paint operation was
    performed.
  </summary>
</histogram>

<histogram name="PLT.BeginToFirstPaint_Negative" units="ms">
  <obsolete>
    No longer needed.
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    Magnitude and difference between begin and first paint, when first_paint
    precedes begin. This is a temporary metric used to better understand the
    root cause of http://crbug.com/125273.
  </summary>
</histogram>

<histogram name="PLT.BeginToFirstPaintAfterLoad" units="ms">
  <obsolete>
    The first paint after load is not useful for most documents. Consider using
    PageLoad.PaintTiming.NavigationToFirstContentfulPaint instead.
  </obsolete>
  <owner>pmeenan@chromium.org</owner>
  <summary>
    Time from &quot;big&quot; to &quot;first paint after load.&quot;
    &quot;Begin&quot;== &quot;request&quot; if user requested, and
    &quot;start&quot; otherwise.  &quot;Request&quot;== time when user requested
    document. &quot;Start&quot;== time when renderer requested load of document,
    after any unload of last document. &quot;First paint after load&quot;== time
    after onload() when first paint operation is performed.
  </summary>
</histogram>

<histogram name="PLT.CommitToFinish" units="ms">
  <obsolete>
    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from &quot;commit&quot; to &quot;finish.&quot; &quot;Commit&quot;==
    time when renderer got first byte of document.  &quot;Finish&quot;==after
    onload() and all resources are loaded.
  </summary>
</histogram>

<histogram name="PLT.CommitToFinishDoc" units="ms">
  <obsolete>
    Use PageLoad.ParseTiming.ParseDuration instead.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from &quot;commit&quot; to &quot;finish doc.&quot; &quot;Commit&quot;==
    time when renderer got first byte of document. &quot;Finish doc&quot; ==
    main document loaded, before onload(). &quot;Finish&quot;==after onload()
    and all resources are loaded.
  </summary>
</histogram>

<histogram name="PLT.CommitToFirstPaint" units="ms">
  <obsolete>
    Use PageLoad.PaintTiming.ParseStartToFirstContentfulPaint instead.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from &quot;commit&quot; to &quot;first paint.&quot;
    &quot;Commit&quot;== time when renderer got first byte of document.
    &quot;First paint&quot;== time when first paint operation was performed.
  </summary>
</histogram>

<histogram name="PLT.CommitToFirstPaintAfterLoad" units="ms">
  <obsolete>
    The first paint after load is not useful for most documents. Consider using
    PageLoad.PaintTiming.ParseStartToFirstContentfulPaint instead.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from &quot;commit&quot; to &quot;first paint after load.&quot;
    &quot;Commit&quot;== time when renderer got first byte of document.
    &quot;First paint after load&quot;== time after onload() when first paint
    operation is performed.
  </summary>
</histogram>

<histogram name="PLT.FinishDocToFinish" units="ms">
  <obsolete>
    No longer needed.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from &quot;finish doc&quot; to &quot;finish.&quot; &quot;Finish
    doc&quot;== main document loaded, before onload(). &quot;Finish&quot;==after
    onload() and all resources are loaded.
  </summary>
</histogram>

<histogram name="PLT.FinishToFirstPaintAfterLoad" units="ms">
  <obsolete>
    The first paint after load is not useful for most documents. Consider using
    PageLoad.PaintTiming.NavigationToFirstContentfulPaint instead.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from &quot;finish &quot; to &quot;first paint after load.&quot;
    &quot;Finish&quot;==after onload() and all resources are loaded. &quot;First
    paint after load&quot;== time after onload() when first paint operation is
    performed.
  </summary>
</histogram>

<histogram name="PLT.LoadType" enum="LoadType">
  <obsolete>
    Use PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType.*
    instead.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Probability distribution for enumerated varieties of page loads.
  </summary>
</histogram>

<histogram name="PLT.MissingStart" enum="MissingStartType">
  <obsolete>
    Deprecated as of 2014-06.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Diagnose error conditions in PLT reporting. A start time should always be
    present.
  </summary>
</histogram>

<histogram name="PLT.NavStartToLoadEnd" units="ms">
  <obsolete>
    deprecated 2012-01-19 in favour of PLT.PT_*
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time elapsed between the Navigation Timing metrics navigationStart and
    loadEventEnd. Definitions: http://www.w3.org/TR/navigation-timing/
  </summary>
</histogram>

<histogram name="PLT.NavStartToLoadStart" units="ms">
  <obsolete>
    deprecated 2012-01-19 in favour of PLT.PT_*
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time elapsed between the Navigation Timing metrics navigationStart and
    loadEventStart. Definitions: http://www.w3.org/TR/navigation-timing/
  </summary>
</histogram>

<histogram name="PLT.NT_Connect" units="ms">
  <obsolete>
    Deprecated 09/2016.
  </obsolete>
  <owner>bolian@chromium.org</owner>
  <summary>
    Time from connectStart to connectEnd based on Navigation Timing.
  </summary>
</histogram>

<histogram name="PLT.NT_DelayBeforeConnect" units="ms">
  <obsolete>
    Deprecated as of 7/19/2016.
  </obsolete>
  <owner>bolian@chromium.org</owner>
  <summary>
    Time from domanLookupEnd to connectStart based on Navigation Timing.
  </summary>
</histogram>

<histogram name="PLT.NT_DelayBeforeDomainLookup" units="ms">
  <obsolete>
    Deprecated as of 7/19/2016.
  </obsolete>
  <owner>bolian@chromium.org</owner>
  <summary>
    Time from fetchStart to domainLookupStart based on Navigation Timing.
  </summary>
</histogram>

<histogram name="PLT.NT_DelayBeforeDomLoading" units="ms">
  <obsolete>
    Deprecated as of 7/19/2016. Replaced by
    PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired.
  </obsolete>
  <owner>bolian@chromium.org</owner>
  <summary>
    Time from responseStart to domLoading based on Navigation Timing.
  </summary>
</histogram>

<histogram name="PLT.NT_DelayBeforeFetch" units="ms">
  <obsolete>
    Deprecated as of 7/19/2016.
  </obsolete>
  <owner>bolian@chromium.org</owner>
  <summary>
    Time from navigationStart to fetchStart based on Navigation Timing when no
    redirect.
  </summary>
</histogram>

<histogram name="PLT.NT_DelayBeforeFetchRedirect" units="ms">
  <obsolete>
    Deprecated as of 7/19/2016.
  </obsolete>
  <owner>bolian@chromium.org</owner>
  <summary>
    Time from navigationStart to fetchStart excluding time spent on redirects
    based on Navigation Timing. Only page loads with redirects are considered.
  </summary>
</histogram>

<histogram name="PLT.NT_DelayBeforeLoadEvent" units="ms">
  <obsolete>
    Deprecated as of 7/19/2016. Replaced by
    PageLoad.DocumentTiming.NavigationToLoadEventFired.
  </obsolete>
  <owner>bolian@chromium.org</owner>
  <summary>
    Time from domContentLoadedEventEnd to loadEventStart based on Navigation
    Timing.
  </summary>
</histogram>

<histogram name="PLT.NT_DelayBeforeRequest" units="ms">
  <obsolete>
    Deprecated as of 7/19/2016.
  </obsolete>
  <owner>bolian@chromium.org</owner>
  <summary>
    Time from connectEnd to requestStart based on Navigation Timing.
  </summary>
</histogram>

<histogram name="PLT.NT_DomainLookup" units="ms">
  <obsolete>
    Deprecated 09/2016.
  </obsolete>
  <owner>bolian@chromium.org</owner>
  <summary>
    Time from domainLookupStart to domainLookupEnd based on Navigation Timing.
  </summary>
</histogram>

<histogram name="PLT.NT_DomContentLoaded" units="ms">
  <obsolete>
    Deprecated 09/2016. Use
    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToDOMContentLoadedEventFired
    instead.
  </obsolete>
  <owner>bolian@chromium.org</owner>
  <summary>
    Time from domContentLoadedEventStart to domContentLoadedEventEnd based on
    Navigation Timing.
  </summary>
</histogram>

<histogram name="PLT.NT_DomInteractive" units="ms">
  <obsolete>
    Deprecated 09/2016.
  </obsolete>
  <owner>bolian@chromium.org</owner>
  <summary>
    Time from domInteractive to domContentLoadEventStart based on Navigation
    Timing.
  </summary>
</histogram>

<histogram name="PLT.NT_DomLoading" units="ms">
  <obsolete>
    Deprecated 09/2016.
  </obsolete>
  <owner>bolian@chromium.org</owner>
  <summary>
    Time from domLoading to domInteractive based on Navigation Timing.
  </summary>
</histogram>

<histogram name="PLT.NT_LoadEvent" units="ms">
  <obsolete>
    Deprecated 09/2016. Use
    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired
    instead.
  </obsolete>
  <owner>bolian@chromium.org</owner>
  <summary>
    Time from loadEventStart to loadEventEnd based on Navigation Timing.
  </summary>
</histogram>

<histogram name="PLT.NT_Redirect" units="ms">
  <obsolete>
    Deprecated as of 7/19/2016.
  </obsolete>
  <owner>bolian@chromium.org</owner>
  <summary>
    Time from redirectStart to redirectEnd based on Navigation Timing when
    redirects exist.
  </summary>
</histogram>

<histogram name="PLT.NT_Request" units="ms">
  <obsolete>
    Deprecated as of 7/19/2016. Replaced by
    PageLoad.ParseTiming.NavigationToParseStart.
  </obsolete>
  <owner>bolian@chromium.org</owner>
  <summary>
    Time from requestStart to responseStart based on Navigation Timing.
  </summary>
</histogram>

<histogram name="PLT.NT_Response" units="ms">
  <obsolete>
    Deprecated as of 7/19/2016. Replaced by PageLoad.ParseTiming.ParseDuration.
  </obsolete>
  <owner>bolian@chromium.org</owner>
  <summary>
    Time from responseStart to responseEnd based on Navigation Timing.
  </summary>
</histogram>

<histogram name="PLT.PageUsed_PrerenderLoad" enum="PageUsed">
  <obsolete>
    Deprecated as of 5/02/2011.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Distribution of discarded and displayed prerendered pages.</summary>
</histogram>

<histogram name="PLT.PerceivedLoadTime" units="ms">
  <obsolete>
    Deprecated as of 5/02/2011, replaced by Prerender.RendererPLT.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Perceived load time of a page. For non-prerendered pages, this is just
    BeginToFinish. For displayed prerendered pages, this is the time from when
    the prerendered page is moved into a TabContents until finish.
    &quot;Finish&quot; == after onload() and all resources are loaded. Note that
    this is 0 if the loading finishes before the page is moved into a
    TabContents.
  </summary>
</histogram>

<histogram name="PLT.PerceivedLoadTime_PrerenderLoad" units="ms">
  <obsolete>
    Deprecated as of 5/02/2011, replaced by
    Prerender.RendererPerceivedPLTMatched.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Perceived load time of a prerendered page that is displayed. This is the
    time from when the prerendered page is moved into a TabContents until
    finish. &quot;Finish&quot; == after onload() and all resources are loaded.
    Note that this is 0 if the loading finishes before the page is moved into a
    TabContents.
  </summary>
</histogram>

<histogram name="PLT.Prerender_TimeUntilDisplay" units="ms">
  <obsolete>
    Deprecated as of 5/02/2011, replaced by Prerender.RendererTimeUntilDisplay.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time elapsed between when the prerendering of a page starts and when the
    page is displayed. Prerendered pages discarded without being displayed are
    excluded from this count.
  </summary>
</histogram>

<histogram name="PLT.PrerenderIdleTime" units="ms">
  <obsolete>
    Deprecated as of 5/02/2011, replaced by Prerender.RendererIdleTime.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    This is the time from when a prerendered page finishes loading to when it is
    displayed. When a page is displayed before it finishes loading, no value is
    recorded in this histogram.
  </summary>
</histogram>

<histogram name="PLT.PT.NavigationStartToFirstLayout" units="ms">
  <obsolete>
    Deprecated. Use PageLoad.Timing2.* instead.
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's navigation start to the time the
    first document layout is performed.
  </summary>
</histogram>

<histogram name="PLT.PT.ResponseStartToFirstLayout" units="ms">
  <obsolete>
    Deprecated. Use PageLoad.Timing2.* instead.
  </obsolete>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    Measures the time from navigation timing's response start to the time the
    first document layout is performed.
  </summary>
</histogram>

<histogram name="PLT.PT_BeginToCommit" units="ms">
  <obsolete>
    Use PageLoad.Timing2.NavigationToCommit instead.
  </obsolete>
  <owner>pmeenan@chromium.org</owner>
  <summary>
    This time is based on the NavigationTiming spec and is a more accurate
    version of PLT.BeginToCommit. Commit: responseStart. Begin: requestStart or
    navigationStart if user-initiated request.
  </summary>
</histogram>

<histogram name="PLT.PT_BeginToCommit_DataReductionProxy" units="ms">
  <obsolete>
    Deprecated 9/2016. Use Use
    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToCommit
    instead.
  </obsolete>
  <owner>pmeenan@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    This time is based on the PerformanceTiming spec and is a more accurate
    version of PLT.BeginToCommit. Commit: responseStart. Begin: requestStart or
    navigationStart if user-initiated request. Only page loads through the data
    reduction proxy are considered.
  </summary>
</histogram>

<histogram name="PLT.PT_BeginToFinish" units="ms">
  <obsolete>
    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
  </obsolete>
  <owner>pmeenan@chromium.org</owner>
  <summary>
    This time is based on the NavigationTiming spec and is a more accurate
    version of PLT.BeginToFinish. Finish: loadEventEnd. Begin: requestStart or
    navigationStart if user-initiated request.
  </summary>
</histogram>

<histogram name="PLT.PT_BeginToFinish_DataReductionProxy" units="ms">
  <obsolete>
    Deprecated 9/2016. Use Use
    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired
    instead.
  </obsolete>
  <owner>pmeenan@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    This time is based on the PerformanceTiming spec and is a more accurate
    version of PLT.BeginToFinish_SpdyProxy. Finish: loadEventEnd. Begin:
    requestStart or navigationStart if user-initiated request. Only page loads
    through the data reduction proxy are considered.
  </summary>
</histogram>

<histogram name="PLT.PT_BeginToFinishDoc" units="ms">
  <obsolete>
    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
  </obsolete>
  <owner>pmeenan@chromium.org</owner>
  <summary>
    This time is based on the NavigationTiming spec and is a more accurate
    version of PLT.BeginToFinishDoc. FinishDoc: loadEventStart. Begin:
    requestStart or navigationStart if user-initiated request.
  </summary>
</histogram>

<histogram name="PLT.PT_BeginToFinishDoc_DataReductionProxy" units="ms">
  <obsolete>
    Deprecated 09/2016. Use
    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired
    instead.
  </obsolete>
  <owner>pmeenan@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    This time is based on the PerformanceTiming spec and is a more accurate
    version of PLT.BeginToFinishDoc_SpdyProxy. FinishDoc: loadEventStart. Begin:
    requestStart or navigationStart if user-initiated request. Only page loads
    through the data reduction proxy are considered.
  </summary>
</histogram>

<histogram name="PLT.PT_CommitToFinish" units="ms">
  <obsolete>
    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
  </obsolete>
  <owner>pmeenan@chromium.org</owner>
  <summary>
    This time is based on the NavigationTiming spec and is a more accurate
    version of PLT.CommitToFinish. Commit: responseStart. Finish: loadEventEnd.
  </summary>
</histogram>

<histogram name="PLT.PT_CommitToFinish_DataReductionProxy" units="ms">
  <obsolete>
    Deprecated 09/2016. Use
    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired
    instead.
  </obsolete>
  <owner>pmeenan@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    This time is based on the PerformanceTiming spec and is a more accurate
    version of PLT.CommitToFinish. Commit: responseStart. Finish: loadEventEnd.
    Only page loads through the data reduction proxy are considered.
  </summary>
</histogram>

<histogram name="PLT.PT_CommitToFinishDoc" units="ms">
  <obsolete>
    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
  </obsolete>
  <owner>pmeenan@chromium.org</owner>
  <summary>
    This time is based on the NavigationTiming spec and is a more accurate
    version of PLT.CommitToFinishDoc. Commit: responseStart. FinishDoc:
    loadEventStart.
  </summary>
</histogram>

<histogram name="PLT.PT_CommitToFinishDoc_DataReductionProxy" units="ms">
  <obsolete>
    Deprecated 09/2016. Use
    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired
    instead.
  </obsolete>
  <owner>pmeenan@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    This time is based on the PerformanceTiming spec and is a more accurate
    version of PLT.CommitToFinishDoc. Commit: responseStart. FinishDoc:
    loadEventStart. Only page loads through the data reduction proxy are
    considered.
  </summary>
</histogram>

<histogram name="PLT.PT_FinishDocToFinish" units="ms">
  <obsolete>
    No longer needed.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    This time is based on the NavigationTiming spec and is a more accurate
    version of PLT.FinishDocToFinish. Finish: loadEventEnd. FinishDoc:
    loadEventStart.
  </summary>
</histogram>

<histogram name="PLT.PT_FinishDocToFinish_DataReductionProxy" units="ms">
  <obsolete>
    Deprecated 09/2016.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    This time is based on the PerformanceTiming spec and is a more accurate
    version of PLT.FinishDocToFinish. Finish: loadEventEnd. FinishDoc:
    loadEventStart. Only page loads through the data reduction proxy are
    considered.
  </summary>
</histogram>

<histogram name="PLT.PT_RequestToCommit" units="ms">
  <obsolete>
    Use PageLoad.Timing2.NavigationToCommit instead.
  </obsolete>
  <owner>pmeenan@chromium.org</owner>
  <summary>
    This time is based on the NavigationTiming spec and measures the time until
    the renderer got first byte of document. Commit: time when renderer got
    first byte of document. Request: navigationStart.
  </summary>
</histogram>

<histogram name="PLT.PT_RequestToDomContentLoaded" units="ms">
  <obsolete>
    Use PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired instead.
  </obsolete>
  <owner>pmeenan@chromium.org</owner>
  <summary>
    This time is based on the NavigationTiming spec and measures the time until
    the beginning of the DOMContentLoaded event. DOMContentLoaded:
    domContentLoadedEventStart. Request: navigationStart.
  </summary>
</histogram>

<histogram name="PLT.PT_RequestToFinish" units="ms">
  <obsolete>
    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
  </obsolete>
  <owner>pmeenan@chromium.org</owner>
  <summary>
    This time is based on the NavigationTiming spec and is a more accurate
    version of PLT.RequestToFinish. Finish: loadEventEnd. Request:
    navigationStart.
  </summary>
</histogram>

<histogram name="PLT.PT_RequestToFinish_DataReductionProxy" units="ms">
  <obsolete>
    Deprecated 09/2016. Use
    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired
    instead.
  </obsolete>
  <owner>pmeenan@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    This time is based on the PerformanceTiming spec and is a more accurate
    version of PLT.RequestToFinish. Finish: loadEventEnd. Request:
    navigationStart. Only page loads through the data reduction proxy are
    considered.
  </summary>
</histogram>

<histogram name="PLT.PT_RequestToFinishDoc" units="ms">
  <obsolete>
    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
  </obsolete>
  <owner>pmeenan@chromium.org</owner>
  <summary>
    This time is based on the NavigationTiming spec and measures the page load
    time until the beginning of the load event. Finish: loadEventStart. Request:
    navigationStart.
  </summary>
</histogram>

<histogram name="PLT.PT_RequestToStart" units="ms">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    This time is based on the NavigationTiming spec and is a more accurate
    version of PLT.RequestToStart. Start: requestStart. Request:
    navigationStart.
  </summary>
</histogram>

<histogram name="PLT.PT_RequestToStart_DataReductionProxy" units="ms">
  <obsolete>
    Deprecated 09/2016.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    This time is based on the PerformanceTiming spec and is a more accurate
    version of PLT.RequestToStart. Start: requestStart. Request:
    navigationStart. Only page loads through the data reduction proxy are
    considered.
  </summary>
</histogram>

<histogram name="PLT.PT_StartToCommit" units="ms">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    This time is based on the NavigationTiming spec and is a more accurate
    version of PLT.StartToCommit. Start: requestStart. Commit: responseStart.
  </summary>
</histogram>

<histogram name="PLT.PT_StartToCommit_DataReductionProxy" units="ms">
  <obsolete>
    Deprecated 09/2016.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    This time is based on the PerformanceTiming spec and is a more accurate
    version of PLT.StartToCommit. Start: requestStart. Commit: responseStart.
    Only page loads through the data reduction proxy are considered.
  </summary>
</histogram>

<histogram name="PLT.PT_StartToFinish" units="ms">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    This time is based on the NavigationTiming spec and is a more accurate
    version of PLT.StartToFinish. Start: requestStart. Finish: loadEventEnd.
  </summary>
</histogram>

<histogram name="PLT.PT_StartToFinish_DataReductionProxy" units="ms">
  <obsolete>
    Deprecated 09/2016.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    This time is based on the PerformanceTiming spec and is a more accurate
    version of PLT.StartToFinish. Start: requestStart. Finish: loadEventEnd.
    Only page loads through the data reduction proxy are considered.
  </summary>
</histogram>

<histogram name="PLT.RequestToFinish" units="ms">
  <obsolete>
    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from &quot;request&quot; to &quot;finish.&quot;  &quot;Request&quot; ==
    time when user requested document.  &quot;Finish&quot; == after onload() and
    all resources are loaded.
  </summary>
</histogram>

<histogram name="PLT.RequestToStart" units="ms">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from &quot;request&quot; to &quot;start.&quot; &quot;Request&quot;==
    time when user requested document. &quot;Start&quot;== time when renderer
    requested load of document, after any unload of last document.
  </summary>
</histogram>

<histogram name="PLT.StartToCommit" units="ms">
  <obsolete>
    Use PageLoad.Timing2.NavigationToCommit instead.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from &quot;start&quot; to &quot;commit.&quot; &quot;Start&quot;== time
    when renderer requested load of document, after any unload of last document.
    &quot;Commit&quot;== time when renderer got first byte of document.
  </summary>
</histogram>

<histogram name="PLT.StartToFinish" units="ms">
  <obsolete>
    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from &quot;start&quot; to &quot;finish.&quot; &quot;Start&quot;== time
    when renderer requested load of document, after any unload of last document.
    &quot;Finish&quot;==after onload() and all resources are loaded.
  </summary>
</histogram>

<histogram name="PLT.StartToFinish.NoProxy.http">
  <obsolete>
    Deprecated as of 07/2014.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>StartToFinish times when using http and no proxy.</summary>
</histogram>

<histogram name="PLT.StartToFinish.NoProxy.https">
  <obsolete>
    Deprecated as of 07/2014.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>StartToFinish times when using https and no proxy.</summary>
</histogram>

<histogram name="PLT.StartToFinish.Proxy.http">
  <obsolete>
    Deprecated as of 07/2014.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>StartToFinish times when using http over a proxy.</summary>
</histogram>

<histogram name="PLT.StartToFinish.Proxy.https">
  <obsolete>
    Deprecated as of 07/2014.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>StartToFinish times when using https over a proxy.</summary>
</histogram>

<histogram name="PLT.UserTiming_Mark" units="ms">
  <obsolete>
    Deprecated as of 09/2016.
  </obsolete>
  <owner>pmeenan@chromium.org</owner>
  <summary>
    This time is based on the User Timing spec and measures the time from
    Navigation Timing navigationStart until the point where the page called
    performance.mark().
  </summary>
</histogram>

<histogram name="PLT.UserTiming_MeasureDuration" units="ms">
  <obsolete>
    Deprecated as of 09/2016.
  </obsolete>
  <owner>pmeenan@chromium.org</owner>
  <summary>
    This time is based on the User Timing spec and reports the time between two
    arbitrary points defined by the page being loaded and directly matches the
    measurement exposed by performance.measure().
  </summary>
</histogram>

<histogram name="Plugin.AvailabilityStatus.WidevineCdm"
    enum="PluginAvailabilityStatus">
  <obsolete>
    Deprecated as of 01/2017 (M65).
  </obsolete>
  <owner>xhwang@chromium.org</owner>
  <summary>
    The availability status of Widevine CDM. In normal cases, this is reported
    per render process if EME API is used. This is not reported if EME API is
    not used. This could be reported multiple times per render process until
    PLUGIN_AVAILABLE is reported (which should be a rare case).
  </summary>
</histogram>

<histogram name="Plugin.EnabledStatusMigrationDone" enum="Boolean">
  <owner>pastarmovj@chromium.org</owner>
  <owner>tommycli@chromium.org</owner>
  <summary>Tracks whether plugins that were disabled were migrated.</summary>
</histogram>

<histogram name="Plugin.Flash.ClickSize.AspectRatio" units="%">
  <owner>tommycli@chromium.org</owner>
  <summary>
    Aspect ratio of Flash plugins users click at least once. The aspect ratio is
    multiplied by 100 and stored as a rounded integer.
  </summary>
</histogram>

<histogram name="Plugin.Flash.ClickSize.Height" units="pixels">
  <owner>tommycli@chromium.org</owner>
  <summary>Height of Flash plugins users click at least once.</summary>
</histogram>

<histogram name="Plugin.Flash.ClickSize.Width" units="pixels">
  <owner>tommycli@chromium.org</owner>
  <summary>Width of Flash plugins users click at least once.</summary>
</histogram>

<histogram name="Plugin.Flash.Engagement">
  <obsolete>
    Deprecated 12/2017 in Issue 781644 as we no longer use Site Engagement Index
    as a signal for Flash display.
  </obsolete>
  <owner>dominickn@chromium.org</owner>
  <summary>
    The engagement score of origins which have passed through a site engagement
    check to permit or block Flash. Recorded every time the Flash plugin is
    requested with the PreferHtmlOverPlugins feature active.
  </summary>
</histogram>

<histogram name="Plugin.Flash.TinyContentSize" enum="FlashTinyContentSize">
  <owner>tommycli@chromium.org</owner>
  <summary>
    Collects the sizes of all loaded Flash plugin instances. This is for
    determining the prevalence of tiny flash plugin instances.
  </summary>
</histogram>

<histogram name="Plugin.Flash.YouTubeRewrite" enum="YouTubeRewriteStatus">
  <owner>mlamouri@chromium.org</owner>
  <owner>kdsilva@google.org</owner>
  <summary>
    Records the YouTube Flash embed rewrite status when attempted.
  </summary>
</histogram>

<histogram name="Plugin.FlashNavigateUsage" enum="FlashNavigateUsageType"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Record usage of PPB_Flash.Navigate() Pepper API.</summary>
</histogram>

<histogram name="Plugin.FlashUsage" enum="FlashUsage">
  <owner>yzshen@chromium.org</owner>
  <owner>thestig@chromium.org</owner>
  <summary>Collects Flash usage data.</summary>
</histogram>

<histogram name="Plugin.NpapiRemovalInfobar.Removed.PluginGroup"
    enum="PluginGroup">
  <obsolete>
    Deprecated due to NPAPI removal.
  </obsolete>
  <owner>wfh@chromium.org</owner>
  <summary>
    The plugin group of an NPAPI plugin that is no longer supported. Recorded
    when the NPAPI removal infobar is shown for a plugin which is no longer
    supported.
  </summary>
</histogram>

<histogram name="Plugin.NpapiRemovalInfobar.RemovedSoon.PluginGroup"
    enum="PluginGroup">
  <obsolete>
    Deprecated due to NPAPI removal.
  </obsolete>
  <owner>wfh@chromium.org</owner>
  <summary>
    The plugin group of an NPAPI plugin that will be unsupported soon. Recorded
    when the NPAPI removal infobar is shown after an NPAPI plugin first loads to
    warn the user that NPAPI support for this plugin will be removed soon.
  </summary>
</histogram>

<histogram name="Plugin.NPAPIStatus" enum="NPAPIPluginStatus">
  <obsolete>
    Deprecated due to NPAPI removal.
  </obsolete>
  <owner>wfh@chromium.org</owner>
  <summary>
    Records whether NPAPI plugins are supported by the platform, and if so,
    whether they are enabled or disabled.  Recorded once at browser startup.
  </summary>
</histogram>

<histogram name="Plugin.PowerSaver.PeripheralHeuristic"
    enum="PluginPowerSaverPeripheralHeuristicDecision">
  <obsolete>
    Deprecated in favor of Plugin.PowerSaver.PeripheralHeuristicInitialDecision.
  </obsolete>
  <owner>tommycli@chromium.org</owner>
  <summary>
    Records each decision of the Plugin Power Saver peripheral content
    heuristic. This UMA is counted once per peripheral query, and may count a
    single plugin instance multiple times as it is resized.
  </summary>
</histogram>

<histogram name="Plugin.PowerSaver.PeripheralHeuristicInitialDecision"
    enum="PluginPowerSaverPeripheralHeuristicDecision">
  <owner>tommycli@chromium.org</owner>
  <summary>
    Records the initial decision of the Plugin Power Saver peripheral content
    heuristic for each plugin instance. This is recorded once per plugin
    instance.
  </summary>
</histogram>

<histogram name="Plugin.PowerSaver.PosterParamPresence"
    enum="PluginPowerSaverPosterParamPresence">
  <owner>tommycli@chromium.org</owner>
  <summary>
    Record how many plugin object tags use poster param. This is recorded once
    per plugin instance, and is currently restricted to Flash plugin instances.
  </summary>
</histogram>

<histogram name="Plugin.PowerSaver.Unthrottle"
    enum="PluginPowerSaverUnthrottleMethod">
  <owner>tommycli@chromium.org</owner>
  <summary>
    Record how many throttled plugins are unthrottled, and by what method.
  </summary>
</histogram>

<histogram name="Plugin.PpapiBrokerLoadErrorCode" enum="WinGetLastError">
  <owner>xhwang@chromium.org</owner>
  <summary>
    The error code of a PPAPI broker load failure. Only reported on Windows.
  </summary>
</histogram>

<histogram name="Plugin.PpapiBrokerLoadResult" enum="PluginLoadResult">
  <owner>xhwang@chromium.org</owner>
  <summary>The result from an attempt to load a PPAPI broker.</summary>
</histogram>

<histogram name="Plugin.PpapiBrokerLoadTime" units="ms">
  <owner>xhwang@chromium.org</owner>
  <summary>The time spent to load a PPAPI broker.</summary>
</histogram>

<histogram name="Plugin.PpapiPluginLoadErrorCode" enum="WinGetLastError">
  <owner>xhwang@chromium.org</owner>
  <summary>
    The error code of a PPAPI plugin load failure. Only reported on Windows.
  </summary>
</histogram>

<histogram name="Plugin.PpapiPluginLoadResult" enum="PluginLoadResult">
  <owner>xhwang@chromium.org</owner>
  <summary>The result from an attempt to load a PPAPI plugin.</summary>
</histogram>

<histogram name="Plugin.PpapiPluginLoadTime" units="ms">
  <owner>xhwang@chromium.org</owner>
  <summary>The time spent to load a PPAPI plugin.</summary>
</histogram>

<histogram name="Plugin.PpapiSyncIPCTime" units="ms" expires_after="2018-08-30">
  <owner>gab@chromium.org</owner>
  <summary>
    The time it took to complete a synchronous IPC made from the PPAPI process.
  </summary>
</histogram>

<histogram name="Plugin.RequestObjectResult" enum="BooleanSuccess">
  <owner>mlamouri@chromium.org</owner>
  <summary>Result of HTMLPluginElement::requestObject in Blink.</summary>
</histogram>

<histogram name="Plugin.SyncMessageTime" units="ms">
  <obsolete>
    Deprecated due to NPAPI removal.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Roundtrip times for synchronous IPC calls from the renderer to NPAPI plugin
    processes.
  </summary>
</histogram>

<histogram name="PluginFinder.BuiltInPluginList.ErrorCode"
    enum="PluginListError">
  <owner>bauerb@chromium.org</owner>
  <summary>
    Error codes when parsing the built-in plugin list. Logged when the
    PluginFinder singleton is created.
  </summary>
</histogram>

<histogram name="Power.BacklightLevelOnAC" units="%">
  <owner>derat@chromium.org</owner>
  <summary>
    The level of the backlight as a percentage when the user is on AC. Sampled
    every 30 seconds.
  </summary>
</histogram>

<histogram name="Power.BacklightLevelOnBattery" units="%">
  <owner>derat@chromium.org</owner>
  <summary>
    The level of the backlight as a percentage when the user is on battery.
    Sampled every 30 seconds.
  </summary>
</histogram>

<histogram name="Power.BatteryChargeHealth" units="%">
  <owner>derat@chromium.org</owner>
  <summary>
    Chrome OS battery charge health percentage.  Sampled once when device starts
    charging.
  </summary>
</histogram>

<histogram name="Power.BatteryDischargePercentPerHour" units="%">
  <obsolete>
    Deprecated 02/2017 in favor of power benchmarks that have less variability
    than data from users' machines.
  </obsolete>
  <owner>jeremy@chromium.org</owner>
  <summary>
        The percentage of battery capacity used per hour relative to a full
    battery. Reported once when the power adaptor is plugged back in after the
    system is on battery power for more than 30 minutes.  If at any point the
    system is suspended or all Chrome renderers are closed the measurement is
    not recorded. Anytime the user unplugs the power adaptor, a new measurement
    will begin being recorded. Collection of this histogram only starts after 30
    minutes of uptime at which point the clock starts (assuming the user is on
    battery power at that point).  The system will need to remain unplugged for
    at least another 30 minutes in order for any measurement to be recorded.
    Values are normalized to a percent per hour scale. This measurement is tied
    tightly to hardware model/OS and is not comparable across different hardware
    configurations.
  </summary>
</histogram>

<histogram name="Power.BatteryDischargeRate" units="mW">
  <owner>derat@chromium.org</owner>
  <summary>
    Chrome OS battery discharge rate in mW sampled every 30 seconds while the
    device runs on battery.
  </summary>
</histogram>

<histogram name="Power.BatteryDischargeRate_15" units="%">
  <obsolete>
    Deprecated 02/2017 in favor of power benchmarks that have less variability
    than data from users' machines.
  </obsolete>
  <owner>jeremy@chromium.org</owner>
  <summary>
        The percent of depleted battery capacity relative to a full battery over
    the first 15 minutes after battery power collection information starts.
    Collection of this histogram only starts after 30 minutes of uptime at which
    point the clock starts (assuming the user is on battery power at that
    point).  The system will need to remain unplugged for at least another 15
    minutes in order for any measurement to be recorded. Values are normalized
    to a percent per hour scale. This measurement is tied tightly to hardware
    model/OS and is not comparable across different hardware configurations.
  </summary>
</histogram>

<histogram name="Power.BatteryDischargeRate_30" units="%">
  <obsolete>
    Deprecated 02/2017 in favor of power benchmarks that have less variability
    than data from users' machines.
  </obsolete>
  <owner>jeremy@chromium.org</owner>
  <summary>
        The percent of depleted battery capacity relative to a full battery over
    the first 30 minutes after battery power collection information starts.
    Collection of this histogram only starts after 30 minutes of uptime at which
    point the clock starts (assuming the user is on battery power at that
    point).  The system will need to remain unplugged for at least another 30
    minutes in order for any measurement to be recorded. Values are normalized
    to a percent per hour scale. This measurement is tied tightly to hardware
    model/OS and is not comparable across different hardware configurations.
  </summary>
</histogram>

<histogram name="Power.BatteryDischargeRate_5" units="%">
  <obsolete>
    Deprecated 02/2017 in favor of power benchmarks that have less variability
    than data from users' machines.
  </obsolete>
  <owner>jeremy@chromium.org</owner>
  <summary>
        The percent of depleted battery capacity relative to a full battery over
    the first 5 minutes after battery power collection information starts.
    Collection of this histogram only starts after 30 minutes of uptime at which
    point the clock starts (assuming the user is on battery power at that
    point).  The system will need to remain unplugged for at least another 5
    minutes in order for any measurement to be recorded. Values are normalized
    to a percent per hour scale. This measurement is tied tightly to hardware
    model/OS and is not comparable across different hardware configurations.
  </summary>
</histogram>

<histogram name="Power.BatteryDischargeRateWhileSuspended" units="mW">
  <owner>derat@chromium.org</owner>
  <summary>
    Chrome OS battery discharge rate in mW while the system was suspended,
    sampled at resume. Only reported if the system was on battery power both
    before suspending and after resuming, if the energy level didn't increase
    while suspended (which would indicate that an AC adapter was connected), and
    if the system was suspended for at least a minute.
  </summary>
</histogram>

<histogram name="Power.BatteryInfoSample" enum="BatteryInfoSampleResult">
  <owner>derat@chromium.org</owner>
  <summary>
    Counts the number of times we have read the battery status from sysfs and if
    it gave us sensible values.
  </summary>
</histogram>

<histogram name="Power.BatteryRemainingAtEndOfSessionOnAC" units="%">
  <owner>derat@chromium.org</owner>
  <summary>
    Chrome OS remaining battery charge as percent of the maximum battery charge,
    sampled at the end of a user session when the device is on AC.
  </summary>
</histogram>

<histogram name="Power.BatteryRemainingAtEndOfSessionOnBattery" units="%">
  <owner>derat@chromium.org</owner>
  <summary>
    Chrome OS remaining battery charge as percent of the maximum battery charge,
    sampled at the end of a user session when the device is on battery.
  </summary>
</histogram>

<histogram name="Power.BatteryRemainingAtStartOfSessionOnAC" units="%">
  <owner>derat@chromium.org</owner>
  <summary>
    Chrome OS remaining battery charge as percent of the maximum battery charge,
    sampled at the start of a user session when the device is on AC.
  </summary>
</histogram>

<histogram name="Power.BatteryRemainingAtStartOfSessionOnBattery" units="%">
  <owner>derat@chromium.org</owner>
  <summary>
    Chrome OS remaining battery charge as percent of the maximum battery charge,
    sampled at the start of a user session when the device is on battery.
  </summary>
</histogram>

<histogram name="Power.BatteryRemainingCharge" units="%">
  <obsolete>
    Deprecated as of 03/2012, no longer being generated by powerd.
  </obsolete>
  <owner>derat@chromium.org</owner>
  <summary>
    Chrome OS remaining battery charge as percent of the maximum battery charge
    sampled when the device runs on battery.
  </summary>
</histogram>

<histogram name="Power.BatteryRemainingWhenChargeStarts" units="%">
  <owner>derat@chromium.org</owner>
  <summary>
    Chrome OS remaining battery charge as percent of the maximum battery charge,
    sampled when charging starts.
  </summary>
</histogram>

<histogram name="Power.BatteryTimeToEmpty" units="minutes">
  <obsolete>
    Deprecated as of 03/2012, no longer being generated by powerd.
  </obsolete>
  <owner>derat@chromium.org</owner>
  <summary>
    Chrome OS remaining time to empty battery in minutes sampled when the device
    runs on battery.
  </summary>
</histogram>

<histogram name="Power.BitfixChunks">
  <owner>dianders@chromium.org</owner>
  <summary>
    Chrome OS (Snow RO firmware 2695.90.0 only) number of 8K chunks that were
    fixed (memory corruption corrected) for each suspend/resume cycle.  Expect 0
    around 97% of the time and a non-zero value around 3% of the time.
  </summary>
</histogram>

<histogram name="Power.BitfixFixes">
  <owner>dianders@chromium.org</owner>
  <summary>
    Chrome OS (Snow RO firmware 2695.90.0 only) number of 4-byte words that were
    fixed (memory corruption corrected) for each suspend/resume cycle.  Expect 0
    around 97% of the time and a non-zero value around 3% of the time.  Would be
    exactly equal to Power.BitfixChunks if there were only one corrupted word in
    each chunk but is sometimes several times higher.
  </summary>
</histogram>

<histogram name="Power.BrightnessAdjustOnAC" enum="PowerBrightnessAdjust">
  <obsolete>
    Deprecated as of 5/2013. See Accel_BrightnessDown_F6 and
    Accel_BrightnessUp_F7 user actions instead.
  </obsolete>
  <owner>derat@chromium.org</owner>
  <summary>
    Number of times the user has adjusted brightness up and down while running
    on battery power.
  </summary>
</histogram>

<histogram name="Power.BrightnessAdjustOnBattery" enum="PowerBrightnessAdjust">
  <obsolete>
    Deprecated as of 5/2013. See Accel_BrightnessDown_F6 and
    Accel_BrightnessUp_F7 user actions instead.
  </obsolete>
  <owner>derat@chromium.org</owner>
  <summary>
    Number of times the user has adjusted brightness up and down while running
    on AC power.
  </summary>
</histogram>

<histogram name="Power.ChargerType" enum="PowerChargerType">
  <obsolete>
    Deprecated 11/2014 in issue 427057.
  </obsolete>
  <owner>derat@chromium.org</owner>
  <summary>
    External power supply type such as MAINS_CHARGER, USB_CHARGER,
    UNCONFIRMED_SPRING_CHARGER, SAFE_SPRING_CHARGER. A sample is reported each
    time a charger is connected to the device.
  </summary>
</histogram>

<histogram name="Power.ConnectedChargingPorts"
    enum="PowerConnectedChargingPorts">
  <owner>bleung@chromium.org</owner>
  <owner>derat@chromium.org</owner>
  <summary>
    Connected charging ports on Chrome OS. A sample is reported every time that
    the power manager polls sysfs (typically every 30 seconds). Ordinals are
    assigned based on the lexicographical ordering of power supply names from
    sysfs and have no implied correspondence with ports' physical locations. For
    example, with ports 'CROS_USB_PD_CHARGER0' and 'CROS_USB_PD_CHARGER1',
    'first' refers to the former and 'second' to the latter. To determine a
    port's physical location, see the powerd charging_ports pref in the device's
    overlay.
  </summary>
</histogram>

<histogram name="Power.DarkResumeWakeDurationMs" units="ms">
  <owner>chirantan@chromium.org</owner>
  <summary>
    The amount of time a system spent awake every time it woke up in dark
    resume.
  </summary>
</histogram>

<histogram name="Power.DarkResumeWakeDurationMs.Other" units="ms">
  <owner>chirantan@chromium.org</owner>
  <owner>samueltan@chromium.org</owner>
  <summary>
    The amount of time a system spent awake every time it woke up in dark resume
    triggered by an unknown or unsupported wake trigger.
  </summary>
</histogram>

<histogram name="Power.DarkResumeWakeDurationMs.WiFi.Disconnect" units="ms">
  <owner>chirantan@chromium.org</owner>
  <owner>samueltan@chromium.org</owner>
  <summary>
    The amount of time a system spent awake every time it woke up in dark resume
    triggered by a WiFi disconnect.
  </summary>
</histogram>

<histogram name="Power.DarkResumeWakeDurationMs.WiFi.Pattern" units="ms">
  <owner>chirantan@chromium.org</owner>
  <owner>samueltan@chromium.org</owner>
  <summary>
    The amount of time a system spent awake every time it woke up in dark resume
    triggered by a WiFi packet pattern match.
  </summary>
</histogram>

<histogram name="Power.DarkResumeWakeDurationMs.WiFi.SSID" units="ms">
  <owner>chirantan@chromium.org</owner>
  <owner>samueltan@chromium.org</owner>
  <summary>
    The amount of time a system spent awake every time it woke up in dark resume
    triggered by a net detect SSID match.
  </summary>
</histogram>

<histogram name="Power.DarkResumeWakeupsPerHour">
  <owner>chirantan@chromium.org</owner>
  <summary>
    The number of times a system woke up in dark resume in an hour.  Note that
    this value is scaled up or down to an hour based on the amount of time the
    system spent in suspend.  So if the system suspended for 20 minutes and woke
    up 3 times, it would report a value of 9.
  </summary>
</histogram>

<histogram name="Power.ExternalBrightnessReadResult"
    enum="ExternalDisplayReceiveResult">
  <owner>derat@chromium.org</owner>
  <summary>
    The result of attempting to read an external display's brightness on Chrome
    OS. A read attempt is made after successfully requesting the brightness (see
    Power.ExternalBrightnessRequestResult).
  </summary>
</histogram>

<histogram name="Power.ExternalBrightnessRequestResult"
    enum="ExternalDisplaySendResult">
  <owner>derat@chromium.org</owner>
  <summary>
    The result of requesting an external display's brightness on Chrome OS. A
    request is sent when the user presses a brightness key and the current
    brightness is not already cached. A successful request is followed shortly
    thereafter by a read attempt (see Power.ExternalBrightnessReadResult).
  </summary>
</histogram>

<histogram name="Power.ExternalBrightnessWriteResult"
    enum="ExternalDisplaySendResult">
  <owner>derat@chromium.org</owner>
  <summary>
    The result of attempting to change an external display's brightness on
    Chrome OS. A request is sent when the user presses a brightness key and the
    current brightness is either already cached or successfully loaded.
  </summary>
</histogram>

<histogram name="Power.ExternalDisplayOpenResult"
    enum="ExternalDisplayOpenResult">
  <owner>derat@chromium.org</owner>
  <summary>
    The result of attempting to open an I2C device to control an external
    display's brightness on Chrome OS. An attempt is made when a display is
    connected to a device that lacks an internal display.
  </summary>
</histogram>

<histogram name="Power.FirmwareResumeTimeOnAC" units="ms">
  <owner>snanda@chromium.org</owner>
  <summary>
    The time that the firmware took to resume the Chrome OS device from
    suspend-to-RAM state when running on AC at pre-suspend time.
  </summary>
</histogram>

<histogram name="Power.FirmwareResumeTimeOnBattery" units="ms">
  <owner>snanda@chromium.org</owner>
  <summary>
    The time that the firmware took to resume the Chrome OS device from
    suspend-to-RAM state when running on battery at pre-suspend time.
  </summary>
</histogram>

<histogram name="Power.IdleScreenDimCountDaily" units="count">
  <owner>derat@chromium.org</owner>
  <summary>
    Number of times that that the screen has been dimmed in response to user
    inactivity, reported daily. The count is accumulated through the day,
    spanning reboots, and sent once the system clock indicates that a full day
    or more has passed since the last report. If the system is suspended or off
    for more than a day, the current count will be reported immediately the next
    time the system boots, but the skipped days will not be reported. Chrome OS
    only.
  </summary>
</histogram>

<histogram name="Power.IdleScreenOffCountDaily" units="count">
  <owner>derat@chromium.org</owner>
  <summary>
    Number of times that that the screen has been turned off in response to user
    inactivity, reported daily. The count is accumulated through the day,
    spanning reboots, and sent once the system clock indicates that a full day
    or more has passed since the last report. If the system is suspended or off
    for more than a day, the current count will be reported immediately the next
    time the system boots, but the skipped days will not be reported. Chrome OS
    only.
  </summary>
</histogram>

<histogram name="Power.IdleSuspendCountDaily" units="count">
  <owner>derat@chromium.org</owner>
  <summary>
    Number of times that that the system has suspended in response to user
    inactivity, reported daily. The count is accumulated through the day,
    spanning reboots, and sent once the system clock indicates that a full day
    or more has passed since the last report. If the system is suspended or off
    for more than a day, the current count will be reported immediately the next
    time the system boots, but the skipped days will not be reported. Chrome OS
    only.
  </summary>
</histogram>

<histogram name="Power.IdleTimeAfterDimOnAC" units="ms">
  <owner>derat@chromium.org</owner>
  <summary>
    Chrome OS user idle time since the screen dimmed sampled when the user
    becomes active again if the device runs on AC.
  </summary>
</histogram>

<histogram name="Power.IdleTimeAfterDimOnBattery" units="ms">
  <owner>derat@chromium.org</owner>
  <summary>
    Chrome OS user idle time since the screen dimmed sampled when the user
    becomes active again if the device runs on battery.
  </summary>
</histogram>

<histogram name="Power.IdleTimeAfterScreenOffOnAC" units="ms">
  <owner>derat@chromium.org</owner>
  <summary>
    Chrome OS user idle time since the screen turned off sampled when the user
    becomes active again if the device runs on AC.
  </summary>
</histogram>

<histogram name="Power.IdleTimeAfterScreenOffOnBattery" units="ms">
  <owner>derat@chromium.org</owner>
  <summary>
    Chrome OS user idle time since the screen turned off sampled when the user
    becomes active again if the device runs on battery.
  </summary>
</histogram>

<histogram name="Power.IdleTimeOnAC" units="ms">
  <owner>derat@chromium.org</owner>
  <summary>
    Chrome OS user idle time sampled when the user becomes active again if the
    device runs on AC.
  </summary>
</histogram>

<histogram name="Power.IdleTimeOnBattery" units="ms">
  <owner>derat@chromium.org</owner>
  <summary>
    Chrome OS user idle time sampled when the user becomes active again if the
    device runs on battery.
  </summary>
</histogram>

<histogram name="Power.KernelResumeTimeOnAC" units="ms">
  <owner>snanda@chromium.org</owner>
  <summary>
    The time that the kernel took to resume the Chrome OS device from
    suspend-to-RAM state when running on AC at pre-suspend time.
  </summary>
</histogram>

<histogram name="Power.KernelResumeTimeOnBattery" units="ms">
  <owner>snanda@chromium.org</owner>
  <summary>
    The time that the kernel took to resume the Chrome OS device from
    suspend-to-RAM state when running on battery at pre-suspend time.
  </summary>
</histogram>

<histogram name="Power.KernelSuspendTimeOnAC" units="ms">
  <owner>snanda@chromium.org</owner>
  <summary>
    The time that the kernel took to suspend-to-RAM the Chrome OS device when
    running on AC.
  </summary>
</histogram>

<histogram name="Power.KernelSuspendTimeOnBattery" units="ms">
  <owner>snanda@chromium.org</owner>
  <summary>
    The time that the kernel took to suspend-to-RAM the Chrome OS device when
    running on battery.
  </summary>
</histogram>

<histogram name="Power.KeyboardBacklightLevel" units="%">
  <owner>derat@chromium.org</owner>
  <summary>
    The level of the keyboard backlight as a percentage. Sampled every 30
    seconds.
  </summary>
</histogram>

<histogram name="Power.LengthOfSession" units="seconds">
  <owner>derat@chromium.org</owner>
  <summary>
    The length of time, in seconds, that a user spent in a single session.
    Values for this metric are clamped to 12 hours, so the last bucket should be
    considered to be including all metrics above 12 hours.
  </summary>
</histogram>

<histogram name="Power.LidClosedSuspendCountDaily" units="count">
  <owner>derat@chromium.org</owner>
  <summary>
    Number of times that that the system has suspended in response to its lid
    being closed, reported daily. The count is accumulated through the day,
    spanning reboots, and sent once the system clock indicates that a full day
    or more has passed since the last report. If the system is suspended or off
    for more than a day, the current count will be reported immediately the next
    time the system boots, but the skipped days will not be reported. Chrome OS
    only.
  </summary>
</histogram>

<histogram name="Power.MetricsDailyEventInterval" enum="DailyEventIntervalType">
  <owner>derat@chromium.org</owner>
  <summary>
    Reasons why power-management-related daily metrics were reported. Chrome OS
    only.
  </summary>
</histogram>

<histogram name="Power.MilliConsumptionPerHourIosOnActive">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The average power consumption, measured in milli-units per hour, when sync
    invalidator listens to on_application_active events. Values for this metric
    are per session, i.e. from battery level at application entering foreground
    to returning to background, and normalized to an hourly average consumption.
    This is an iOS only measurement. Due to how iOS reports battery levels, it
    is likely to see many readings of 0.
  </summary>
</histogram>

<histogram name="Power.MilliConsumptionPerHourOthers">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The average power consumption, measured in milli-units per hour, for other
    sync invalidator methods. Values for this metric are per session, i.e. from
    battery level at application entering foreground to returning to background,
    and normalized to an hourly average consumption. This is an iOS only
    measurement. Due to how iOS reports battery levels, it is likely to see many
    readings of 0.
  </summary>
</histogram>

<histogram name="Power.MilliConsumptionPerHourP2P">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The average power consumption, measured in milli-units per hour, when sync
    invalidator uses peer-to-peer notifications. Values for this metric are per
    session, i.e. from battery level at application entering foreground to
    returning to background, and normalized to an hourly average consumption.
    This is an iOS only measurement. Due to how iOS reports battery levels, it
    is likely to see many readings of 0.
  </summary>
</histogram>

<histogram name="Power.MilliConsumptionPerHourServer">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The average power consumption, measured in milli-units per hour, when sync
    invalidator uses server-based non-blocking invalidator. Values for this
    metric are per session, i.e. from battery level at application entering
    foreground to returning to background, and normalized to an hourly average
    consumption. This is an iOS only measurement. Due to how iOS reports battery
    levels, it is likely to see many readings of 0.
  </summary>
</histogram>

<histogram name="Power.NumberOfAlsAdjustmentsPerSession">
  <owner>derat@chromium.org</owner>
  <summary>
    The number of times that the Automatic Light Sensor (ALS) adjusted the
    brightness during a session.  Values for this metric are clamped to 10k
    count, so the last bucket should be considered to be including all metrics
    above 10k.
  </summary>
</histogram>

<histogram name="Power.NumberOfSessionsPerCharge">
  <owner>derat@chromium.org</owner>
  <summary>
    The number of user sessions that occured since the last time that the device
    was charged. Values for this metric are clamped at 10k, so the last bucket
    should be considered to include all metrics about 10k.
  </summary>
</histogram>

<histogram name="Power.PowerButtonAcknowledgmentDelay" units="ms">
  <owner>derat@chromium.org</owner>
  <summary>
    The amount of time between the user pressing the power button and Chrome
    acknowledging the button-down event on Chrome OS. Values for this metric are
    capped to two seconds.
  </summary>
</histogram>

<histogram name="Power.PowerButtonDownTime" units="ms">
  <owner>derat@chromium.org</owner>
  <summary>
    The amount of time between the user pressing the power button and releasing
    it on Chrome OS.
  </summary>
</histogram>

<histogram name="Power.PowerButtonMenuAction" enum="PowerButtonMenuActionType">
  <owner>minch@chromium.org</owner>
  <summary>Actions performed while the power button menu is open.</summary>
</histogram>

<histogram name="Power.PowerButtonPressInLaptopMode"
    enum="PowerButtonPressType">
  <owner>minch@chromium.org</owner>
  <summary>
    Press power button in laptop mode will result in different scenarios
    according to the power button up state. Counts the different power button
    press scenarios in laptop mode.
  </summary>
</histogram>

<histogram name="Power.PowerButtonPressInTabletMode"
    enum="PowerButtonPressType">
  <owner>minch@chromium.org</owner>
  <summary>
    Press power button in tablet mode will result in different scenarios
    according to the power button up state. Counts the different power button
    press scenarios in tablet mode.
  </summary>
</histogram>

<histogram name="Power.PowerSupplyMaxPower" units="W">
  <owner>bleung@chromium.org</owner>
  <owner>derat@chromium.org</owner>
  <summary>
    The maximum power supported by the connected power supply on Chrome OS. A
    sample is reported every time that the power manager polls sysfs (typically
    every 30 seconds) and sees a connected supply.
  </summary>
</histogram>

<histogram name="Power.PowerSupplyMaxVoltage" units="V">
  <owner>bleung@chromium.org</owner>
  <owner>derat@chromium.org</owner>
  <summary>
    The maximum voltage supported by the connected power supply on Chrome OS. A
    sample is reported every time that the power manager polls sysfs (typically
    every 30 seconds) and sees a connected supply.
  </summary>
</histogram>

<histogram name="Power.PowerSupplyType" enum="PowerSupplyType">
  <owner>bleung@chromium.org</owner>
  <owner>derat@chromium.org</owner>
  <summary>
    The type of the connected power supply on Chrome OS. A sample is reported
    every time that the power manager polls sysfs (typically every 30 seconds)
    and sees a connected supply.
  </summary>
</histogram>

<histogram name="Power.RetrySuspendCount">
  <obsolete>
    Deprecated Feb 2014 by Power.SuspendAttemptsBeforeCancel and
    Power.SuspendAttemptsBeforeSuccess.
  </obsolete>
  <owner>derat@chromium.org</owner>
  <summary>
    The number of times Chrome OS retried suspend due to previous failure.
  </summary>
</histogram>

<histogram name="Power.ShutdownReason" enum="ShutdownReason">
  <owner>derat@chromium.org</owner>
  <summary>
    The reason for the Chrome OS power manager shutting down or rebooting the
    system.
  </summary>
</histogram>

<histogram name="Power.SuspendAttempt" enum="SuspendAttempt">
  <owner>derat@chromium.org</owner>
  <owner>snanda@chromium.org</owner>
  <summary>
    The number of suspend attempts on Chrome OS. Samples are reported before
    each attempt, so this histogram may include cases where the system crashed
    instead of suspending.
  </summary>
</histogram>

<histogram name="Power.SuspendAttemptsBeforeCancel">
  <owner>derat@chromium.org</owner>
  <owner>snanda@chromium.org</owner>
  <summary>
    The number of suspend attempts performed for a single suspend request (e.g.
    triggered by the lid being closed) that was eventually canceled on Chrome
    OS. This also includes requests that were canceled due to the system
    eventually shutting down due to repeated suspend failures.
  </summary>
</histogram>

<histogram name="Power.SuspendAttemptsBeforeSuccess">
  <owner>derat@chromium.org</owner>
  <owner>snanda@chromium.org</owner>
  <summary>
    The number of suspend attempts performed for a single suspend request (e.g.
    triggered by the lid being closed) that eventually succeeded on Chrome OS.
    This includes the successful attempt.
  </summary>
</histogram>

<histogram name="Power.SuspendResult" enum="SuspendResult">
  <owner>derat@chromium.org</owner>
  <owner>snanda@chromium.org</owner>
  <summary>
    The results of suspend attempts on Chrome OS. Samples are reported after
    each attempt.
  </summary>
</histogram>

<histogram name="Power.SuspendStatus" enum="SuspendStatus">
  <obsolete>
    Deprecated Jan 2014 by Power.SuspendAttempt and Power.SuspendResult.
  </obsolete>
  <owner>derat@chromium.org</owner>
  <summary>Chrome OS suspend status.</summary>
</histogram>

<histogram name="Power.ThermalAbortedFanTurnOn" units="%">
  <obsolete>
    No longer sent.
  </obsolete>
  <owner>derat@chromium.org</owner>
  <summary>
    The percentage of aborted fan attempts out of total fan attempts per
    session, where an abort is due to hysteresis.  This value is computed from
    boot and sent when powerd starts and then every 15 minutes afterwards.
  </summary>
</histogram>

<histogram name="Power.ThermalMultipleFanTurnOn" units="%">
  <obsolete>
    No longer sent.
  </obsolete>
  <owner>derat@chromium.org</owner>
  <summary>
    The percentage of fan trip point passes that are more than one trip point.
    This value is computed from boot and sent when powerd starts and then every
    15 minutes afterwards.
  </summary>
</histogram>

<histogram name="Power.TimeInSuspendAtBoot" units="minutes">
  <owner>derat@chromium.org</owner>
  <owner>snanda@chromium.org</owner>
  <summary>
    Chrome OS time in minutes spent in suspend-to-RAM mode sampled at boot
    (i.e., the device most likely ran out of battery while in suspend).
  </summary>
</histogram>

<histogram name="Power.TimeInSuspendAtResume" units="minutes">
  <owner>derat@chromium.org</owner>
  <owner>snanda@chromium.org</owner>
  <summary>
    Chrome OS time in minutes spent in suspend-to-RAM mode sampled at resume.
  </summary>
</histogram>

<histogram name="Power.UserBrightnessAdjustmentsPerSessionOnAC">
  <owner>derat@chromium.org</owner>
  <summary>
    The number of times that the user adjusted the brightness during a session
    when on AC. Values for this metric are clamped to 10k count, so the last
    bucket should be considered to be including all metrics above 10k.
  </summary>
</histogram>

<histogram name="Power.UserBrightnessAdjustmentsPerSessionOnBattery">
  <owner>derat@chromium.org</owner>
  <summary>
    The number of times that the user adjusted the brightness during a session
    when on battery. Values for this metric are clamped to 10k count, so the
    last bucket should be considered to be including all metrics above 10k.
  </summary>
</histogram>

<histogram name="PowerML.PreviousEventLogging.Result"
    enum="PowerMLPreviousEventLoggingResult">
  <owner>jiameng@chromium.org</owner>
  <summary>
    Status of logging previous idle event after a screen dim imminent signal is
    received.
  </summary>
</histogram>

<histogram name="Precache.BatteryPercentage.Start" units="%">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>rajendrant@chromium.org</owner>
  <summary>
    The battery level in percentage when the precache task was started.
  </summary>
</histogram>

<histogram name="Precache.BatteryPercentageDiff.End" units="%">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <owner>rajendrant@chromium.org</owner>
  <summary>
    Measures the difference between the battery level percentage when the
    precache task is started and ended. This value indicates the possible
    battery usage due to the precache task. Logged when the precache task ends,
    which could be due to successful completion, time-out, error conditions, max
    download limit exceeded, etc.
  </summary>
</histogram>

<histogram name="Precache.CacheSize.AllEntries" units="KB">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>jamartin@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The size in kilobytes occupied by all the entries existing in the cache at
    the time of the last precache.
  </summary>
</histogram>

<histogram name="Precache.CacheStatus.NonPrefetch" enum="HttpCachePattern">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>jamartin@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Like HttpCache.Pattern but only for requests not made during precaching.
    Logged per-request.
  </summary>
</histogram>

<histogram name="Precache.CacheStatus.NonPrefetch.FromPrecache"
    enum="HttpCachePattern">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>jamartin@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Like Precache.CacheStatus.NonPrefetch but only for requests which having a
    matching URL in the precache. Measures the amount of precache misses due to
    expiration or eviction. Logged per-request.
  </summary>
</histogram>

<histogram name="Precache.CacheStatus.NonPrefetch.NonTopHosts"
    enum="HttpCachePattern">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>twifkak@chromium.org</owner>
  <owner>jamartin@chromium.org</owner>
  <summary>
    Like Precache.CacheStatus.NonPrefetch, but only for requests with a referer
    not in the user's top visited hosts. See History.TopHostsVisitsByRank for
    details on the top hosts computation.
  </summary>
</histogram>

<histogram name="Precache.CacheStatus.NonPrefetch.TopHosts"
    enum="HttpCachePattern">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>twifkak@chromium.org</owner>
  <owner>jamartin@chromium.org</owner>
  <summary>
    Like Precache.CacheStatus.NonPrefetch, but only for requests with a referer
    in the user's top visited hosts. See History.TopHostsVisitsByRank for
    details on the top hosts computation.
  </summary>
</histogram>

<histogram name="Precache.CacheStatus.Prefetch" enum="HttpCachePattern">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>jamartin@chromium.org</owner>
  <owner>twifkak@chromium.org</owner>
  <summary>
    Like HttpCache.Pattern but only for requests made during precaching. Logged
    per-request.
  </summary>
</histogram>

<histogram name="Precache.DownloadedNonPrecache" units="bytes">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <summary>
    The number of bytes that were downloaded over the network for HTTP/HTTPS
    fetches that were not motivated by precaching. Logged per-request.
  </summary>
</histogram>

<histogram name="Precache.DownloadedPrecacheMotivated" units="bytes">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <summary>
    The number of bytes that were downloaded because of precaching. Logged
    per-request.
  </summary>
</histogram>

<histogram name="Precache.Events" enum="PrecacheEvents">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Enumerates the various failure reasons and events of interest for
    precaching. The events are persisted when the native library is not loaded,
    and recorded when the library loads next time.
  </summary>
</histogram>

<histogram name="Precache.Fetch.FailureReasons">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>twifkak@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    A bit vector of reasons why the precache fetch failed to start. Bit values
    are documented in the FailureReason Java enum.
  </summary>
</histogram>

<histogram name="Precache.Fetch.MinWeight" units="thousandths">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>twifkak@chromium.org</owner>
  <summary>
    The minimum resource weight that is fetched in a given precache run.
    Reported if the precache completed successfully or was canceled due to the
    byte cap, but not if it was cancelled due to an ill-formed manifest or
    exceeding the time limit. Reported only if global_ranking is true.
  </summary>
</histogram>

<histogram name="Precache.Fetch.PercentCompleted" units="%">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>twifkak@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The percent of manifests for which all resources have been downloaded.
    Logged per prefetch run.
  </summary>
</histogram>

<histogram name="Precache.Fetch.ResponseBytes" units="bytes">
  <obsolete>
    Deprecated July 29 2015.
  </obsolete>
  <owner>twifkak@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The total number of response bytes received from all prefetch requests,
    including config, manifests, and resources. Logged per prefetch run.
  </summary>
</histogram>

<histogram name="Precache.Fetch.ResponseBytes.Daily" units="bytes">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>twifkak@chromium.org</owner>
  <summary>
    The total number of response bytes in 24 hours received over the network
    from all prefetch requests, including config, manifests, and resources.
    Logged during the next precache run after the 24 hours has elapsed.
  </summary>
</histogram>

<histogram name="Precache.Fetch.ResponseBytes.Network" units="bytes">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>twifkak@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The total number of response bytes received over the network from all
    prefetch requests, including config, manifests, and resources. Logged per
    prefetch run.
  </summary>
</histogram>

<histogram name="Precache.Fetch.ResponseBytes.NetworkWasted" units="bytes">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The total number of response bytes received over the network for a wasted
    resource precache fetch. Logged when a partially downloaded resource
    precache fetch gets cancelled due to per-resource size limit or max precache
    size limit.
  </summary>
</histogram>

<histogram name="Precache.Fetch.ResponseBytes.Total" units="bytes">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>twifkak@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The total number of response bytes contained in all prefetch requests,
    including config, manifests, and resources. Logged per prefetch run.
  </summary>
</histogram>

<histogram name="Precache.Fetch.TimeToComplete" units="ms">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>twifkak@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The time, in milliseconds, to complete a prefetch run. Only applies to
    non-cancelled runs (those for which PercentCompleted is 100).
  </summary>
</histogram>

<histogram name="Precache.Freshness.Prefetch" units="seconds">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>jamartin@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The freshness lifetimes of the resources that were precached from the moment
    they were fetched or revalidated as described in RFC 2616 13.2.4. Logged per
    precache request.
  </summary>
</histogram>

<histogram name="Precache.Latency.NonPrefetch" units="ms">
  <obsolete>
    Deprecated March 7 2017.
  </obsolete>
  <owner>twifkak@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The latency for requests that were not made during precaching. Logged
    per-request.
  </summary>
</histogram>

<histogram name="Precache.Latency.NonPrefetch.NonTopHosts" units="ms">
  <obsolete>
    Deprecated March 7 2017.
  </obsolete>
  <owner>twifkak@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Like Precache.Latency.NonPrefetch, but limited to requests with a referer
    not in the user's top visited hosts. See History.TopHostsVisitsByRank for
    details on the top hosts computation.
  </summary>
</histogram>

<histogram name="Precache.Latency.NonPrefetch.TopHosts" units="ms">
  <obsolete>
    Deprecated March 7 2017.
  </obsolete>
  <owner>twifkak@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    Like Precache.Latency.NonPrefetch, but limited to requests with a referer in
    the user's top visited hosts. See History.TopHostsVisitsByRank for details
    on the top hosts computation.
  </summary>
</histogram>

<histogram name="Precache.Latency.Prefetch" units="ms">
  <obsolete>
    Deprecated March 7 2017.
  </obsolete>
  <owner>twifkak@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The latency for requests that were made during precaching. Logged
    per-request.
  </summary>
</histogram>

<histogram name="Precache.PeriodicTaskInterval" units="minutes">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>rajendrant@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The time between successive precache periodic GCM task invocations. When
    precache task is started, the time interval from previous task invocation is
    logged.
  </summary>
</histogram>

<histogram name="Precache.Saved" units="bytes">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>bengr@chromium.org</owner>
  <summary>
    The number of bytes during user browsing that were served from the cache,
    but would have been downloaded over a network if precaching was disabled.
    Logged per-request.
  </summary>
</histogram>

<histogram name="Precache.Saved.Freshness" units="seconds">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>jamartin@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The freshness lifetimes (RFC 2616 13.2.4) of the resources that were
    precached and later used (and thus served from the cache). This is computed
    at serving time and thus possibly different from the precached value if the
    cache entry was revalidated. Logged per-request but only once per URL and
    precaching cycle (as Precache.Saved).
  </summary>
</histogram>

<histogram name="Precache.TimeSinceLastPrecache" units="seconds">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <owner>jamartin@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The time between the the beginning of the last precache session and each of
    the URL fetches made by the user ever since. Logged per-request.
  </summary>
</histogram>

<histogram name="PrefService.CreateProfilePrefsTime" units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>The amount of time that elapsed during CreateProfilePrefs.</summary>
</histogram>

<histogram name="PrefService.NetworkPredictionEnabled" enum="BooleanEnabled">
  <owner>petewil@chromium.org</owner>
  <summary>
    Count events where Network Prediction was enabled or disabled.
  </summary>
</histogram>

<histogram name="PrefService.PersistentLogRecallProtobufs"
    enum="PersistedLogsLogReadStatus">
  <owner>holte@chromium.org</owner>
  <summary>The status when loading PersistedLogs from Prefs.</summary>
</histogram>

<histogram name="PrefService.ReadError" enum="PrefServiceReadError">
  <owner>csharp@chromium.org</owner>
  <summary>
    Enumeration of errors that happened when reading Preferences files.
  </summary>
</histogram>

<histogram name="PreloadScanner.Counts" units="preloads">
  <obsolete>
    Deprecated 5/25/2016 in favor of PreloadScanner.Counts2
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>The number of preloads generated by the preload scanner.</summary>
</histogram>

<histogram name="PreloadScanner.Counts.Miss" units="preloads">
  <obsolete>
    Deprecated 5/25/2016 in favor of PreloadScanner.Counts2.Miss
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The number of unused preloads generated by the preload scanner. Note that
    some link rel preloads are not referenced until after this point, so they
    will be falsely marked as preload misses. These will show up in the Raw
    bucket.
  </summary>
</histogram>

<histogram name="PreloadScanner.Counts2" units="preloads">
  <obsolete>
    Removed Feb 2018, no longer useful.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>The number of preloads generated by the preload scanner.</summary>
</histogram>

<histogram name="PreloadScanner.Counts2.Miss" units="preloads">
  <obsolete>
    Removed Feb 2018, no longer useful.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The number of unused preloads generated by the preload scanner. Note that
    some link rel preloads are not referenced until after this point, so they
    will be falsely marked as preload misses.
  </summary>
</histogram>

<histogram name="PreloadScanner.DocumentWrite.ExecutionTime.Failure" units="ms">
  <obsolete>
    DocumentWriteEvaluator was removed in 07/2017
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Time spent executing a script tag in the blink preload scanner, for the
    purpose of preloading scripts that will be fetched via a call to
    document.write. The execution failed to generate a preload request.
  </summary>
</histogram>

<histogram name="PreloadScanner.DocumentWrite.ExecutionTime.Success" units="ms">
  <obsolete>
    DocumentWriteEvaluator was removed in 07/2017
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Time spent executing a script tag in the blink preload scanner, for the
    purpose of preloading scripts that will be fetched via a call to
    document.write. The execution successfully resulted in a preload request.
  </summary>
</histogram>

<histogram name="PreloadScanner.DocumentWrite.GatedEvaluation"
    enum="DocumentWriteGatedEvaluation">
  <obsolete>
    DocumentWriteEvaluator was removed in 07/2017
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The reason a particular inline script was blocked from evaluation.
  </summary>
</histogram>

<histogram name="PreloadScanner.DocumentWrite.InitializationTime" units="ms">
  <obsolete>
    DocumentWriteEvaluator was removed in 07/2017
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Time spent initializing a new V8 context for the purpose of evaluating it
    and preloading document.written strings.
  </summary>
</histogram>

<histogram name="PreloadScanner.DocumentWrite.ScriptLength" units="characters">
  <obsolete>
    No longer needed
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The length of the inline script that is being considered for document write
    evaluation.
  </summary>
</histogram>

<histogram name="PreloadScanner.ExternalCSS.PreloadCount" units="preloads"
    expires_after="2018-08-30">
  <owner>csharrison@chromium.org</owner>
  <summary>
    The number of preloads generated by scanning an external preloaded CSS
    resource. As of 4/25/2016 this only includes @import declarations.
  </summary>
</histogram>

<histogram name="PreloadScanner.ExternalCSS.ScanTime" units="microseconds"
    expires_after="2018-08-30">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Microseconds it took to scan the first chunk of external CSS for preloads.

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

<histogram name="PreloadScanner.ReferenceTime" units="ms">
  <obsolete>
    Deprecated May 2018
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The time between preload discovery and when the resource is actually
    referenced. This is implemented by marking when a preload is discovered by
    the scanner, and when it has its first ResourceClient added to it. Note that
    for link rel preloads, this tracks the time from scanner discory to DOM
    discovery of the link declaration, not the actual resource.
  </summary>
</histogram>

<histogram name="PreloadScanner.TTFB" units="ms">
  <obsolete>
    Deprecated May 2018
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The time between preload discovery and when the first bytes of the response
    data arrive.
  </summary>
</histogram>

<histogram name="Prerender.AbandonTimeUntilUsed" units="ms">
  <obsolete>
    Deprecated 2017-09 as prerenders can no longer be 'used' (=='swapped-in').
  </obsolete>
  <owner>davidben@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Time from when a prerendered page is abandoned to when it is first used due
    to user navigation. If the page is swapped before begin abandoned, a zero is
    recorded.
  </summary>
</histogram>

<histogram name="Prerender.CookieSendType" enum="PrerenderCookieSendType">
  <obsolete>
    Deprecated March 13 2015.
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    Enumeration of what types of cookies were sent for a prerender.
  </summary>
</histogram>

<histogram name="Prerender.CookieStatus" enum="PrerenderCookieStatus">
  <obsolete>
    Deprecated March 13 2015.
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>Enumeration of what cookie actions a prerender caused.</summary>
</histogram>

<histogram name="Prerender.Event" enum="PrerenderEvent">
  <obsolete>
    Deprecated Dec 12 2014.
  </obsolete>
  <summary>
    Enumeration of what events related to prerendering have occurred.
  </summary>
</histogram>

<histogram name="Prerender.Events" enum="PrerenderHoverEvent">
  <obsolete>
    deprecated May 10 2012
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Hover Event counts for prerendering.</summary>
</histogram>

<histogram name="Prerender.FinalStatus" enum="PrerenderFinalStatus">
  <owner>pasko@chromium.org</owner>
  <summary>
    Final status for prerender pages - either success, or why it was canceled.
  </summary>
</histogram>

<histogram name="Prerender.FinalStatusMatchComplete"
    enum="PrerenderFinalStatus">
  <obsolete>
    deprecated 2016-05-12
  </obsolete>
  <summary>
    Final status for prerender pages - either success, or why it was canceled.
    This is for the MatchComplete set of pages (including some pages that were
    not actually prerendered), to match the control group.
  </summary>
</histogram>

<histogram name="Prerender.FractionPixelsFinalAtSwapin">
  <obsolete>
    Deprecated Jan 14 2014.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    For prerenders that are swapped in, the percentage of pixels that is already
    final at swap-in time compared to when the spinner stops.
  </summary>
</histogram>

<histogram name="Prerender.HoverStats_TimeUntilClicked" units="ms">
  <obsolete>
    deprecated May 10 2012
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Duration that a user hovers a link before clicking on it.

    This is recorded for all pages loaded in a session.
  </summary>
</histogram>

<histogram name="Prerender.HoverStats_TimeUntilDiscarded" units="ms">
  <obsolete>
    deprecated May 10 2012
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Duration that the mouse pointer hovers on a link before the mouse pointer
    moves off of it.

    This is recorded for all pages loaded in a session.
  </summary>
</histogram>

<histogram name="Prerender.LocalPredictorEvent"
    enum="PrerenderLocalPredictorEvents">
  <obsolete>
    Deprecated April 2015
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    Enumeration of what events related to the local predictor have occurred
  </summary>
</histogram>

<histogram name="Prerender.LocalPredictorLoggedInLookupTime" units="ms">
  <obsolete>
    Deprecated April 2015
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    Time to perform the LoggedIn Lookup for the local predictor. This operation
    checks whether a user is likely logged into a page that we would like to
    prerender.
  </summary>
</histogram>

<histogram name="Prerender.LocalPredictorPrefetchMatchPLT" units="ms">
  <obsolete>
    Deprecated April 2015
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    The PrerenderLocalPredictor uses local browsing history and the prerender
    service to predict pages likely visited soon. Some of these URLs are
    prefetched. When such prefetched likely next pages are visited, this
    histogram records the PLT for such pages. In particular, this also happens
    if prefetch is actually disabled, allowing (by pivoting on whether or not
    prefetch is enabled) to compare the effect of prefetch on PLT.
  </summary>
</histogram>

<histogram name="Prerender.LocalPredictorServiceLookupTime" units="ms">
  <obsolete>
    Deprecated April 2015
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    Time to perform the Service Lookup for the local predictor. This operation
    queries a Google service to obtain pages to prerender, as well as whether
    prerender candidate pages are likely safe for prerendering.
  </summary>
</histogram>

<histogram name="Prerender.LocalPredictorTimeUntilUsed" units="ms">
  <obsolete>
    Deprecated April 2015
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    Time from when a prerendered page is started to when it is first used due to
    user navigation. If the page is never used, it is not included in this
    histogram.  This only refers to prerenders based on the local predictor.
  </summary>
</histogram>

<histogram name="Prerender.LocalPredictorURLLookupTime" units="ms">
  <obsolete>
    Deprecated April 2015
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    Time to perform the URL Lookup for the local predictor. This operation
    retrieves from the user's local browsing history the URLs corresponding to
    URLIDs.
  </summary>
</histogram>

<histogram name="Prerender.LocalVisitCoreTransition" enum="CorePageTransition">
  <obsolete>
    deprecated Nov 16 2012
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The transition type for each new visit as recorded in the local visits
    database.
  </summary>
</histogram>

<histogram name="Prerender.LocalVisitDatabaseSize">
  <obsolete>
    deprecated Nov 16 2012
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Size of the local visits database (number of entries).</summary>
</histogram>

<histogram name="Prerender.LocalVisitEvents" enum="PrerenderLocalVisitEvents">
  <obsolete>
    deprecated Nov 16 2012
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Enumeration of what events related to local visits have occurred
  </summary>
</histogram>

<histogram name="Prerender.ModPagespeedHeader">
  <obsolete>
    Deprecated as of 10/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Previous version of the Prerender.PagespeedHeader.* histograms.
  </summary>
</histogram>

<histogram name="Prerender.NetworkBytes.TotalForProfile" units="bytes">
  <obsolete>
    Deprecated May 13th 2014, use Prerender.NetworkBytesTotalForProfile instead.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Number of bytes transferred on the network for URLRequests (not including
    HTTP/TLS/TCP/IP overhead).  Reported on event of a PrerenderContents
    deletion.  Includes prerender bytes.  Bytes are only counted when
    prerendering is enabled and not in a control group.  The sum of the
    distribution for a single user represents all of that user's network
    transfers for resource for that time period while prerendering was enabled.
  </summary>
</histogram>

<histogram name="Prerender.NetworkBytes.Used" units="bytes">
  <obsolete>
    Deprecated May 13th 2014, use Prerender.NetworkBytes.Used instead.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Number of bytes transferred on the network for URLRequests (not including
    HTTP/TLS/TCP/IP overhead) for a prerender that was used (or would have been
    used).
  </summary>
</histogram>

<histogram name="Prerender.NetworkBytes.Wasted" units="bytes">
  <obsolete>
    Deprecated May 13th 2014, use Prerender.NetworkBytes.Wasted instead.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Number of bytes transferred on the network for URLRequests (not including
    HTTP/TLS/TCP/IP overhead) for a prerender that was not used.
  </summary>
</histogram>

<histogram name="Prerender.NetworkBytesTotalForProfile" units="bytes">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Number of bytes transferred on the network for URLRequests (not including
    HTTP/TLS/TCP/IP overhead).  Reported on event of a PrerenderContents
    deletion.  Includes prerender bytes.  Bytes are only counted when
    prerendering is enabled and not in a control group.  The sum of the
    distribution for a single user represents all of that user's network
    transfers for resource for that time period while prerendering was enabled.
  </summary>
</histogram>

<histogram name="Prerender.NetworkBytesUsed" units="bytes">
  <obsolete>
    Deprecated 2017-09 as prerenders can no longer be 'used' (=='swapped-in').
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Number of bytes transferred on the network for URLRequests (not including
    HTTP/TLS/TCP/IP overhead) for a prerender that was used (or would have been
    used).
  </summary>
</histogram>

<histogram name="Prerender.NetworkBytesWasted" units="bytes">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Number of bytes transferred on the network for URLRequests (not including
    HTTP/TLS/TCP/IP overhead) for a prerender that was not used. All
    nostate-prefetch bytes are currently counted as wasted because it is hard to
    track byte use in HTTP cache.
  </summary>
</histogram>

<histogram name="Prerender.NoStatePrefetchAge" units="ms">
  <obsolete>
    Deprecated December 28, 2016, use Prerender.PrefetchAge instead.
  </obsolete>
  <owner>droger@chromium.org</owner>
  <owner>mattcary@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>Time between the prefetch and the actual load of the page.</summary>
</histogram>

<histogram name="Prerender.NoStatePrefetchMainResourceRedirects"
    units="redirects">
  <owner>droger@chromium.org</owner>
  <owner>mattcary@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Length of the redirect chain for main resources loaded by NoStatePrefetch.
    Recorded when the final response in the chain is received.
  </summary>
</histogram>

<histogram name="Prerender.NoStatePrefetchRendererLifetimeExtension" units="ms">
  <owner>jam@chromium.org</owner>
  <summary>
    Time a prefetch renderer is kept alive after parsing to wait for
    subresources to finish loading.
  </summary>
</histogram>

<histogram name="Prerender.NoStatePrefetchRendererParseTime" units="ms">
  <owner>jam@chromium.org</owner>
  <summary>
    Time between prefetch renderer startup and when parsing is complete.
  </summary>
</histogram>

<histogram name="Prerender.NoStatePrefetchResponseTypes"
    enum="NoStatePrefetchResponseType">
  <owner>droger@chromium.org</owner>
  <owner>mattcary@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Type of responses received by NoStatePrefetch, distinguishing cacheable
    resources from no-store resources, and main resources from sub-resources.
    Recorded when a response is received, including on each redirect.
  </summary>
</histogram>

<histogram name="Prerender.NoStatePrefetchSubResourceRedirects"
    units="redirects">
  <owner>droger@chromium.org</owner>
  <owner>mattcary@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Length of the redirect chain for sub-resources loaded by NoStatePrefetch.
    Recorded when the final response in the chain is received.
  </summary>
</histogram>

<histogram name="Prerender.OmniboxNavigationsCouldPrerender">
  <owner>pasko@chromium.org</owner>
  <summary>
    A boolean that indicates whether the Omnibox navigation being committed
    could have been prerendered by the Omnibox Prerender system. This provides
    an upper bound for Prerender.OmniboxNavigationsUsedPrerenderCount and allows
    the potential for Omnibox Prerendering coverage to be understood. If Omnibox
    Prerendering is disabled, this histogram will register a 'false' entry. The
    total count is the equivalent of the deprecated
    NetworkActionPredictor.NavigationCount histogram.
  </summary>
</histogram>

<histogram name="Prerender.OmniboxNavigationsUsedPrerenderCount">
  <obsolete>
    Deprecated 2017-09 as prerenders can no longer be 'used' (=='swapped-in').
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    The number of navigations that use a prerender initiated from the Omnibox.
    The count is incremented when the Prerendered tab is swapped in if the
    Prerender was initiated by the Omnibox, which obviously requires
    Prerendering from the Omnibox to be enabled.
  </summary>
</histogram>

<histogram name="Prerender.OmniboxPrerenderCount">
  <obsolete>
    Deprecated 2017-09.
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    The number of prerenders initiated from the Omnibox. This is incremented
    when the NetworkActionPredictor suggests Prerendering as an optimal strategy
    given the text the user has entered and the Autocomplete suggestion
    currently selected. It is only incremented if Prerendering from the Omnibox
    is enabled.
  </summary>
</histogram>

<histogram name="Prerender.PagespeedHeader.ServerCounts"
    enum="PagespeedHeaderServerType">
  <obsolete>
    Deprecated April 2018
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    The number of responses received bucketed into the range [0,4]: bucket 0 is
    the total number of responses received; bucket 1 is the number of responses
    received with an X-Mod-Pagespeed header [indicating a mod_pagespeed server];
    bucket 2 is the number of responses received with an X-Page-Speed header and
    a header value in the X-Mod-Pagespeed format (a.b.c.d-e) [indicating an
    ngx_pagespeed server]; bucket 3 is the number of responses received with an
    X-Page-Speed header and a header value in the PageSpeed Service format
    (a_b_c) [indicating a PSS server]; and bucket 4 is the number of responses
    received with an X-Page-Speed header and a header value in neither of the
    preceding formats [indicating some other server; IISpeed is the only known
    one at this stage].
  </summary>
</histogram>

<histogram name="Prerender.PagespeedHeader.VersionCounts"
    enum="PagespeedVersion">
  <obsolete>
    Deprecated April 2018
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    The number of responses received that either have an X-Mod-Pagespeed header
    or have an X-Page-Speed header with a value in the X-Mod-Pagespeed format
    (a.b.c.d-e), bucketed into the range [1,99]: bucket 1 is for header values
    that aren't in the a.b.c.d-e format, the remaining buckets are an encoding
    of the value: 2 + 2 * (max(c, 10) - 10) + (d &gt; 1 ? 1 : 0). The rationale
    is that 'c' is incremented with each new release and 'd' is initially 0 but
    is incremented for each patch to a release.
  </summary>
</histogram>

<histogram name="Prerender.PageviewEvents" enum="PrerenderPageviewEvents">
  <obsolete>
    deprecated Nov 16 2012
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Types of pages rendered.</summary>
</histogram>

<histogram name="Prerender.PageVisitedStatus" enum="Boolean">
  <obsolete>
    deprecated March 30, 2015
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    Indicates whether the user has ever visited (in the past) a URL for which a
    prerender is launched.
  </summary>
</histogram>

<histogram name="Prerender.PerceivedPageLoadTime_Control" units="ms">
  <obsolete>
    Deprecated 03/24/11.  Replaced by
    Prerender.PerceivedPLT_ContentPrefetchPrerenderControl.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from when a user navigates to a page to when it loads. Since the pages
    may start loading before the user navigates to it, this does not include any
    portion of load prior to navigation.

    This particular histogram is for all page loads for users who do not have
    prerendering enabled.
  </summary>
</histogram>

<histogram name="Prerender.PerceivedPageLoadTime_PrerenderMatchControl"
    units="ms">
  <obsolete>
    Deprecated 03/24/11.   Replaced by
    Prerender.PerceivedPLTMatched_ContentPrefetchPrerenderControl.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from when a user navigates to a page to when it loads. Since the pages
    may start loading before the user navigates to it, this does not include any
    portion of load prior to navigation.

    This particular histogram is only for pages that would have been prerendered
    if the user had prerender enabled.
  </summary>
</histogram>

<histogram name="Prerender.PerceivedPageLoadTime_PrerenderMatchTreatment"
    units="ms">
  <obsolete>
    Deprecated 03/24/11.   Replaced by
    Prerender.PerceivedPLTMatched_ContentPrefetchPrerender.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from when a user navigates to a page to when it loads. Since the pages
    may start loading before the user navigates to it, this does not include any
    portion of load prior to navigation.

    This particular histogram is for all prerendered page loads for users who
    have prerender enabled.
  </summary>
</histogram>

<histogram name="Prerender.PerceivedPageLoadTime_Treatment" units="ms">
  <obsolete>
    Deprecated 03/24/11.   Replaced by
    Prerender.PerceivedPLT_ContentPrefetchPrerender.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from when a user navigates to a page to when it loads. Since the pages
    may start loading before the user navigates to it, this does not include any
    portion of load prior to navigation.

    This particular histogram is for all page loads for users who have
    prerendering enabled.
  </summary>
</histogram>

<histogram name="Prerender.PerceivedPageLoadTime_WindowControl" units="ms">
  <obsolete>
    Deprecated 03/24/11.   Replaced by
    Prerender.PerceivedPLTWindowed_ContentPrefetchPrerenderControl.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from when a user navigates to a page to when it loads. Since the pages
    may start loading before the user navigates to it, this does not include any
    portion of load prior to navigation.

    This particular histogram is for all page loads within 30 seconds after a
    prefetch tag is seen for users who do not have prerendering enabled.
  </summary>
</histogram>

<histogram name="Prerender.PerceivedPageLoadTime_WindowTreatment" units="ms">
  <obsolete>
    Deprecated 03/24/11.   Replaced by
    Prerender.PerceivedPLTWindowed_ContentPrefetchPrerender.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from when a user navigates to a page to when it loads. Since the pages
    may start loading before the user navigates to it, this does not include any
    portion of load pre navigation.

    This particular histogram is for all page loads within 30 seconds after a
    prefetch tag is seen for users who have prerendering enabled.
  </summary>
</histogram>

<histogram name="Prerender.PerceivedPLT" units="ms">
  <obsolete>
    Deprecated 2017-03.
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    Time from when a user navigates to a page to when it loads. Since the pages
    may start loading before the user navigates to it, this does not include any
    portion of load prior to navigation.

    This is recorded for all pages loaded in a session.
  </summary>
</histogram>

<histogram name="Prerender.PerceivedPLTFirstAfterMiss" units="ms">
  <obsolete>
    Deprecated 2017-03.
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    Time from when a user navigates to a page to when it loads. Since the pages
    may start loading before the user navigates to it, this does not include any
    portion of load prior to navigation.

    This is recorded for the first page load completing immediately after a
    prerender.
  </summary>
</histogram>

<histogram name="Prerender.PerceivedPLTFirstAfterMissAnyOnly" units="ms">
  <obsolete>
    Deprecated 2017-03.
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    Time from when a user navigates to a page to when it loads. Since the pages
    may start loading before the user navigates to it, this does not include any
    portion of load prior to navigation.

    &quot;FirstAfterMiss&quot; means the first pageload after a prerender miss.
    There are two types: Any, and Non-overlapping.  The latter only applies to
    page loads initiated after the prerender.  This variable records cases where
    only Any triggered.
  </summary>
</histogram>

<histogram name="Prerender.PerceivedPLTFirstAfterMissBoth" units="ms">
  <obsolete>
    Deprecated 2017-03.
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    Time from when a user navigates to a page to when it loads. Since the pages
    may start loading before the user navigates to it, this does not include any
    portion of load prior to navigation.

    &quot;FirstAfterMiss&quot; means the first pageload after a prerender miss.
    There are two types: Any, and Non-overlapping.  The latter only applies to
    page loads initiated after the prerender.  This variable records cases where
    both triggered.
  </summary>
</histogram>

<histogram name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping" units="ms">
  <obsolete>
    Deprecated 2017-03.
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    Time from when a user navigates to a page to when it loads. Since the pages
    may start loading before the user navigates to it, this does not include any
    portion of load prior to navigation.

    This is recorded for the first page load completing immediately after a
    prerender, but which has also started after the prerender has been
    initiated.
  </summary>
</histogram>

<histogram name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly"
    units="ms">
  <obsolete>
    Deprecated 2017-03.
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    Time from when a user navigates to a page to when it loads. Since the pages
    may start loading before the user navigates to it, this does not include any
    portion of load prior to navigation.

    &quot;FirstAfterMiss&quot; means the first pageload after a prerender miss.
    There are two types: Any, and Non-overlapping.  The latter only applies to
    page loads initiated after the prerender.  This variable records cases where
    only Non-overlapping triggered.
  </summary>
</histogram>

<histogram name="Prerender.PerceivedPLTMatched" units="ms">
  <obsolete>
    Deprecated 2017-03.
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    Time from when a user navigates to a page to when it loads. Since the pages
    may start loading before the user navigates to it, this does not include any
    portion of load prior to navigation.

    This is recorded only for prerendered pages, or for pages which would have
    been prerendered in the control case.
  </summary>
</histogram>

<histogram name="Prerender.PerceivedPLTMatchedComplete" units="ms">
  <obsolete>
    Deprecated August 2016
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    Time from when a user navigates to a page to when it loads. Since the pages
    may start loading before the user navigates to it, this does not include any
    portion of load prior to navigation.

    This is recorded only for prerendered pages, or for pages which would have
    been prerendered in the control case.

    In MatchedComplete, the prerender group also contains cancelled prerenders,
    so as to produce a perfect match of page views attributed this group in the
    prerender group with those attributed to this group in the control group.
  </summary>
</histogram>

<histogram name="Prerender.PerceivedPLTWindowed" units="ms">
  <obsolete>
    Deprecated 2017-03.
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    Time from when a user navigates to a page to when it loads. Since the pages
    may start loading before the user navigates to it, this does not include any
    portion of load prior to navigation.

    This is recorded for all page loads which happen within 30 seconds after a
    prefetch tag is observed.
  </summary>
</histogram>

<histogram name="Prerender.PerceivedPLTWindowNotMatched" units="ms">
  <obsolete>
    Deprecated 2017-03.
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    Time from when a user navigates to a page to when it loads. Since the pages
    may start loading before the user navigates to it, this does not include any
    portion of load prior to navigation.

    This is recorded for all page loads which happen within 30 seconds after a
    prefetch tag is observed and which do not correspond to a prerender tag.
  </summary>
</histogram>

<histogram name="Prerender.PerceivedTTFCPRecorded" enum="BooleanRecorded">
  <owner>droger@chromium.org</owner>
  <owner>mattcary@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Whether the perceived Time to First Contentful Paint (TTFCP) was recorded
    successfully for a prerendered page. Since a prerendered page will start
    loading before a user navigates to it, the perceived TTFCP does not include
    an time prior to the user navigation. If true, there is an associated
    PrefetchTTFCP that records the TTFCP from the swapped-in navigation start.
    If false, no PrefetchTTFCP was recorded.
  </summary>
</histogram>

<histogram name="Prerender.PercentLoadDoneAtSwapin">
  <obsolete>
    Deprecated 2017-09 as prerenders can no longer be 'used' (=='swapped-in').
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    For prerenders that are swapped in, the percentage of the time from load
    start until the onload event fires that has elapsed at the time of the
    swapin.
  </summary>
</histogram>

<histogram name="Prerender.PeriodicCleanupDeleteContentsTime" units="ms">
  <owner>pasko@chromium.org</owner>
  <summary>
    How long the cleanup portion of PrerenderManager::PeriodicCleanup takes, to
    measure jank.
  </summary>
</histogram>

<histogram name="Prerender.PeriodicCleanupResourceCheckTime" units="ms">
  <owner>pasko@chromium.org</owner>
  <summary>
    How long the resource check portion of PrerenderManager::PeriodicCleanup
    takes, to measure jank.
  </summary>
</histogram>

<histogram name="Prerender.PrefetchAge" units="ms">
  <owner>droger@chromium.org</owner>
  <owner>mattcary@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Time between a prefetch or effective prefetch and the actual load of the
    page. For NoState prefetch, this is the time of the actual prefetch. For
    prerendering, it is the time that prerender began. For control groups in
    NoState prefetch experiments, it is the time that prefetch would have
    occurred.
  </summary>
</histogram>

<histogram name="Prerender.PrefetchTTFCP" units="ms">
  <owner>droger@chromium.org</owner>
  <owner>mattcary@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Time to first contentful paint (TTFCP) for navigations related to prefetch
    (including prerender, no-state prefetch, and associated experiments). This
    measures user-visible TTFCP. For no-state prefetch this is standard
    navigation-to-FCP; for prerender this is the time from navigation start when
    the prerender is swapped in to FCP.
  </summary>
</histogram>

<histogram name="Prerender.PrerenderCountOf3Max">
  <obsolete>
    Deprecated 2017-03.
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    After launching a prerender, how many simultanious prerenders are recorded
    as running, out of a maximum of three.
  </summary>
</histogram>

<histogram name="Prerender.PrerenderNotSwappedInPLT" units="ms">
  <obsolete>
    Deprecated 2017-03.
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    For prerenders that finish loading before they are ever swapped in, their
    page load time until the onload event fires.
  </summary>
</histogram>

<histogram name="Prerender.PrerendersPerSessionCount">
  <owner>pasko@chromium.org</owner>
  <summary>
    The number of sessions that have at least X successful prerenders. Recorded
    only on iOS since 2017-09.
  </summary>
</histogram>

<histogram name="Prerender.RelTypesLinkAdded" enum="PrerenderRelTypes">
  <owner>pasko@chromium.org</owner>
  <summary>
    For each prerender link added to a document, records the rel types present
    on the link element.
  </summary>
</histogram>

<histogram name="Prerender.RelTypesLinkStarted" enum="PrerenderRelTypes">
  <owner>pasko@chromium.org</owner>
  <summary>
    For each prerender in a document which starts prerendering, records the rel
    types present on the link element.
  </summary>
</histogram>

<histogram name="Prerender.RendererIdleTime" units="ms">
  <obsolete>
    deprecated Nov 16 2012
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    This is the time from when a prerendered page finishes loading to when it is
    displayed, as measured by the renderer process. When a page is displayed
    before it finishes loading, no value is recorded in this histogram.
  </summary>
</histogram>

<histogram name="Prerender.RendererPerceivedPLT" units="ms">
  <obsolete>
    deprecated Nov 16 2012
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Perceived load time of a page, as measured by the renderer process. For
    non-prerendered pages, this is just BeginToFinish. For displayed prerendered
    pages, this is the time from when the prerendered page is moved into a
    TabContents until finish. &quot;Finish&quot; == after onload() and all
    resources are loaded. Note that this is 0 if the loading finishes before the
    page is moved into a TabContents.
  </summary>
</histogram>

<histogram name="Prerender.RendererPerceivedPLTMatched" units="ms">
  <obsolete>
    deprecated Nov 16 2012
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Perceived load time of a prerendered page that is displayed, as measured by
    the renderer process. This is the time from when the prerendered page is
    moved into a TabContents until finish. &quot;Finish&quot; == after onload()
    and all resources are loaded. Note that this is 0 if the loading finishes
    before the page is moved into a TabContents.
  </summary>
</histogram>

<histogram name="Prerender.RendererTimeUntilDisplay" units="ms">
  <obsolete>
    deprecated Nov 16 2012
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time elapsed between when the prerendering of a page starts and when the
    page is displayed, as measured by the renderer process. Prerendered pages
    discarded without being displayed are excluded from this count.
  </summary>
</histogram>

<histogram name="Prerender.SchemeCancelReason"
    enum="PrerenderSchemeCancelReason">
  <owner>pasko@chromium.org</owner>
  <summary>
    The detailed reason why a prerender is canceled with
    FINAL_STATUS_UNSUPPORTED_SCHEME
  </summary>
</histogram>

<histogram name="Prerender.Sessions" enum="PrerenderMode">
  <obsolete>
    deprecated Nov 16 2012
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Enumeration of how prerender was used per session.</summary>
</histogram>

<histogram name="Prerender.SessionStorageNamespaceMergeTime" units="ms">
  <obsolete>
    Deprecated Dec 12 2014.
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>Time to perform the session storage namespace merge.</summary>
</histogram>

<histogram name="Prerender.SimulatedLocalBrowsingBaselinePLT" units="ms">
  <obsolete>
    Deprecated April 2015
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    For simulated local browsing prerendering, the baseline PLT of pages without
    any prerendering for pages that would be prerendered.
  </summary>
</histogram>

<histogram name="Prerender.SimulatedLocalBrowsingPLT" units="ms">
  <obsolete>
    Deprecated April 2015
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    For simulated local browsing prerendering, the estimated PLT of pages with
    prerendering enabled for pages that would be prerendered.
  </summary>
</histogram>

<histogram name="Prerender.TabContentsDeleterSuppressedDialog"
    enum="BooleanSuppressed">
  <owner>pasko@chromium.org</owner>
  <summary>
    A boolean that indicates how often we suppress a dialog from a tab when
    swapping it with a prerender.
  </summary>
</histogram>

<histogram name="Prerender.TabContentsDeleterTimeout"
    enum="BooleanCloseTimeout">
  <owner>pasko@chromium.org</owner>
  <summary>
    A boolean that indicates how often we fail to delete an old prerendered tab
    before the timeout.
  </summary>
</histogram>

<histogram name="Prerender.TabHelperEvent" enum="PrerenderTabHelperEvents">
  <obsolete>
    Deprecated April 2015
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    Enumeration of what events related to the TabHelper class have occurred.
  </summary>
</histogram>

<histogram name="Prerender.TimeBetweenPrerenderRequests" units="ms">
  <obsolete>
    Deprecated 2017-09.
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>Time between subsequent prerender requests.</summary>
</histogram>

<histogram name="Prerender.TimeSinceLastRecentVisit" units="ms">
  <obsolete>
    Deprecated 2017-09.
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    The time elapsed between the most recent visit to a URL and when an
    attempted prerender of the same URL is cancelled with
    FINAL_STATUS_RECENTLY_VISITED.
  </summary>
</histogram>

<histogram name="Prerender.TimeToClick" units="ms">
  <obsolete>
    deprecated Nov 16 2012
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Duration that a user hovers a link before clicking on it.</summary>
</histogram>

<histogram name="Prerender.TimeUntilUsed" units="ms">
  <obsolete>
    deprecated Nov 16 2012.  See Prerender.TimeUntilUsed2, which has a larger
    range.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time from when a prerendered page is started to when it is first used due to
    user navigation. If the page is never used, it is not included in this
    histogram.
  </summary>
</histogram>

<histogram name="Prerender.TimeUntilUsed2" units="ms">
  <obsolete>
    Deprecated 2017-09 as prerenders can no longer be 'used' (=='swapped-in').
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    Time from when a prerendered page is started to when it is first used due to
    user navigation. If the page is never used, it is not included in this
    histogram.
  </summary>
</histogram>

<histogram name="Previews.CacheControlNoTransform.BlockedPreview"
    enum="PreviewsType">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Blocked previews due to Cache-Control:no-transform directive.
  </summary>
</histogram>

<histogram name="Previews.ContentLength" units="KB">
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The actual data used for a page load using a preview optimization.
  </summary>
</histogram>

<histogram name="Previews.ContextMenuAction.LoFi"
    enum="PreviewsContextMenuActionLoFi">
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    User interactions with the Lo-Fi context menu options. These include:

    Displays and clicks on the &quot;Load image&quot; and &quot;Load
    images&quot; context menu options. Count of pages where the user has clicked
    &quot;Load image&quot; at least once.
  </summary>
</histogram>

<histogram name="Previews.DataInflation" units="KB">
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The estimated amount that the content was inflated for a page load using a
    previews optimization. Recorded when a page load using a previews
    optimization inflates the data used.
  </summary>
</histogram>

<histogram name="Previews.DataInflationPercent" units="%">
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The estimated percent of data used that a page load would have otherwise
    cost for a page load using a previews optimization. Recorded when a page
    load using a previews optimization inflates the data used.
  </summary>
</histogram>

<histogram name="Previews.DataSavings" units="KB">
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The estimated data savings for a page load using a previews optimization.
    Recorded when a page load using a previews optimization reduces the data
    used.
  </summary>
</histogram>

<histogram name="Previews.DataSavingsPercent" units="%">
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The estimated percent of data savings for a page load using a previews
    optimization. Recorded when a page load using a previews optimization
    reduces the data used.
  </summary>
</histogram>

<histogram name="Previews.EligibilityReason" enum="PreviewsEligibilityReason">
  <owner>ryansturm@chromium.org</owner>
  <summary>
    When evaluating whether to show a user a preview, the preview might be
    disallowed for various reasons. If the preview is disallowed, then this
    reports the reason for disallowing it. If the preview is allowed, then this
    generally reports &quot;Previews Allowed&quot;. It may instead report
    &quot;Previews Allowed without server rule check&quot; for a preview that
    expects to check server rules but they are not enabled.
  </summary>
</histogram>

<histogram name="Previews.InfoBarAction" enum="PreviewsInfoBarAction">
  <owner>bengr@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <summary>
    User interactions with the previews &quot;Saved data&quot; infobar. These
    include:

    Displays of the infobar and clicks on the &quot;Load original&quot; link.
    Whether the infobar was dismissed by navigation or the user clicking on
    &quot;X&quot; close button.
  </summary>
</histogram>

<histogram name="Previews.InfoBarTimestamp" enum="PreviewsInfoBarTimestamp">
  <owner>megjablon@chromium.org</owner>
  <summary>
    Whether the timestamp for a stale preview was shown on the infobar. If the
    timestamp was not shown, states the reason why.
  </summary>
</histogram>

<histogram name="Previews.OptOut.DBRowCount" units="rows">
  <obsolete>
    No longer used as of 06/2018.
  </obsolete>
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The number of rows in the Previews opt out SQLite table at profile startup.
  </summary>
</histogram>

<histogram name="Previews.OptOut.SQLiteLoadError" enum="SqliteErrorCode">
  <obsolete>
    No longer used as of 06/2018.
  </obsolete>
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The SQLite error code that the previews opt out store saw when trying to
    open the SQLite database. This is logged when an unexpected error occurs
    when trying to open the database file.
  </summary>
</histogram>

<histogram name="Previews.OptOut.UserOptedOut" enum="PreviewsUserOptedOut">
  <owner>ryansturm@chromium.org</owner>
  <summary>
    Whether the user chose to reload the original page when shown a preview.
  </summary>
</histogram>

<histogram name="Previews.OriginalContentLength" units="KB">
  <owner>ryansturm@chromium.org</owner>
  <summary>
    The estimated content length of a page load using a preview optimization.
  </summary>
</histogram>

<histogram name="Previews.ProcessHintsResult" enum="PreviewsProcessHintsResult">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Whether processing the previews hints succeeded and if any previews hints
    were found. Recorded when the PreviewsOptimizationGuide receives a
    notification to process hints.
  </summary>
</histogram>

<histogram name="PrinterService.PrinterServiceEvent"
    enum="PrinterServiceEventType">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    Count of events in PrinterService on Chrome OS related to USB printers.
  </summary>
</histogram>

<histogram name="Printing.ConversionSize.Emf" units="KB">
  <owner>thestig@chromium.org</owner>
  <summary>
    On Windows, the average size of a printed page after converting to EMF.
  </summary>
</histogram>

<histogram name="Printing.ConversionSize.EmfWithGdiText" units="KB">
  <owner>thestig@chromium.org</owner>
  <summary>
    On Windows, the average size of a printed page after converting to EMF with
    the GDI Text experiment turned on.
  </summary>
</histogram>

<histogram name="Printing.ConversionSize.PostScript2" units="KB">
  <owner>thestig@chromium.org</owner>
  <summary>
    On Windows, the average size of a printed page after converting to level 2
    PostScript.
  </summary>
</histogram>

<histogram name="Printing.ConversionSize.PostScript3" units="KB">
  <owner>thestig@chromium.org</owner>
  <summary>
    On Windows, the average size of a printed page after converting to level 3
    PostScript.
  </summary>
</histogram>

<histogram name="Printing.ConversionSize.Pwg" units="KB">
  <owner>thestig@chromium.org</owner>
  <summary>
    On desktop, the average size of a printed page after converting to PWG
    Raster format.
  </summary>
</histogram>

<histogram name="Printing.CUPS.AddressResolutionResult" enum="BooleanSuccess">
  <owner>skau@chromium.org</owner>
  <summary>
    Records whether resolution of a .local address via mDNS was successful. The
    metric is recorded during attempted setup of a printer discovered via mDNS.
  </summary>
</histogram>

<histogram name="Printing.CUPS.IppAttributesSuccess" enum="BooleanSuccess">
  <owner>skau@chromium.org</owner>
  <summary>
    Record if the request for IPP attributes was successful during printer
    setup.  This only occurs for setup attempts of IPP and IPPS printers.
  </summary>
</histogram>

<histogram name="Printing.CUPS.JobResult" enum="PrintJobResult">
  <owner>skau@chromium.org</owner>
  <summary>
    The final status of every print job that was succesfully queued.  Only used
    on Chrome OS.
  </summary>
</histogram>

<histogram name="Printing.CUPS.PpdSource" enum="PpdSource">
  <owner>skau@chromium.org</owner>
  <summary>
    Records the source of PostScript Printer Description files used during
    printer setup.  Entries are recorded for every attempted configuration. Only
    recorded on Chrome OS.
  </summary>
</histogram>

<histogram name="Printing.CUPS.PrinterAdded" enum="PrinterProtocol">
  <owner>skau@chromium.org</owner>
  <summary>
    The protocol for a printer that was added.  Used to track printer churn by
    protocol.  Only on Chrome OS.
  </summary>
</histogram>

<histogram name="Printing.CUPS.PrinterRemoved" enum="PrinterProtocol">
  <owner>skau@chromium.org</owner>
  <summary>
    The protocol for a printer that was removed.  Used to track printer churn by
    protocol.  Only on Chrome OS.
  </summary>
</histogram>

<histogram name="Printing.CUPS.PrintersDiscovered" units="printers">
  <owner>skau@chromium.org</owner>
  <summary>
    The number of printers shown in the discovered printers dialog during
    printer set up.  Only recorded on Chrome OS.
  </summary>
</histogram>

<histogram name="Printing.CUPS.PrinterSetupResult" enum="PrinterSetupResult">
  <owner>skau@chromium.org</owner>
  <summary>
    The success or error code for the setup of a CUPS printer.  Recorded when
    setup is attempted through the settings dialogs.  Only recorded on Chrome
    OS.
  </summary>
</histogram>

<histogram name="Printing.CUPS.PrintJobsQueued" units="count">
  <owner>skau@chromium.org</owner>
  <summary>
    The size of the print queue when a print job is initially queued.  When the
    first job is started, a zero is recorded.  Only used on Chrome OS.
  </summary>
</histogram>

<histogram name="Printing.CUPS.ProtocolUsed" enum="PrinterProtocol">
  <owner>skau@chromium.org</owner>
  <summary>
    Records the protocol for a selected printer in Chrome OS.  Used to track
    usage of the various printer protocols.  Since a selection occurs when print
    preview is opened, this will count at least one every time that happens if a
    CUPS printer was selected.
  </summary>
</histogram>

<histogram name="PrintPreview.DestinationAction"
    enum="PrintPreviewPrintDestinationBuckets">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    Actions performed by the user when the print destination search widget is
    shown to the user.
  </summary>
</histogram>

<histogram name="PrintPreview.FontType" enum="PrintPreviewFontTypeType">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    Count of font file formats embeeded in print preview PDFs. These numbers are
    biased by what the platforms supports in terms of detection.
  </summary>
</histogram>

<histogram name="PrintPreview.GcpPromo" enum="PrintPreviewGcpPromoBuckets">
  <obsolete>
    No longer used as of 09/2017.
  </obsolete>
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    Actions performed by the user when the Google Cloud Print add-printers
    promotion is shown to the user.
  </summary>
</histogram>

<histogram name="PrintPreview.InitialDisplayTime" units="ms">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    Time from when print preview is intiated until the intial preview is sent to
    the preview tab for rendering.
  </summary>
</histogram>

<histogram name="PrintPreview.InitializationTime" units="ms">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    Time from when print preview is intiated until the preview PDF generation is
    started.
  </summary>
</histogram>

<histogram name="PrintPreview.InitiatedByScript" enum="BooleanMainFrame">
  <owner>nasko@chromium.org</owner>
  <summary>
    Logged when a document calls the window.print() API. The boolean value
    indicates whether it is invoked by the main frame. It will be false for
    documents in subframes.
  </summary>
</histogram>

<histogram name="PrintPreview.ManagePrinters">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    Count the number of requests received to show the manage printers dialog.
  </summary>
</histogram>

<histogram name="PrintPreview.NumberOfPrinters">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    Count the total number of printers shown in destination drop down list.
  </summary>
</histogram>

<histogram name="PrintPreview.OutOfProcessSubframe" enum="Boolean">
  <owner>nasko@chromium.org</owner>
  <summary>
    Logged when a document calls the window.print() API in any frame. The
    boolean value will be true when the API call is invoked by a document which
    is in a process different than the top level document. It will be false in
    all other cases.
  </summary>
</histogram>

<histogram name="PrintPreview.PageCount.Initial">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    The page count of the initial print preview, a.k.a. the total number of
    pages in documents to be printed.
  </summary>
</histogram>

<histogram name="PrintPreview.PageCount.OpenInMacPreview">
  <owner>thestig@chromium.org</owner>
  <summary>
    The final page count (after page selection) of documents printed to PDF and
    opened in Preview.app on Mac.
  </summary>
</histogram>

<histogram name="PrintPreview.PageCount.PrintToCloudPrint">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    The final page count (after page selection) of documents printed to a cloud
    printer.
  </summary>
</histogram>

<histogram name="PrintPreview.PageCount.PrintToCloudPrintWebDialog">
  <obsolete>
    No longer used as of 01/2016.
  </obsolete>
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    The final page count (after page selection) of documents printed to a cloud
    printer using web dialog.
  </summary>
</histogram>

<histogram name="PrintPreview.PageCount.PrintToPDF">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    The final page count (after page selection) of documents printed to PDF.
  </summary>
</histogram>

<histogram name="PrintPreview.PageCount.PrintToPrinter">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    The final page count (after page selection) of documents printed to a
    printer.
  </summary>
</histogram>

<histogram name="PrintPreview.PageCount.PrintWithExtension">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    The final page count (after page selection) of documents printed to an
    extension printer (using printerProvider API).
  </summary>
</histogram>

<histogram name="PrintPreview.PageCount.PrintWithPrivet">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    The final page count (after page selection) of documents printed to a privet
    printer.
  </summary>
</histogram>

<histogram name="PrintPreview.PageCount.SystemDialog">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    The final page count (after page selection) of documents printed using
    system dialog.
  </summary>
</histogram>

<histogram name="PrintPreview.PdfAction" enum="PrintPreviewPdfActionBuckets">
  <owner>rbpotter@chromium.org</owner>
  <summary>
    Actions taken on the PDF viewer inside Print Preview's preview area.
  </summary>
</histogram>

<histogram name="PrintPreview.PreviewEvent" enum="PrintPreviewHelperEvents">
  <owner>vitalybuka@chromium.org</owner>
  <summary>Print preview events.</summary>
</histogram>

<histogram name="PrintPreview.PrintDocumentSize.HTML" units="KB">
  <owner>thestig@chromium.org</owner>
  <summary>
    The average size of a page in the printed document when the source is HTML.
  </summary>
</histogram>

<histogram name="PrintPreview.PrintDocumentSize.PDF" units="KB">
  <owner>thestig@chromium.org</owner>
  <summary>
    The average size of a page in the printed document when the source is PDF.
  </summary>
</histogram>

<histogram name="PrintPreview.PrintDocumentType"
    enum="PrintPreviewPrintDocumentTypeBuckets">
  <owner>rbpotter@chromium.org</owner>
  <summary>
    Track type of documents printed (HTML vs PDF). Recorded immediately after a
    user requests that a document be printed.
  </summary>
</histogram>

<histogram name="PrintPreview.PrintSettings" enum="PrintSettings">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    Track the popularity of print settings. (Settings when printing to PDF are
    excluded from this statistic.)
  </summary>
</histogram>

<histogram name="PrintPreview.PrintSettingsUi"
    enum="PrintPreviewPrintSettingsUiBuckets">
  <owner>alekseys@chromium.org</owner>
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    Actions performed by the user interacting with print settings UI elements.
  </summary>
</histogram>

<histogram name="PrintPreview.RegeneratePreviewRequest.BeforeCancel">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    The number of times regenerate preview requests received before the user
    clicked the cancel button.
  </summary>
</histogram>

<histogram name="PrintPreview.RegeneratePreviewRequest.BeforeFirstData">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    The number of times regenerate preview requests received before the first
    preview data is availible.
  </summary>
</histogram>

<histogram name="PrintPreview.RegeneratePreviewRequest.BeforePrint">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    The number of times regenerate preview requests received before the user
    clicked the print button.
  </summary>
</histogram>

<histogram name="PrintPreview.RenderAndGeneratePDFTime" units="ms">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    Time taken to render and generate PDF for print preview. (Includes time to
    reflow the page back to normal, but not the time to reflow the page to
    prepare for printing.)
  </summary>
</histogram>

<histogram name="PrintPreview.RenderAndGeneratePDFTimeAvgPerPage" units="ms">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    Time taken to render and generate PDF for print preview divided by the
    number of pages. (Includes time to reflow the page back to normal, but not
    the time to reflow the page to prepare for printing.)
  </summary>
</histogram>

<histogram name="PrintPreview.RendererError" enum="PrintPreviewFailureType">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    Count how frequently a set of pre-defined print preview errors occur.
  </summary>
</histogram>

<histogram name="PrintPreview.RenderPDFPageTime" units="ms">
  <owner>vitalybuka@chromium.org</owner>
  <summary>Time taken to render each PDF page for print preview.</summary>
</histogram>

<histogram name="PrintPreview.RenderToPDFTime" units="ms">
  <owner>vitalybuka@chromium.org</owner>
  <summary>Time taken to render to PDF for print preview.</summary>
</histogram>

<histogram name="PrintPreview.UserAction" enum="PrintPreviewUserActionType">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    Action taken by the user in the preview tab such as print, cancel, print to
    pdf and show advanced print settings dialog.
  </summary>
</histogram>

<histogram name="Privacy.ConsentAuditor.ConsentGiven.Feature"
    enum="ConsentAuditorFeature">
  <owner>markusheintz@google.com</owner>
  <owner>msramek@google.com</owner>
  <summary>
    Logged each time the user grants a consent for a feature integrated with the
    consent auditor. The value indicates which feature.
  </summary>
</histogram>

<histogram name="Privacy.ConsentAuditor.ConsentNotGiven.Feature"
    enum="ConsentAuditorFeature">
  <owner>markusheintz@google.com</owner>
  <owner>msramek@google.com</owner>
  <summary>
    Logged each time the user denies or revokes a consent for a feature
    integrated with the consent auditor. The value indicates which feature.
  </summary>
</histogram>

<histogram name="Privacy.ConsentAuditor.UserEventServiceReady" enum="Boolean">
  <obsolete>
    Deprecated as of 4/2018.
  </obsolete>
  <owner>dullweber@google.com</owner>
  <owner>msramek@google.com</owner>
  <summary>
    Logs whether the UserEventServiceReady is ready when recording a consent.
    This should always be true as the service is created at startup.
  </summary>
</histogram>

<histogram name="Process.Sandbox.FlagOverrodeRemoteSessionCheck" enum="Boolean">
  <owner>pastarmovj@chromium.org</owner>
  <summary>
    Measure how often the automatic recognition for terminal services
    environment would have incorrectly decided that the job object should be
    applied, when it shouldn't have been as dictated by the flag
    --allow-no-sanbox-job. This histogram will guide the final removal of the
    flag, which will be possible when the number of false values becomes
    insignificant.
  </summary>
</histogram>

<histogram name="Process.Sandbox.Launch.Error" enum="WinGetLastError">
  <owner>shrikant@chromium.org</owner>
  <summary>
    Errors returned while launching sandboxed process on Windows. For decoding
    error code please refer to http://goo.gl/fJJiAv.
  </summary>
</histogram>

<histogram name="Process.Sandbox.Launch.Warning" enum="WinGetLastError">
  <owner>forshaw@chromium.org</owner>
  <summary>
    Warnings returned while launching sandboxed process on Windows. For decoding
    error code please refer to http://goo.gl/fJJiAv. This will only be logged
    when SpawnTarget succeeds with SBOX_ALL_OK but the last warning result does
    not equal SBOX_ALL_OK.
  </summary>
</histogram>

<histogram name="Process.Sandbox.Launch.WarningResultCode"
    units="LaunchErrorCodes">
  <owner>forshaw@chromium.org</owner>
  <summary>
    The warning launch error returned while launching sandboxed process on
    Windows. This will only be logged when SpawnTarget succeeds with SBOX_ALL_OK
    but the last warning result does not equal SBOX_ALL_OK.
  </summary>
</histogram>

<histogram name="Process.Sandbox.Lowbox.Launch.Error" enum="WinGetLastError">
  <owner>shrikant@chromium.org</owner>
  <summary>
    Errors returned while launching lowbox enabled sandboxed process on Windows.
    For decoding error code please refer to http://goo.gl/fJJiAv.
  </summary>
</histogram>

<histogram name="ProductTour.IOSScreens" units="ms">
<!-- Name completed by histogram_suffixes name="IOSProductTourScreens" -->

  <owner>mrefaat@google.com</owner>
  <summary>The time spent in product tour screens for ios.</summary>
</histogram>

<histogram name="Profile.AddNewUser" enum="ProfileAddNewUser">
  <owner>bcwhite@chromium.org</owner>
  <owner>rlp@chromium.org</owner>
  <summary>The frequency of ways that new user profiles are added.</summary>
</histogram>

<histogram name="Profile.AndroidAccountManagementMenu"
    enum="ProfileAndroidAccountManagementMenu">
  <owner>aruslan@chromium.org</owner>
  <summary>
    Track user interactions that can be performed in the Android account
    management menu.
  </summary>
</histogram>

<histogram name="Profile.AppCount">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The number of installed apps when a profile is opened.</summary>
</histogram>

<histogram name="Profile.AuthResult" enum="ProfileAuth">
  <owner>bcwhite@chromium.org</owner>
  <summary>
    Counts of authorization results when trying to open a locked profile from
    the User Manager.
  </summary>
</histogram>

<histogram name="Profile.Avatar" enum="ProfileAvatar">
  <owner>rlp@chromium.org</owner>
  <summary>The frequency of selection of each avatar.</summary>
</histogram>

<histogram name="Profile.AvatarLoadStatus" enum="ProfileAvatarLoadStatus">
  <owner>chengx@chromium.org</owner>
  <summary>Load status of an avatar for decorating the Windows taskbar</summary>
</histogram>

<histogram name="Profile.BookmarksSize" units="MB" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Size of the bookmarks database.</summary>
</histogram>

<histogram name="Profile.CookiesSize" units="MB" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Size of the cookies database.</summary>
</histogram>

<histogram name="Profile.CreateAndInitializeProfile" units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>Length of time to setup profile.</summary>
</histogram>

<histogram name="Profile.CreateBrowserContextServicesTime" units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during the CreateBrowserContextServices call
    within OnPrefsLoaded.
  </summary>
</histogram>

<histogram name="Profile.CreateProfileHelperTime" units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during ProfileManager::CreateProfileHelper.
    This is called when a profile is created synchronously (usually at startup).
  </summary>
</histogram>

<histogram name="Profile.CreateResult" enum="ProfileCreateResult">
  <owner>pam@chromium.org</owner>
  <owner>rlp@chromium.org</owner>
  <summary>Result (final status) when creating a new profile.</summary>
</histogram>

<histogram name="Profile.CreateTime" units="ms">
  <obsolete>
    Deprecated as of 8/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Back-end time elapsed while creating a new profile. The max is 30 seconds,
    when an external timeout was applied.
  </summary>
</histogram>

<histogram name="Profile.CreateTimeCanceled" units="ms">
  <obsolete>
    Deprecated as of 8/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time elapsed before the user decided to cancel creation of a new profile.
    Since only managed-user profile creation can be canceled, this time comes
    from managed-user registration. The max is 30 seconds, when an external
    timeout was applied.
  </summary>
</histogram>

<histogram name="Profile.CreateTimeCanceledNoTimeout" units="ms">
  <owner>pam@chromium.org</owner>
  <summary>
    Time elapsed from when the handler received the message that a user clicked
    'Create' until the user decided to cancel creation of a new profile. Since
    only managed-user profile creation can be canceled, this time comes from
    managed-user registration.
  </summary>
</histogram>

<histogram name="Profile.CreateTimeNoTimeout" units="ms">
  <owner>pam@chromium.org</owner>
  <summary>
    Time elapsed from when the handler received the message that a user clicked
    'Create' until the creation either failed with a local error (see
    Profile.CreateResult), was canceled (also recorded in
    Profile.CreateTimeCanceledNoTimeout), or completed successfully.
  </summary>
</histogram>

<histogram name="Profile.Delete" enum="BooleanProfileSignedIn">
  <owner>mlerman@chromium.org</owner>
  <summary>
    This histogram tracks the deletion of the profile. This tracks when the
    cleanup actually takes place, not the UI interaction. The parameter
    indicates if the profile was signed in or not; true means the profile was
    signed in, false means the profile was not signed in.
  </summary>
</histogram>

<histogram name="Profile.DeleteProfileAction" enum="ProfileDeleteAction">
  <owner>mlerman@chromium.org</owner>
  <owner>anthonyvd@chromium.org</owner>
  <summary>
    This histogram tracks which UI screen was used to initiate and confirm the
    deletion of a profile. This does not track when the profile is actually
    deleted, which is an asynchronous process that happens later.
  </summary>
</histogram>

<histogram name="Profile.DesktopMenu" enum="ProfileDesktopMenu">
  <owner>mlerman@chromium.org</owner>
  <summary>
    Track user interactions that can be performed in the user menu and user
    manager. The origin of the action, whether the an interaction in the content
    area or some other source, is noted in the histogram suffix.
  </summary>
</histogram>

<histogram name="Profile.DiceUI.GaiaAccountsStale" enum="BooleanStale">
  <owner>tangltom@chromium.org</owner>
  <summary>
    This histogram tracks whether the accounts cached in the GAIA cookie service
    manager are stale when presenting the user menu when DICE is enabled.
  </summary>
</histogram>

<histogram name="Profile.ExtensionSize" units="MB" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Size of the extension cookies database.</summary>
</histogram>

<histogram name="Profile.FaviconsSize" units="MB" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Size of the favicons database.</summary>
</histogram>

<histogram name="Profile.GetProfile" units="ms">
  <obsolete>
    Deprecated 02/2015. Profile.CreateAndInitializeProfile is more useful.
  </obsolete>
  <owner>rkaplow@chromium.org</owner>
  <summary>Length of time to retrieve profile.</summary>
</histogram>

<histogram name="Profile.GetProfileInfoPath.OutsideUserDir" enum="BooleanHit">
  <owner>anthonyvd@chromium.org</owner>
  <summary>
    Whether Profile::GetProfileInfoPath is called with a profile outside the
    user data directory. We expect this to never happen but need to verify in
    stable. This metric may be removed after M54.
  </summary>
</histogram>

<histogram name="Profile.HistorySize" units="MB">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>Size of the history database.</summary>
</histogram>

<histogram name="Profile.InitProfileUserPrefs.OutsideUserDir" enum="BooleanHit">
  <owner>anthonyvd@chromium.org</owner>
  <summary>
    Whether Profile::InitProfileUserPrefs is called with a profile outside the
    user data directory. We expect this to never happen but need to verify in
    stable. This metric may be removed after M54.
  </summary>
</histogram>

<histogram name="Profile.LaunchBrowser" enum="ProfileType">
  <owner>rlp@chromium.org</owner>
  <summary>
    Number of times users launch a browser window from either a primary or
    secondary profile (i.e., each time a browser window is opened we log which
    type of profile it belongs to).
  </summary>
</histogram>

<histogram name="Profile.LockedProfilesDuration" units="minutes">
  <owner>mlerman@chromium.org</owner>
  <summary>
    How long locked profiles have been locked for. This is logged each time any
    profile is loaded. Note that this does not track the total time the profile
    was locked, but rather the span from when the profile was locked to when the
    measurement takes place.
  </summary>
</histogram>

<histogram name="Profile.NetUserCount" enum="ProfileNetUserCount">
  <owner>bcwhite@chromium.org</owner>
  <owner>rlp@chromium.org</owner>
  <summary>
    Counts of users added and deleted. Percentages are not meaningful. Please
    look at the ratio of the counts/percentages.
  </summary>
</histogram>

<histogram name="Profile.NewAvatarMenu.NotYou"
    enum="ProfileNewAvatarMenuNotYou">
  <obsolete>
    Deprecated 2017-10-16. No longer tracked. Feature removed.
  </obsolete>
  <owner>mlerman@chromium.org</owner>
  <summary>
    Tracks user interactions with the 'Not You?' bubble that users can navigate
    to from the Upgrade bubble after upgrade to the New Avatar Menu.
  </summary>
</histogram>

<histogram name="Profile.NewAvatarMenu.Signin"
    enum="ProfileNewAvatarMenuSignin">
  <obsolete>
    Deprecated 2017-10-19. No longer tracked. Feature removed.
  </obsolete>
  <owner>mlerman@chromium.org</owner>
  <summary>
    Tracks user interactions with the signin bubble that appears in the New
    Avatar Menu upon signin. This bubble appears after the user signs in using
    the Inline Signin flow.
  </summary>
</histogram>

<histogram name="Profile.NewAvatarMenu.Upgrade"
    enum="ProfileNewAvatarMenuUpgrade">
  <obsolete>
    Deprecated 2017-10-16. No longer tracked. Feature removed.
  </obsolete>
  <owner>mlerman@chromium.org</owner>
  <summary>
    Tracks user interactions with the bubble that appears for users in the new
    avatar menu after upgrade.
  </summary>
</histogram>

<histogram name="Profile.NotifyProfileCreatedTime" units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during the Notify() of
    NOTIFICATION_PROFILE_CREATED during ProfileImpl::DoFinalInit().
  </summary>
</histogram>

<histogram name="Profile.NumberOfAccountsPerProfile">
  <owner>mlerman@chromium.org</owner>
  <summary>
    Counts the number of Google-managed accounts linked to a profile. This may
    be counted multiple times per profile. Please review with the &quot;Show
    user counts&quot; option enabled on the dashboard.
  </summary>
</histogram>

<histogram name="Profile.NumberOfActiveProfiles">
  <owner>feuunk@chromium.org</owner>
  <summary>
    Counts the number of profiles on a user's machine at least every 24 hours
    while Chrome is running. Always de-dupe the results with Show User Counts.

    As opposed to Profile.NumberOfProfiles, this counts only profiles that have
    been used in the last 28 days.
  </summary>
</histogram>

<histogram name="Profile.NumberOfManagedProfiles">
  <owner>pam@chromium.org</owner>
  <summary>
    Counts the number of locally managed profiles on a user's machine at least
    every 24 hours while Chrome is running, among cases with at least one
    profile. Always de-dupe the results with Show User Counts.

    This counts only profiles that have been used in the last 28 days.
  </summary>
</histogram>

<histogram name="Profile.NumberOfProfiles">
  <owner>bcwhite@chromium.org</owner>
  <owner>rlp@chromium.org</owner>
  <summary>
    Counts the number of profiles on a user's machine at least every 24 hours
    while Chrome is running. Always de-dupe the results with Show User Counts.

    This counts the total number of profiles on the user's device, regardless of
    whether they've been used recently.
  </summary>
</histogram>

<histogram name="Profile.NumberOfProfilesAfterAddOrDelete">
  <obsolete>
    Deprecated 2013-04-09. No longer tracked. See Profile.NumberOfProfiles.
  </obsolete>
  <owner>bcwhite@chromium.org</owner>
  <owner>rlp@chromium.org</owner>
  <summary>
    Counts the number of profiles on a user's machine whenever a profile is
    added or deleted.
  </summary>
</histogram>

<histogram name="Profile.NumberOfProfilesOnStartup">
  <obsolete>
    Deprecated; replaced by Profile.NumberOfProfiles on 2013-04-09. Data are
    suspect, especially after 2012-02-24: see https://crbug.com/189213.
  </obsolete>
  <owner>bcwhite@chromium.org</owner>
  <owner>rlp@chromium.org</owner>
  <summary>
    Counts the number of profiles on a user's machine when Chrome starts up.
  </summary>
</histogram>

<histogram name="Profile.NumberOfProfilesWithAuthErrors">
  <owner>mlerman@chromium.org</owner>
  <summary>
    Counts the type GAIA authentication errors on a user's machine when Chrome
    starts up. The types of errors are broken down in Signin.AuthError.

    This counts only profiles that have been used in the last 28 days.
  </summary>
</histogram>

<histogram name="Profile.NumberOfSignedInProfiles">
  <owner>bcwhite@chromium.org</owner>
  <owner>rlp@chromium.org</owner>
  <summary>
    Counts the number of signed-in profiles on a user's machine at least every
    24 hours while Chrome is running. Always de-dupe the results with Show User
    Counts.

    This counts only profiles that have been used in the last 28 days.
  </summary>
</histogram>

<histogram name="Profile.NumberOfSignedInProfilesOnStartup">
  <obsolete>
    Deprecated; replaced by Profile.NumberOfSignedInProfiles on 2013-04-09.
  </obsolete>
  <owner>bcwhite@chromium.org</owner>
  <owner>rlp@chromium.org</owner>
  <summary>
    Counts the number of profiles that are signed in to Chrome when Chrome
    starts up.
  </summary>
</histogram>

<histogram name="Profile.NumberOfSignedInProfilesWithGAIAIcons">
  <owner>mlerman@chromium.org</owner>
  <summary>
    Counts the number of signed-in profiles that are using the GAIA image as the
    avatar icon. This is counted at least every 24 hours while Chrome is
    running, so always de-dupe the results with Show User Counts.

    This counts only profiles that have been used in the last 28 days.
  </summary>
</histogram>

<histogram name="Profile.NumberOfSwitches">
  <owner>anthonyvd@chromium.org</owner>
  <summary>
    Counts the number of times profiles were switched in a browser session. This
    value is incremented when a profile is switched to and the result is logged
    during shutdown.
  </summary>
</histogram>

<histogram name="Profile.NumberOfUnusedProfiles">
  <owner>mlerman@chromium.org</owner>
  <summary>
    Counts the number of profiles unused within the past 28 days on a user's
    machine. This is counts at least every 24 hours while Chrome is running, so
    always de-dupe the results with Show User Counts.
  </summary>
</histogram>

<histogram name="Profile.OnLocaleReadyTime" units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during ProfileImpl::OnLocaleReady. This
    happens once after profile was loaded.
  </summary>
</histogram>

<histogram name="Profile.OnPrefsLoadedTime" units="ms">
  <obsolete>
    Deprecated 04/2015, and replaced by Profile.OnLocaleReadyTime.
  </obsolete>
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during ProfileImpl::OnPrefsLoaded.
  </summary>
</histogram>

<histogram name="Profile.Opening" enum="ProfileOpen">
  <obsolete>
    Deprecated because it did not present the information clearly.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The frequency of ways that the profiles are opened.</summary>
</histogram>

<histogram name="Profile.OpenMethod" enum="ProfileOpenMethod">
  <owner>bcwhite@chromium.org</owner>
  <owner>rlp@chromium.org</owner>
  <summary>
    The frequency with which the user opens the different profile menus or
    switches profiles. For the open statistics, this does not mean the user
    necessarily opened a profile after clicking. The switch statistics indicate
    how often and how the user switches profiles. They are provided together for
    comparison of how often the user actually switches after opening the avatar
    bubble menu.
  </summary>
</histogram>

<histogram name="Profile.PercentageOfManagedProfiles">
  <owner>pam@chromium.org</owner>
  <summary>
    Tracks the percentage (0-100) of profiles that are locally managed, recorded
    when Chrome starts up.
  </summary>
</histogram>

<histogram name="Profile.ProfileError" enum="ProfileErrorType">
  <owner>tnagel@chromium.org</owner>
  <summary>
    The error with the current user profile that caused an error dialog to be
    shown. This dialog is shown usually when there is some sort of corruption in
    the user's profile data.
  </summary>
</histogram>

<histogram name="Profile.ProfileImplDoFinalInit" units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during the ProfileImpl::DoFinalInit().
  </summary>
</histogram>

<histogram name="Profile.RemoveUserWarningStatsTime" units="ms">
  <owner>dullweber@chromium.org</owner>
  <summary>
    The amount of time that elapsed during profile statistics calculation.
  </summary>
</histogram>

<histogram name="Profile.SupervisedProfileCreateError"
    enum="GoogleServiceAuthError">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The error code generated in the final step (registration step) of creating a
    new supervised profile.
  </summary>
</histogram>

<histogram name="Profile.SupervisedProfileImportError"
    enum="GoogleServiceAuthError">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The error code generated in the final step (registration step) of importing
    a supervised profile.
  </summary>
</histogram>

<histogram name="Profile.SupervisedProfileTotalCreateTime" units="ms">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time elapsed from when the handler received the message that a user clicked
    'Create' to create a new supervised user profile until the registration ends
    either successfully or with a failure (both recorded in
    Profile.SupervisedProfileCreateResult).
  </summary>
</histogram>

<histogram name="Profile.SupervisedProfileTotalImportTime" units="ms">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Time elapsed from when the handler received the message that a user clicked
    'Import supervised user' until the registration ends either successfully or
    with a failure (both recorded in Profile.SupervisedProfileImportResult).
  </summary>
</histogram>

<histogram name="Profile.SwitchGaiaPhotoSettings"
    enum="ProfileGaiaPhotoOptions" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Counts of when users switch to using their GAIA photo instead of an avatar
    icon or the opposite when they switch back to an avatar icon instead of
    their GAIA photo.
  </summary>
</histogram>

<histogram name="Profile.Sync" enum="ProfileSync">
  <obsolete>
    Deprecated because it did not present the information clearly.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Activity of the user with regards to sync.</summary>
</histogram>

<histogram name="Profile.SyncCustomize" enum="ProfileSyncCustomize"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Number of times and ways the user customized the sync options of their
    profile. Percentages are not meaningful. To determine percentages, take the
    count of a given action over the count of number of customizations.
  </summary>
</histogram>

<histogram name="Profile.SyncSignIn" enum="ProfileType">
  <owner>rpop@google.com</owner>
  <summary>
    Number of times the user signed into sync from original or secondary
    profile.
  </summary>
</histogram>

<histogram name="Profile.ThumbnailsSize" units="MB">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Size of the thumbnails database.</summary>
</histogram>

<histogram name="Profile.TimeToOpenUserManager" units="ms">
  <owner>mlerman@chromium.org</owner>
  <summary>
    Time required to open the UserManager, from when it started to show until
    when its javascript started executing.
  </summary>
</histogram>

<histogram name="Profile.TopSitesSize" units="MB" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Size of the top sites database.</summary>
</histogram>

<histogram name="Profile.TotalHistorySize" units="MB"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Total size of all history databases.</summary>
</histogram>

<histogram name="Profile.TotalSize" units="MB" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Total size of the profile data (excluding sub-folders).</summary>
</histogram>

<histogram name="Profile.TriggeredReset" enum="BooleanReset">
  <owner>robertshield@chromium.org</owner>
  <summary>
    Indicates whether a profile had a reset trigger that caused it to launch a
    reset flow. The presence of this trigger is recorded during profile
    creation.
  </summary>
</histogram>

<histogram name="Profile.Update" enum="ProfileType">
  <owner>rlp@chromium.org</owner>
  <summary>Times a profile name and/or avatar was updated.</summary>
</histogram>

<histogram name="Profile.UpgradeEnrollment" enum="ProfileUpgradeEnrollment">
  <obsolete>
    Deprecated 8/2014. Upgrade Promotional UI removed.
  </obsolete>
  <owner>mlerman@chromium.org</owner>
  <summary>
    The process which leads a user to enroll in New Profile Management. Also
    tracks if the user chooses to opt out, and tutorials which guide the user
    into New Profile Management.
  </summary>
</histogram>

<histogram name="Profile.ValidateMenuItemInvalidIndex.IsGuest" enum="Boolean">
  <owner>anthonyvd@chromium.org</owner>
  <summary>
    Whether the active profile is a guest profile when -validateMenuItem in the
    ProfileMenuController gets an invalid value for the current profile's index.
  </summary>
</histogram>

<histogram name="Profile.ValidateMenuItemInvalidIndex.ProfileCount">
  <owner>anthonyvd@chromium.org</owner>
  <summary>
    The count of profiles in the avatar menu when -validateMenuItem in the
    ProfileMenuController gets an invalid value for the current profile's index.
  </summary>
</histogram>

<histogram name="Profile.ValidateMenuItemInvalidIndex.Selector"
    enum="ValidateMenuItemSelectorType">
  <owner>anthonyvd@chromium.org</owner>
  <summary>
    The selector associated with the menu item when -validateMenuItem in the
    ProfileMenuController gets an invalid value for the current profile's index.
  </summary>
</histogram>

<histogram name="Profile.VisitedLinksSize" units="MB"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Size of the visited links database.</summary>
</histogram>

<histogram name="Profile.WebDataSize" units="MB" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Size of the web data database.</summary>
</histogram>

<histogram name="ProfileChooser.HasProfilesShown" enum="BooleanShown">
  <owner>vasilii@chromium.org</owner>
  <owner>ewald@chromium.org</owner>
  <summary>
    Whether any profile was shown in the list when the profile chooser was
    opened.
  </summary>
</histogram>

<histogram name="ProfileReset.ResetRequestOrigin"
    enum="ProfileResetRequestOriginEnum">
  <owner>alito@chromium.org</owner>
  <summary>
    Encodes from where the request for resetting the profile settings
    originated.
  </summary>
</histogram>

<histogram name="ProfileReset.SendFeedback" enum="Boolean">
  <owner>engedy@chromium.org</owner>
  <owner>vasilii@chromium.org</owner>
  <summary>
    Signifies if the user selected &quot;Send feedback&quot; checkbox in the
    Reset Profile dialog.
  </summary>
</histogram>

<histogram name="Protector.DefaultSearchProvider" enum="ProtectorError">
  <obsolete>
    Deprecated 8/2013. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Errors that Protector detects about default search provider in Web Data.
    Reported once when Web Data is loaded.
  </summary>
</histogram>

<histogram name="Protector.Preferences" enum="ProtectorError">
  <obsolete>
    Deprecated 8/2013. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Errors that Protector detects about protected settings in Preferences.
    Reported once when profile is loaded.
  </summary>
</histogram>

<histogram name="Protector.SearchProvider" enum="SearchEngine">
  <obsolete>
    Deprecated 8/2013. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    When the default search provider setting is changed outside of Chrome, which
    is detected by the Protector, this histogram reports the new setting.
  </summary>
</histogram>

<histogram name="Protector.StartupSettings" enum="SessionStartupType">
  <obsolete>
    Deprecated 8/2013. No longer tracked.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    When the startup settings are changed outside of Chrome, which is detected
    by the Protector, this histogram reports the new setting.
  </summary>
</histogram>

<histogram name="ProximityAuth.BleWeaveConnectionResult"
    enum="ProximityAuth_BleWeaveConnectionResult">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Provides a breakdown of how often each BLE weave connection result occurs.
  </summary>
</histogram>

<histogram name="ProximityAuth.BluetoothGattConnectionResult"
    enum="ProximityAuth_BluetoothGattConnectionResult">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Provides a breakdown of how many times each possible Bluetooth GATT
    connection result occurs.

    The bucket &quot;Unknown result&quot; indicates that the Bluetooth platform
    returned an unknown error code; if it has any counts, the client code should
    be changed to account for the new error code.
  </summary>
</histogram>

<histogram name="ProximityAuth.BluetoothGattNotifySessionResult"
    enum="ProximityAuth_BluetoothGattServiceOperationResult">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Provides a breakdown of how many times each possible Bluetooth GATT
    &quot;notify session&quot; attempt result occurs.

    The bucket &quot;Unknown result&quot; indicates that the Bluetooth platform
    returned an unknown error code; if it has any counts, the client code should
    be changed to account for the new error code.
  </summary>
</histogram>

<histogram name="ProximityAuth.BluetoothGattWriteCharacteristicResult"
    enum="ProximityAuth_BluetoothGattServiceOperationResult">
  <owner>hansberry@chromium.org</owner>
  <summary>
    Provides a breakdown of how many times each possible Bluetooth GATT
    &quot;write characteristic&quot; attempt result occurs.
  </summary>
</histogram>

<histogram name="ProxyOverriddenBubble.ExtensionCount" units="Extensions">
  <obsolete>
    Deprecated 9/2016. Never added to histograms.xml and value is always 1.
  </obsolete>
  <summary>
    The number of extensions overriding the proxy, triggering the proxy override
    extension warning bubble.
  </summary>
</histogram>

<histogram name="ProxyOverriddenBubble.UserSelection"
    units="ExtensionBubbleAction">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The action taken by the user when the &quot;proxy overridden&quot; extension
    warning bubble is shown. Logged immediately after the action is taken.
  </summary>
</histogram>

<histogram base="true" name="PurgeAndSuspend.Experimental.MemoryGrowth"
    units="KB">
<!-- Name completed by histogram_suffixes name="PurgeAndSuspendExperiment" -->

  <owner>tasak@google.com</owner>
  <summary>
    The growth of the background renderer's memory usage after a background
    renderer is purged. This is recorded 5, 10 and 15 minutes after the purge.
  </summary>
</histogram>

<histogram name="PurgeAndSuspend.Experimental.TimeToFirstActivePaint"
    units="ms">
  <owner>tasak@google.com</owner>
  <summary>
    Time elapsed from when the backgrounded and purged renderer is foregrounded
    until the renderer is painted. This is recorded every time the backgrounded
    and purged renderer is foregrounded.
  </summary>
</histogram>

<histogram
    name="PurgeAndSuspend.Experimental.TimeToFirstActivePaint.AfterBackgrounded.5min"
    units="ms">
  <owner>tasak@google.com</owner>
  <summary>
    Time elapsed from when the renderer, which is kept backgrounded for more
    than 5 minutes, is foregrounded until the renderer is painted. This is
    recorded every time such renderer is foregrounded.
  </summary>
</histogram>

<histogram name="PurgeAndSuspend.Memory.BlinkGCKB" units="KB">
  <obsolete>
    Deprecated April 2017.
  </obsolete>
  <owner>tasak@google.com</owner>
  <summary>
    The memory usage of the BlinkGC allocator after a background renderer is
    purged and suspended. Note: this metric is for A/B testing.
  </summary>
</histogram>

<histogram name="PurgeAndSuspend.Memory.DiscardableKB" units="KB">
  <obsolete>
    Deprecated April 2017.
  </obsolete>
  <owner>tasak@google.com</owner>
  <summary>
    The memory usage of the discardable memory after a background renderer is
    purged and suspended. Note: this metric is for A/B testing.
  </summary>
</histogram>

<histogram name="PurgeAndSuspend.Memory.MallocMB" units="MB">
  <obsolete>
    Deprecated April 2017.
  </obsolete>
  <owner>tasak@google.com</owner>
  <summary>
    The memory usage of the malloc after a background renderer is purged and
    suspended. Note: this metric is for A/B testing.
  </summary>
</histogram>

<histogram name="PurgeAndSuspend.Memory.PartitionAllocKB" units="KB">
  <obsolete>
    Deprecated April 2017.
  </obsolete>
  <owner>tasak@google.com</owner>
  <summary>
    The memory usage of PartitionAlloc after a background renderer is purged and
    suspended. Note: this metric is for A/B testing.
  </summary>
</histogram>

<histogram name="PurgeAndSuspend.Memory.TotalAllocatedMB" units="MB">
  <obsolete>
    Deprecated April 2017.
  </obsolete>
  <owner>tasak@google.com</owner>
  <summary>
    The sum of the memory usages of PartitionAlloc, malloc, discardable memory,
    mainThreadIsolate() and BlinkGC allocator after a backgrounded renderer is
    purged and suspended. Note: this metric is for A/B testing.
  </summary>
</histogram>

<histogram name="PurgeAndSuspend.Memory.V8MainThreadIsolateMB" units="MB">
  <obsolete>
    Deprecated April 2017.
  </obsolete>
  <owner>tasak@google.com</owner>
  <summary>
    The memory usage of mainThreadIsolate() after a backgrounded renderer is
    purged and suspended. Note: this metric is for A/B testing.
  </summary>
</histogram>

<histogram name="PurgeAndSuspend.PendingTaskCount">
  <obsolete>
    Deprecated Oct 2017.
  </obsolete>
  <owner>tasak@google.com</owner>
  <summary>
    This records how many tasks are still in task queues when a backgrounded
    renderer is suspended.
  </summary>
</histogram>

<histogram name="PushMessaging.BackgroundBudget">
  <owner>peter@chromium.org</owner>
  <summary>
    Whenever a Service Worker receives a push message, this records the budget
    available to the service worker, which is an internal Chrome value for the
    amount of background processing a service worker is allowed to do without
    visibly alerting the user. Scale for the budget is 0 to 100.
  </summary>
</histogram>

<histogram name="PushMessaging.DeliveryStatus" enum="PushDeliveryStatus">
  <owner>johnme@google.com</owner>
  <summary>
    When a Service Worker receives a push message, this records whether the
    overall operation was successful, or otherwise the type of error
    encountered.
  </summary>
</histogram>

<histogram name="PushMessaging.DeliveryStatus.FindServiceWorker"
    enum="ServiceWorkerStatusCode">
  <owner>johnme@google.com</owner>
  <summary>
    When attempting to deliver a push message to a Service Worker, this records
    the result of finding the Service Worker registration given its ID and
    origin.
  </summary>
</histogram>

<histogram name="PushMessaging.DeliveryStatus.ServiceWorkerEvent"
    enum="ServiceWorkerStatusCode">
  <owner>johnme@google.com</owner>
  <summary>
    When a Service Worker receives a push message, this records the precise
    result received from the Service Worker code.
  </summary>
</histogram>

<histogram name="PushMessaging.GetRegistrationStatus"
    enum="PushGetRegistrationStatus">
  <owner>johnme@google.com</owner>
  <summary>
    When a webpage asks for details about its current push messaging
    registration, this records whether the request is successful, or otherwise
    the type of error encountered.
  </summary>
</histogram>

<histogram name="PushMessaging.ReceivedMessageInBackground" enum="Boolean">
  <owner>dgn@chromium.org</owner>
  <summary>
    Whenever a Service Worker receives a push message, this records whether
    Chrome is completely running in the background. A successful report means
    that the message was received when Chrome was in complete background mode,
    without UI, while a failure means it was in some other state: in background
    with some apps running, showing browser windows, etc.
  </summary>
</histogram>

<histogram name="PushMessaging.RegistrationStatus"
    enum="PushRegistrationStatus">
  <owner>johnme@google.com</owner>
  <summary>
    When a webpage registers for push messaging, this records whether the
    request is successful, or otherwise the type of error encountered.
  </summary>
</histogram>

<histogram name="PushMessaging.SESForLowBudgetOrigin">
  <owner>peter@chromium.org</owner>
  <summary>
    When a Service Worker hits low budget when servicing a push message, this
    records what the Site Engagement Service score is at that time.
  </summary>
</histogram>

<histogram name="PushMessaging.SESForNoBudgetOrigin">
  <owner>peter@chromium.org</owner>
  <summary>
    When a Service Worker hits zero budget when servicing a push message, this
    records what the Site Engagement Service score is at that time.
  </summary>
</histogram>

<histogram name="PushMessaging.UnregistrationGCMResult" enum="GCMClientResult">
  <owner>johnme@google.com</owner>
  <summary>
    When unregistering a legacy non-InstanceID push messaging subscription, this
    records the result returned by the GCMDriver (note that exceeding the
    maximum number of retries due to network errors is logged as SERVER_ERROR).
  </summary>
</histogram>

<histogram name="PushMessaging.UnregistrationIIDResult" enum="InstanceIDResult">
  <owner>johnme@google.com</owner>
  <summary>
    When unregistering an InstanceID push messaging subscription, this records
    the result returned from deleting the InstanceID (note that exceeding the
    maximum number of retries due to network errors is logged as SERVER_ERROR).
  </summary>
</histogram>

<histogram name="PushMessaging.UnregistrationReason"
    enum="PushUnregistrationReason">
  <owner>johnme@google.com</owner>
  <summary>
    When unregistering a website from push messaging, this records the reason
    why it is being unregistered.
  </summary>
</histogram>

<histogram name="PushMessaging.UnregistrationStatus"
    enum="PushUnregistrationStatus">
  <owner>johnme@google.com</owner>
  <summary>
    When unregistering a website from push messaging, this records whether the
    request is successful, or otherwise the type of error encountered.
  </summary>
</histogram>

<histogram name="PushMessaging.UserVisibleStatus" enum="PushUserVisibleStatus">
  <owner>johnme@google.com</owner>
  <summary>
    When a Service Worker receives a push message, this records whether it
    showed user-visible UX (like a notification), or whether we showed a forced
    notification on its behalf.
  </summary>
</histogram>

<histogram name="Quickoffice.csvFormattedCellCount">
  <owner>dskelton@google.com</owner>
  <summary>
    Records the number of cells that contain formatting data in the default
    worksheet when a comma separated value spreadsheet is opened.
  </summary>
</histogram>

<histogram name="Quickoffice.csvNonEmptyCellCount">
  <owner>dskelton@google.com</owner>
  <summary>
    Records the number of non-empty cells in the default worksheet when a comma
    separated value spreadsheet is opened.
  </summary>
</histogram>

<histogram name="Quickoffice.csvSheetCount">
  <owner>dskelton@google.com</owner>
  <summary>
    Records the number of worksheets when a comma separated value spreadsheet is
    opened.
  </summary>
</histogram>

<histogram name="Quickoffice.docPageCount">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Records the page count when a compound binary format document is opened.
  </summary>
</histogram>

<histogram name="Quickoffice.docParagraphCount">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Records the paragraph count when a compound binary format document is
    opened.
  </summary>
</histogram>

<histogram name="Quickoffice.docSectionCount">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Records the section count when a compound binary format document is opened.
  </summary>
</histogram>

<histogram name="Quickoffice.docxPageCount">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Records the page count when an OOXML format document is opened.
  </summary>
</histogram>

<histogram name="Quickoffice.docxParagraphCount">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Records the paragraph count when an OOXML format document is opened.
  </summary>
</histogram>

<histogram name="Quickoffice.docxSectionCount">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Records the section count when an OOXML format document is opened.
  </summary>
</histogram>

<histogram name="Quickoffice.ErrorTypes" enum="QuickofficeErrorTypes">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Records the various different error types encountered when opening and
    reading MS Office file formats in the Quickoffice viewer. These range from
    Nacl crashes and uncaught javascript exceptions to document errors inside
    Quickoffice Web Toolkit (eg QOWT). The errors are recorded against the file
    format in which they occurred.
  </summary>
</histogram>

<histogram name="Quickoffice.FileFormat" enum="QuickofficeFileFormat">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Records the various different file types supported by Quickoffice (like MS
    Word, Excel, Powerpoint files) when they opened in the browser to measure
    which file formats are most popular.
  </summary>
</histogram>

<histogram name="Quickoffice.pptMasterCount">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Records the number of slide masters when a compound binary format
    presentation is opened.
  </summary>
</histogram>

<histogram name="Quickoffice.pptSlideCount">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Records the slide count when a compound binary format presentation is
    opened.
  </summary>
</histogram>

<histogram name="Quickoffice.pptxMasterCount">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Records the number of slide masters when an OOXML format presentation is
    opened.
  </summary>
</histogram>

<histogram name="Quickoffice.pptxSlideCount">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Records the slide count when an OOXML format presentation is opened.
  </summary>
</histogram>

<histogram name="Quickoffice.xlsFormattedCellCount">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Records the number of cells that contain formatting data in the default
    worksheet when a compound binary format spreadsheet is opened.
  </summary>
</histogram>

<histogram name="Quickoffice.xlsNonEmptyCellCount">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Records the number of non-empty cells in the default worksheet when a
    compound binary format spreadsheet is opened.
  </summary>
</histogram>

<histogram name="Quickoffice.xlsSheetCount">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Records the number of worksheets when a compound binary format spreadsheet
    is opened.
  </summary>
</histogram>

<histogram name="Quickoffice.xlsxFormattedCellCount">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Records the number of cells that contain formatting data in the default
    worksheet when an OOXML format spreadsheet is opened.
  </summary>
</histogram>

<histogram name="Quickoffice.xlsxNonEmptyCellCount">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Records the number of non-empty cells when an OOXML format spreadsheet is
    opened.
  </summary>
</histogram>

<histogram name="Quickoffice.xlsxSheetCount">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Records the number of worksheets when an OOXML format spreadsheet is opened.
  </summary>
</histogram>

<histogram name="Quota.AgeOfDataInDays" units="days">
  <owner>michaeln@chromium.org</owner>
  <summary>
    How many kilobytes are how old. Similar to |AgeOfOrigin| except a sample is
    added for each kilobyte of an origin's data. Logged hourly for all origins
    with stored data.
  </summary>
</histogram>

<histogram name="Quota.AgeOfOriginInDays" units="days">
  <owner>michaeln@chromium.org</owner>
  <summary>
    How many days it's been since an origin's temporary storage has been
    accessed. Logged hourly for all origins with stored data.
  </summary>
</histogram>

<histogram name="Quota.AvailableDiskSpace" units="MB">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Amount of free disk space for the storage directory. Logged at irregular
    intervals.
  </summary>
</histogram>

<histogram name="Quota.DaysBetweenRepeatedOriginEvictions">
  <owner>calamity@chromium.org</owner>
  <summary>
    The number of days since an origin was last chosen to be evicted from the
    storage, recorded each time the origin is evicted (except for the first
    eviction).
  </summary>
</histogram>

<histogram name="Quota.DaysSinceLastAccess" units="days">
  <owner>michaeln@chromium.org</owner>
  <summary>
    The number of days since an origin's data was last accessed. Logged upon
    access when the time since last access is at least 24 hours.
  </summary>
</histogram>

<histogram name="Quota.DiskspaceShortage" units="MB">
  <owner>tzik@chromium.org</owner>
  <summary>
    Difference between acceptable lower limit of diskspace and actual free
    diskspace at beginning of an eviction round.
  </summary>
</histogram>

<histogram name="Quota.ErrorsOnEvictingOriginPerHour"
    expires_after="2018-08-30">
  <owner>tzik@chromium.org</owner>
  <summary>
    Number of errors on evicting origin by QuotaTemporaryStorageEvictor in an
    hour.
  </summary>
</histogram>

<histogram name="Quota.ErrorsOnGettingUsageAndQuotaPerHour"
    expires_after="2018-08-30">
  <owner>tzik@chromium.org</owner>
  <summary>
    Number of errors on getting usage and quota by QuotaTemporaryStorageEvictor
    in an hour.
  </summary>
</histogram>

<histogram name="Quota.EvictedBytesPerRound" units="MB">
  <owner>tzik@chromium.org</owner>
  <summary>
    Amount of usage used by evicted origins in an eviction round.
  </summary>
</histogram>

<histogram name="Quota.EvictedOriginAccessCount">
  <owner>calamity@chromium.org</owner>
  <summary>
    The number of times the evicted origin was accessed. Logged when the origin
    is evicted.
  </summary>
</histogram>

<histogram name="Quota.EvictedOriginDaysSinceAccess">
  <owner>calamity@chromium.org</owner>
  <summary>
    The number of days since the evicted origin was last accessed. Logged when
    the origin  is evicted.
  </summary>
</histogram>

<histogram name="Quota.EvictedOriginsPerHour">
  <owner>tzik@chromium.org</owner>
  <summary>Number of evicted origins in an hour.</summary>
</histogram>

<histogram name="Quota.EvictedOriginTimeSinceAccess">
  <obsolete/>
  <owner>calamity@chromium.org</owner>
  <summary>
    The time since the evicted origin was last accessed. Logged when the origin
    is evicted.
  </summary>
</histogram>

<histogram name="Quota.EvictionRoundsPerHour">
  <owner>tzik@chromium.org</owner>
  <summary>Number of eviction rounds in an hour.</summary>
</histogram>

<histogram name="Quota.FreeDiskSpaceForProfile" units="MB">
  <obsolete/>
  <owner>tzik@chromium.org</owner>
  <summary>Amount of free disk space for profile directory.</summary>
</histogram>

<histogram name="Quota.GlobalTemporaryPoolSize" units="MB">
  <owner>michaeln@chromium.org</owner>
  <summary>
    The size of the global temporary storage pool. Logged at irregular
    intervals.
  </summary>
</histogram>

<histogram name="Quota.GlobalUsageOfPersistentStorage" units="MB">
  <owner>tzik@chromium.org</owner>
  <summary>Global usage of persistent storage.</summary>
</histogram>

<histogram name="Quota.GlobalUsageOfTemporaryStorage" units="MB">
  <owner>tzik@chromium.org</owner>
  <summary>Global usage of temporary storage.</summary>
</histogram>

<histogram name="Quota.InitialTemporaryGlobalStorageQuota" units="MB">
  <obsolete/>
  <owner>tzik@chromium.org</owner>
  <summary>Initial quota for global temporary storage.</summary>
</histogram>

<histogram name="Quota.LRUOriginTypes" enum="QuotaOriginTypes">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Types of origins that are initially selected for eviction via LRU. Some of
    these types are exempt from eviction.
  </summary>
</histogram>

<histogram name="Quota.NumberOfEvictedOriginsPerRound">
  <owner>tzik@chromium.org</owner>
  <summary>Number of evicted origins per round.</summary>
</histogram>

<histogram name="Quota.NumberOfPersistentStorageOrigins"
    expires_after="2018-08-30">
  <owner>tzik@chromium.org</owner>
  <summary>Number of origins using persistent storage.</summary>
</histogram>

<histogram name="Quota.NumberOfProtectedPersistentStorageOrigins"
    expires_after="2018-08-30">
  <owner>tzik@chromium.org</owner>
  <summary>Number of protected origins using persistent storage.</summary>
</histogram>

<histogram name="Quota.NumberOfProtectedTemporaryStorageOrigins"
    expires_after="2018-08-30">
  <owner>tzik@chromium.org</owner>
  <summary>Number of protected origins using temporary storage.</summary>
</histogram>

<histogram name="Quota.NumberOfTemporaryStorageOrigins"
    expires_after="2018-08-30">
  <owner>tzik@chromium.org</owner>
  <summary>Number of origins using temporary storage.</summary>
</histogram>

<histogram name="Quota.NumberOfUnlimitedPersistentStorageOrigins"
    expires_after="2018-08-30">
  <owner>tzik@chromium.org</owner>
  <summary>Number of unlimited origins using persistent storage.</summary>
</histogram>

<histogram name="Quota.NumberOfUnlimitedTemporaryStorageOrigins"
    expires_after="2018-08-30">
  <owner>tzik@chromium.org</owner>
  <summary>Number of unlimited origins using temporary storage.</summary>
</histogram>

<histogram name="Quota.OSAccomodationDelta" units="MB">
  <owner>michaeln@chromium.org</owner>
  <summary>
    If our hardcoded OS accomodation is too large for the volume size, we define
    the value as a fraction of the total volume size instead. The
    OSAccomodationDelta is the difference between the hardcoded and computed
    values.
  </summary>
</histogram>

<histogram name="Quota.PercentDiskAvailable" units="%">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Percentage of the storage device that is free. Logged at irregular
    intervals.
  </summary>
</histogram>

<histogram name="Quota.PercentUsedByOrigin" units="%">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Percentage of an origin's quota that is being used by the origin. Logged at
    irregular intervals.
  </summary>
</histogram>

<histogram name="Quota.PercentUsedForTemporaryStorage" units="%">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Percentage of the storage device that ia being use for temporary storage.
    Logged at irregular intervals.
  </summary>
</histogram>

<histogram name="Quota.QuotaForOrigin" units="MB">
  <owner>michaeln@chromium.org</owner>
  <summary>
    The quota value computed for an origin using temporary storage. Logged at
    irregular intervals. (In the process of writing new data, storage systems
    consult the quota system for &quot;usage and quota&quot; to determine if
    there is sufficient space available for the new data. This value is logged
    at the time of that consultation. The frequency is dependent on how
    individual websites use the various storage apis.)
  </summary>
</histogram>

<histogram name="Quota.SkippedEvictionRoundsPerHour" expires_after="2018-08-30">
  <owner>tzik@chromium.org</owner>
  <summary>Number of skipped eviction rounds in an hour.</summary>
</histogram>

<histogram name="Quota.TimeBetweenRepeatedOriginEvictions">
  <obsolete/>
  <owner>calamity@chromium.org</owner>
  <summary>
    Time since an origin was last chosen to be evicted from the storage,
    recorded each time the origin is evicted (except for the first eviction).
  </summary>
</histogram>

<histogram name="Quota.TimeDeltaOfEvictionRounds">
  <owner>tzik@chromium.org</owner>
  <summary>Time between two consecutive active eviction rounds.</summary>
</histogram>

<histogram name="Quota.TimeSpentToAEvictionRound" expires_after="2018-08-30">
  <owner>tzik@chromium.org</owner>
  <summary>Time spent to an eviction round.</summary>
</histogram>

<histogram name="Quota.TimeToGetSettings" units="ms">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Time spent querying the embedder for the settings values. Logged at
    irregular intervals as the values are refreshed.
  </summary>
</histogram>

<histogram name="Quota.TimeToInitializeGlobalQuota" units="ms">
  <obsolete>
    Removed November 2016
  </obsolete>
  <owner>michaeln@chromium.org</owner>
  <summary>
    Time spent initializing the global quota. Logged when the storage
    partition's quota manager is initialized.
  </summary>
</histogram>

<histogram name="Quota.TotalDiskSpace" units="MB">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Total disk space for the storage directory. Logged at irregular intervals.
  </summary>
</histogram>

<histogram name="Quota.UsageOverageOfTemporaryGlobalStorage" units="MB"
    expires_after="2018-08-30">
  <owner>tzik@chromium.org</owner>
  <summary>
    Overage of the temporary global storage usage at beginning of an eviction
    round.
  </summary>
</histogram>

<histogram name="Rappor.DailyEvent.IntervalType" enum="DailyEventIntervalType">
  <owner>holte@chromium.org</owner>
  <summary>Counts how often daily interval events were fired.</summary>
</histogram>

<histogram name="Rappor.DiscardReason" enum="RapporDiscardReason">
  <owner>holte@chromium.org</owner>
  <summary>
    For each Rappor log that is discarded, the reason that it was discarded.
  </summary>
</histogram>

<histogram name="Rappor.FailedUploadErrorCode" enum="NetErrorCodes">
  <owner>holte@chromium.org</owner>
  <summary>Net error codes for failed Rappor uploads.</summary>
</histogram>

<histogram name="rappor.last_daily_sample" enum="DailyEventIntervalType">
  <obsolete>
    Removed 2015/05/05.
  </obsolete>
  <owner>holte@chromium.org</owner>
  <summary>
    Rappor.DailyEvent.IntervalType reported under the wrong name.
  </summary>
</histogram>

<histogram name="Rappor.LoadCohortResult" enum="RapporLoadResultType">
  <owner>holte@chromium.org</owner>
  <summary>
    Success or errors encountered when loading Rappor cohort pref.
  </summary>
</histogram>

<histogram name="Rappor.LoadSecretResult" enum="RapporLoadResultType">
  <owner>holte@chromium.org</owner>
  <summary>
    Success or errors encountered when loading Rappor secret pref.
  </summary>
</histogram>

<histogram name="Rappor.UploadResponseCode" enum="HttpResponseCode">
  <owner>holte@chromium.org</owner>
  <summary>
    For each upload to the Rappor server, log the response received from the
    server.
  </summary>
</histogram>

<histogram name="ReadingList.ContextMenu" enum="ReadingListContextMenuActions">
  <owner>gambard@chromium.org</owner>
  <summary>
    The action chosen by the user after displaying the reading list context
    menu.
  </summary>
</histogram>

<histogram name="ReadingList.Download.Failures" units="count">
  <owner>gambard@chromium.org</owner>
  <summary>
    Number of tries before the download of the entry is successful.
  </summary>
</histogram>

<histogram name="ReadingList.Download.Status" enum="ReadingListDownloadStatus">
  <owner>gambard@chromium.org</owner>
  <summary>Final status of the download of a reading list entry.</summary>
</histogram>

<histogram name="ReadingList.FirstReadAgeOnDeletion" units="hours">
  <owner>gambard@chromium.org</owner>
  <summary>
    Time since the first read of the reading list entry getting deleted. 0 if it
    has never been read.
  </summary>
</histogram>

<histogram name="ReadingList.OfflineVersionDisplayed" enum="Boolean">
  <owner>gambard@chromium.org</owner>
  <summary>Whether the displayed version is the offline one.</summary>
</histogram>

<histogram name="ReadingList.Read.AgeOnDeletion" units="hours">
  <owner>gambard@chromium.org</owner>
  <summary>
    Time since the creation of the read reading list entry getting deleted.
  </summary>
</histogram>

<histogram name="ReadingList.Read.Number" units="count">
  <owner>gambard@chromium.org</owner>
  <summary>Number of read entries in reading list.</summary>
</histogram>

<histogram name="ReadingList.Unread.AgeOnDeletion" units="hours">
  <owner>gmabard@chromium.org</owner>
  <summary>
    Time since the creation of the unread reading list entry getting deleted.
  </summary>
</histogram>

<histogram name="ReadingList.Unread.Number" units="count">
  <owner>gambard@chromium.org</owner>
  <summary>Number of unread entries in reading list.</summary>
</histogram>

<histogram name="RecoveryComponent.Event" enum="RecoveryComponentEvent">
  <owner>robertshield@chromium.org</owner>
  <summary>Log each stage of a recovery component event.</summary>
</histogram>

<histogram base="true" name="RelaunchNotification.ShowResult"
    enum="RelaunchNotificationShowResult">
  <owner>grt@chromium.org</owner>
  <summary>
    The result of an attempt to show a relaunch notification dialog.
  </summary>
</histogram>

<histogram name="Render.Workers.MaxWorkerCountInRendererProcess">
  <obsolete>
    Deprecated Dec 2016. This metric did not report the number of shared workers
    correctly, since it used the RenderProcessHostImpl ref counts, which in the
    shared worker case is more like a boolean flag (zero or one or maybe two)
    than the number of shared workers. So its results can be thought of as
    roughly the number of service workers only.
  </obsolete>
  <owner>kinuko@chromium.org</owner>
  <summary>
    Maximum number of workers (SharedWorker or ServiceWorker) that are
    simultaneously hosted in a single renderer process. Recorded when the
    renderer process host is being destructed.
  </summary>
</histogram>

<histogram name="Renderer.AcceleratedFixedRootBackground"
    enum="AcceleratedFixedRootBackground">
  <obsolete>
    Deprecated May 2018. There are no longer accelerated fixed root backgrounds.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Keeps track of the number of main frame scrolls with an accelerated fixed
    root background, the number of main frame scrolls with an unaccelerated
    fixed root background, and the total number of main frame scrolls.
  </summary>
</histogram>

<histogram name="Renderer.CompositedScrolling" enum="CompositedScrolling">
  <owner>hartmanng@chromium.org</owner>
  <summary>
    Total count of the number of RenderLayers which are scrollable areas, need
    to be promoted to stacking containers, and will use composited scrolling.
    Each bucket is sampled at most once per RenderLayer, when the RenderLayer
    first becomes scrollable, first needs to become a stacking container, and
    first uses composited scrolling, respectively.
  </summary>
</histogram>

<histogram name="Renderer.DrawDuration" units="ms">
  <obsolete>
    Replaced by Scheduling.Renderer.DrawDuration. This metric did not
    differentiate between processes.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>The time it takes for the compositor to draw a frame.</summary>
</histogram>

<histogram name="Renderer.DrawDurationOverestimate" units="ms">
  <obsolete>
    Measurement no longer taken.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    The amount by which the compositor's draw duration was overestimated in a
    particular frame (0 if the duration was perfectly predicted or
    underestimated).
  </summary>
</histogram>

<histogram name="Renderer.DrawDurationUnderestimate" units="ms">
  <obsolete>
    Measurement no longer taken.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    The amount by which the compositor's draw duration was underestimated in a
    particular frame (0 if the duration was perfectly predicted or
    overestimated).
  </summary>
</histogram>

<histogram name="Renderer.GpuLatency" units="ms">
  <obsolete>
    Measurement no longer taken.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    The delay between the compositor submitting a command to the GPU and that
    command executing on the GPU. This delay is measured once per frame.
  </summary>
</histogram>

<histogram name="Renderer.GpuLatencyOverestimate" units="ms">
  <obsolete>
    Measurement no longer taken.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    The amount by which GPU latency was overestimated in a particular frame (0
    if the latency was perfectly predicted or underestimated).
  </summary>
</histogram>

<histogram name="Renderer.GpuLatencyUnderestimate" units="ms">
  <obsolete>
    Measurement no longer taken.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    The amount by which GPU latency was underestimated in a particular frame (0
    if the latency was perfectly predicted or overestimated).
  </summary>
</histogram>

<histogram name="Renderer.Hung.Duration" units="ms">
  <owner>avi@chromium.org</owner>
  <summary>
    The length of time render processes are hung, in milliseconds. Note that
    because technically speaking render processes are &quot;hung&quot; from the
    moment an input event is sent to them until the moment that they return an
    ACK, only hangs of minimum length 5s are recorded. Note that this combines
    measurements from both renderer processes that recover on their own, and
    render processes that are killed.
  </summary>
</histogram>

<histogram name="Renderer.Hung.MobileInfoBar.UserEvent"
    enum="MobileHungRendererInfoBarEvent">
  <owner>dfalcantara@chromium.org</owner>
  <summary>
    Android: Records the terminal event associated with a hung renderer infobar.
    This includes both the explicit user actions as well as implicit dismissals,
    e.g., when the renderer regains responsiveness before the infobar is
    interactively dismissed.
  </summary>
</histogram>

<histogram name="Renderer.LayoutMs" units="ms">
  <obsolete>
    Deprecated as of 3/2015.
  </obsolete>
  <owner>benjhayden@chromium.org</owner>
  <summary>
    Duration of the FrameView::performLayout trace event, which occurs at most
    once per frame.
  </summary>
</histogram>

<histogram name="Renderer.LineLayoutMs" units="ms">
  <obsolete>
    Deprecated as of 3/2015.
  </obsolete>
  <owner>benjhayden@chromium.org</owner>
  <summary>
    Amount of time spent doing line layout during FrameView::performLayout.
  </summary>
</histogram>

<histogram name="Renderer.PixelIncreaseFromTransitions">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    A lower-bound on the percentage increase in memory that would result from
    promoting all layers that have a webkit-transition on opacity or transform.
  </summary>
</histogram>

<histogram name="Renderer.unloadEventsDurationMS" units="ms">
  <obsolete>
    Deprecated as of 10/2013.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    This measures how long all unload event handlers required to run whenever an
    unload event is processed.
  </summary>
</histogram>

<histogram name="Renderer.ViewportZoomBugCount" enum="BooleanHit">
  <owner>kkhorimoto@chromium.org</owner>
  <summary>
    [iOS] A boolean that is used to indicate that the WebKit rendering bug in
    http://crbug.com/583231 has occurred. This occurs when a page with no
    viewport tag is rendered with an unusable zoom scale. Only logged on iOS.
  </summary>
</histogram>

<histogram name="Renderer.WKWebViewCallbackAfterDestroy" enum="BooleanHit">
  <owner>michaeldo@chromium.org</owner>
  <summary>
    [iOS] Counts the number of times a WKNavigationDelegate callback was called
    after the CRWWebController was closed. This is unexpected and could be the
    cause of many crashes. If this histogram is ever logged, it means that
    Chrome needs to gracefully handle the case when WKNavigationDelegate
    callbacks are called for a destroyed web controller. Only logged on iOS.
  </summary>
</histogram>

<histogram name="Renderer2.FinishDocToFinish">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time from when a document finished loading to when all it's resources
    are also loaded.
  </summary>
</histogram>

<histogram name="Renderer2.RequestToFinish">
  <obsolete>
    Deprecated 6/15/09.  Replaced by Renderer2.RequestToFinish_L
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time from when a page was requested by a user to when it is fully
    loaded.
  </summary>
</histogram>

<histogram name="Renderer2.RequestToFinish_L">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time from when a page was requested by a user to when it is fully
    loaded.
  </summary>
</histogram>

<histogram name="Renderer2.RequestToFirstLayout">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time from when a page was requested by a user to its first layout.
  </summary>
</histogram>

<histogram name="Renderer2.RequestToStart">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time from when a page was requested by a user to when it starts loading.
  </summary>
</histogram>

<histogram name="Renderer2.StartToFinish">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time from when a page started loading to when it is fully loaded.
  </summary>
</histogram>

<histogram name="Renderer2.StartToFinishDoc">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time from when a page starts loading to when the main document is
    finished loading.
  </summary>
</histogram>

<histogram name="Renderer2.StartToFirstLayout">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time from when a page starts loading to its first layout.
  </summary>
</histogram>

<histogram name="Renderer4.Abandoned" enum="Abandoned">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Distribution of actual finished pages, vs abandoned pages, where we needed
    to declare a finish time prematurely since the page was being closed
    (exited).
  </summary>
</histogram>

<histogram name="Renderer4.AccelContentPaintDurationMS">
  <obsolete>
    Deprecated 2014-05 because of impl-side painting.
  </obsolete>
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Time spent by WebKit painting the page, in milliseconds, when the GPU
    acceleration is active, for paints that affect non-root layers.
  </summary>
</histogram>

<histogram name="Renderer4.AccelContentPaintMegapixPerSecond">
  <obsolete>
    Deprecated 2014-05 because of impl-side painting.
  </obsolete>
  <owner>wiltzius@chromium.org</owner>
  <summary>
    WebKit paint throughput, measured in megapixels per second, when GPU
    acceleration is active, for paints that affect non-root layers.
  </summary>
</histogram>

<histogram name="Renderer4.AccelDoDeferredUpdateDelay">
  <owner>wiltzius@chromium.org</owner>
  <summary>Time between frames when GPU acceleration is active.</summary>
</histogram>

<histogram name="Renderer4.AccelRootPaintDurationMS">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Time spent by WebKit painting the page, in milliseconds, when the GPU
    acceleration is active, for paints that affect the root layer.
  </summary>
</histogram>

<histogram name="Renderer4.AccelRootPaintMegapixPerSecond">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    WebKit paint throughput, measured in megapixels per second, when GPU
    acceleration is active, for paints that affect the root layer.
  </summary>
</histogram>

<histogram name="Renderer4.AnimationCallbackDelayTime" units="ms">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Time from when the animation callback was posted to when it ran.
  </summary>
</histogram>

<histogram name="Renderer4.BeginToCommit" units="ms">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Time from &quot;begin&quot; to &quot;commit.&quot;   &quot;Begin&quot;==
    &quot;request&quot; if user requested, and &quot;start&quot; otherwise.
    &quot;Request&quot;== time when user requested document. &quot;Start&quot;==
    time when renderer requested load of document, after any unload of last
    document. &quot;Commit&quot;== time when renderer got first byte of
    document.
  </summary>
</histogram>

<histogram name="Renderer4.BeginToFinish">
  <owner>wiltzius@chromium.org</owner>
  <summary>TBD</summary>
</histogram>

<histogram name="Renderer4.BeginToFinishDoc">
  <owner>wiltzius@chromium.org</owner>
  <summary>TBD</summary>
</histogram>

<histogram name="Renderer4.BeginToFirstPaint" units="ms">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Time from &quot;begin&quot; to &quot;first paint.&quot;  &quot;Begin&quot;==
    &quot;request&quot; if user requested, and &quot;start&quot; otherwise.
    &quot;Request&quot;== time when user requested document. &quot;Start&quot;==
    time when renderer requested load of document, after any unload of last
    document. &quot;First paint&quot;== time when first paint operation was
    performed.
  </summary>
</histogram>

<histogram name="Renderer4.BeginToFirstPaintAfterLoad" units="ms">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Time from &quot;big&quot; to &quot;first paint after load.&quot;
    &quot;Begin&quot;== &quot;request&quot; if user requested, and
    &quot;start&quot; otherwise.  &quot;Request&quot;== time when user requested
    document. &quot;Start&quot;== time when renderer requested load of document,
    after any unload of last document. &quot;First paint after load&quot;== time
    after onload() when first paint operation is performed.
  </summary>
</histogram>

<histogram name="Renderer4.Browser.PartialRasterPercentageSaved" units="%">
  <owner>ericrk@chromium.org</owner>
  <summary>
    Percentage of pixels which would have been rastered, but were skipped due to
    the partial raster optimization. Logged for each raster task run in a
    Browser process. The histogram is suffixed by the RasterBufferProvider which
    is in use.
  </summary>
</histogram>

<histogram name="Renderer4.CommitToFinish" units="ms">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Time from &quot;commit&quot; to &quot;finish.&quot; &quot;Commit&quot;==
    time when renderer got first byte of document.  &quot;Finish&quot;==after
    onload() and all resources are loaded.
  </summary>
</histogram>

<histogram name="Renderer4.CommitToFinishDoc" units="ms">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Time from &quot;commit&quot; to &quot;finish doc.&quot; &quot;Commit&quot;==
    time when renderer got first byte of document. &quot;Finish doc&quot; ==
    main document loaded, before onload(). &quot;Finish&quot;==after onload()
    and all resources are loaded.
  </summary>
</histogram>

<histogram name="Renderer4.CommitToFirstPaint" units="ms">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Time from &quot;commit&quot; to &quot;first paint.&quot;
    &quot;Commit&quot;== time when renderer got first byte of document.
    &quot;First paint&quot;== time when first paint operation was performed.
  </summary>
</histogram>

<histogram name="Renderer4.CommitToFirstPaintAfterLoad" units="ms">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Time from &quot;commit&quot; to &quot;first paint after load.&quot;
    &quot;Commit&quot;== time when renderer got first byte of document.
    &quot;First paint after load&quot;== time after onload() when first paint
    operation is performed.
  </summary>
</histogram>

<histogram name="Renderer4.CompositorScrollHitTestResult"
    enum="CompositorScrollResult">
  <obsolete>
    Deprecated in 12/2017. Renderer4.MainThreadGestureScrollReason and
    Renderer4.MainThreadWheelScrollReason could track more detailed reasons of
    main thread scrolling.
  </obsolete>
  <owner>vollick@chromium.org</owner>
  <summary>
    It's possible for compositor hit testing to determine conclusively that
    compositor thread scrolling can or cannot be done. It's also possible that
    the hit testing result is inconclusive. We would like to see the I-don't-
    know result as little as possible. This histogram tracks the ratios.
  </summary>
</histogram>

<histogram name="Renderer4.CompositorThreadImplDrawDelay" units="ms">
  <obsolete>
    Deprecated in 06/2018, M69. Renderer4.CompositorThreadImplDrawDelay is no
    longer needed due to issue 851784.
  </obsolete>
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Time between frames, as measured on the compositor thread. This is collected
    once per frame while it is being drawn to the screen in the compositor.
  </summary>
</histogram>

<histogram name="Renderer4.CompositorTouchScrollUpdateThread"
    enum="ScrollThread">
  <owner>tdresser@chromium.org</owner>
  <summary>Whether the scroll from touch is executed on main thread.</summary>
</histogram>

<histogram name="Renderer4.CompositorWheelScrollUpdateThread"
    enum="ScrollThread">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Whether the scroll from mouse wheel is executed on main thread.
  </summary>
</histogram>

<histogram name="Renderer4.drawPixelCountCulled" units="NormalizedPixels">
  <obsolete>
    Renamed to Renderer4.pixelCountCulled_Draw.
  </obsolete>
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Number of pixels that culling prevented being drawn to the screen,
    normalized to the viewport size. This is collected once per frame while it
    is being drawn to the screen in the compositor.
  </summary>
</histogram>

<histogram name="Renderer4.drawPixelCountOpaque" units="NormalizedPixels">
  <obsolete>
    Renamed to Renderer4.pixelCountOpaque_Draw.
  </obsolete>
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Number of pixels drawn to the screen and known opaque, normalized to the
    viewport size. This is collected once per frame while it is being drawn to
    the screen in the compositor.
  </summary>
</histogram>

<histogram name="Renderer4.drawPixelCountTranslucent" units="NormalizedPixels">
  <obsolete>
    Renamed to Renderer4.pixelCountTranslucent_Draw.
  </obsolete>
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Number of pixels drawn to the screen and not known opaque, normalized to the
    viewport size. This is collected once per frame while it is being drawn to
    the screen in the compositor.
  </summary>
</histogram>

<histogram name="Renderer4.FinishDocToFinish" units="ms">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Time from &quot;finish doc&quot; to &quot;finish.&quot; &quot;Finish
    doc&quot;== main document loaded, before onload(). &quot;Finish&quot;==after
    onload() and all resources are loaded.
  </summary>
</histogram>

<histogram name="Renderer4.FinishToFirstPaintAfterLoad" units="ms">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Time from &quot;finish &quot; to &quot;first paint after load.&quot;
    &quot;Finish&quot;==after onload() and all resources are loaded. &quot;First
    paint after load&quot;== time after onload() when first paint operation is
    performed.
  </summary>
</histogram>

<histogram name="Renderer4.GestureScrollingThreadStatus"
    enum="ScrollingThreadStatus">
  <owner>tdresser@chromium.org</owner>
  <summary>
    For every gesture, we record whether the scroll occurred on the main thread,
    on the compositor thread, or on the compositor thread but blocked on the
    main thread. The last case will happen when there is a blocking event
    listener.
  </summary>
</histogram>

<histogram name="Renderer4.GpuImageDecodeState" enum="GpuImageUsageState">
  <owner>vmpstr@chromium.org</owner>
  <summary>
    Gpu image decode usage statistics. Images are decoded and locked prior to
    upload; this indicates how that decode is used during tile management.
  </summary>
</histogram>

<histogram name="Renderer4.GpuImageDecodeState.FirstLockWasted"
    enum="BooleanWasted">
  <owner>vmpstr@chromium.org</owner>
  <summary>
    Indication whether the first lock of an image decode was wasted (image was
    not used). Images are decoded and locked prior to raster; this indicates
    whether the decode was used or not during the first lock.
  </summary>
</histogram>

<histogram name="Renderer4.GpuImageUploadState" enum="GpuImageUsageState">
  <owner>ericrk@chromium.org</owner>
  <summary>
    Gpu image upload usage statistics. Images are uploaded and locked prior to
    use; this indicates how that upload is used during tile management.
  </summary>
</histogram>

<histogram name="Renderer4.GpuImageUploadState.FirstLockWasted"
    enum="BooleanWasted">
  <owner>ericrk@chromium.org</owner>
  <summary>
    Indication whether the first lock of an image upload was wasted (image was
    not used). Images are uploaded and locked prior to raster; this indicates
    whether the upload was used or not during the first lock.
  </summary>
</histogram>

<histogram name="Renderer4.GpuImageUploadState.FirstRefWasted"
    enum="BooleanWasted">
  <obsolete>
    Deprecated as of 06/2017.  No longer generated.
  </obsolete>
  <owner>vmpstr@chromium.org</owner>
  <summary>
    Indication whether the first ref of a GPU image upload was wasted (not used
    in raster). Images are uploaded prior to raster; this indicates whether the
    upload was used during the first ref.
  </summary>
</histogram>

<histogram name="Renderer4.GpuImageUploadState.Used" enum="BooleanUsage">
  <obsolete>
    Deprecated as of 06/2017.  No longer generated.
  </obsolete>
  <owner>vmpstr@chromium.org</owner>
  <summary>
    Indication whether the GPU image upload was used in raster. Images are
    uploaded prior to raster; this indicates whether the upload was used during
    raster.
  </summary>
</histogram>

<histogram name="Renderer4.GpuRasterizationEnabled" enum="BooleanEnabled">
  <owner>alokp@chromium.org</owner>
  <summary>
    Whether gpu rasterization is enabled (checked once after the page is painted
    for the first time).
  </summary>
</histogram>

<histogram name="Renderer4.GpuRasterizationSlowPathsWithNonAAPaint"
    enum="BooleanHasSlowPathsWithNonAAPaint">
  <owner>ericrk@chromium.org</owner>
  <summary>
    If gpu rasterization is enabled, whether this page contains both slow-paths
    (making it suitable for MSAA) and non-AA paints (making it not-suitable for
    MSAA). This indicates a case where we would like to use MSAA, but may have
    to avoid it for correctness reasons.
  </summary>
</histogram>

<histogram name="Renderer4.GpuRasterizationSuitableContent"
    enum="BooleanEnabled">
  <owner>alokp@chromium.org</owner>
  <summary>
    If gpu rasterization is enabled, whether the page contents contain no more
    than 5 slow paths, and is suitable for non-MSAA gpu rasterization (checked
    once after the page is painted for the first time).
  </summary>
</histogram>

<histogram name="Renderer4.GpuRasterizationTriggered" enum="BooleanEnabled">
  <owner>alokp@chromium.org</owner>
  <summary>
    If gpu rasterization is enabled, whether it was triggered (checked once
    after the page is painted for the first time).
  </summary>
</histogram>

<histogram name="Renderer4.GpuRasterizationUsed" enum="BooleanEnabled">
  <owner>alokp@chromium.org</owner>
  <summary>
    If gpu rasterization is enabled, whether it was actually used for the page
    (checked once after the page is painted for the first time).
  </summary>
</histogram>

<histogram name="Renderer4.IdealContentsScale">
  <obsolete>
    Deprecated 02/2018. The ideal content scale closely matches the default
    device scale factor.
  </obsolete>
  <owner>vmpstr@chromium.org</owner>
  <summary>
    The contents scale at which picture layer impl should be rasterized in order
    to appear crisp. This is also known as ideal contents scale. This value is
    recorded any time the ideal contents scale changes. Some examples of this
    are pinch-zoom and JavaScript transform changes.
  </summary>
</histogram>

<histogram name="Renderer4.ImageDecodeMipLevel" units="mip level">
  <owner>khushalsagar@chromium.org</owner>
  <summary>
    The mip level at which images are decoded for rasterization in the renderer.
    This value is recorded each time an image is decoded in the compositor and
    records the mip level used for the decode. Note that the mip levels recorded
    lie between [1, 32], with the value of 1 indicating the use of the original
    image.
  </summary>
</histogram>

<histogram name="Renderer4.ImageDecodeTaskDurationUs" units="microseconds">
  <owner>vmpstr@chromium.org</owner>
  <summary>
    This metric records the duration of an image decode for the raster path in
    the compositor. It is recorded every time we decode an image. It is suffixed
    by the type of rasterization we're in (either Gpu or Software).

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

<histogram name="Renderer4.ImageDecodeTaskDurationUs.OutOfRaster"
    units="microseconds">
  <owner>vmpstr@chromium.org</owner>
  <owner>khushalsagar@chromium.org</owner>
  <summary>
    This metric records the duration of an image decode for out of raster path
    in the compositor. It is recorded every time we decode an image. It is
    suffixed by the type of rasterization we're in (either Gpu or Software).

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

<histogram name="Renderer4.ImagePixelsPercentSRGB" units="%">
  <owner>ccameron@chromium.org</owner>
  <summary>
    For each cc::Layer that has more than zero discardable images, this metric
    records the percent of image pixels that were from images that were
    originally specified in an sRGB color space.
  </summary>
</histogram>

<histogram name="Renderer4.ImagesPercentSRGB" units="%">
  <owner>ccameron@chromium.org</owner>
  <summary>
    For each cc::Layer that has more than zero discardable images, this metric
    records the percent of images that were originally specified in an sRGB
    color space.
  </summary>
</histogram>

<histogram name="Renderer4.InvalidationRegionApproximateRectCount"
    units="rects">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Number of rects inside of a PictureLayer's invalidation region per commit.
  </summary>
</histogram>

<histogram name="Renderer4.LanguageDetection" units="ms">
  <obsolete>
    Deprecated in 06/2018, M69. Renderer4.LanguageDetection is no longer needed
    due to issue 851784.
  </obsolete>
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Time to determine the page language. This is done after the page has been
    loaded.
  </summary>
</histogram>

<histogram name="Renderer4.LCDText.PercentageOfAALayers" units="%">
  <obsolete>
    Deprecated as of 02/2015.  No longer generated.
  </obsolete>
  <owner>wiltzius@chromium.org</owner>
  <summary>
    The ratio of LCDText CC Layers / candidate LCDText layers. Recorded in
    LayerTreeHost, after LayerTreeHostCommon::CalculateDrawProperties() has
    computed the properties we need. Only recorded for the first 50 frames of
    every page.
  </summary>
</histogram>

<histogram name="Renderer4.LCDText.PercentageOfCandidateLayers" units="%">
  <obsolete>
    Deprecated as of 02/2015.  No longer generated.
  </obsolete>
  <owner>wiltzius@chromium.org</owner>
  <summary>
    The ratio of CC Layers which are candidates for LCDText AA / total picture
    or content Layers.  Recorded in LayerTreeHost, after
    LayerTreeHostCommon::CalculateDrawProperties() has computed the properties
    we need. Only recorded for the first 50 frames of every page.
  </summary>
</histogram>

<histogram name="Renderer4.LoadType" enum="LoadType">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Probability distribution for enumerated varieties of page loads.
  </summary>
</histogram>

<histogram name="Renderer4.LockExistingCachedImage" enum="BooleanSuccess">
  <owner>vmpstr@chromium.org</owner>
  <summary>
    For each attempted lock of a cached image, records whether it was
    successful.
  </summary>
</histogram>

<histogram name="Renderer4.MainThreadGestureScrollReason"
    enum="MainThreadScrollingReason">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Ideally we'd always scroll on the impl thread, but there are a variety of
    situations where we need to scroll on main. We should try to drive these
    down. For every gesture, we record whether or not the scroll occurred on the
    main thread, and if it did, what the reason was.
  </summary>
</histogram>

<histogram name="Renderer4.MainThreadWheelScrollReason"
    enum="MainThreadScrollingReason">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Ideally we'd always scroll on the impl thread, but there are a variety of
    situations where we need to scroll on main. We should try to drive these
    down. For every wheel tick, we record whether or not the the scroll occurred
    on the main thread, and if it did, what the reason was.
  </summary>
</histogram>

<histogram name="Renderer4.pixelCountCulled_Draw" units="NormalizedPixels">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Number of pixels that culling prevented being drawn to the screen, recorded
    as 10 times the percentage of the viewport that these pixels cover. This is
    collected once per frame while it is being drawn to the screen in the
    compositor.
  </summary>
</histogram>

<histogram name="Renderer4.pixelCountOpaque" units="NormalizedPixels">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Number of pixels known to be opaque, recorded as 10 times the percentage of
    the viewport that these pixels cover.
  </summary>
</histogram>

<histogram name="Renderer4.pixelCountPainted" units="NormalizedPixels">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Number of pixels painted by WebKit into main memory, recorded as 10 times
    the percentage of the viewport that these pixels cover. This is collected
    once per commit from WebKit to the compositor.
  </summary>
</histogram>

<histogram name="Renderer4.pixelCountTranslucent" units="NormalizedPixels">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Number of pixels not known to be opaque opaque, recorded as 10 times the
    percentage of the viewport that these pixels cover.
  </summary>
</histogram>

<histogram name="Renderer4.RasterSourceClearType" enum="RasterSourceClearType">
  <owner>ericrk@chromium.org</owner>
  <summary>
    The type of clear which was needed for each cc::RasterSource rasterized.
  </summary>
</histogram>

<histogram name="Renderer4.ReadyToDrawTileDrawStatus" enum="UsedInDraw">
  <obsolete>
    Deprecated 02/2017 in Issue 675840.
  </obsolete>
  <owner>vmpstr@chromium.org</owner>
  <summary>
    For each tile that was ready to draw at some point, logs whether the tile
    was actually used in a draw. This is logged at tile destruction time.
  </summary>
</histogram>

<histogram name="Renderer4.Renderer.PartialRasterPercentageSaved" units="%">
  <owner>ericrk@chromium.org</owner>
  <summary>
    Percentage of pixels which would have been rastered, but were skipped due to
    the partial raster optimization. Logged for each raster task run in a
    Renderer process. The histogram is suffixed by the RasterBufferProvider
    which is in use.
  </summary>
</histogram>

<histogram name="Renderer4.renderPassCount">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    The number of render passes (or render targets) in the renderer's frame. If
    the value is more than one, then an intermediate rendering target must be
    used during the rendering of the frame for each render pass greater than
    one.
  </summary>
</histogram>

<histogram name="Renderer4.RequestToFinish" units="ms">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Time from &quot;request&quot; to &quot;finish.&quot;  &quot;Request&quot;==
    time when user requested document.  &quot;Finish&quot;==after onload() and
    all resources are loaded.
  </summary>
</histogram>

<histogram name="Renderer4.RequestToStart" units="ms">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Time from &quot;request&quot; to &quot;start.&quot; &quot;Request&quot;==
    time when user requested document. &quot;Start&quot;== time when renderer
    requested load of document, after any unload of last document.
  </summary>
</histogram>

<histogram name="Renderer4.ReservedMemory" units="MB">
  <owner>bbudge@chromium.org</owner>
  <owner>bradnelson@chromium.org</owner>
  <summary>
    The size of the contiguous memory block reserved in the renderer so that
    large allocations are more likely to succeed. The reservation is currently
    made in BlinkInitializer.
  </summary>
</histogram>

<histogram name="Renderer4.ResourcePoolMemoryUsage" units="MB">
  <owner>ericrk@chromium.org</owner>
  <summary>
    Size of the in-use portion of the ResourcePool. Recorded each time resources
    are reclaimed after tile work completes.
  </summary>
</histogram>

<histogram name="Renderer4.Snapshot">
  <owner>wiltzius@chromium.org</owner>
  <summary>Time to capture a renderer snapshot.</summary>
</histogram>

<histogram name="Renderer4.SoftwareCompositorThreadImplDrawDelay" units="ms">
  <obsolete>
    Deprecated in 06/2018, M69. Renderer4.SoftwareCompositorThreadImplDrawDelay
    is no longer needed due to issue 851784.
  </obsolete>
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Time between frames when the software renderer is being used, as measured on
    the compositor thread. This is collected once per frame while it is being
    drawn to the screen in the compositor.
  </summary>
</histogram>

<histogram name="Renderer4.SoftwareDoDeferredUpdateDelay">
  <owner>wiltzius@chromium.org</owner>
  <summary>Time between frames when the page is not GPU accelerated.</summary>
</histogram>

<histogram name="Renderer4.SoftwareImageDecodeState"
    enum="SoftwareImageDecodeState">
  <owner>vmpstr@chromium.org</owner>
  <summary>
    Software image decode usage statistics. Images are decoded and locked prior
    to raster; this indicates how that decode is used during tile management.
  </summary>
</histogram>

<histogram name="Renderer4.SoftwareImageDecodeState.FirstLockWasted"
    enum="BooleanWasted">
  <owner>vmpstr@chromium.org</owner>
  <summary>
    Indication whether the first lock of an image decode was wasted (image was
    not used). Images are decoded and locked prior to raster; this indicates
    whether the decode was used or not during the first lock.
  </summary>
</histogram>

<histogram name="Renderer4.SoftwarePaintDurationMS">
  <obsolete>
    Deprecated in issue 755432 as no longer being needed.
  </obsolete>
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Time spent by WebKit painting the page, in milliseconds, when the page is
    not GPU accelerated.
  </summary>
</histogram>

<histogram name="Renderer4.SoftwarePaintMegapixPerSecond">
  <obsolete>
    Deprecated in issue 755432 as no longer being needed.
  </obsolete>
  <owner>wiltzius@chromium.org</owner>
  <summary>
    WebKit paint throughput, measured in megapixels per second, when the page is
    not GPU accelerated.
  </summary>
</histogram>

<histogram name="Renderer4.StartToCommit" units="ms">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Time from &quot;start&quot; to &quot;commit.&quot; &quot;Start&quot;== time
    when renderer requested load of document, after any unload of last document.
    &quot;Commit&quot;== time when renderer got first byte of document.
  </summary>
</histogram>

<histogram name="Renderer4.StartToFinish" units="ms">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Time from &quot;start&quot; to &quot;finish.&quot; &quot;Start&quot;== time
    when renderer requested load of document, after any unload of last document.
    &quot;Finish&quot;==after onload() and all resources are loaded.
  </summary>
</histogram>

<histogram name="Renderer4.TextureCopyLatency" units="microseconds">
  <owner>reveman@chromium.org</owner>
  <summary>
    Time between the issue of a texture copy operation and detecting that it has
    completed as measured by the GPU process.

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

<histogram name="Renderer4.TextureGpuUploadTimeUS">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    The number of microseconds it took to upload a tile's full texture as
    measured on the GPU process.
  </summary>
</histogram>

<histogram name="Renderer4.Thumbnail">
  <owner>wiltzius@chromium.org</owner>
  <summary>Time to capture a renderer thumbnail.</summary>
</histogram>

<histogram name="Renderer4.tileCountCulled_Upload" units="NormalizedTiles">
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Number of tiles that culling prevented being uploaded to texture memory.
    This is an approximation and is recorded as a 100 times the percentage of
    the number of tiles, of default size, needed to cover the viewport. This is
    collected once per commit from WebKit to the compositor.
  </summary>
</histogram>

<histogram name="Renderer4.uploadPixelCountCulled" units="NormalizedPixels">
  <obsolete>
    Deprecated as of 04/2012, replaced with Renderer4.tileCountCulled_Upload.
  </obsolete>
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Number of pixels that culling prevented being uploaded to texture memory,
    normalized to the viewport size. This is collected once per commit from
    WebKit to the compositor.
  </summary>
</histogram>

<histogram name="Renderer4.uploadPixelCountOpaque" units="NormalizedPixels">
  <obsolete>
    Renamed to Renderer4.pixelCountOpaque_Upload.
  </obsolete>
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Number of pixels uploaded to texture memory and known to be opaque,
    normalized to the viewport size. This is collected once per commit from
    WebKit to the compositor.
  </summary>
</histogram>

<histogram name="Renderer4.uploadPixelCountTranslucent"
    units="NormalizedPixels">
  <obsolete>
    Renamed to Renderer4.pixelCountTranslucent_Upload.
  </obsolete>
  <owner>wiltzius@chromium.org</owner>
  <summary>
    Number of pixels uploaded to texture memory and not known opaque, normalized
    to the viewport size.  This is collected once per commit from WebKit to the
    compositor.
  </summary>
</histogram>

<histogram name="Renderer4.WheelScrollingThreadStatus"
    enum="ScrollingThreadStatus">
  <owner>tdresser@chromium.org</owner>
  <summary>
    For every wheel tick, we record whether the scroll occurred on the main
    thread, on the compositor thread, or on the compositor thread but blocked on
    the main thread. The last case will happen when there is a blocking event
    listener.
  </summary>
</histogram>

<histogram name="RendererScheduler.BackgroundedRendererTransition"
    enum="BackgroundedRendererTransition">
  <obsolete>
    Deprecated 6/2018 and replaced with
    PageScheduler.PageLifecycleStateTransition.
  </obsolete>
  <owner>fmeawad@chromium.org</owner>
  <owner>panicker@chromium.org</owner>
  <summary>
    Tracks the transitions of the renderer scheduler when it is backgrounded.
    Once it is backgrounded, it can be stopped after a timeout, stopped due to
    critical resources, resumed or foregrounded.
  </summary>
</histogram>

<histogram name="RendererScheduler.BackgroundRendererMainThreadLoad" units="%">
  <obsolete>
    Replaced with RendererScheduler.BackgroundRendererMainThreadLoad2 as of May
    2017.
  </obsolete>
  <owner>altimin@chromium.org</owner>
  <summary>
    Renderer main thread load when renderer is backgrounded, i.e. percentage of
    time spent on running tasks.

    This metric is emitted when the renderer main thread task is completed or
    renderer is backgrounded or foregrounded, at most once per minute per
    renderer amortized.
  </summary>
</histogram>

<histogram name="RendererScheduler.BackgroundRendererMainThreadLoad2" units="%">
  <obsolete>
    Replaced with
    RendererScheduler.RendererMainThreadLoad3.Background.AfterFirstMinute as of
    July 2017.
  </obsolete>
  <owner>altimin@chromium.org</owner>
  <summary>
    Renderer main thread load when renderer is backgrounded, i.e. percentage of
    time spent on running tasks.

    This metric is emitted when the renderer main thread task is completed or
    renderer is backgrounded or foregrounded, at most once per minute per
    renderer amortized.

    Note that this metric discards tasks longer than 30 seconds because they are
    considered to be a result of measurement glitch.
  </summary>
</histogram>

<histogram base="true"
    name="RendererScheduler.ExpectedQueueingTimeByFrameStatus"
    units="microseconds">
  <obsolete>
    Replaced with RendererScheduler.ExpectedQueueingTimeByFrameStatus2 as of Feb
    2018. Buckets were changed.
  </obsolete>
  <owner>npm@chromium.org</owner>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Expected queueing time split by tasks according to their frame status, in
    microseconds. The sum of the split values will be equal to the total,
    reported on RendererScheduler.ExpectedTaskQueueingDuration2. Recorded for
    each 1000 ms window.
  </summary>
</histogram>

<histogram base="true"
    name="RendererScheduler.ExpectedQueueingTimeByFrameStatus2"
    units="microseconds">
  <owner>npm@chromium.org</owner>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Expected queueing time split by tasks according to their frame status, in
    microseconds. The sum of the split values will be equal to the total,
    reported on RendererScheduler.ExpectedTaskQueueingDuration3. Recorded for
    each 1000 ms window.
  </summary>
</histogram>

<histogram base="true" name="RendererScheduler.ExpectedQueueingTimeByFrameType"
    units="ms">
  <obsolete>
    Replaced with RendererScheduler.ExpectedQueueingTimeByFrameStatus as of
    December 2017.
  </obsolete>
  <owner>npm@chromium.org</owner>
  <summary>
    Expected queueing time split by tasks according to their frame type. The sum
    of the split values should be equal to the total, reported on
    RendererScheduler.ExpectedTaskQueueingDuration. Recorded for each 1000 ms
    window.
  </summary>
</histogram>

<histogram base="true" name="RendererScheduler.ExpectedQueueingTimeByTaskQueue"
    units="microseconds">
  <obsolete>
    Replaced with RendererScheduler.ExpectedQueueingTimeByTaskQueue2 as of Feb
    2018. Buckets were changed.
  </obsolete>
  <owner>npm@chromium.org</owner>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Expected queueing time split by tasks according to the type of their task
    queue, in microseconds. The sum of the split values should be equal to the
    total, reported on RendererScheduler.ExpectedTaskQueueingDuration2. Recorded
    for each 1000 ms window.
  </summary>
</histogram>

<histogram base="true"
    name="RendererScheduler.ExpectedQueueingTimeByTaskQueue2"
    units="microseconds">
  <owner>npm@chromium.org</owner>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Expected queueing time split by tasks according to the type of their task
    queue, in microseconds. The sum of the split values should be equal to the
    total, reported on RendererScheduler.ExpectedTaskQueueingDuration3. Recorded
    for each 1000 ms window.
  </summary>
</histogram>

<histogram base="true"
    name="RendererScheduler.ExpectedQueueingTimeByTaskQueueType" units="ms">
  <obsolete>
    Replaced with RendererScheduler.ExpectedQueueingTimeByTaskQueue as of
    December 2017.
  </obsolete>
  <owner>npm@chromium.org</owner>
  <summary>
    Expected queueing time split by tasks according to the type of their task
    queue. The sum of the split values should be equal to the total, reported on
    RendererScheduler.ExpectedTaskQueueingDuration. Recorded for each 1000 ms
    window.
  </summary>
</histogram>

<histogram name="RendererScheduler.ExpectedQueueingTimeWhenQueueingTime"
    units="ms">
  <obsolete>
    Deprecated 04/2018.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Expected queueing time for events which were queued on the main thread
    longer or shorter than a threshold, given by the QueueingTimeThreshold
    suffix.

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

<histogram name="RendererScheduler.ExpectedTaskQueueingDuration" units="ms">
  <owner>tdresser@chromium.org</owner>
  <summary>
    The estimated queueing duration which would be observed for additional high
    priority tasks posted to the RendererScheduler. Recorded for each 1000 ms
    window.
  </summary>
</histogram>

<histogram name="RendererScheduler.ExpectedTaskQueueingDuration2"
    units="microseconds">
  <obsolete>
    Replaced with RendererScheduler.ExpectedTaskQueueingDuration3 as of Feb
    2018. Buckets were changed.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <owner>npm@chromium.org</owner>
  <summary>
    The estimated queueing duration which would be observed for additional high
    priority tasks posted to the RendererScheduler, in microseconds. Recorded
    for each 1000 ms window.
  </summary>
</histogram>

<histogram name="RendererScheduler.ExpectedTaskQueueingDuration3"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <owner>npm@chromium.org</owner>
  <summary>
    The estimated queueing duration which would be observed for additional high
    priority tasks posted to the RendererScheduler, in microseconds. Recorded
    for each 1000 ms window.

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

<histogram
    name="RendererScheduler.ExpectedTaskQueueingDurationWithoutMainFrame"
    units="microseconds">
  <owner>tdresser@chromium.org</owner>
  <owner>npm@chromium.org</owner>
  <summary>
    The estimated queueing duration which would be observed for additional high
    priority tasks posted to the RendererScheduler, in microseconds, for
    renderer processes that do not host any main frame. Recorded for each 1000
    ms window.

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

<histogram name="RendererScheduler.ForegroundRendererMainThreadLoad" units="%">
  <obsolete>
    Replaced with RendererScheduler.ForegroundRendererMainThreadLoad2 as of May
    2017.
  </obsolete>
  <owner>altimin@chromium.org</owner>
  <summary>
    Renderer main thread load when renderer is foregrounded, i.e. percentage of
    time spent on running tasks.

    This metric is emitted when the renderer main thread task is completed or
    renderer is backgrounded or foregrounded, at most once per minute per
    renderer amortized.
  </summary>
</histogram>

<histogram name="RendererScheduler.ForegroundRendererMainThreadLoad2" units="%">
  <obsolete>
    Replaced with
    RendererScheduler.RendererMainThreadLoad3.Foreground.AfterFirstMinute as of
    July 2017.
  </obsolete>
  <owner>altimin@chromium.org</owner>
  <summary>
    Renderer main thread load when renderer is foregrounded, i.e. percentage of
    time spent on running tasks.

    This metric is emitted when the renderer main thread task is completed or
    renderer is backgrounded or foregrounded, at most once per minute per
    renderer amortized.

    Note that this metric discards tasks longer than 30 seconds because they are
    considered to be a result of measurement glitch.
  </summary>
</histogram>

<histogram name="RendererScheduler.IPC.FrameVisibility" enum="Boolean">
  <owner>altimin@chromium.org</owner>
  <owner>lpy@chromium.org</owner>
  <summary>
    This boolean keeps track the count of the visibility change of a frame.
    Recorded every time when the visibility of a frame is changed.
  </summary>
</histogram>

<histogram name="RendererScheduler.MaxQueueingTime" units="ms">
  <owner>maxlg@chromium.org</owner>
  <summary>
    The single maximum estimated queueing duration (or max queueing time)
    between when user starts navigation and user navigates away. Navigate-away
    is defined as a fast shutdown or a natural ending of renderer, or the new
    navigation start which replacing the old navigation.

    The queueing time is estimated on a sliding window basis. The width of the
    sliding window is 1 second, the sliding step being 50ms. The max queueing
    time keeps track of the largest queueing time on each slide.

    This metric resets itself at navigation start, updates the max of queueing
    time with the sliding window moving, reports the max queueing times to the
    histogram at the next navigation start of the same or different renderer
    process.
  </summary>
</histogram>

<histogram name="RendererScheduler.NumberOfTasksPerQueueType"
    enum="RendererSchedulerTaskQueueType">
  <obsolete>
    Replaced with RendererScheduler.NumberOfTasksPerQueueType2 as of May 2017.
  </obsolete>
  <owner>altimin@chromium.org</owner>
  <owner>alexclarke@chromium.org</owner>
  <summary>
    The number of completed renderer tasks split per task queue type. Used to
    monitor usage of each type of task queue. Reported each time when task is
    completed.
  </summary>
</histogram>

<histogram name="RendererScheduler.NumberOfTasksPerQueueType2"
    enum="RendererSchedulerTaskQueueType">
  <obsolete>
    Replaced with RendererScheduler.TaskCountPerQueueType as of July 2017.
  </obsolete>
  <owner>altimin@chromium.org</owner>
  <owner>alexclarke@chromium.org</owner>
  <summary>
    The number of completed renderer tasks split per task queue type. Used to
    monitor usage of each type of task queue. Reported each time when task is
    completed.

    Note that this metric discards tasks longer than 30 seconds because they are
    considered to be a result of measurement glitch.
  </summary>
</histogram>

<histogram name="RendererScheduler.QueueingDurationWhenExpectedQueueingTime"
    units="ms">
  <obsolete>
    Deprecated as of 08/2017. Replaced with
    RendererScheduler.ExpectedQueueingTimeWhenQueueingTime.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Time between sending an event to the renderer main thread and when the
    renderer begins to process that event, for events which were dispatched when
    the expected queueing time was past some threshold.

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

<histogram name="RendererScheduler.RendererMainThreadLoad3" units="%">
  <obsolete>
    This metric still used 1-minute reporting chunks. Replaced with
    RendererMainThreadLoad4 as of July 2017.
  </obsolete>
  <owner>altimin@chromium.org</owner>
  <summary>
    Renderer main thread load (percentage of time spent in tasks), reported in
    one minute chunks.

    See http://bit.ly/chromium-renderer-main-thread-load-metric for details.

    This metric is emitted when the renderer main thread task is completed or
    renderer is backgrounded or foregrounded, at most once per second per
    renderer amortized.
  </summary>
</histogram>

<histogram name="RendererScheduler.RendererMainThreadLoad4" units="%">
  <obsolete>
    Replaced with RendererMainThreadLoad5 as of August 2017.
  </obsolete>
  <owner>altimin@chromium.org</owner>
  <summary>
    Renderer main thread load (percentage of time spent in tasks), reported in
    one second chunks.

    See http://bit.ly/chromium-renderer-main-thread-load-metric for details.

    This metric is emitted when the renderer main thread task is completed or
    renderer is backgrounded or foregrounded, at most once per second per
    renderer amortized.
  </summary>
</histogram>

<histogram name="RendererScheduler.RendererMainThreadLoad5" units="%">
  <owner>altimin@chromium.org</owner>
  <summary>
    Renderer main thread load (percentage of time spent in tasks), reported in
    one second chunks.

    See http://bit.ly/chromium-renderer-main-thread-load-metric for details.

    This metric is emitted when the renderer main thread task is completed or
    renderer is backgrounded or foregrounded, at most once per second per
    renderer amortized.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskCountPerFrameType"
    enum="RendererSchedulerFrameType2">
  <owner>altimin@chromium.org</owner>
  <summary>
    The number of completed renderer tasks split per frame type. Used to monitor
    usage of each type of frame. Reported each time when task is completed.

    Note that this metric discards tasks longer than 30 seconds because they are
    considered to be a result of measurement glitch.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskCountPerQueueType"
    enum="RendererSchedulerTaskQueueType">
  <owner>altimin@chromium.org</owner>
  <summary>
    The number of completed renderer tasks split per task queue type. Used to
    monitor usage of each type of task queue. Reported each time when task is
    completed.

    Note that this metric discards tasks longer than 30 seconds because they are
    considered to be a result of measurement glitch.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskCPUDurationPerTaskType.DedicatedWorker"
    enum="RendererSchedulerTaskType" units="ms">
  <obsolete>
    Replaced with RendererScheduler.TaskCPUDurationPerTaskType2.DedicatedWorker
    as of June 2018 due to overflows (crbug.com/809668). Some metrics are
    incremented with large amounts that they sometimes overflow and roll
    negative before they get uploaded.
  </obsolete>
  <owner>altimin@chromium.org</owner>
  <summary>
    Total duration of dedicated worker tasks (thread time) split by per thread
    type.  Reported each time when task is completed and current accumulated
    duration is longer than 1ms.

    Note that this metric discards tasks longer than 30 seconds because they are
    considered to be a result of measurement glitch.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskCPUDurationPerTaskType2.DedicatedWorker"
    enum="RendererSchedulerTaskType">
  <owner>altimin@chromium.org</owner>
  <summary>
    Total duration (reported in full seconds) of dedicated worker tasks (thread
    time) split by per thread type. Note that partial seconds are rounded
    up/down so that they average to the correct value when many reports are
    added. For more details, check base::ScaledLinearHistogram.

    This is reported each time a task is completed.

    Note that this metric discards tasks longer than 30 seconds because they are
    considered to be a result of measurement glitch.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskCPUDurationPerThreadType"
    enum="RendererSchedulerThreadType" units="ms">
  <obsolete>
    Replaced with RendererScheduler.TaskCPUDurationPerThreadType2 as of June
    2018 due to overflows (crbug.com/809668). Some metrics are incremented with
    large amounts that they sometimes overflow and roll negative before they get
    uploaded.
  </obsolete>
  <owner>altimin@chromium.org</owner>
  <summary>
    Total cpu time of renderer tasks split by per thread type. Wall time is
    tracked by RendererScheduler.TaskDurationPerThreadType histogram. This
    histogram is used to compare CPU usage of tasks from different threads.

    Only 1% of randomly sampled tasks have cpu time measured and report duration
    for this histogram.

    Note that this metric discards tasks longer than 30 seconds because they are
    considered to be a result of measurement glitch.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskCPUDurationPerThreadType2"
    enum="RendererSchedulerThreadType">
  <owner>altimin@chromium.org</owner>
  <summary>
    Total cpu time (reported in full seconds) of renderer tasks split by per
    thread type. Note that partial seconds are rounded up/down so that they
    average to the correct value when many reports are added. For more details,
    check base::ScaledLinearHistogram.

    Wall time is tracked by RendererScheduler.TaskDurationPerThreadType
    histogram. This histogram is used to compare CPU usage of tasks from
    different threads.

    Only 1% of randomly sampled tasks have cpu time measured and report duration
    for this histogram.

    Note that this metric discards tasks longer than 30 seconds because they are
    considered to be a result of measurement glitch.
  </summary>
</histogram>

<histogram base="true" name="RendererScheduler.TaskDurationPerFrameOriginType"
    enum="RendererSchedulerFrameOriginType">
  <obsolete>
    Replaced with RendererScheduler.TaskDurationPerFrameOriginType2 as of June
    2018 due to overflows (crbug.com/809668). Some metrics are incremented with
    large amounts that they sometimes overflow and roll negative before they get
    uploaded.
  </obsolete>
  <owner>altimin@chromium.org</owner>
  <summary>
    Total cpu time of renderer tasks split by per frame origin type (main frame
    vs same-origin frame vs cross-origin frame).

    Note that this metric discards tasks longer than 30 seconds because they are
    considered to be a result of measurement glitch.
  </summary>
</histogram>

<histogram base="true" name="RendererScheduler.TaskDurationPerFrameOriginType2"
    enum="RendererSchedulerFrameOriginType">
  <owner>altimin@chromium.org</owner>
  <summary>
    Total cpu time (reported in full seconds) of renderer tasks split by per
    frame origin type (main frame vs same-origin frame vs cross-origin frame).
    Note that partial seconds are rounded up/down so that they average to the
    correct value when many reports are added. For more details, check
    base::ScaledLinearHistogram.

    Note that this metric discards tasks longer than 30 seconds because they are
    considered to be a result of measurement glitch.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskDurationPerFrameType"
    enum="RendererSchedulerFrameType" units="ms">
  <obsolete>
    Replaced with RendererScheduler.TaskDurationPerFrameType2 due to the
    introduction of new types of frames as of 11/2017.
  </obsolete>
  <owner>altimin@chromium.org</owner>
  <summary>
    Total duration of renderer per-frame tasks split per frame type. Used to
    monitor workload coming from different frames. Reported each time when task
    is completed and current accumulated duration is longer than 1ms.

    This metric is susceptible to problematic outliers and should be analyzed
    with custom scripts accounting for that rather than from a dashboard.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskDurationPerFrameType2"
    enum="RendererSchedulerFrameType2" units="ms">
  <obsolete>
    Replaced with RendererScheduler.TaskDurationPerFrameType3 as of June 2018
    due to overflows (crbug.com/809668). Some metrics are incremented with large
    amounts that they sometimes overflow and roll negative before they get
    uploaded.
  </obsolete>
  <owner>altimin@chromium.org</owner>
  <summary>
    Total duration of renderer per-frame tasks split per frame type. Used to
    monitor workload coming from different frames. Reported each time when task
    is completed and current accumulated duration is longer than 1ms.

    This metric is susceptible to problematic outliers and should be analyzed
    with custom scripts accounting for that rather than from a dashboard.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskDurationPerFrameType3"
    enum="RendererSchedulerFrameType2">
  <owner>altimin@chromium.org</owner>
  <summary>
    Total duration (reported in full seconds) of renderer per-frame tasks split
    per frame type. Note that partial seconds are rounded up/down so that they
    average to the correct value when many reports are added. For more details,
    check base::ScaledLinearHistogram.

    Used to monitor workload coming from different frames. Reported each time a
    task is completed.

    This metric is susceptible to problematic outliers and should be analyzed
    with custom scripts accounting for that rather than from a dashboard.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskDurationPerQueueType"
    enum="RendererSchedulerTaskQueueType" units="ms">
  <obsolete>
    Replaced with RendererScheduler.TaskDurationPerQueueType2 as of May 2017.
  </obsolete>
  <owner>altimin@chromium.org</owner>
  <owner>alexclarke@chromium.org</owner>
  <summary>
    Total duration of renderer tasks split per task queue type. Used to monitor
    usage of each type of task queues. Reported each time when task is completed
    and current accumulated duration is longer than 1ms.

    This metric is susceptible to problematic outliers and should be analyzed
    with custom scripts accounting for that rather than from a dashboard.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskDurationPerQueueType2"
    enum="RendererSchedulerTaskQueueType" units="ms">
  <obsolete>
    Replaced with RendererScheduler.TaskDurationPerQueueType3 as of June 2018
    due to overflows (crbug.com/809668). Some metrics are incremented with large
    amounts that they sometimes overflow and roll negative before they get
    uploaded.
  </obsolete>
  <owner>altimin@chromium.org</owner>
  <owner>alexclarke@chromium.org</owner>
  <summary>
    Total duration of renderer tasks split per task queue type. Used to monitor
    usage of each type of task queues. Reported each time when task is completed
    and current accumulated duration is longer than 1ms.

    This metric is susceptible to problematic outliers and should be analyzed
    with custom scripts accounting for that rather than from a dashboard.

    Note that this metric discards tasks longer than 30 seconds because they are
    considered to be a result of measurement glitch.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskDurationPerQueueType3"
    enum="RendererSchedulerTaskQueueType">
  <owner>altimin@chromium.org</owner>
  <owner>alexclarke@chromium.org</owner>
  <summary>
    Total duration (reported in full seconds) of renderer tasks split per task
    queue type. Note that partial seconds are rounded up/down so that they
    average to the correct value when many reports are added. For more details,
    check base::ScaledLinearHistogram.

    Used to monitor usage of each type of task queues. Reported each time a task
    is completed.

    This metric is susceptible to problematic outliers and should be analyzed
    with custom scripts accounting for that rather than from a dashboard.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskDurationPerTaskType"
    enum="RendererSchedulerTaskType" units="ms">
  <obsolete>
    Replaced with RendererScheduler.TaskDurationPerTaskType2 as of June 2018 due
    to overflows (crbug.com/809668). Some metrics are incremented with large
    amounts that they sometimes overflow and roll negative before they get
    uploaded.
  </obsolete>
  <owner>altimin@chromium.org</owner>
  <owner>hajimehoshi@chromium.org</owner>
  <summary>
    Total duration of renderer per-frame tasks split per task type. Used to
    monitor usage of each task type. Reported each time when task is completed
    and current accumulated duration is longer than 1ms.

    This metric is susceptible to problematic outliers and should be analyzed
    with custom scripts accounting for that rather than from a dashboard.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskDurationPerTaskType.DedicatedWorker"
    enum="RendererSchedulerTaskType" units="ms">
  <obsolete>
    Replaced with RendererScheduler.TaskDurationPerTaskType2.DedicatedWorker as
    of June 2018 due to due to overflows (crbug.com/809668). Some metrics are
    incremented with large amounts that they sometimes overflow and roll
    negative before they get uploaded.
  </obsolete>
  <owner>altimin@chromium.org</owner>
  <summary>
    Total duration of dedicated worker tasks (wall time) split by per thread
    type.  Reported each time when task is completed and current accumulated
    duration is longer than 1ms.

    Note that this metric discards tasks longer than 30 seconds because they are
    considered to be a result of measurement glitch.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskDurationPerTaskType2"
    enum="RendererSchedulerTaskType">
  <owner>altimin@chromium.org</owner>
  <owner>hajimehoshi@chromium.org</owner>
  <summary>
    Total duration (reported in full seconds) of renderer per-frame tasks split
    per task type. Note that partial seconds are rounded up/down so that they
    average to the correct value when many reports are added. For more details,
    check base::ScaledLinearHistogram.

    Used to monitor usage of each task type. Reported each time a task is
    completed.

    This metric is susceptible to problematic outliers and should be analyzed
    with custom scripts accounting for that rather than from a dashboard.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskDurationPerTaskType2.DedicatedWorker"
    enum="RendererSchedulerTaskType">
  <owner>altimin@chromium.org</owner>
  <summary>
    Total duration (repored in full seconds) of dedicated worker tasks (wall
    time) split by per thread type. Note that partial seconds are rounded
    up/down so that they average to the correct value when many reports are
    added. For more details, check base::ScaledLinearHistogram.

    Reported each time a task is completed.

    Note that this metric discards tasks longer than 30 seconds because they are
    considered to be a result of measurement glitch.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskDurationPerThreadType"
    enum="RendererSchedulerThreadType" units="ms">
  <obsolete>
    Replaced with RendererScheduler.TaskDurationPerThreadType2 as of June 2018
    due to overflows (crbug.com/809668). Some metrics are incremented with large
    amounts that they sometimes overflow and roll negative before they get
    uploaded.
  </obsolete>
  <owner>altimin@chromium.org</owner>
  <owner>lpy@chromium.org</owner>
  <summary>
    Total duration of renderer tasks split by per thread type. Used to compare
    CPU usage of tasks from different threads. Reported each time when task is
    completed and current accumulated duration is longer than 1ms.

    Note that this metric discards tasks longer than 30 seconds because they are
    considered to be a result of measurement glitch.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskDurationPerThreadType2"
    enum="RendererSchedulerThreadType">
  <owner>altimin@chromium.org</owner>
  <owner>lpy@chromium.org</owner>
  <summary>
    Total duration (reported in full seconds) of renderer tasks split by per
    thread type. Note that partial seconds are rounded up/down so that they
    average to the correct value when many reports are added. For more details,
    check base::ScaledLinearHistogram.

    Used to compare CPU usage of tasks from different threads. Reported each
    time a task is completed.

    Note that this metric discards tasks longer than 30 seconds because they are
    considered to be a result of measurement glitch.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskDurationPerUseCase"
    enum="RendererSchedulerTaskUseCase">
  <obsolete>
    Replaced with RendererScheduler.TaskDurationPerUseCase2 as of June 2018 due
    to overflows (crbug.com/809668). Some metrics are incremented with large
    amounts that they sometimes overflow and roll negative before they get
    uploaded.
  </obsolete>
  <owner>altimin@chromium.org</owner>
  <owner>farahcharab@chromium.org</owner>
  <summary>
    Total duration (measured in ms) of renderer main thread tasks split by
    scheduler use case. Use case is a scheduler's educated guess of the current
    state of the world. See renderer/use_case.h and
    RendererSchedulerImpl::UpdatePolicy for more details.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskDurationPerUseCase2"
    enum="RendererSchedulerTaskUseCase">
  <owner>altimin@chromium.org</owner>
  <owner>farahcharab@chromium.org</owner>
  <summary>
    Total duration (reported in full seconds) of renderer main thread tasks
    split by scheduler use case. Note that partial seconds are rounded up/down
    so that they average to the correct value when many reports are added. For
    more details, check base::ScaledLinearHistogram.

    Use case is a scheduler's educated guess of the current state of the world.
    See renderer/use_case.h and

    RendererSchedulerImpl::UpdatePolicy for more details.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskQueueManager.DelayedTaskLateness"
    units="ms">
  <obsolete>
    Removed from code 2017-08.
  </obsolete>
  <owner>alexclarke@chromium.org</owner>
  <summary>
    The delta between when a delayed task was scheduled to run and when the
    RendererScheduler actually ran it. Note: to reduce overhead only 10% of
    tasks are sampled.
  </summary>
</histogram>

<histogram
    name="RendererScheduler.TaskQueueManager.ImmediateTaskQueueingDuration"
    units="ms">
  <obsolete>
    Removed from code 2017-08.
  </obsolete>
  <owner>alexclarke@chromium.org</owner>
  <summary>
    The queueing duration for non-delayed tasks posted to the RendererScheduler.
    This metric is only recorded if TrackingInfo::time_posted is set (i.e. not
    on android). Note: to reduce overhead only 10% of tasks are sampled.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskTime" units="microseconds">
  <obsolete>
    Replaced with RendererScheduler.TaskTime2 as of May 2017.
  </obsolete>
  <owner>sunyunjia@chromium.org</owner>
  <owner>tdresser@chromium.org</owner>
  <summary>
    The duration of every task queued in the _renderer_ scheduler to see the
    distribution of the task duration.
  </summary>
</histogram>

<histogram name="RendererScheduler.TaskTime2" units="microseconds">
  <owner>sunyunjia@chromium.org</owner>
  <owner>tdresser@chromium.org</owner>
  <summary>
    The duration of every task queued in the _renderer_ scheduler to see the
    distribution of the task duration.

    Note that this metric discards tasks longer than 30 seconds because they are
    considered to be a result of measurement glitch.

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

<histogram name="RendererScheduler.UpdateForSameDocumentNavigationCount"
    enum="SinglePageAppNavigationType">
  <owner>maxlg@chromium.org</owner>
  <summary>
    The count of same-document-navigations split by whether it is the
    same-document backward/forward navigation, history API navigation, or other
    fragment navigation.
  </summary>
</histogram>

<histogram name="RendererScheduler.UserModel.GestureDuration" units="ms">
  <obsolete>
    Removed from code 2017-08.
  </obsolete>
  <owner>alexclarke@chromium.org</owner>
  <summary>Duration of gestures (scrolls and pinches).</summary>
</histogram>

<histogram name="RendererScheduler.UserModel.GesturePredictedCorrectly"
    units="GesturePredictionResult">
  <obsolete>
    Removed from code 2017-08.
  </obsolete>
  <owner>alexclarke@chromium.org</owner>
  <summary>Whether a user gesture was predicted correctly.</summary>
</histogram>

<histogram name="RendererScheduler.UserModel.GestureStartTimeSinceModelReset"
    units="ms">
  <obsolete>
    Removed from code 2017-08.
  </obsolete>
  <owner>alexclarke@chromium.org</owner>
  <summary>
    Time between when the UserModel was last reset (which happens on navigation)
    and a gesture starting.
  </summary>
</histogram>

<histogram name="RendererScheduler.UserModel.TimeBetweenGestures" units="ms">
  <obsolete>
    Removed from code 2017-08.
  </obsolete>
  <owner>alexclarke@chromium.org</owner>
  <summary>Time between subsequent gestures (scrolls and pinches).</summary>
</histogram>

<histogram name="RendererScheduler.WebFramesPerScheduler" units="web frames">
  <owner>altimin@chromium.org</owner>
  <summary>
    Number of web frame schedulers per renderer scheduler. Recorded once per
    navigation.
  </summary>
</histogram>

<histogram name="RendererScheduler.WebViewsPerScheduler" units="web views">
  <owner>altimin@chromium.org</owner>
  <summary>
    Number of web view schedulers per renderer scheduler. Recorded once per
    navigation.
  </summary>
</histogram>

<histogram name="RendererSyncIPC.ElapsedTime" units="ms">
  <owner>ppi@chromium.org</owner>
  <summary>
    Roundtrip times for synchronous IPC calls from the renderer to browser.
  </summary>
</histogram>

<histogram name="RenderFrameHostImpl.DroppedInterfaceRequestName"
    enum="RenderFrameHostImpl.InterfaceNames">
  <owner>engedy@chromium.org</owner>
  <summary>
    For each load and dropped Mojo interface request in a frame, records a
    sample with a value corresponding to the hash of the interface name,
    calculated as the lower 31 bits of the interface name's metric name hash.

    Interface requests to RenderFrame::GetRemoteInterfaces are dropped when they
    arrive to the RenderFrameHostImpl after the RenderFrameHostImpl had already
    committed the next cross-document navigation.

    This means that |document_scoped_interface_provider_binding_| was already
    unbound at the time from the interface connection that had been used to
    service RenderFrame::GetRemoteInterface for the previous load, so those
    interface requests are dropped.
  </summary>
</histogram>

<histogram name="RenderFrameHostImpl.DroppedInterfaceRequests" units="count">
  <owner>engedy@chromium.org</owner>
  <summary>
    For each load in a frame, records the number of interface requests to
    RenderFrame::GetRemoteInterfaces that arrived to the RenderFrameHostImpl
    after the RFHI had already committed the next cross-document navigation.

    This means that |document_scoped_interface_provider_binding_| was already
    unbound at the time from the interface connection that had been used to
    service RenderFrame::GetRemoteInterface for the previous load, so those
    interface requests are dropped. This histogram measures how often, if at
    all, that happens in practice.
  </summary>
</histogram>

<histogram name="RenderFrameHostImpl.ReceivedPostMessageFromNonDescendant"
    enum="BooleanReceived" expires_after="2018-10-30">
  <owner>alexmos@chromium.org</owner>
  <owner>boliu@chromium.org</owner>
  <summary>
    Record whether a local root frame ever received post messages from another
    cross origin frame that's not a descendent. This is useful to evaluate if a
    frame is safe to be reloaded automatically. Recorded when a frame crashed
    while invisible, and then becomes visible to the user; this is the point a
    crashed frame would be reloaded. Note this is not logged for the main frame,
    which only has descendant frames.
  </summary>
</histogram>

<histogram name="RenderFrameObservers.DidChangeScrollOffset" units="ms">
  <obsolete>
    Deprecated 2/2018
  </obsolete>
  <owner>joelhockey@chromium.org</owner>
  <summary>
    Cumulative time spent by all RenderFrameObservers in
    RenderFrameImpl.DidChangeScrollOffset.
  </summary>
</histogram>

<histogram name="RenderFrameObservers.DidClearWindowObject" units="ms">
  <obsolete>
    Deprecated 2/2018
  </obsolete>
  <owner>joelhockey@chromium.org</owner>
  <summary>
    Cumulative time spent by all RenderFrameObservers in
    RenderFrameImpl.DidClearWindowObject.
  </summary>
</histogram>

<histogram name="RenderFrameObservers.DidCommitProvisionalLoad" units="ms">
  <obsolete>
    Deprecated 2/2018
  </obsolete>
  <owner>joelhockey@chromium.org</owner>
  <summary>
    Cumulative time spent by all RenderFrameObservers in
    RenderFrameImpl.DidCommitProvisionalLoad.
  </summary>
</histogram>

<histogram name="RenderFrameObservers.DidCreateScriptContext" units="ms">
  <obsolete>
    Deprecated 2/2018
  </obsolete>
  <owner>joelhockey@chromium.org</owner>
  <summary>
    Cumulative time spent by all RenderFrameObservers in
    RenderFrameImpl.DidCreateScriptContext.
  </summary>
</histogram>

<histogram name="RenderFrameObservers.DidFailProvisionalLoad" units="ms">
  <obsolete>
    Deprecated 2/2018
  </obsolete>
  <owner>joelhockey@chromium.org</owner>
  <summary>
    Cumulative time spent by all RenderFrameObservers in
    RenderFrameImpl.DidFailProvisionalLoad.
  </summary>
</histogram>

<histogram name="RenderFrameObservers.DidFinishDocumentLoad" units="ms">
  <obsolete>
    Deprecated 2/2018
  </obsolete>
  <owner>joelhockey@chromium.org</owner>
  <summary>
    Cumulative time spent by all RenderFrameObservers in
    RenderFrameImpl.DidFinishDocumentLoad.
  </summary>
</histogram>

<histogram name="RenderFrameObservers.DidFinishLoad" units="ms">
  <obsolete>
    Deprecated 2/2018
  </obsolete>
  <owner>joelhockey@chromium.org</owner>
  <summary>
    Cumulative time spent by all RenderFrameObservers in
    RenderFrameImpl.DidFinishLoad.
  </summary>
</histogram>

<histogram name="RenderFrameObservers.DidMeaningfulLayout" units="ms">
  <obsolete>
    Deprecated 2/2018
  </obsolete>
  <owner>joelhockey@chromium.org</owner>
  <summary>
    Cumulative time spent by all RenderFrameObservers in
    RenderFrameImpl.DidMeaningfulLayout.
  </summary>
</histogram>

<histogram name="RenderFrameObservers.DidStartProvisionalLoad" units="ms">
  <obsolete>
    Deprecated 2/2018
  </obsolete>
  <owner>joelhockey@chromium.org</owner>
  <summary>
    Cumulative time spent by all RenderFrameObservers in
    RenderFrameImpl.DidStartProvisionalLoad.
  </summary>
</histogram>

<histogram name="RenderFrameObservers.FocusedNodeChanged" units="ms">
  <obsolete>
    Deprecated 2/2018
  </obsolete>
  <owner>joelhockey@chromium.org</owner>
  <summary>
    Cumulative time spent by all RenderFrameObservers in
    RenderFrameImpl.FocusedNodeChanged.
  </summary>
</histogram>

<histogram name="RenderFrameObservers.OnMessageReceived" units="ms">
  <obsolete>
    Deprecated 2/2018
  </obsolete>
  <owner>joelhockey@chromium.org</owner>
  <summary>
    Cumulative time spent by all RenderFrameObservers in
    RenderFrameImpl.OnMessageReceived.
  </summary>
</histogram>

<histogram name="RenderFrameObservers.ScriptedPrint" units="ms">
  <obsolete>
    Deprecated 2/2018
  </obsolete>
  <owner>joelhockey@chromium.org</owner>
  <summary>
    Cumulative time spent by all RenderFrameObservers in
    RenderFrameImpl.ScriptedPrint.
  </summary>
</histogram>

<histogram name="RenderFrameObservers.WillCommitProvisionalLoad" units="ms">
  <obsolete>
    Deprecated 2/2018
  </obsolete>
  <owner>joelhockey@chromium.org</owner>
  <summary>
    Cumulative time spent by all RenderFrameObservers in
    RenderFrameImpl.WillCommitProvisionalLoad.
  </summary>
</histogram>

<histogram name="RenderFrameObservers.WillSendSubmitEvent" units="ms">
  <obsolete>
    Deprecated 2/2018
  </obsolete>
  <owner>joelhockey@chromium.org</owner>
  <summary>
    Cumulative time spent by all RenderFrameObservers in
    RenderFrameImpl.WillSendSubmitEvent.
  </summary>
</histogram>

<histogram name="RenderFrameObservers.WillSubmitForm" units="ms">
  <obsolete>
    Deprecated 2/2018
  </obsolete>
  <owner>joelhockey@chromium.org</owner>
  <summary>
    Cumulative time spent by all RenderFrameObservers in
    RenderFrameImpl.WillSubmitForm.
  </summary>
</histogram>

<histogram name="RenderViewContextMenu.OpenLinkAsUser" enum="OpenLinkAsUser">
  <owner>jochen@chromium.org</owner>
  <summary>
    State of the profile that is activated via the &quot;Open Link as User&quot;
    menu. Logged when one of the &quot;Open Link as User&quot; context menu
    options is selected.
  </summary>
</histogram>

<histogram name="RenderViewContextMenu.OpenLinkAsUserProfilesState"
    enum="OpenLinkAsUserProfilesState">
  <owner>jochen@chromium.org</owner>
  <summary>
    Whether or not other profiles are active when the &quot;Open Link as
    User&quot; context menu is shown. Logged when the context menu is created.
  </summary>
</histogram>

<histogram name="RenderViewContextMenu.OpenLinkAsUserShown" units="profiles">
  <owner>jochen@chromium.org</owner>
  <summary>
    Count of the profiles shown for the &quot;Open Link as User&quot; context
    menu. Logged when the context menu is created.
  </summary>
</histogram>

<histogram name="RenderViewContextMenu.Shown" enum="RenderViewContextMenuItem">
  <owner>vitalybuka@chromium.org</owner>
  <summary>Count of renderer view context menu items shown.</summary>
</histogram>

<histogram name="RenderViewContextMenu.Used" enum="RenderViewContextMenuItem">
  <owner>vitalybuka@chromium.org</owner>
  <summary>
    Count of renderer view context menu items (Only commands now) used.
  </summary>
</histogram>

<histogram name="Reporting.HeaderEndpointGroupOutcome"
    enum="ReportingHeaderEndpointGroupOutcome">
  <obsolete>
    Moved to Net.Reporting.HeaderEndpointGroupOutcome.
  </obsolete>
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The outcome of Reporting trying to process a single endpoint group in a
    Report-To header once the header itself has been parsed.
  </summary>
</histogram>

<histogram name="Reporting.HeaderEndpointOutcome"
    enum="ReportingHeaderEndpointOutcome">
  <obsolete>
    Moved to Net.Reporting.HeaderEndpointOutcome.
  </obsolete>
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The outcome of Reporting trying to process a single endpoint in a Report-To
    header once the header itself has been parsed.
  </summary>
</histogram>

<histogram name="Reporting.HeaderOutcome" enum="ReportingHeaderOutcome">
  <obsolete>
    Moved to Net.Reporting.HeaderOutcome.
  </obsolete>
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The outcome of Reporting trying to process a Report-To header. Once it is
    parsed, Reporting.HeaderEndpointOutcome records the outcome of the endpoints
    within it.
  </summary>
</histogram>

<histogram name="Reporting.ReportDeliveredAttempts" units="attempts">
  <obsolete>
    Moved to Net.Reporting.ReportDeliveredAttempts.
  </obsolete>
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    When Reporting successfully delivers a report, the number of unsuccessful
    delivery attempts that preceded the successful one.
  </summary>
</histogram>

<histogram name="Reporting.ReportDeliveredLatency" units="ms">
  <obsolete>
    Moved to Net.Reporting.ReportDeliveredLatency.
  </obsolete>
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The delivery latency of reports successfully delivered by Reporting. Starts
    when the report is queued and finishes when the delivery attempt returns
    successfully.
  </summary>
</histogram>

<histogram name="Reporting.ReportOutcome" enum="ReportingReportOutcome">
  <obsolete>
    Moved to Net.Reporting.ReportOutcome.
  </obsolete>
  <owner>juliatuttle@chromium.org</owner>
  <summary>
    The outcome of Reporting trying to deliver a report, recorded when the
    report is finally erased from memory.
  </summary>
</histogram>

<histogram name="RequestAutocomplete.DismissalState"
    enum="AutofillDialogDismissalState">
  <obsolete>
    Deprecated as of 5/5/2016.
  </obsolete>
  <owner>estade@chromium.org</owner>
  <summary>
    The state of the requestAutocomplete() dialog when it was dismissed.
  </summary>
</histogram>

<histogram name="RequestAutocomplete.InitialUserState"
    enum="AutofillDialogInitialUserState">
  <obsolete>
    Deprecated as of 5/5/2016.
  </obsolete>
  <owner>estade@chromium.org</owner>
  <summary>
    The initial state of a user that's interacting with a freshly shown
    requestAutocomplete() dialog.
  </summary>
</histogram>

<histogram name="RequestAutocomplete.PopupInDialog"
    enum="AutofillDialogPopupEvent">
  <obsolete>
    Deprecated as of 5/5/2016.
  </obsolete>
  <owner>estade@chromium.org</owner>
  <summary>
    User interactions with the Autofill popup shown while filling an
    requestAutocomplete() dialog.
  </summary>
</histogram>

<histogram name="RequestAutocomplete.Security" enum="AutofillDialogSecurity">
  <obsolete>
    Deprecated as of 5/5/2016.
  </obsolete>
  <owner>estade@chromium.org</owner>
  <summary>
    Measures the frequency of security warnings and errors in the
    RequestAutocomplete dialog.
  </summary>
</histogram>

<histogram name="RequestAutocomplete.UiDuration" units="ms">
  <obsolete>
    Deprecated as of 5/5/2016.
  </obsolete>
  <owner>estade@chromium.org</owner>
  <summary>
    Measures the duration for which an requestAutocomplete() dialog was shown.
  </summary>
</histogram>

<histogram name="RequestAutocomplete.UiDuration.Cancel" units="ms">
  <obsolete>
    Deprecated as of 5/5/2016.
  </obsolete>
  <owner>estade@chromium.org</owner>
  <summary>
    Measures the duration for which an requestAutocomplete() dialog was shown,
    in cases where the user ended up canceling out of the dialog.
  </summary>
</histogram>

<histogram name="RequestAutocomplete.UiDuration.Submit" units="ms">
  <obsolete>
    Deprecated as of 5/5/2016.
  </obsolete>
  <owner>estade@chromium.org</owner>
  <summary>
    Measures the duration for which an requestAutocomplete() dialog was shown,
    in cases where the user ended up accepting the dialog.
  </summary>
</histogram>

<histogram name="RequestAutocomplete.UiEvents" enum="AutofillDialogUiEvents">
  <obsolete>
    Deprecated as of 5/5/2016.
  </obsolete>
  <owner>estade@chromium.org</owner>
  <summary>
    Measures how users are interacting with the requestAutocomplete() dialog UI.
  </summary>
</histogram>

<histogram name="RequestAutocomplete.UiLatencyToShow" units="ms">
  <obsolete>
    Deprecated as of 5/5/2016.
  </obsolete>
  <owner>estade@chromium.org</owner>
  <summary>
    Measures the duration of time it takes for the requestAutocomplete() UI to
    be actionable by the user after it is shown.
  </summary>
</histogram>

<histogram name="RequestAutocomplete.WalletErrors" enum="WalletErrors">
  <obsolete>
    Deprecated as of 5/5/2016.
  </obsolete>
  <owner>estade@chromium.org</owner>
  <summary>
    Measures the frequency of errors in communicating with the Google Online
    Wallet server.
  </summary>
</histogram>

<histogram name="RequestAutocomplete.WalletRequiredActions"
    enum="WalletRequiredActions">
  <obsolete>
    Deprecated as of 5/5/2016.
  </obsolete>
  <owner>estade@chromium.org</owner>
  <summary>
    Measures the frequency of required user actions returned by the Google
    Online Wallet server.
  </summary>
</histogram>

<histogram name="Reset.ChromeOS.PowerwashDialogShown"
    enum="PowerwashDialogViewType">
  <owner>merkulova@chromium.org</owner>
  <summary>
    Records the number of times the factory reset dialog was shown. Grouped by
    the viewtype.
  </summary>
</histogram>

<histogram name="ResourceCoordinator.IPCPerMinute.Frame" units="count/m">
  <owner>lpy@chromium.org</owner>
  <summary>
    The number of IPCs from frame to GRC. Recorded every 1 minute.
  </summary>
</histogram>

<histogram name="ResourceCoordinator.IPCPerMinute.Page" units="count/m">
  <owner>lpy@chromium.org</owner>
  <summary>
    The number of IPCs from page to GRC. Recorded every 1 minute.
  </summary>
</histogram>

<histogram name="ResourceCoordinator.IPCPerMinute.Process" units="count/m">
  <owner>lpy@chromium.org</owner>
  <summary>
    The number of IPCs from process to GRC. Recorded every 1 minute.
  </summary>
</histogram>

<histogram name="ResourceCoordinator.LocalDB.DatabaseInit"
    enum="LocalSiteCharacteristicsDBInitStatus">
  <owner>sebmarchand@chromium.org</owner>
  <summary>
    The result of opening the Local Site Characteristics database.
  </summary>
</histogram>

<histogram name="ResourceCoordinator.LocalDB.DatabaseInitAfterDelete"
    enum="LocalSiteCharacteristicsDBInitStatus">
  <owner>sebmarchand@chromium.org</owner>
  <summary>
    The result of opening the Local Site Characteristics database after deleting
    it after a failed repair attempt.
  </summary>
</histogram>

<histogram name="ResourceCoordinator.LocalDB.DatabaseInitAfterRepair"
    enum="LocalSiteCharacteristicsDBInitStatus">
  <owner>sebmarchand@chromium.org</owner>
  <summary>
    The result of opening the Local Site Characteristics database after a repair
    attempt.
  </summary>
</histogram>

<histogram name="ResourceCoordinator.LocalDB.DatabaseRepair"
    enum="BooleanSuccess">
  <owner>sebmarchand@chromium.org</owner>
  <summary>
    The result of trying to repair the Local Site Characteristics database after
    a failed open.
  </summary>
</histogram>

<histogram name="ResourceCoordinator.LocalDB.ObservationTimeBeforeFirstUse"
    units="ms">
<!-- Name completed by histogram_suffixes name="LocalSiteCharacteristicsFeatures" -->

  <owner>sebmarchand@chromium.org</owner>
  <summary>
    The cumulative observation time before a feature tracked in the Local Site
    Characteristics database gets used.
  </summary>
</histogram>

<histogram name="ResourceCoordinator.LocalDB.OnDiskSize" units="KB">
  <owner>sebmarchand@chromium.org</owner>
  <summary>
    The size of the Local Site Characteristics database on disk. Recorded at
    startup when the database gets opened.
  </summary>
</histogram>

<histogram name="ResourceCoordinator.LocalDB.ReadHasCompletedBeforeQuery"
    enum="Boolean">
  <owner>sebmarchand@chromium.org</owner>
  <summary>
    Boolean indicating if the read operation from the Local Site Characteristics
    database has completed when we query for the characteristics of a site.
  </summary>
</histogram>

<histogram name="ResourceLoadingHints.CountBlockedSubresourcePatterns"
    units="pattern count">
  <owner>tbansal@chromium.org</owner>
  <summary>
    The count of resource loading blocking patterns received by the renderer.
    Recorded every time resource loading hints mojom message is received.
    Recorded at most once per triggered navigation.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.CachePattern"
    enum="HttpCachePattern">
  <obsolete>
    Deprecated at M66. No longer recorded.
  </obsolete>
  <owner>alexilin@chromium.org</owner>
  <summary>
    Like HttpCache.Pattern but only for requests made during speculative
    prefetch. Logged per successful request.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.DatabaseReadiness" units="%">
  <obsolete>
    Deprecated at M66. No longer recorded.
  </obsolete>
  <owner>alexilin@chromium.org</owner>
  <summary>
    This metric measures the host coverage of the predictor database: On each
    navigation, it records what percentage of the top X history entries are
    found in the predictor DB. Caveats: (1) This metric is only recorded once
    the user has accumulated enough browsing history, implemented as a minimum
    threshold of total page visits by the user. (2) This metric is sampled, so
    it's actually only recorded for 1 out of every K navigations.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.DbStringTooLong">
  <obsolete>
    Deprecated October 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    A boolean that used to indicate a corner case when certain resources are not
    written to the Predictor database becuase their URLs are too long. We
    monitor this number to ensure that we do not discard too many resources.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.HavePredictionsForUrl">
  <obsolete>
    Deprecated 08/2012. Replaced with ResourcePrefetchPredictorNavigationEvent.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    A boolean that indicates if the speculative resource prefetch predictor has
    predictions for a Navigation. This is updated on each navigations and helps
    us determine the coverage of the predictor.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.HavePrefetchResults">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    A boolean that used to indicate a corner case when we may not have prefetch
    results even though prefetching is enabled and predictions are present,
    because another navigation in the same tab canceled the prefetching of the
    previous load.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.HistoryVisitCountForUrl">
  <obsolete>
    Deprecated at M66. No longer recorded.
  </obsolete>
  <owner>alexilin@chromium.org</owner>
  <summary>
    The visit count of a URL in the history database, measured when the onload
    fires for the URL. Helpful in figuring out what visit count should be used
    to start learning about a URL.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.Host.PredictedPrefetchCount">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    Assuming a fixed number (25 or 50) of URLs could be prefetched max, how many
    would be available for prefetch (after we apply our heuristics for picking
    subresources to prefetch for a navigation).

    This stat is recorded when the predictor uses the host of the main frame url
    as the key for prediction.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromCache">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    When we have predictions for a navigation, we measure the accuracy of the
    predictions against the actual resources downloaded. This histogram gives
    the distribution of the predictions that were fetched by the page and served
    from the cache restricted to some max predictions (25 or 50).

    This stat is recorded when the predictor uses the host of the main frame url
    as the key for prediction.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetwork">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    When we have predictions for a navigation, we measure the accuracy of the
    predictions against the actual resources downloaded. This histogram gives
    the distribution of the predictions that were fetched by the page and served
    from the network restricted to some max predictions (25 or 50).

    This stat is recorded when the predictor uses the host of the main frame url
    as the key for prediction.
  </summary>
</histogram>

<histogram
    name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetworkPercentOfTotalFromNetwork"
    units="%">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    Similar to ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetwork but
    as a percent of the total number of resources the page actually fetched from
    the network. This depcits the major gains that we can get.

    This stat is recorded when the predictor uses the host of the main frame url
    as the key for prediction.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.Host.PredictedPrefetchMisses">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    When we have predictions for a navigation, we measure the accuracy of the
    predictions against the actual resources downloaded. This histogram gives
    the distribution of the predictions that were fetched by the page not used
    by the page, restricted to some max predictions (25 or 50).

    This stat is recorded when the predictor uses the host of the main frame url
    as the key for prediction.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.Host.PrefetchCancelled" units="%">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    For prefetching based on host of main frame URL, the percentage of
    prefetches cancelled as a percentage of the total number of resources that
    the predictor tried to prefetch.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.Host.PrefetchFailed" units="%">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    For prefetching based on host of main frame URL, the percentage of
    prefetches failed as a percentage of the total number of resources that the
    predictor tried to prefetch.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.Host.PrefetchFromCacheNotUsed"
    units="%">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    For prefetching based on host of main frame URL, the percentage of
    successful prefetches that came from cache while prefetching but were not
    requested by the page, as a percentage of the total number of resources that
    the predictor tried to prefetch.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.Host.PrefetchFromCacheUsedFromCache"
    units="%">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    For prefetching based on host of main frame URL, the percentage of
    successful prefetches that came from cache while prefetching and also came
    from the cache when the page requested it, as a percentage of the total
    number of resources that the predictor tried to prefetch.
  </summary>
</histogram>

<histogram
    name="ResourcePrefetchPredictor.Host.PrefetchFromCacheUsedFromNetwork"
    units="%">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    For prefetching based on host of main frame URL, the percentage of
    successful prefetches that came from cache while prefetching but came from
    the network when the page requested it, as a percentage of the total number
    of resources that the predictor tried to prefetch.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.Host.PrefetchFromNetworkNotUsed"
    units="%">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    For prefetching based on host of main frame URL, the percentage of
    successful prefetches that came from network while prefetching but were not
    requested by the page, as a percentage of the total number of resources that
    the predictor tried to prefetch.
  </summary>
</histogram>

<histogram
    name="ResourcePrefetchPredictor.Host.PrefetchFromNetworkUsedFromCache"
    units="%">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    For prefetching based on host of main frame URL, the percentage of
    successful prefetches that came from network while prefetching but came from
    the cache when the page requested it, as a percentage of the total number of
    resources that the predictor tried to prefetch.
  </summary>
</histogram>

<histogram
    name="ResourcePrefetchPredictor.Host.PrefetchFromNetworkUsedFromNetwork"
    units="%">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    For prefetching based on host of main frame URL, the percentage of
    successful prefetches that came from cache while prefetching and also came
    from the network when the page requested it, as a percentage of the total
    number of resources that the predictor tried to prefetch.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.Host.PrefetchNotStarted" units="%">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    For prefetching based on host of main frame URL, the percentage of resources
    that were prefetchable but were not prefetched as a percentage of
    prefetchable resources.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.HostTableHostCount">
  <obsolete>
    Deprecated January 2017. This is effectively the same as
    ResourcePrefetchPredictor.HostTableRowCount2 after refactoring of the
    predictor database.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    The count of number of unique hosts in the HostTable, i.e. the number of
    hosts that the database has prediction data for. This data is useful for
    determining the recall/precision as a function of the number of hosts that
    need to be tracked by the database. Measured at startup.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.HostTableRowCount">
  <obsolete>
    Deprecated January 2017. Replaced by
    ResourcePrefetchPredictor.HostTableRowCount2.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    The count of number of rows in the HostTable. This is effecively the number
    of (host, resource URL) pairs in the database. This is measured at startup
    and used to get an estimate of the data size.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.HostTableRowCount2" units="hosts">
  <obsolete>
    Deprecated at M66. No longer recorded.
  </obsolete>
  <owner>alexilin@chromium.org</owner>
  <summary>
    The number of rows in the HostTable. This is effectively the number of hosts
    in the database. This is measured at startup and used to get an estimate of
    the data size.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.LearningCount" units="urls">
  <obsolete>
    Deprecated at M66. No longer recorded.
  </obsolete>
  <owner>alexilin@chromium.org</owner>
  <summary>
    When the prefetch predictor has resources in the local database for a given
    navigation, the count of predicted urls.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.LearningPrecision" units="%">
  <obsolete>
    Deprecated at M66. No longer recorded.
  </obsolete>
  <owner>lizeb@chromium.org</owner>
  <summary>
    When the prefetch predictor has resources in the local database for a given
    navigation, the precision of the predictions, in percentage. This is
    computed as 100 \times \frac{correct predictions}{predictions}.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.LearningRecall" units="%">
  <obsolete>
    Deprecated at M66. No longer recorded.
  </obsolete>
  <owner>lizeb@chromium.org</owner>
  <summary>
    When the prefetch predictor has resources in the local database for a given
    navigation, the recall of the predictions, in percentage. This is computed
    as 100 \times \frac{correct predictions}{all prefetchable subresources}.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.MainFrameRequestStats"
    enum="ResourcePrefetchPredictorMainFrameRequestStats">
  <owner>alexilin@chromium.org</owner>
  <summary>
    Records stats about main frame navigations. Records the total number of
    requests/responses/redirects for main frame urls along with the numbers for
    how often the predictor can process such events. This is useful to figure
    out what percentange of requests are handled by the predictor and also for
    sanity checking the other stats.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.NavigationEvent"
    enum="ResourcePrefetchPredictorNavigationEvent">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    Records stats about various interesting events such as - request start,
    response start, redirect, onload, etc during the load of a main frame.
    Essential for understanding the complete life of a navigation request start
    to the onload fire and the events that occur in between.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.NavigationStatus"
    enum="ResourcePrefetchPredictorNavigationStatus">
  <obsolete>
    Deprecated 08/2012. Replaced with ResourcePrefetchPredictorNavigationEvent.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    The status of various navigations from the view point of the 'onload' event.
    Since we measure the prediction accuracy and learn navigation subresources
    on the onload event, it is useful to know how many of the navigations are
    abandoned before 'onload' fires.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.NetworkType"
    enum="ResourcePrefetchPredictorNetworkType">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    Records the number of pages on each type of network after a page is loaded.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.PLT" units="ms">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    Page load time. It starts from when the main frame URL request is sent out
    to when the main frame document load is completed.

    This is recorded for both prefetched and non-prefetched pages.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.PredictedPrefetchCount">
  <obsolete>
    Deprecated 01/2013. Replaced with specific ones for Url and Host.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    Assuming a fixed number of URLs could be prefetched max, how many would be
    available for prefetch (after we apply our heuristics for picking
    subresources to prefetch for a navigation).
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.PredictedPrefetchFromCache">
  <obsolete>
    Deprecated 01/2013. Replaced with specific ones for Url and Host.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    When we have predictions for a navigation, we measure the accuracy of the
    predictions against the actual resources downloaded. This histogram gives
    the distribution of the predictions that were fetched by the page and served
    from the cache restricted to some max predictions.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.PredictedPrefetchFromNetwork">
  <obsolete>
    Deprecated 01/2013. Replaced with specific ones for Url and Host.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    When we have predictions for a navigation, we measure the accuracy of the
    predictions against the actual resources downloaded. This histogram gives
    the distribution of the predictions that were fetched by the page and served
    from the network restricted to some max predictions.
  </summary>
</histogram>

<histogram
    name="ResourcePrefetchPredictor.PredictedPrefetchFromNetworkPercentOfTotalFromNetwork">
  <obsolete>
    Deprecated 01/2013. Replaced with specific ones for Url and Host.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    Similar to ResourcePrefetchPredictor.Predicted.PrefetchFromNetwork but as a
    percent of the total number of resources the page actually fetched from the
    network. This depcits the major gains that we can get.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.PredictedPrefetchMisses">
  <obsolete>
    Deprecated 01/2013. Replaced with specific ones for Url and Host.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    When we have predictions for a navigation, we measure the accuracy of the
    predictions against the actual resources downloaded. This histogram gives
    the distribution of the predictions that were fetched by the page not used
    by the page, restricted to some max predictions.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.PrefetchedCount" units="count">
  <obsolete>
    Deprecated at M66. No longer recorded.
  </obsolete>
  <owner>alexilin@chromium.org</owner>
  <summary>
    The count of successfully prefetched subresources for a single page.
    Recorded after all subresource prefetches have reached a terminal
    success/failure state.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.PrefetchedSizeKB" units="KB">
  <obsolete>
    Deprecated at M66. No longer recorded.
  </obsolete>
  <owner>alexilin@chromium.org</owner>
  <summary>
    The total amount of data consumed by predictor for a single page. Only
    successfully finished requests taken into account. Recorded after all
    subresource prefetches have reached a terminal success/failure state.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.PrefetchHitsCount.Cached"
    units="count">
  <obsolete>
    Deprecated at M66. No longer recorded.
  </obsolete>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Number of resources that were prefetched and requested by a page load, for
    cached requests. Logged after the prefetcher completes.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.PrefetchHitsCount.NotCached"
    units="count">
  <obsolete>
    Deprecated at M66. No longer recorded.
  </obsolete>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Number of resources that were prefetched and requested by a page load, for
    non cached requests. Logged after the prefetcher completes.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.PrefetchHitsSizeKB" units="KB">
  <obsolete>
    Deprecated at M66. No longer recorded.
  </obsolete>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Amount of useful data fetched from the network for a prefetch request. This
    is the total size of the resources accounted for in
    ResourcePrefetchPredictor.PrefetchHitsCount.NotCached. Logged after the
    prefetcher completes.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.PrefetchingDuration" units="ms">
  <owner>alexilin@chromium.org</owner>
  <summary>
    Amount of time available for prefetching. Specifically, this is a time
    interval between corresponding StartPrefetching() and StopPrefetching()
    calls. This is recorded for both prefetched and non-prefetched pages.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.PrefetchMissesCount.Cached"
    units="count">
  <obsolete>
    Deprecated at M66. No longer recorded.
  </obsolete>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Number of resources that were prefetched but not requested by a page load,
    for cached requests. Logged after the prefetcher completes.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.PrefetchMissesCount.NotCached"
    units="count">
  <obsolete>
    Deprecated at M66. No longer recorded.
  </obsolete>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Number of resources that were prefetched but not requested by a page load,
    for non cached requests, that is waste. Logged after the prefetcher
    completes.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.PrefetchMissesSizeKB" units="KB">
  <obsolete>
    Deprecated at M66. No longer recorded.
  </obsolete>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Amount of wasted data fetched from the network for a prefetch request. This
    is the total size of the resources accounted for in
    ResourcePrefetchPredictor.PrefetchMissesCount.NotCached. Logged after the
    prefetcher completes.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.RedirectStatus"
    enum="ResourcePrefetchPredictorRedirectStatus">
  <obsolete>
    Deprecated at M66. No longer recorded.
  </obsolete>
  <owner>alexilin@chromium.org</owner>
  <summary>
    When the prefetch predictor has resources in the local database for a given
    navigation, records stats about whether redirect was predicted correctly or
    incorrectly.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.ReportingEvent"
    enum="ResourcePrefetchPredictorReportingEvent">
  <owner>alexilin@chromium.org</owner>
  <summary>
    Records stats about various interesting events such as - when partial or all
    of history is cleared. It will include events which do not necessarily
    happen during a navigation (which are reported in
    ResourcePrefetchPredictor.NavigationEvent).
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.RequestStats"
    enum="ResourcePrefetchPredictorRequestStats">
  <owner>alexilin@chromium.org</owner>
  <summary>
    Records stats about requests, redirects, and responses observed by the
    LoadingPredictorObserver. These stats are useful as a baseline for other
    stats.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.ResourceStatus"
    enum="ResourcePrefetchPredictorResourceStatus">
  <obsolete>
    Deprecated 08/2016 with the removal of the recording code.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    The distribution of the reasons for which subresources are ignored during
    prefetching. This helps us prioritze reasons we should further investigate
    to increase coverage. This is reported as a bit map and every status will be
    a bitwise or of the underlying reasons.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.Url.PredictedPrefetchCount">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    Assuming a fixed number of URLs could be prefetched max (25 or 50), how many
    would be available for prefetch (after we apply our heuristics for picking
    subresources to prefetch for a navigation).

    This stat is recorded when the predictor uses the main frame url as the key
    for prediction.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromCache">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    When we have predictions for a navigation, we measure the accuracy of the
    predictions against the actual resources downloaded. This histogram gives
    the distribution of the predictions that were fetched by the page and served
    from the cache restricted to some max predictions (25 or 50).

    This stat is recorded when the predictor uses the main frame url as the key
    for prediction.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetwork">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    When we have predictions for a navigation, we measure the accuracy of the
    predictions against the actual resources downloaded. This histogram gives
    the distribution of the predictions that were fetched by the page and served
    from the network restricted to some max predictions (25 or 50).

    This stat is recorded when the predictor uses the main frame url as the key
    for prediction.
  </summary>
</histogram>

<histogram
    name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetworkPercentOfTotalFromNetwork"
    units="%">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    Similar to ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetwork but as
    a percent of the total number of resources the page actually fetched from
    the network. This depcits the major gains that we can get.

    This stat is recorded when the predictor uses the main frame url as the key
    for prediction.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.Url.PredictedPrefetchMisses">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    When we have predictions for a navigation, we measure the accuracy of the
    predictions against the actual resources downloaded. This histogram gives
    the distribution of the predictions that were fetched by the page not used
    by the page, restricted to some max predictions (25 or 50).

    This stat is recorded when the predictor uses the main frame url as the key
    for prediction.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.Url.PrefetchCancelled" units="%">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    For prefetching based on the main frame URL, the percentage of prefetches
    cancelled as a percentage of the total number of resources that the
    predictor tried to prefetch.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.Url.PrefetchFailed" units="%">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    For prefetching based on the main frame URL, the percentage of prefetches
    failed as a percentage of the total number of resources that the predictor
    tried to prefetch.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.Url.PrefetchFromCacheNotUsed"
    units="%">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    For prefetching based on the main frame URL, the percentage of successful
    prefetches that came from cache while prefetching but were not requested by
    the page, as a percentage of the total number of resources that the
    predictor tried to prefetch.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.Url.PrefetchFromCacheUsedFromCache"
    units="%">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    For prefetching based on the main frame URL, the percentage of successful
    prefetches that came from cache while prefetching and also came from the
    cache when the page requested it, as a percentage of the total number of
    resources that the predictor tried to prefetch.
  </summary>
</histogram>

<histogram
    name="ResourcePrefetchPredictor.Url.PrefetchFromCacheUsedFromNetwork"
    units="%">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    For prefetching based on the main frame URL, the percentage of successful
    prefetches that came from cache while prefetching but came from the network
    when the page requested it, as a percentage of the total number of resources
    that the predictor tried to prefetch.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.Url.PrefetchFromNetworkNotUsed"
    units="%">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    For prefetching based on the main frame URL, the percentage of successful
    prefetches that came from network while prefetching but were not requested
    by the page, as a percentage of the total number of resources that the
    predictor tried to prefetch.
  </summary>
</histogram>

<histogram
    name="ResourcePrefetchPredictor.Url.PrefetchFromNetworkUsedFromCache"
    units="%">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    For prefetching based on the main frame URL, the percentage of successful
    prefetches that came from network while prefetching but came from the cache
    when the page requested it, as a percentage of the total number of resources
    that the predictor tried to prefetch.
  </summary>
</histogram>

<histogram
    name="ResourcePrefetchPredictor.Url.PrefetchFromNetworkUsedFromNetwork"
    units="%">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    For prefetching based on the main frame URL, the percentage of successful
    prefetches that came from cache while prefetching and also came from the
    network when the page requested it, as a percentage of the total number of
    resources that the predictor tried to prefetch.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.Url.PrefetchNotStarted" units="%">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    For prefetching based on host of main frame URL, the percentage of resources
    that were prefetchable but were not prefetched as a percentage of
    prefetchable resources.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.UrlTableMainFrameUrlCount">
  <obsolete>
    Deprecated September 2016. This is effectively the same as
    ResourcePrefetchPredictor.UrlTableRowCount2 after refactoring of the
    predictor database.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    The count of number of unique main frame urls in the UrlTable, i.e. the
    number of webpages that the database has prediction data for. This data is
    useful for determining the recall/precision as a function of the number of
    webpages that need to be tracked by the database. Measured at startup.
  </summary>
</histogram>

<histogram
    name="ResourcePrefetchPredictor.UrlTableMainFrameUrlsDeletedNotInHistory">
  <obsolete>
    Deprecated October 2012. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    The count of number of unique main frame urls that are deleted from the URL
    table at startup because they are no longer in history. Essential to figure
    out how much data we are loosing out.
  </summary>
</histogram>

<histogram
    name="ResourcePrefetchPredictor.UrlTableMainFrameUrlsDeletedNotInHistoryPercent"
    units="%">
  <obsolete>
    Deprecated October 2012. No longer recorded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    Same as ResourcePrefetchPredictor.UrlTableMainFrameUrlsDeletedNotInHistory
    but recording percentage of URLs in the table rather than absolute numbers.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.UrlTableRowCount">
  <obsolete>
    Deprecated January 2017. Replaced by
    ResourcePrefetchPredictor.UrlTableRowCount2.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    The count of number of rows in the UrlTable. This is effecively the number
    of (main frame URL, resource URL) pairs in the database. This is measured at
    startup and used to get an estimate of the data size.
  </summary>
</histogram>

<histogram name="ResourcePrefetchPredictor.UrlTableRowCount2" units="urls">
  <obsolete>
    Deprecated at M66. No longer recorded.
  </obsolete>
  <owner>alexilin@chromium.org</owner>
  <summary>
    The number of rows in the UrlTable. This is effectively the number of main
    frame URLs in the database. This is measured at startup and used to get an
    estimate of the data size.
  </summary>
</histogram>

<histogram name="ResourceReporter.BrowserProcess.CpuUsage"
    enum="ResourceReporterCpuUsage">
  <owner>afakhry@chromium.org</owner>
  <summary>
    The CPU usage range reported for the browser process when the Chrome OS
    device memory pressure (which is the percentage of total memory used by the
    system) is critical. This is emitted only when memory pressure changes from
    a low pressure to a higher pressure.
  </summary>
</histogram>

<histogram name="ResourceReporter.BrowserProcess.MemoryUsage"
    enum="ResourceReporterMemoryUsage">
  <owner>afakhry@chromium.org</owner>
  <summary>
    The system memory usage range reported for the browser process when the
    Chrome OS device memory pressure (which is the percentage of total memory
    used by the system) is critical. This is emitted only when memory pressure
    changes from a low pressure to a higher pressure.
  </summary>
</histogram>

<histogram name="ResourceReporter.GpuProcess.CpuUsage"
    enum="ResourceReporterCpuUsage">
  <owner>afakhry@chromium.org</owner>
  <summary>
    The CPU usage range reported for the GPU process when the Chrome OS device
    memory pressure (which is the percentage of total memory used by the system)
    is critical. This is emitted only when memory pressure changes from a low
    pressure to a higher pressure.
  </summary>
</histogram>

<histogram name="ResourceReporter.GpuProcess.MemoryUsage"
    enum="ResourceReporterMemoryUsage">
  <owner>afakhry@chromium.org</owner>
  <summary>
    The system's RAM memory usage range reported for the GPU process when the
    Chrome OS device memory pressure (which is the percentage of total memory
    used by the system) is critical. This is emitted only when memory pressure
    changes from a low pressure to a higher pressure.
  </summary>
</histogram>

<histogram name="ResourceScheduler.ClientLoadedTime.Active">
  <obsolete>
    Deprecated 1/2016
  </obsolete>
  <owner>aiolos@chromium.org</owner>
  <summary>
    The amount of time between when the ResourceScheduler is informed of a
    Client's creation or starts loading and when that Client finishes loading in
    a Client which has been user-observable the entire time.

    Note: Will not include time for the main resource if PlzNavigate is in use.
  </summary>
</histogram>

<histogram name="ResourceScheduler.ClientLoadedTime.Background">
  <obsolete>
    Deprecated 1/2016
  </obsolete>
  <owner>aiolos@chromium.org</owner>
  <summary>
    The amount of time between when the ResourceScheduler is informed of a
    Client's creation or starts loading and when that Client finishes loading in
    a Client which has been background the entire time.

    Note: Will not include time for the main resource if PlzNavigate is in use.
  </summary>
</histogram>

<histogram name="ResourceScheduler.ClientLoadedTime.Other">
  <obsolete>
    Deprecated 1/2016
  </obsolete>
  <owner>aiolos@chromium.org</owner>
  <summary>
    The amount of time between when the ResourceScheduler is informed of a
    Client's creation or starts loading and when that Client finishes loading in
    a Client which has switched between Active and Background.

    Note: Will not include time for the main resource if PlzNavigate is in use.
  </summary>
</histogram>

<histogram name="ResourceScheduler.ClientLoadedTime.Other.SwitchedToActive">
  <obsolete>
    Deprecated 1/2016
  </obsolete>
  <owner>aiolos@chromium.org</owner>
  <summary>
    The amount of time between the last time that a Client becomes
    user-observable and when that Client finishes loading in a Client that was
    user-observable when the load completed.

    Note: Will not include time for the main resource if PlzNavigate is in use.
  </summary>
</histogram>

<histogram
    name="ResourceScheduler.NumDelayableRequestsInFlightAtStart.NonDelayable"
    units="requests">
  <owner>devdeepray@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records the number of delayable requests in-flight when a non-delayable
    request is started.
  </summary>
</histogram>

<histogram name="ResourceScheduler.NumSkippedScans.ScheduleStart"
    units="requests">
  <owner>csharrison@chromium.org</owner>
  <summary>
    The number of LoadAnyStartablePendingRequests scans that were skipped due to
    smarter task scheduling around reprioritization.
  </summary>
</histogram>

<histogram name="ResourceScheduler.PeakDelayableRequestsInFlight"
    units="requests">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records the highest number of delayable requests that were in-flight when
    the given request with higher priority was in-flight.
  </summary>
</histogram>

<histogram name="ResourceScheduler.RequestsCount" units="requests count">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Records the count of number of requests in-flight. Recorded when a request
    is started by the resource scheduler.
  </summary>
</histogram>

<histogram name="ResourceScheduler.RequestTimeDeferred.Active">
  <obsolete>
    Deprecated 1/2016
  </obsolete>
  <owner>aiolos@chromium.org</owner>
  <summary>
    The amount of time the ResourceScheduler is throttling a request after
    WillStartRequest is called for a request in a client that was
    user-observable at creation and start time.
  </summary>
</histogram>

<histogram name="ResourceScheduler.RequestTimeDeferred.Background">
  <obsolete>
    Deprecated 1/2016
  </obsolete>
  <owner>aiolos@chromium.org</owner>
  <summary>
    The amount of time the ResourceScheduler is throttling a request after
    WillStartRequest is called for a request in a client that was background at
    creation and start time.
  </summary>
</histogram>

<histogram name="ResourceScheduler.RequestTimeDeferred.Other">
  <obsolete>
    Deprecated 1/2016
  </obsolete>
  <owner>aiolos@chromium.org</owner>
  <summary>
    The amount of time the ResourceScheduler is throttling a request after
    WillStartRequest is called on a request without a Client or a request in a
    Client which is in a different state since the request was made. Note that
    this won't capture requests which have switched state an even number of
    times. Switching from Active to Background back to Active will be recorded
    in the Active version of this histogram.
  </summary>
</histogram>

<histogram name="ResourceScheduler.RequestTimeThrottled.Active">
  <obsolete>
    Deprecated 1/2016
  </obsolete>
  <owner>aiolos@chromium.org</owner>
  <summary>
    The amount of time between when the request was created and when the
    ResourceScheduler stops throttling the request in a client that was
    user-observable at creation and start time.
  </summary>
</histogram>

<histogram name="ResourceScheduler.RequestTimeThrottled.Background">
  <obsolete>
    Deprecated 1/2016
  </obsolete>
  <owner>aiolos@chromium.org</owner>
  <summary>
    The amount of time between when the request was created and when the
    ResourceScheduler stops throttling the request in a client that was
    background at creation and start time.
  </summary>
</histogram>

<histogram name="ResourceScheduler.RequestTimeThrottled.Other">
  <obsolete>
    Deprecated 1/2016
  </obsolete>
  <owner>aiolos@chromium.org</owner>
  <summary>
    The amount of time between when the request was created and when the
    ResourceScheduler stops throttling a request without a client or a request
    in a Client which is in a different state since the request was made. Note
    that this won't capture requests which have switched state an even number of
    times. Switching from Active to Background back to Active will be recorded
    in the Active version of this histogram.
  </summary>
</histogram>

<histogram name="Rlz.SetRlzPingSent" enum="BooleanSuccess">
  <owner>wzang@chromium.org</owner>
  <summary>
    Record if updating |should_send_rlz_ping| in RW_VPD is successful within the
    maximum retry counts.
  </summary>
</histogram>

<histogram name="SadTab.Created" enum="SadTabKind">
  <obsolete>
    Replaced with Tabs.SadTab.* in R20.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Track number of times we built a sad tab page for a renderer crash or kill.
    The user may not have seen the page if it was not the frontmost tab.
  </summary>
</histogram>

<histogram name="SadTab.Displayed" enum="SadTabKind">
  <obsolete>
    Replaced with Tabs.SadTab.* in R20.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Track number of times the user actually saw a sad tab page for a renderer
    crash or kill.
  </summary>
</histogram>

<histogram name="SafeBrowsing.EnabledSettingChanged" enum="BooleanEnabled">
  <obsolete>
    Not in the code anymore (10/2015).
  </obsolete>
  <owner>feng@chromium.org</owner>
  <summary>
    Records the user action that enables/disables safe browsing feature in the
    Settings page on Android.
  </summary>
</histogram>

<histogram name="SafeBrowsing.FileTypeUpdate.DynamicUpdateResult"
    enum="SBFileTypeUpdateResult">
  <owner>nparker@chromium.org</owner>
  <summary>
    The result of reading/parsing/accepting a new proto for the FileTypePolices
    repo of file extensions and their meta data.

      This is for the file types loaded from the component-update system. This
    includes both those loaded from disk shortly after startup, and those
    received over the network when the component version changes
  </summary>
</histogram>

<histogram name="SafeBrowsing.FileTypeUpdate.DynamicUpdateTypeCount"
    units="number of file types">
  <owner>nparker@chromium.org</owner>
  <summary>
    Number of file types (aka file extensions) present in the FileTypePolicies
    proto loaded.

      This is for the file types loaded from the component-update system. This
    includes both those loaded from disk shortly after startup, and those
    received over the network when the component version changes
  </summary>
</histogram>

<histogram name="SafeBrowsing.FileTypeUpdate.DynamicUpdateVersion"
    units="FileTypePolicies Version">
  <owner>nparker@chromium.org</owner>
  <summary>
    Integer version number citing which version of the proto data chrome just
    loaded.  Latest version is in download_file_types.asciipb.

      This is for the file types loaded from the component-update system. This
    includes both those loaded from disk shortly after startup, and those
    received over the network when the component version changes
  </summary>
</histogram>

<histogram name="SafeBrowsing.FileTypeUpdate.ResourceBundleResult"
    enum="SBFileTypeUpdateResult">
  <owner>nparker@chromium.org</owner>
  <summary>
    The result of reading/parsing/accepting a new proto for the FileTypePolices
    repo of file extensions and their meta data.

      This is for the file types loaded from the resource bundle packaged with
    Chrome, which is always loaded at startup.
  </summary>
</histogram>

<histogram name="SafeBrowsing.FileTypeUpdate.ResourceBundleTypeCount"
    units="number of file types">
  <owner>nparker@chromium.org</owner>
  <summary>
    Number of file types (aka file extensions) present in the FileTypePolicies
    proto loaded.

      This is for the file types loaded from the resource bundle packaged with
    Chrome, which is always loaded at startup.
  </summary>
</histogram>

<histogram name="SafeBrowsing.FileTypeUpdate.ResourceBundleVersion"
    units="FileTypePolicies Version">
  <owner>nparker@chromium.org</owner>
  <summary>
    Integer version number citing which version of the proto data chrome just
    loaded.  Latest version is in download_file_types.asciipb.

      This is for the file types loaded from the resource bundle packaged with
    Chrome, which is always loaded at startup.
  </summary>
</histogram>

<histogram name="SafeBrowsing.GetV4HashHttpResponseOrErrorCode"
    enum="CombinedHttpResponseAndNetErrorCode">
  <obsolete>
    Replaced by SafeBrowsing.V4GetHash.Network.Result.
  </obsolete>
  <owner>kcarattini@google.com</owner>
  <summary>
    Response or error codes from the SafeBrowsing Pver4 service. Logged after a
    GetHash or request finishes to capture the response code or error code for
    that call.
  </summary>
</histogram>

<histogram name="SafeBrowsing.GetV4HashNetwork" units="ms">
  <obsolete>
    Replaced by SafeBrowsing.V4GetHash.Network.Time.
  </obsolete>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    The time that it took to receive a response from the Safe Browsing servers
    for a V4 GetHash request.
  </summary>
</histogram>

<histogram name="SafeBrowsing.GetV4HashResult"
    enum="SafeBrowsingV4OperationResult">
  <obsolete>
    Replaced by SafeBrowsing.V4GetHash.Result.
  </obsolete>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    Track return status from V4 GetHash attempts. The buckets of this histogram
    overlap, so the counts cannot be used as percentages.
  </summary>
</histogram>

<histogram name="SafeBrowsing.Interstitial.Type" enum="InterstitialTypeEnum">
  <owner>ntfschr@chromium.org</owner>
  <summary>
    Which interstitial type is being displayed to the user? This currently
    applies only to WebView (where we show Loud vs. Quiet interstitials).
  </summary>
</histogram>

<histogram name="SafeBrowsing.ModuleBaseRelocation" units="BaseRelocationType">
  <owner>csharp@chromium.org</owner>
  <owner>krstnmnlsn@chromium.org</owner>
  <summary>
    A windows only historgram. Records when an unknown base relocation type is
    encountered while reading the reloc table of a loaded module.
  </summary>
</histogram>

<histogram name="SafeBrowsing.NavigationObserver.IPAddressCleanUpCount">
  <owner>jialiul@chromium.org</owner>
  <summary>
    Count of how many ResolvedIPAddresses get removed in each periodic clean up.
    This is a rough estimation of the number of IPs associated with main frame
    and sub-frame navigations every two minutes.
  </summary>
</histogram>

<histogram name="SafeBrowsing.NavigationObserver.NavigationEventCleanUpCount">
  <owner>jialiul@chromium.org</owner>
  <summary>
    Count of how many NavigationEvents get removed in each periodic clean up.
    This is a rough estimation of the number of navigations every two minutes.
  </summary>
</histogram>

<histogram name="SafeBrowsing.NotificationImageReporter.NetError"
    enum="NetErrorCodes">
  <owner>nparker@chromium.org</owner>
  <summary>
    The net error code for failed reports sent by NotificationImageReporter, or
    net::OK if successful.
  </summary>
</histogram>

<histogram name="SafeBrowsing.ParseV4HashResult"
    enum="SafeBrowsingParseV4HashResult">
  <obsolete>
    Replaced by SafeBrowsing.V4GetHash.Parse.Result.
  </obsolete>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    Track the parsing results of a status 200 GetV4Hash request.
  </summary>
</histogram>

<histogram name="SafeBrowsing.ParseV4UpdateResult"
    enum="SafeBrowsingParseV4UpdateResult">
  <obsolete>
    Replaced by SafeBrowsing.V4Update.Parse.Result.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    Track the parsing results of a status 200 GetV4Update request.
  </summary>
</histogram>

<histogram name="SafeBrowsing.Pref.Extended" enum="BooleanEnabled">
  <owner>nparker@chromium.org</owner>
  <summary>
    Whether the Safe Browsing extended reporting service is currently enabled.
    Recorded for all non-Incognito profiles on profile startup.
  </summary>
</histogram>

<histogram name="SafeBrowsing.Pref.General" enum="BooleanEnabled">
  <owner>nparker@chromium.org</owner>
  <summary>
    Whether the Safe Browsing service is currently enabled. Recorded for all
    non-Incognito profiles on profile startup.
  </summary>
</histogram>

<histogram name="SafeBrowsing.Pref.SawInterstitial" enum="Boolean">
  <owner>lpz@chromium.org</owner>
  <summary>
    Whether the current user has ever seen a security interstitial. Recorded for
    all non-Incognito profiles on profile startup.
  </summary>
</histogram>

<histogram name="SafeBrowsing.Pref.Scout" enum="NullableBoolean">
  <owner>lpz@chromium.org</owner>
  <summary>
    Tracks the Extended Reporting preference transition. Suffixes track which
    opt-in text users are viewing and the values of each Extended Reporting
    preference. Recorded for all non-Incognito profiles on profile startup.
  </summary>
</histogram>

<histogram name="SafeBrowsing.Pref.Scout.Decision"
    enum="ScoutActiveExtendedReportingPref">
  <owner>lpz@chromium.org</owner>
  <summary>
    Tracks user decisions about the Extended Reporting opt-in on security
    interstitials by comparing the initial and final states of the preference.
    Suffixes specify the type of change that was made. Recorded when a user
    closes a security interstitial or navigates away.
  </summary>
</histogram>

<histogram name="SafeBrowsing.Pref.Scout.SetPref" enum="BooleanEnabled">
  <owner>lpz@chromium.org</owner>
  <summary>
    Tracks the Extended Reporting preference being changed. Suffixes track which
    Extended Reporting preference was changed, and the specific UI that the
    change was made on. Recorded when a user changes the preference on any UI.
  </summary>
</histogram>

<histogram name="SafeBrowsing.Pref.Scout.Transition"
    enum="ScoutTransitionReason">
  <owner>lpz@chromium.org</owner>
  <summary>
    Tracks reasons for the Extended Reporting preference transition, such as a
    user entering an experiment group or seeing a security interstitial for the
    first time. Recorded for all non-Incognito profiles on profile startup.
  </summary>
</histogram>

<histogram name="SafeBrowsing.ReferrerAttributionResult"
    enum="SafeBrowsingAttributionResultTypes">
  <owner>jialiul@chromium.org</owner>
  <summary>
    The result of referrer attribution, including different types of success or
    failure. This is incremented each time a safe browsing ping or download ping
    is generated.
  </summary>
</histogram>

<histogram name="SafeBrowsing.ReferrerHasInvalidTabID" enum="BooleanInvalid">
  <owner>jialiul@chromium.org</owner>
  <summary>
    Number of times referrer attribution encounters an invalid tab ID. This is
    incremented a safe browsing ping or download ping is generated and an
    invalid tab ID is encountered during attribution.
  </summary>
</histogram>

<histogram name="SafeBrowsing.ReferrerURLChainSize">
  <owner>jialiul@chromium.org</owner>
  <summary>
    The length of referrer URL chain we get from referrer attribution. This is
    incremented each time a safe browsing ping or download ping is generated.
  </summary>
</histogram>

<histogram name="SafeBrowsing.ThreatReport.DomIsAmbiguous" enum="Boolean">
  <owner>lpz@chromium.org</owner>
  <summary>
    A threat report contains a DOM hierarchy that is ambiguous. This indicates
    that the parent/child relationship among the elements in the DOM may not be
    accurate.
  </summary>
</histogram>

<histogram name="SafeBrowsing.ThreatReport.MaxNodesExceededInFrame"
    enum="BooleanExceeded">
  <owner>lpz@chromium.org</owner>
  <summary>
    Whether the threat report generated for a subframe of a page hit the maximum
    number of nodes. When this is true, the data from that frame will be
    truncated.
  </summary>
</histogram>

<histogram name="SafeBrowsing.Triggers.AdSampler.Action"
    enum="AdSamplerTriggerAction">
  <owner>lpz@chromium.org</owner>
  <summary>
    Tracks the actions taken by the Ad Sampling trigger whenever it is executed.
  </summary>
</histogram>

<histogram name="SafeBrowsing.Triggers.SuspiciousSite.DelayTimerState"
    enum="SuspiciousSiteTriggerState">
  <owner>lpz@chromium.org</owner>
  <summary>
    Tracks the state of the Suspicious Site trigger when its report delay timer
    fires. Used to investigate variance in event order.
  </summary>
</histogram>

<histogram name="SafeBrowsing.Triggers.SuspiciousSite.Event"
    enum="SuspiciousSiteTriggerEvent">
  <owner>lpz@chromium.org</owner>
  <summary>
    Tracks the events occurring in the Suspicious Site trigger whenever it is
    executed.
  </summary>
</histogram>

<histogram name="SafeBrowsing.Triggers.SuspiciousSite.ReportRejectionReason"
    enum="TriggerManagerReason">
  <owner>lpz@chromium.org</owner>
  <summary>
    Tracks the reasons that a report requested by the Suspicious Site trigger is
    rejected by the Trigger Manager.
  </summary>
</histogram>

<histogram name="SafeBrowsing.UnverifiedDownloads.Allowed"
    enum="SBClientDownloadExtensions">
  <owner>asanka@chromium.org</owner>
  <summary>
    File types that were allowed to be downloaded without verifying their
    content nor their source URLs with Safe Browsing.
  </summary>
</histogram>

<histogram name="SafeBrowsing.UnverifiedDownloads.AllowedByWhitelist"
    enum="SBClientDownloadExtensions">
  <owner>asanka@chromium.org</owner>
  <summary>
    File types that were allowed to be downloaded without verifying their
    content nor their source URLs with Safe Browsing due to the requestor URL
    being on the Safe Browsing whitelist. Each sample recorded on this histogram
    is also recorded in SafeBrowsing.UnverifiedDownloads.Allowed.
  </summary>
</histogram>

<histogram name="SafeBrowsing.UnverifiedDownloads.AllowedDueToDisabledService"
    enum="SBClientDownloadExtensions">
  <owner>asanka@chromium.org</owner>
  <summary>
    File types that were allowed to be downloaded without verifying their
    content nor their source URLs with Safe Browsing due to the SafeBrowsing
    service being disabled. Each sample recorded on this histogram is also
    recorded in SafeBrowsing.UnverifiedDownloads.Allowed.
  </summary>
</histogram>

<histogram name="SafeBrowsing.UnverifiedDownloads.AlternateExtensionCount">
  <owner>asanka@chromium.org</owner>
  <summary>
    Count of alternate extensions that were supplied when attempting to download
    a file without verifying their content nor their source URLs with Safe
    Browsing.
  </summary>
</histogram>

<histogram name="SafeBrowsing.UnverifiedDownloads.Blocked"
    enum="SBClientDownloadExtensions">
  <owner>asanka@chromium.org</owner>
  <summary>
    File types that were blocked from downloaded without verifying their content
    nor their source URLs with Safe Browsing.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4AddUnlumpedHashes.Time" units="ms">
  <obsolete>
    Deprecated 04/25/2018 since it was not being used actively or monitored.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    Records the time it takes to copy the SafeBrowsing list update as a string,
    into a map which contains the hash prefixes that are looked up when a client
    queries for the reputation of a resource (URL, full hash, etc.).
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4AddUnlumpedHashesTime" units="ms">
  <obsolete>
    Replaced by SafeBrowsing.V4AddUnlumpedHashes.Time.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    Records the time it takes to copy the SafeBrowsing list update as a string,
    into a map which contains the hash prefixes that are looked up when a client
    queries for the reputation of a resource (URL, full hash, etc.).
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4ApplyUpdateResult"
    enum="SafeBrowsingV4ApplyUpdateResult">
  <obsolete>
    Replaced by SafeBrowsing.V4*.ApplyUpdate.Result.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    Track the result of applying the update fetched from the PVer4 service for a
    particular store.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4ApplyUpdateResultWhenReadingFromDisk"
    enum="SafeBrowsingV4ApplyUpdateResult">
  <obsolete>
    Replaced by SafeBrowsing.V4ReadFromDisk.ApplyUpdate.Result.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    Track the result of applying an update read from disk after parsing it
    successfully as a protobuf.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4Database.Size" units="KB">
  <owner>vakh@chromium.org</owner>
  <summary>
    The size of the SafeBrowsing database or file on disk in kilobytes, after
    reading it from disk on startup and after a database update has occurred.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4DatabaseOpen.Time" units="ms">
  <owner>vakh@chromium.org</owner>
  <summary>
    The time it takes to parse and load the SafeBrowsing database from disk, in
    milliseconds.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4DecodeAdditionsResult"
    enum="SafeBrowsingV4DecodeResult">
  <obsolete>
    Replaced by SafeBrowsing.V4*.DecodeAdditions.Result.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    Track the result of decoding the Rice-encoded list of additions of 4-byte
    hash prefixes. This is logged once per store, per update containing
    Rice-encoded additions.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4DecodeAdditionsTime" units="ms">
  <obsolete>
    Replaced by SafeBrowsing.V4*.DecodeAdditions.Time.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    Records the time it takes to decode the Rice-encoded additions to the
    blacklist into raw format.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4DecodeRemovalsResult"
    enum="SafeBrowsingV4DecodeResult">
  <obsolete>
    Replaced by SafeBrowsing.V4ProcessPartialUpdate.DecodeRemovals.Result.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    Track the result of decoding the Rice-encoded list of indexes of hash
    prefixes to remove since the last update. This is logged once per store, per
    update containing Rice-encoded removals.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4DecodeRemovalsTime" units="ms">
  <obsolete>
    Replaced by SafeBrowsing.V4ProcessPartialUpdate.DecodeRemovals.Time.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    Records the time it takes to decode the Rice-encoded removals from the
    blacklist into raw format.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4FullHashCacheResult"
    enum="SafeBrowsingV4FullHashCacheResult">
  <obsolete>
    Replaced by SafeBrowsing.V4GetHash.CacheHit.Result.
  </obsolete>
  <owner>kcarattini@chromium.org</owner>
  <owner>vakh@chromium.org</owner>
  <summary>Track cache hits for V4 full hashes.</summary>
</histogram>

<histogram name="SafeBrowsing.V4GetHash.CacheHit.Result"
    enum="SafeBrowsingV4FullHashCacheResult">
  <owner>kcarattini@chromium.org</owner>
  <owner>vakh@chromium.org</owner>
  <summary>Track cache hits for V4 full hashes.</summary>
</histogram>

<histogram name="SafeBrowsing.V4GetHash.Check.Result"
    enum="SafeBrowsingV4GetHashCheckResult">
  <owner>kcarattini@chromium.org</owner>
  <owner>vakh@chromium.org</owner>
  <summary>Track get hash response hits for V4 full hash requests.</summary>
</histogram>

<histogram name="SafeBrowsing.V4GetHash.Network.Result"
    enum="CombinedHttpResponseAndNetErrorCode">
  <owner>kcarattini@google.com</owner>
  <owner>vakh@google.com</owner>
  <summary>
    Response or error codes from the SafeBrowsing Pver4 service. Logged after a
    GetHash or request finishes to capture the response code or error code for
    that call.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4GetHash.Network.Time" units="ms">
  <owner>kcarattini@chromium.org</owner>
  <owner>vakh@chromium.org</owner>
  <summary>
    The time that it took to receive a response from the Google SafeBrowsing
    servers for a full hash request.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4GetHash.Parse.Result"
    enum="SafeBrowsingParseV4HashResult">
  <owner>kcarattini@chromium.org</owner>
  <owner>vakh@chromium.org</owner>
  <summary>
    Track the parsing results of a status 200 GetV4Hash request.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4GetHash.Result"
    enum="SafeBrowsingV4OperationResult">
  <owner>kcarattini@chromium.org</owner>
  <owner>vakh@chromium.org</owner>
  <summary>
    Track return status from V4 GetHash attempts. The buckets of this histogram
    overlap, so the counts cannot be used as percentages.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4GetHashCheckResult"
    enum="SafeBrowsingV4GetHashCheckResult">
  <obsolete>
    Replaced by SafeBrowsing.V4GetHash.Check.Result.
  </obsolete>
  <owner>kcarattini@chromium.org</owner>
  <owner>vakh@chromium.org</owner>
  <summary>Track get hash response hits for V4 full hash requests.</summary>
</histogram>

<histogram name="SafeBrowsing.V4GetHashNetwork.Time" units="ms">
  <obsolete>
    Replaced by SafeBrowsing.V4GetHash.Network.Time.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    The time that it took to receive a response from the Google SafeBrowsing
    servers for a full hash request.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4GetPrefixMatches.Time" units="ms">
  <obsolete>
    Deprecated in favor of the TimeUs variant
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    The time that it took to check a URL against our in-memory database. It is
    dominated by the time to perform checks for CheckBrowseUrl.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4GetPrefixMatches.TimeUs" units="microseconds">
  <owner>csharrison@chromium.org</owner>
  <owner>vakh@chromium.org</owner>
  <summary>
    The time that it took to check a URL against our in-memory database. It is
    dominated by the time to perform checks for CheckBrowseUrl. Note that this
    metric is recorded even for users with low resolution clocks.

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

<histogram name="SafeBrowsing.V4MergeUpdateTime" units="ms">
  <obsolete>
    Replaced by SafeBrowsing.V4*.MergeUpdate.Time.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    Records the time it takes to merge the existing state of the list with the
    update. The update may have been received from the server, or it may have
    just been read from disk.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4ProcessFullUpdate.ApplyUpdate.Result"
    enum="SafeBrowsingV4ApplyUpdateResult">
  <owner>vakh@chromium.org</owner>
  <summary>
    Track the result of applying a full update for a store received from PVer4
    SafeBrowsing service.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4ProcessFullUpdate.ApplyUpdate.Time" units="ms">
  <owner>vakh@chromium.org</owner>
  <summary>
    Records the time it takes to process a SafeBrowsing list full update. It
    includes V4AddUnlumpedHashes.Time for each prefix-sized list, and
    V4ProcessFullUpdate.MergeUpdate.Time. Additionally, if the update is
    Rice-encoded, it includes V4ProcessFullUpdate.DecodeAdditions.Time for each
    prefix-sized list that's Rice-encoded.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4ProcessFullUpdate.DecodeAdditions.Result"
    enum="SafeBrowsingV4DecodeResult">
  <owner>vakh@chromium.org</owner>
  <summary>
    Track the result of decoding the Rice-encoded list of additions of 4-byte
    hash prefixes. This is logged once per store, per update containing
    Rice-encoded additions. This histogram is specific to processing full
    updates received from the server.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4ProcessFullUpdate.DecodeAdditions.Time"
    units="ms">
  <owner>vakh@chromium.org</owner>
  <summary>
    Records the time it takes to decode the Rice-encoded additions to the
    blacklist into raw format when applying a full update to a store.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4ProcessFullUpdate.MergeUpdate.Time" units="ms">
  <obsolete>
    Deprecated 04/25/2018 since it was not being used actively or monitored.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    Records the time it takes to merge the existing state of the list with a
    full update received from the server.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4ProcessFullUpdateTime" units="ms">
  <obsolete>
    Replaced by SafeBrowsing.V4ProcessFullUpdate.ApplyUpdate.Time.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    Records the time it takes to process a SafeBrowsing list full update. It
    includes V4AddUnlumpedHashesTime for each prefix-sized list, and
    V4MergeUpdateTime. Additionally, if the update is Rice-encoded, it includes
    V4DecodeAdditionsTime for each prefix-sized list that's Rice-encoded.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4ProcessPartialUpdate.ApplyUpdate.Result"
    enum="SafeBrowsingV4ApplyUpdateResult">
  <owner>vakh@chromium.org</owner>
  <summary>
    Track the result of applying a partial update for a store received from
    PVer4 SafeBrowsing service.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4ProcessPartialUpdate.ApplyUpdate.Time"
    units="ms">
  <owner>vakh@chromium.org</owner>
  <summary>
    Records the time it takes to process a SafeBrowsing list partial update. It
    includes V4AddUnlumpedHashes.Time for each prefix-sized list, and
    SafeBrowsing.V4ProcessPartialUpdate.MergeUpdate.Time. Additionally, if the
    update is Rice-encoded, it includes
    V4ProcessPartialUpdate.DecodeRemovals.Time, and
    V4ProcessPartialUpdate.DecodeAdditions.Time for each prefix-sized list
    that's Rice-encoded.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4ProcessPartialUpdate.DecodeAdditions.Result"
    enum="SafeBrowsingV4DecodeResult">
  <owner>vakh@chromium.org</owner>
  <summary>
    Track the result of decoding the Rice-encoded list of additions of 4-byte
    hash prefixes. This is logged once per store, per update containing
    Rice-encoded additions. This histogram is specific to processing partial
    updates received from the server.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4ProcessPartialUpdate.DecodeAdditions.Time"
    units="ms">
  <owner>vakh@chromium.org</owner>
  <summary>
    Records the time it takes to decode the Rice-encoded additions to the
    blacklist into raw format when applying a partial update to a store.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4ProcessPartialUpdate.DecodeRemovals.Result"
    enum="SafeBrowsingV4DecodeResult">
  <owner>vakh@chromium.org</owner>
  <summary>
    Track the result of decoding the Rice-encoded list of indexes of hash
    prefixes to remove since the last update. This is logged once per store, per
    update containing Rice-encoded removals.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4ProcessPartialUpdate.DecodeRemovals.Time"
    units="ms">
  <owner>vakh@chromium.org</owner>
  <summary>
    Records the time it takes to decode the Rice-encoded removals from the
    blacklist into raw format when applying a partial update to a store.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4ProcessPartialUpdate.MergeUpdate.Time"
    units="ms">
  <obsolete>
    Deprecated 04/25/2018 since it was not being used actively or monitored.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    Records the time it takes to merge the existing state of the list with a
    partial update received from the server.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4ProcessPartialUpdateTime" units="ms">
  <obsolete>
    Replaced by SafeBrowsing.V4ProcessPartialUpdate.ApplyUpdate.Time.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    Records the time it takes to process a SafeBrowsing list partial update. It
    includes V4AddUnlumpedHashesTime for each prefix-sized list, and
    V4MergeUpdateTime. Additionally, if the update is Rice-encoded, it includes
    V4DecodeRemovalsTime, and V4DecodeAdditionsTime for each prefix-sized list
    that's Rice-encoded.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4ReadFromDisk.ApplyUpdate.Result"
    enum="SafeBrowsingV4ApplyUpdateResult">
  <owner>vakh@chromium.org</owner>
  <summary>
    Track the result of applying an ListUpdateResponse read from disk after
    parsing it successfully as a protobuf.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4ReadFromDisk.ApplyUpdate.Time" units="ms">
  <owner>vakh@chromium.org</owner>
  <summary>
    Records the time it takes to read, parse, and process a SafeBrowsing list
    stored on disk. This happens at Chromium start-up. It includes
    V4AddUnlumpedHashes.Time for each prefix-sized list, and
    SafeBrowsing.V4ReadFromDisk.MergeUpdate.Time. Additionally, if the file is
    Rice-encoded, it includes V4ReadFromDisk.DecodeAdditions.Time for each
    prefix-sized list that's Rice-encoded.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4ReadFromDisk.DecodeAdditions.Result"
    enum="SafeBrowsingV4DecodeResult">
  <owner>vakh@chromium.org</owner>
  <summary>
    Track the result of decoding the Rice-encoded list of additions of 4-byte
    hash prefixes. This is logged once per store, per Chrome launch. It is
    specific to processing V4StoreFileFormat proto read from disk.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4ReadFromDisk.DecodeAdditions.Time" units="ms">
  <owner>vakh@chromium.org</owner>
  <summary>
    Records the time it takes to decode the Rice-encoded additions to the
    blacklist into raw format when reading a store file from disk.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4ReadFromDisk.MergeUpdate.Time" units="ms">
  <obsolete>
    Deprecated 04/25/2018 since it was not being used actively or monitored.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    Records the time it takes to perform in-memory copy of the map of raw hash
    prefixes read from disk.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4ReadFromDiskTime" units="ms">
  <obsolete>
    Replaced by SafeBrowsing.V4ReadFromDisk.ApplyUpdate.Time.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    Records the time it takes to read, parse, and process a SafeBrowsing list
    stored on disk. This happens at Chromium start-up. It includes
    V4AddUnlumpedHashesTime for each prefix-sized list, and V4MergeUpdateTime.
    Additionally, if the file is Rice-encoded, it includes V4DecodeAdditionsTime
    for each prefix-sized list that's Rice-encoded.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4StoreRead.Result"
    enum="SafeBrowsingV4StoreReadResult">
  <owner>vakh@chromium.org</owner>
  <summary>
    Track the parsing results of reading the SafeBrowsing V4 store file from
    disk. Recorded every time a store is read from disk.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4StoreReadResult"
    enum="SafeBrowsingV4StoreReadResult">
  <obsolete>
    Replaced by SafeBrowsing.V4StoreRead.Result.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    Track the parsing results of reading the SafeBrowsing V4 store file from
    disk. Recorded every time a store is read from disk.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4StoreVersionRead" units="version number">
  <owner>vakh@chromium.org</owner>
  <summary>
    Version of V4Store read from a store file. This would be useful in tracking
    the usage and rollout of new V4Store versions.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4StoreWrite.Result"
    enum="SafeBrowsingV4StoreWriteResult">
  <owner>vakh@chromium.org</owner>
  <summary>
    Track the results of writing the SafeBrowsing V4 store file to disk.
    Recorded every time a store is written to disk.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4StoreWriteResult"
    enum="SafeBrowsingV4StoreWriteResult">
  <obsolete>
    Replaced by SafeBrowsing.V4StoreWrite.Result.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    Track the results of writing the SafeBrowsing V4 store file to disk.
    Recorded every time a store is written to disk.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4UnusedStoreFileExists" enum="BooleanExists">
  <owner>vakh@chromium.org</owner>
  <summary>
    Track the presence of store files that were previously created but have been
    deprecated since so need to be removed from disk. Logged once per startup.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4UnusedStoreFileExists.V3" enum="BooleanExists">
  <owner>vakh@chromium.org</owner>
  <summary>
    Track the presence of Safe Browsing list files used for PVer3, which has
    been deprecated. Logged once per startup.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4Update.Network.Result"
    enum="CombinedHttpResponseAndNetErrorCode">
  <owner>vakh@chromium.org</owner>
  <summary>
    Response or error codes when fetching updates from the SafeBrowsing PVer4
    service.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4Update.Parse.Result"
    enum="SafeBrowsingParseV4UpdateResult">
  <owner>vakh@chromium.org</owner>
  <summary>
    Track the parsing results of a status 200 GetV4Update request.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4Update.ResponseSizeKB" units="KB">
  <owner>vakh@chromium.org</owner>
  <summary>
    The size of the response sent by the SafeBrowsing PVer4 service, in KB.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4Update.Result"
    enum="SafeBrowsingV4OperationResult">
  <owner>vakh@chromium.org</owner>
  <summary>
    Track return status from V4 update attempts. The buckets of this histogram
    overlap, so the counts cannot be used as percentages.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4Update.TimedOut" enum="BooleanTimedOut">
  <owner>vakh@chromium.org</owner>
  <summary>True if a PVer4 update request timed out.</summary>
</histogram>

<histogram name="SafeBrowsing.V4UpdateHttpResponseOrErrorCode"
    enum="CombinedHttpResponseAndNetErrorCode">
  <obsolete>
    Replaced by SafeBrowsing.V4Update.Network.Result.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    Response or error codes when fetching updates from the SafeBrowsing PVer4
    service.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4UpdateResponseSizeKB" units="KB">
  <obsolete>
    Replaced by SafeBrowsing.V4Update.ResponseSizeKB.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    The size of the response sent by the SafeBrowsing PVer4 service, in KB.
  </summary>
</histogram>

<histogram name="SafeBrowsing.V4UpdateResult"
    enum="SafeBrowsingV4OperationResult">
  <obsolete>
    Replaced by SafeBrowsing.V4Update.Result.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    Track return status from V4 update attempts. The buckets of this histogram
    overlap, so the counts cannot be used as percentages.
  </summary>
</histogram>

<histogram base="true" name="SafeBrowsing.WebSocket.Elapsed" units="ms">
  <owner>ricea@chromium.org</owner>
  <summary>
    Time spent on SafeBrowsing lookup. Since this includes any time spent on the
    interstitial page the average may not be useful.
  </summary>
</histogram>

<histogram name="SafeBrowsing.WebSocket.Result"
    enum="SafeBrowsingWebSocketResult">
  <owner>ricea@chromium.org</owner>
  <summary>
    Results of a SafeBrowsing lookup for a WebSocket handshake. All lookups are
    counted. Note: the &quot;ABANDONED&quot; bucket contains both connections
    that were abandoned before the check completed and those that were cancelled
    when the user navigated away from the SafeBrowsing interstitial.
  </summary>
</histogram>

<histogram name="SafeBrowsing.WebView.AppOptIn" enum="SafeBrowsingAppOptIn">
  <owner>ntfschr@chromium.org</owner>
  <summary>
    Records whether the application has explicitly opted in or out of Safe
    Browsing by manifest tag, or if they're relying on the default behavior.
    This is recorded once during startup.
  </summary>
</histogram>

<histogram name="SafeBrowsing.WebView.UserConsentVsUrlCheckRace"
    enum="SafeBrowsingUserConsentVsUrlCheckRaceResult">
  <owner>ntfschr@chromium.org</owner>
  <summary>
    WebView can simultaneously check for user opt-in and Safe-Browsing-check the
    first URL, with both asynchronous checks racing to finish. This records the
    outcome of that race: (1) which asynchronous method finished first; (2) if
    user consent finished first, what was the outcome; and (3) did we show
    malicious content to the user. This is recorded only once, for the first
    Safe Browsing check.
  </summary>
</histogram>

<histogram name="SafeBrowsing.WebView.UserOptIn" enum="SafeBrowsingUserOptIn">
  <owner>ntfschr@chromium.org</owner>
  <summary>
    Records whether the user has explicitly opted in or out of Safe Browsing
    (determined by the Google Play Protect Verify Apps setting in GMS). This
    also captures when WebView cannot determine user preference due to a GMS API
    failure. This is recorded once during startup.
  </summary>
</histogram>

<histogram name="SafeBrowsing.WebView.Viewable" enum="BooleanVisible">
  <owner>ntfschr@chromium.org</owner>
  <summary>
    When encountering an unsafe resource, this indicates whether the WebView is
    considered to be viewable or not. Currently, we define &quot;viewable&quot;
    as getVisibility() == View.VISIBLE and attached to the Android View
    hierarchy.
  </summary>
</histogram>

<histogram name="SB.BloomFilter" units="ms">
  <obsolete>
    Has not been generated for years (7/8/14).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The first stage check that measures the time that Chrome took to check if a
    URL is present in our in-memory bloom filter.
  </summary>
</histogram>

<histogram name="SB.BuildBloom">
  <obsolete>
    Deprecated 9/2012. No longer generated.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>TBD.</summary>
</histogram>

<histogram name="SB.Database" units="ms">
  <obsolete>
    Has not been generated for years (7/8/14).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The second stage check that measures the time that Chrome took to check if a
    URL is present in our SQLite database.
  </summary>
</histogram>

<histogram name="SB.DBCheck" units="ms">
  <obsolete>
    Has not been generated for years (7/8/14).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The second stage check that mesures the time that Chrome took to check if a
    URL is present in our SQLite database. This time includes the filter check
    time.
  </summary>
</histogram>

<histogram name="SB.Delay" units="ms">
  <obsolete>
    Has not been generated for years (7/8/14).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    This measures the time that SafeBrowsing actually delayed the browsing
    experience. It records the difference between the time when Chrome would
    have started reading the response for a URL and when the SafeBrowsing system
    completed its check of that URL.
  </summary>
</histogram>

<histogram name="SB.FilterCheck" units="ms">
  <obsolete>
    Has not been generated for years (7/8/14).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The first stage check that measures the time that Chrome took to check if a
    URL is present in our in-memory hash table.
  </summary>
</histogram>

<histogram name="SB.Network" units="ms">
  <obsolete>
    Has not been generated for years (7/8/14).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The third and final stage check that mesures the time that Chrome took to
    get a response from the Google SafeBrowsing servers for a particular URL.
  </summary>
</histogram>

<histogram name="SB.NetworkCheck" units="ms">
  <obsolete>
    Has not been generated for years (7/8/14).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The third and final stage check that mesures the time that Chrome took to
    get a response from the Google SafeBrowsing servers for a particular URL.
    This time includes the filter and database check time.
  </summary>
</histogram>

<histogram name="SB.PauseSafe" units="ms">
  <obsolete>
    Has not been generated for years (7/8/14).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    This measures the time that SafeBrowsing actually delayed the browsing
    experience. It records the difference between the time when Chrome would
    have started reading the response for a URL and when the SafeBrowsing system
    completed its check of that URL.
  </summary>
</histogram>

<histogram name="SB.Update">
  <obsolete>
    Has not been generated for years (7/8/14).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>TBD.</summary>
</histogram>

<histogram name="SB2.AddPrefixes">
  <owner>vakh@chromium.org</owner>
  <summary>
    The number of add prefixes stored in the database after the last update.
  </summary>
</histogram>

<histogram name="SB2.BloomFailure" enum="SB2BloomFailure">
  <obsolete>
    Bloom filter support deleted in October 2012.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Track failures when in processing the safe-browsing database bloom filter.
  </summary>
</histogram>

<histogram name="SB2.BloomFilterFalsePositives"
    enum="SB2BloomFilterFalsePositives">
  <obsolete>
    This became misleading around M-22 (September 2012), deleted in M-32
    (November 2013).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    All prefix misses (server returned no full hashes) and prefix misses due to
    false positives in the bloom filter.
  </summary>
</histogram>

<histogram name="SB2.BloomFilterLoad" units="ms">
  <obsolete>
    Bloom filter support deleted in October 2012.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Time to load the BloomFilter file.</summary>
</histogram>

<histogram name="SB2.BrowseDatabaseKilobytes" units="KB">
  <obsolete>
    Deprecated 12/2014. Moved to SB2.DatabaseSizeKilobytes.Browse.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    The size of the browsing SafeBrowsing database file on disk in kilobytes,
    after an update has occurred.
  </summary>
</histogram>

<histogram name="SB2.BuildFilter" units="ms">
  <owner>vakh@chromium.org</owner>
  <summary>
    The time that it took to regenerate the filter after we have received all
    the update chunks.
  </summary>
</histogram>

<histogram name="SB2.BuildReadBytes" units="bytes">
  <obsolete>
    Deprecated because it was exceeding the range.  Replaced by
    SB2.BuildReadKilobytes.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of bytes read by the browser process during the bloom filter
    generation phase.
  </summary>
</histogram>

<histogram name="SB2.BuildReadKilobytes" units="KB">
  <owner>vakh@chromium.org</owner>
  <summary>
    The number of kilobytes read by the browser process during the filter
    generation phase.
  </summary>
</histogram>

<histogram name="SB2.BuildReadOperations">
  <owner>vakh@chromium.org</owner>
  <summary>
    The number of read operations issued by the browser process during the
    filter generation phase.
  </summary>
</histogram>

<histogram name="SB2.BuildWriteBytes" units="bytes">
  <obsolete>
    Deprecated because it was exceeding the range.  Replaced by
    SB2.BuildWriteKilobytes.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of bytes written by the browser process during the bloom filter
    generation phase.
  </summary>
</histogram>

<histogram name="SB2.BuildWriteKilobytes" units="KB">
  <owner>vakh@chromium.org</owner>
  <summary>
    The number of kilobytes written by the browser process during the filter
    generation phase.
  </summary>
</histogram>

<histogram name="SB2.BuildWriteOperations">
  <owner>vakh@chromium.org</owner>
  <summary>
    The number of write operations issued by the browser process during the
    filter generation phase.
  </summary>
</histogram>

<histogram name="SB2.ChunkInsert" units="ms">
  <owner>vakh@chromium.org</owner>
  <summary>
    The time that it takes to write one redirect URL (which can contain multiple
    chunks) to the database.
  </summary>
</histogram>

<histogram name="SB2.ChunkRequest" units="ms">
  <owner>vakh@chromium.org</owner>
  <summary>
    The network time between the request and response for a chunk.
  </summary>
</histogram>

<histogram name="SB2.ChunkSize" units="bytes">
  <owner>vakh@chromium.org</owner>
  <summary>The size of one chunk URL.</summary>
</histogram>

<histogram name="SB2.DatabaseBytes" units="bytes">
  <obsolete>
    Deprecated because it was exceeding the range.  Replaced by
    SB2.DatabaseKilobytes.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The size of the SafeBrowsing database file on disk.</summary>
</histogram>

<histogram name="SB2.DatabaseFailure" enum="SB2DatabaseFailure">
  <owner>vakh@chromium.org</owner>
  <summary>Track failures when updating the safe-browsing database.</summary>
</histogram>

<histogram name="SB2.DatabaseKilobytes" units="KB">
  <obsolete>
    Replaced by SB2.BrowseDatabaseKilobytes.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    The size of the SafeBrowsing database file on disk in kilobytes.
  </summary>
</histogram>

<histogram name="SB2.DatabaseOpen" units="ms">
  <owner>vakh@chromium.org</owner>
  <summary>
    The time it takes to initialize the SafeBrowsing storage backend, in
    milliseconds.
  </summary>
</histogram>

<histogram name="SB2.DatabaseSizeKilobytes" units="KB">
  <owner>gab@chromium.org</owner>
  <summary>
    The size of one of the SafeBrowsing database file on disk in kilobytes,
    after a database update has occurred (once a few minutes after startup, and
    every thirty minutes or so thereafter).
  </summary>
</histogram>

<histogram name="SB2.DatabaseUpdateKilobytes" units="KB">
  <owner>vakh@chromium.org</owner>
  <summary>
    The size of the update file before merging with the database file, in
    kilobytes.
  </summary>
</histogram>

<histogram name="SB2.Delay" units="ms">
  <owner>vakh@chromium.org</owner>
  <summary>
    The time that SafeBrowsing actually delayed the browsing experience. It
    records the difference between the time when Chrome would have started
    reading the response for a URL and when the SafeBrowsing system completed
    its check of that URL. This is the sum of .Mainframe and .Subresource
    breakout metrics.
  </summary>
</histogram>

<histogram name="SB2.Delay.MainFrame" units="ms">
  <owner>vakh@chromium.org</owner>
  <summary>
    The time that SafeBrowsing actually delayed the browsing experience. It
    records the difference between the time when Chrome would have started
    reading the response for a URL and when the SafeBrowsing system completed
    its check of that URL. Logged for main frame resources only.
  </summary>
</histogram>

<histogram name="SB2.Delay.Subresource" units="ms">
  <owner>vakh@chromium.org</owner>
  <summary>
    The time that SafeBrowsing actually delayed the browsing experience. It
    records the difference between the time when Chrome would have started
    reading the response for a URL and when the SafeBrowsing system completed
    its check of that URL. Logged for non-main frame resources only.
  </summary>
</histogram>

<histogram name="SB2.DownloadBinhashAddsDeleted">
  <obsolete>
    Deleted in M-34 (February 2014).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Obsolete download BINHASH add chunks deleted.</summary>
</histogram>

<histogram name="SB2.DownloadBinhashSubsDeleted">
  <obsolete>
    Deleted in M-34 (February 2014).
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Obsolete download BINHASH sub chunks deleted.</summary>
</histogram>

<histogram name="SB2.DownloadChecks" enum="SB2DownloadChecks">
  <owner>vakh@chromium.org</owner>
  <summary>
    Records results of SafeBrowsing download check, including both url check and
    downloaded file hash check.
  </summary>
</histogram>

<histogram name="SB2.DownloadDatabaseKilobytes" units="KB">
  <obsolete>
    Deprecated 12/2014. Moved to SB2.DatabaseSizeKilobytes.Download.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    The size of the downloads SafeBrowsing database file on disk in kilobytes,
    after an update has occurred.
  </summary>
</histogram>

<histogram name="SB2.DownloadDuration" units="ms">
  <obsolete>
    Deprecated 01/2017. Was measuring the lifetime of a network request
    corresponding to a download, which may or may not correspond to the total
    duration of a download.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>The time it takes for a download to finish.</summary>
</histogram>

<histogram name="SB2.DownloadHashCheckDuration" units="ms">
  <owner>vakh@chromium.org</owner>
  <summary>
    The time it takes for SafeBrowsing to check hash of a download file.
  </summary>
</histogram>

<histogram name="SB2.DownloadUrlCheckDuration" units="ms">
  <owner>vakh@chromium.org</owner>
  <summary>The time it takes for SafeBrowsing to check a download url.</summary>
</histogram>

<histogram name="SB2.DownloadUrlChecks" enum="SB2DownloadChecks">
  <obsolete>
    Deprecated 3/11/11, and replaced by SB2.DownloadChecks.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Records results of SafeBrowsing download url check.</summary>
</histogram>

<histogram name="SB2.ExtendedReportingIsEnabled" enum="BooleanEnabled">
  <obsolete>
    Deprecated 03/2015. Replaced by
    SecurityInterstitialInteraction::EXTENDED_REPORTING_IS_ENABLED.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    Whether the user has Safe Browsing extended reporting enabled at the time a
    Safe Browsing warning was dismissed.  This tracks the fraction of all SB
    interstitials that had reporting enabled.
  </summary>
</histogram>

<histogram name="SB2.FailedUpdate">
  <obsolete>
    Deprecated, replaced by SB2.DatabaseFailure BROWSE_DB_UPDATE_FINISH.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The count of the number of times an update failed when being committed to
    the database.
  </summary>
</histogram>

<histogram name="SB2.FilterCheck" units="ms">
  <obsolete>
    Deprecated in favor of SafeBrowsing.V4GetPrefixMatches.TimeUs
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    The time that it took to check a URL against our in-memory filter.
  </summary>
</histogram>

<histogram name="SB2.FilterKilobytes" units="KB">
  <obsolete>
    Deprecated 9/2012. No longer generated.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The size of the current bloom filter in kilobytes.</summary>
</histogram>

<histogram name="SB2.FilterLoad" enum="SB2FilterLoad">
  <owner>vakh@chromium.org</owner>
  <summary>Which filter file the database loaded from disk.</summary>
</histogram>

<histogram name="SB2.FilterMissing">
  <obsolete>
    Deprecated, replaced by SB2.DatabaseFailure FILTER_MISSING.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The count of the number of times we attempted to load the bloom filter file
    but it was missing.
  </summary>
</histogram>

<histogram name="SB2.FilterReadFail">
  <obsolete>
    Deprecated, replaced by SB2.DatabaseFailure FILTER_READ.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The count of the number of times we attempted to load the bloom filter file
    but failed while reading the file on disk.
  </summary>
</histogram>

<histogram name="SB2.FilterSize" units="bytes">
  <obsolete>
    Deprecated because it was exceeding the range.  Replaced by
    SB2.FilterKilobytes.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The size of the current bloom filter.</summary>
</histogram>

<histogram name="SB2.FilterWriteFail">
  <obsolete>
    Deprecated, replaced by SB2.DatabaseFailure FILTER_WRITE.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The count of the number of times we attempted to save the bloom filter file
    but failed while writing the file to disk.
  </summary>
</histogram>

<histogram name="SB2.FormatEvent" enum="SB2FormatEvent">
  <owner>vakh@chromium.org</owner>
  <summary>
    Collection of boolean events for SafeBrowsingFileStore instances.  Includes
    corruptions detected, old versions detected, and various failures detected.
  </summary>
</histogram>

<histogram name="SB2.GetChunkResponseOrErrorCode"
    enum="CombinedHttpResponseAndNetErrorCode">
  <owner>vakh@google.com</owner>
  <summary>
    Response or error codes from the SafeBrowsing service. Logged after a
    GetChunk request finishes to capture the response code or error code for
    that call. Split out from SB2.GetHashErrorResponseOrErrorCode in M49.
  </summary>
</histogram>

<histogram name="SB2.GetHash200">
  <obsolete>
    Deprecated in favor of SB2.GetHashResult STATUS_200.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of GetHash requests that returned data (valid requests).
  </summary>
</histogram>

<histogram name="SB2.GetHash204">
  <obsolete>
    Deprecated in favor of SB2.GetHashResult STATUS_204.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of GetHash requests that returned empty data (false positives).
  </summary>
</histogram>

<histogram name="SB2.GetHashResponseOrErrorCode"
    enum="CombinedHttpResponseAndNetErrorCode">
  <owner>vakh@google.com</owner>
  <summary>
    Response or error codes from the SafeBrowsing service. Logged after a
    GetHash request finishes to capture the response code or error code for that
    call. Split out from SB2.GetHashErrorResponseOrErrorCode in M49.
  </summary>
</histogram>

<histogram name="SB2.GetHashResult" enum="SB2GetHashResult">
  <owner>mattm@chromium.org</owner>
  <summary>
    Track return status from GetHash attempts (STATUS_200, STATUS_204,
    NETWORK_ERROR, HTTP_ERROR, BACKOFF_ERROR), whether parsing a 200 result
    failed (PARSE_ERROR), and dispensation of returned values (EMPTY, HIT,
    MISS).  EMPTY means the response had no full hashes, and should contain all
    of the 204 responses plus all *_ERROR cases.  HIT means that one of the full
    hashes matched. MISS means that none of the hashes matched (there was a
    prefix collision). (PARSE_ERROR, NETWORK_ERROR, HTTP_ERROR, and
    BACKOFF_ERROR were added in M36.)
  </summary>
</histogram>

<histogram name="SB2.GetHashResultDownload" enum="SB2GetHashResult">
  <owner>mattm@chromium.org</owner>
  <summary>
    Track return status from GetHash attempts (STATUS_200, STATUS_204,
    NETWORK_ERROR, HTTP_ERROR, BACKOFF_ERROR), whether parsing a 200 result
    failed (PARSE_ERROR), and dispensation of returned values (EMPTY, HIT,
    MISS).  EMPTY means the response had no full hashes, and should contain all
    of the 204 responses plus all *_ERROR cases.  HIT means that one of the full
    hashes matched. MISS means that none of the hashes matched (there was a
    prefix collision). (PARSE_ERROR, NETWORK_ERROR, HTTP_ERROR, and
    BACKOFF_ERROR were added in M36.)
  </summary>
</histogram>

<histogram name="SB2.GetHashServerMiss">
  <obsolete>
    Deprecated in favor of SB2.GetHashResult FULL_HASH_* and
    SB2.BloomFilterFalsePositives.  It is unclear if this histogram ever
    reported useful data.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of GetHash requests returning full hashes that didn't match the
    URL that initiated the request.
  </summary>
</histogram>

<histogram name="SB2.HandleCorrupt">
  <obsolete>
    Deprecated, replaced by SB2.DatabaseFailure CORRUPT.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The count of the number of times a database was found corrupt and reset.
  </summary>
</histogram>

<histogram name="SB2.InterstitialAction" enum="SB2InterstitialAction">
  <obsolete>
    Deprecated, replaced by: interstitial.malware.* and interstitial.phishing.*.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    Track number of times Safe Browsing interstitials have been shown, and how
    many times they have been clicked through or not.
  </summary>
</histogram>

<histogram name="SB2.InterstitialActionDetails"
    enum="SB2InterstitialActionDetails">
  <obsolete>
    Deprecated, replaced by: interstitial.malware.* and interstitial.phishing.*.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    Tracks the click-through rate for specific cases of the interstitial.
  </summary>
</histogram>

<histogram name="SB2.MalwareInterstitialTimeClosed" units="ms">
  <obsolete>
    Deprecated 9/2014.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    The time between when we show the SafeBrowsing malware interstitial and the
    user navigating away by for example, closing the tab, clicking the browser
    back button or typing another URL in the address bar.
  </summary>
</histogram>

<histogram name="SB2.MalwareInterstitialTimeDiagnostic" units="ms">
  <obsolete>
    Deprecated 9/2014.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    The time between when we show the SafeBrowsing malware interstitial and the
    user clicking on diagnostic page link.
  </summary>
</histogram>

<histogram name="SB2.MalwareInterstitialTimeExpandedSeeMore" units="ms">
  <obsolete>
    Deprecated 9/2014.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    The time between when we show the SafeBrowsing malware interstitial and the
    user expanding the &quot;see more info&quot; section of the page.  (Only
    applies to field trial version 2 of the interstitial.)
  </summary>
</histogram>

<histogram name="SB2.MalwareInterstitialTimeLearnMore" units="ms">
  <obsolete>
    Deprecated 9/2014.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    The time between when we show the SafeBrowsing malware interstitial and the
    user clicking on the learn more about malware link.
  </summary>
</histogram>

<histogram name="SB2.MalwareInterstitialTimePrivacyPolicy" units="ms">
  <obsolete>
    Deprecated 9/2014.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    The time between when we show the SafeBrowsing malware interstitial and the
    user clicking on the privacy policy link.
  </summary>
</histogram>

<histogram name="SB2.MalwareInterstitialTimeProceed" units="ms">
  <obsolete>
    Deprecated 9/2014.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    The time between when we show the SafeBrowsing malware interstitial and the
    user clicking on the proceed link.
  </summary>
</histogram>

<histogram name="SB2.MalwareInterstitialTimeTakeMeBack" units="ms">
  <obsolete>
    Deprecated 9/2014.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    The time between when we show the SafeBrowsing malware interstitial and the
    user clicking on the big green back button.
  </summary>
</histogram>

<histogram name="SB2.Network" units="ms">
  <owner>vakh@chromium.org</owner>
  <summary>
    The time that it took to receive a response from the Google SafeBrowsing
    servers for a GetHash request.
  </summary>
</histogram>

<histogram name="SB2.NoUserActionResourceLoadingDelay" units="ms">
  <owner>yzshen@chromium.org</owner>
  <summary>
    The total delay, in milliseconds, caused by SafeBrowsing for a resource
    load, if the SafeBrowsing interstitial page is not shown and therefore no
    user action is involved. At most one value is reported for each resource
    load. If SafeBrowsing causes delays at different stages of a load, the sum
    of all the delays will be reported.
  </summary>
</histogram>

<histogram name="SB2.OldDatabaseKilobytes" units="KB">
  <obsolete>
    Deprecated 7/2014. No longer generated.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>Size of v1 database deleted from client profile.</summary>
</histogram>

<histogram name="SB2.OutShardShifts">
  <owner>vakh@chromium.org</owner>
  <summary>
    Indicates how sharded safe-browsing on-disk stores are.  Values like 0 to 4
    are reasonable.
  </summary>
</histogram>

<histogram name="SB2.PhishingInterstitialTimeClosed" units="ms">
  <owner>felt@chromium.org</owner>
  <summary>
    The time between when we show the SafeBrowsing phishing interstitial and the
    user navigating away by for example, closing the tab, clicking the browser
    back button or typing another URL in the address bar.
  </summary>
</histogram>

<histogram name="SB2.PhishingInterstitialTimeExpandedSeeMore" units="ms">
  <owner>felt@chromium.org</owner>
  <summary>
    The time between when we show the SafeBrowsing phishing interstitial and the
    user expanding the &quot;see more info&quot; section of the page.  (Only
    applies to field trial version 2 of the interstitial.)
  </summary>
</histogram>

<histogram name="SB2.PhishingInterstitialTimeLearnMore" units="ms">
  <owner>felt@chromium.org</owner>
  <summary>
    The time between when we show the SafeBrowsing phishing interstitial and the
    user clicking on the learn more link.
  </summary>
</histogram>

<histogram name="SB2.PhishingInterstitialTimeProceed" units="ms">
  <owner>felt@chromium.org</owner>
  <summary>
    The time between when we show the SafeBrowsing phishing interstitial and the
    user clicking on the proceed link.
  </summary>
</histogram>

<histogram name="SB2.PhishingInterstitialTimeReportError" units="ms">
  <owner>felt@chromium.org</owner>
  <summary>
    The time between when we show the SafeBrowsing phishing interstitial and the
    user clicking on the report error link.
  </summary>
</histogram>

<histogram name="SB2.PhishingInterstitialTimeTakeMeBack" units="ms">
  <owner>felt@chromium.org</owner>
  <summary>
    The time between when we show the SafeBrowsing phishing interstitial and the
    user clicking on the big green back button.
  </summary>
</histogram>

<histogram name="SB2.PrefixSetBitsPerPrefix" units="bits">
  <owner>vakh@chromium.org</owner>
  <summary>
    The size of the PrefixSet storage in bits, divided by the number of prefixes
    represented.  Should almost always be 16.
  </summary>
</histogram>

<histogram name="SB2.PrefixSetEvent" enum="SB2PrefixSetEvent">
  <obsolete>
    Deprecated 9/2012. No longer generated, BloomFilter being removed.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Records how well the PrefixSet implementation matches the BloomFilter
    implementation.
  </summary>
</histogram>

<histogram name="SB2.PrefixSetKilobytes" units="KB">
  <obsolete>
    Deprecated 01/2014. Replaced by suffixed SB2.PrefixSetSizeKilobytes.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>The size of one of the PrefixSet files in kilobytes.</summary>
</histogram>

<histogram name="SB2.PrefixSetLoad" units="ms">
  <owner>vakh@chromium.org</owner>
  <summary>Time to load one of the PrefixSet files.</summary>
</histogram>

<histogram name="SB2.PrefixSetRestoredExcess">
  <obsolete>
    Deprecated 9/2012. No longer generated.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    For debugging PrefixSet.  How many extra results GetPrefixes returns.
  </summary>
</histogram>

<histogram name="SB2.PrefixSetRestoredShortfall">
  <obsolete>
    Deprecated 9/2012. No longer generated.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    For debugging PrefixSet.  How many fewer results GetPrefixes returns.
  </summary>
</histogram>

<histogram name="SB2.PrefixSetSizeKilobytes" units="KB">
  <owner>vakh@chromium.org</owner>
  <summary>
    The size of one of the PrefixSet files in kilobytes. Logged after a database
    update has occurred and the PrefixSet has been flushed to disk (once a few
    minutes after startup, and every thirty minutes or so thereafter).
  </summary>
</histogram>

<histogram name="SB2.PrefixSetUnsortedDelta">
  <obsolete>
    Deprecated 9/2012. No longer generated.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    For debugging PrefixSet.  How far unsorted deltas are from expected value.
  </summary>
</histogram>

<histogram name="SB2.PrefixSetUnsortedDifference">
  <obsolete>
    Deprecated 9/2012. No longer generated.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    For debugging PrefixSet.  Distance of unsorted elements from expected
    location.
  </summary>
</histogram>

<histogram name="SB2.PrefixSetUnsortedPercent" units="%">
  <obsolete>
    Deprecated 9/2012. No longer generated.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    For debugging PrefixSet.  How far into the results unsorted elements were
    found.  Interesting values would be 0%, 50%, or 100%.
  </summary>
</histogram>

<histogram name="SB2.PrefixSetUnsortedSize">
  <obsolete>
    Deprecated 9/2012. No longer generated.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    For debugging PrefixSet.  Size of unsorted sets.  To see if there is a
    problem with a particular size of dataset.
  </summary>
</histogram>

<histogram name="SB2.PrefixSetVersionRead">
  <owner>vakh@chromium.org</owner>
  <summary>Version read from one of the PrefixSet files.</summary>
</histogram>

<histogram name="SB2.PrefixSetWrite" units="ms">
  <owner>vakh@chromium.org</owner>
  <summary>Time to store one of the PrefixSet files.</summary>
</histogram>

<histogram name="SB2.RemoteCall.CanCheckUrl" enum="BooleanCanCheckUrl">
  <owner>nparker@chromium.org</owner>
  <summary>
    Count of how many URLs were actually checked vs skipped via
    RemoteSafeBrowsingDatabaseManager because the scheme is not supported by
    Safe Browsing. Incremented each time a resource load is initiated.
  </summary>
</histogram>

<histogram name="SB2.RemoteCall.CheckDelta" units="microseconds">
  <owner>csharrison@chromium.org</owner>
  <owner>vakh@chromium.org</owner>
  <summary>
    The microseconds between sending the Safe Browsing API call and receiving
    the response. Logged in java code and does not include any thread hops or
    extra work. Note that this does include task queue time to respond to the
    IPC (and that queue time is often non-trivial).

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

<histogram name="SB2.RemoteCall.CheckDispatchTime" units="microseconds">
  <owner>csharrison@chromium.org</owner>
  <owner>vakh@chromium.org</owner>
  <summary>
    Wall time in microseconds for calling
    Java_SafeBrowsingApiBridge_startUriLookup. Logged at every Safe Browsing
    check on Android.

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

<histogram name="SB2.RemoteCall.ChecksPending" units="calls">
  <obsolete>
    Deprecated in M64 (Nov 2017). No longer generated.
  </obsolete>
  <owner>nparker@chromium.org</owner>
  <summary>
    Number of outstanding calls for URLs getting classified through
    RemoteSafeBrowsingDatabaseManager.  The size of the queue is logged before
    initiating each request.
  </summary>
</histogram>

<histogram name="SB2.RemoteCall.Elapsed" units="ms">
  <owner>nparker@chromium.org</owner>
  <summary>
    Latency of URL-classification API calls from Chrome via
    RemoteSafeBrowsingDatabaseManager, logged per-request. This includes the
    time to go through JNI, check the URL, and return the result and includes
    several thread hops betwetween IO and UI threads. The resource-load will not
    necessarily be delayed this much (see SB2.Delay for that).
  </summary>
</histogram>

<histogram name="SB2.RemoteCall.InternalErrorStatusCode">
  <obsolete>
    No longer generated. Replaced by SB2.RemoteCall.InternalErrorStatusCode2
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    The status code provided by GmsCore if it is unable to respond to a URL
    check request due to incorrect initialization, not being ready, etc. Logged
    on each URL check that hits the internal error condition. The total number
    of these should add up to the INTERNAL_ERROR reports under
    SB2.RemoteCall.Result.
  </summary>
</histogram>

<histogram name="SB2.RemoteCall.InternalErrorStatusCode2"
    enum="GooglePlayServicesConnectionResult">
  <owner>vakh@chromium.org</owner>
  <summary>
    The status code provided by GmsCore if it is unable to respond to a URL
    check request due to incorrect initialization, not being ready, etc. Logged
    on each URL check that hits the internal error condition. The total number
    of these should add up to the INTERNAL_ERROR reports under
    SB2.RemoteCall.Result.
  </summary>
</histogram>

<histogram name="SB2.RemoteCall.Result" enum="SB2RemoteCallResult">
  <owner>nparker@chromium.org</owner>
  <summary>
    Result of URL-classification API calls from Chrome via
    RemoteSafeBrowsingApiHandler.  Logged after each URL is judged
    safe/not-safe, or hits a deadline. The INTERNAL_ERROR cases are further
    classified under SB2.RemoteCall.InternalErrorStatusCode.
  </summary>
</histogram>

<histogram name="SB2.RemoteCall.ThreatSubType.PotentiallyHarmfulApp"
    enum="SB2RemoteCallThreatSubType">
  <owner>nparker@chromium.org</owner>
  <summary>
    The threat sub-type annotated  for URLs classified as PHA via remote calls
    through RemoteSafeBrowsingApiHandler. &quot;PHA&quot; classifications
    generate &quot;malware&quot; interstitials.
  </summary>
</histogram>

<histogram name="SB2.RemoteCall.ThreatSubType.SocialEngineering"
    enum="SB2RemoteCallThreatSubType">
  <owner>nparker@chromium.org</owner>
  <summary>
    The threat sub-type annotated returned for URLs classified as social
    engineering via remote calls through RemoteSafeBrowsingApiHandler.
    &quot;Social engineering&quot; classifications generate &quot;phishing&quot;
    interstitials.
  </summary>
</histogram>

<histogram name="SB2.ReportingIsEnabled" enum="BooleanEnabled">
  <obsolete>
    Deprecated 06/2014.  Replaced by SB2.ExtendedReportingIsEnabled.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Whether the user has Safe Browsing extended reporting enabled at the time a
    Safe Browsing warning was dismissed.  This tracks the fraction of all SB
    interstitials that had reporting enabled.
  </summary>
</histogram>

<histogram name="SB2.ResourceTypes" enum="ContentResourceType">
  <obsolete>
    Superseded by SB2.ResourceTypes2 in December 2015.
  </obsolete>
  <owner>nparker@chromium.org</owner>
  <summary>
    Resource types of resources that were inspected by Safe Browsing in the
    SafeBrowsingResourceThrottle.
  </summary>
</histogram>

<histogram name="SB2.ResourceTypes2" enum="ContentResourceType2">
  <owner>nparker@chromium.org</owner>
  <summary>
    Resource types of resources that were inspected by Safe Browsing in the
    SafeBrowsingResourceThrottle.
  </summary>
</histogram>

<histogram name="SB2.SetExtendedReportingEnabled" enum="BooleanEnabled">
  <obsolete>
    Deprecated 03/2015. Replaced by
    SecurityInterstitialInteraction::SET_EXTENDED_REPORTING_ENABLED.
  </obsolete>
  <owner>felt@chromium.org</owner>
  <summary>
    Tracks changes to the Safe Browsing extended reporting opt-in which is shown
    in the Safe Browsing interstitial.
  </summary>
</histogram>

<histogram name="SB2.SetReportingEnabled" enum="BooleanEnabled">
  <obsolete>
    Deprecated 06/2014.  Replaced by SB2.SetExtendedReportingEnabled.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Tracks changes to the Safe Browsing extended reporting opt-in which is shown
    in the Safe Browsing interstitial.
  </summary>
</histogram>

<histogram name="SB2.SideEffectFreePrefixSetWrite" units="ms">
  <obsolete>
    Deprecated 12/2014. Merged into SB2.PrefixSetWrite.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    Time to store the Side Effect Free Whitelist PrefixSet file. Note: this
    histogram was intended to be stored as
    SB2.SideEffectFreeWhitelistPrefixSetWrite but was actually reported as
    SB2.SideEffectFreePrefixSetWrite from its inception to its deprecation...
  </summary>
</histogram>

<histogram name="SB2.SideEffectFreeWhitelistDatabaseKilobytes" units="KB">
  <obsolete>
    Deprecated 12/2014. Moved to
    SB2.DatabaseSizeKilobytes.SideEffectFreeWhitelist.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    The size of the Side Effect Free Whitelist SaafeBrowsing database file on
    disk in kilobytes, after an update has occurred.
  </summary>
</histogram>

<histogram name="SB2.SideEffectFreeWhitelistPrefixSetKilobytes" units="KB">
  <obsolete>
    Deprecated 12/2014. Moved to
    SB2.PrefixSetSizeKilobytes.SideEffectFreeWhitelist.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    The size of the Side Effect Free Whitelist PrefixSet file in kilobytes,
    after an udpate has occurred.
  </summary>
</histogram>

<histogram name="SB2.SideEffectFreeWhitelistPrefixSetLoad" units="ms">
  <obsolete>
    Deprecated 12/2014. Merged into SB2.PrefixSetLoad.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>Time to load the Side Effect Free Whitelist PrefixSet file.</summary>
</histogram>

<histogram name="SB2.SideEffectFreeWhitelistStatus"
    enum="SB2SideEffectFreeWhitelistStatus">
  <obsolete>
    Deprecated 4/2015.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>The instantiation status of the SideEffectFreeWhitelist.</summary>
</histogram>

<histogram name="SB2.StoreVersionRead">
  <owner>vakh@chromium.org</owner>
  <summary>Version read from the store file.</summary>
</histogram>

<histogram name="SB2.SubPrefixes">
  <owner>vakh@chromium.org</owner>
  <summary>
    The number of sub prefixes stored in the database after the last update.
  </summary>
</histogram>

<histogram name="SB2.Update" units="ms">
  <owner>vakh@chromium.org</owner>
  <summary>
    The time from the receipt of the update request to the receipt of the final
    update chunk.
  </summary>
</histogram>

<histogram name="SB2.UpdateRequestSize" units="bytes">
  <owner>vakh@chromium.org</owner>
  <summary>The payload size of update requests to the server.</summary>
</histogram>

<histogram name="SB2.UpdateResult" enum="SB2UpdateResult">
  <owner>vakh@chromium.org</owner>
  <summary>Result from trying to update the SafeBrowsing data.</summary>
</histogram>

<histogram name="SB2.UpdateSize" units="bytes">
  <owner>vakh@chromium.org</owner>
  <summary>The size of all the chunk URLs in an update response.</summary>
</histogram>

<histogram name="SB2.UpdateSizeBackground" units="bytes">
  <obsolete>
    Was used for an experiment in late 2014.
  </obsolete>
  <owner>nparker@chromium.org</owner>
  <summary>
    The size of all the chunk URLs in an update response when Chrome is in the
    background.
  </summary>
</histogram>

<histogram name="SB2.UpdateSizeForeground" units="bytes">
  <obsolete>
    Was used for an experiment in late 2014.
  </obsolete>
  <owner>nparker@chromium.org</owner>
  <summary>
    The size of all the chunk URLs in an update response when Chrome is in the
    foreground.
  </summary>
</histogram>

<histogram name="SB2.UpdateUrls">
  <owner>vakh@chromium.org</owner>
  <summary>The number of chunk URLs in an update response.</summary>
</histogram>

<histogram name="SB2.VolunteerPrefixesRemoved">
  <obsolete>
    The operation this is tracking has been deleted as of 09/2014.
  </obsolete>
  <owner>vakh@chromium.org</owner>
  <summary>
    Older versions of the safe-browsing code incorrectly added additional
    SBPrefix items when receiving full hashes.  This caused errors when
    calculating when to send gethash requests to the server.  An additional pass
    over the data has been added to remove the excess prefixes.  This histogram
    tracks progress of that code for purposes of informing a decision on when to
    remove the additional pass.  See http://crbug.com/361248 .
  </summary>
</histogram>

<histogram name="SBClientDownload.ArchivedArchiveExtensions"
    enum="SBClientDownloadExtensions">
  <owner>asanka@chromium.org</owner>
  <summary>
    Records a histogram of archive file types that were found while examining a
    downloaded ZIP file. Each archive file type in a single ZIP file is recorded
    at most once. The relative incidence rate of each filetype in this histogram
    should indicate the probability of finding that file type in a ZIP file
    given that that ZIP file contains an archive file.
  </summary>
</histogram>

<histogram name="SBClientDownload.CheckDownloadStats"
    enum="SBClientDownloadCheckDownloadStats">
  <owner>mattm@chromium.org</owner>
  <summary>
    Records a histogram of the reason why downloads are marked as being
    malicious or clean by the improved SafeBrowsing binary download protection.
    Note that UNSUPPORTED_URL_SCHEME was split out of the INVALID_URL bucket in
    M41. The NOT_BINARY_FILE check was moved before the UNSUPPORTED_URL_SCHEME
    check in M42. The WHITELISTED_URL check was moved to before NOT_BINARY_FILE
    in M62.
  </summary>
</histogram>

<histogram name="SBClientDownload.CheckWhitelistResult"
    enum="WhitelistedDownloadType">
  <owner>jialiul@chromium.org</owner>
  <summary>
    For each download supported by the SafeBrowsing download protection service,
    records if it matches a certain whitelist (e.g. matches URL whitelist,
    matches signature whitelist, or does not match any whitelists).
  </summary>
</histogram>

<histogram name="SBClientDownload.DmgFileArchivedBinariesCount" units="count">
  <owner>nparker@chromium.org</owner>
  <summary>
    The original number of archived_binaries found in a DMG-like file when it's
    scanned, if at least one is found.  The actual number sent in the download
    request may be capped below this value.
  </summary>
</histogram>

<histogram name="SBClientDownload.DmgFileFailureByType"
    enum="SBClientDownloadExtensions">
  <owner>nparker@chromium.org</owner>
  <summary>
    Counts of DMG-like file types that failed to be successfully analyzed by the
    SafeBrowsing download service.
  </summary>
</histogram>

<histogram name="SBClientDownload.DmgFileHasExecutable" enum="Boolean">
  <obsolete>
    Replaced by SBClientDownload.DmgFileHas[No]ExecutableByType in M51.
  </obsolete>
  <owner>rsesek@chromium.org</owner>
  <summary>
    For each DMG file analyzed by the SafeBrowsing download service, records if
    the DMG contained an executable file.
  </summary>
</histogram>

<histogram name="SBClientDownload.DmgFileHasExecutableByType"
    enum="SBClientDownloadExtensions">
  <owner>nparker@chromium.org</owner>
  <summary>
    Counts of DMG-like file types which were analyzed by the SafeBrowsing
    download service that contained an executable file.
  </summary>
</histogram>

<histogram name="SBClientDownload.DmgFileHasNoExecutableByType"
    enum="SBClientDownloadExtensions">
  <owner>nparker@chromium.org</owner>
  <summary>
    Counts of DMG-like file types which were analyzed by the SafeBrowsing
    download service that did NOT contain an executable file.
  </summary>
</histogram>

<histogram name="SBClientDownload.DmgFileSuccess" enum="BooleanSuccess">
  <obsolete>
    Replaced by SBClientDownload.DmgFile{Success,Failure}ByType in M51.
  </obsolete>
  <owner>rsesek@chromium.org</owner>
  <summary>
    For each DMG file analyzed by the SafeBrowsing download service, records
    true if the analysis was successful, or false if there was an error
    analyzing the file.
  </summary>
</histogram>

<histogram name="SBClientDownload.DmgFileSuccessByType"
    enum="SBClientDownloadExtensions">
  <owner>nparker@chromium.org</owner>
  <summary>
    Counts of DMG-like file types that were successfully analyzed by the
    SafeBrowsing download service.
  </summary>
</histogram>

<histogram name="SBClientDownload.DmgTooBigToUnpack" enum="Boolean">
  <owner>jialiul@chromium.org</owner>
  <summary>
    Records whether a given DMG download was too big to unpack, as specified by
    configuration option set in SafeBrowsing download service. This metric is
    logged each time the user downloads a DMG file on Mac.
  </summary>
</histogram>

<histogram name="SBClientDownload.DownloadExtensions"
    enum="SBClientDownloadExtensions">
  <owner>mattm@chromium.org</owner>
  <summary>
    Records a histogram of how often users download a file with a file extension
    that is possibly dangerous (e.g., exe, class).
  </summary>
</histogram>

<histogram name="SBClientDownload.DownloadFileHasDetachedSignatures"
    enum="Boolean">
  <owner>jialiul@chromium.org</owner>
  <summary>
    A Mac-only metric that records whether a given download contains a detached
    code signature file. This metric is logged before Chrome sends SafeBrowsing
    download pings.
  </summary>
</histogram>

<histogram name="SBClientDownload.DownloadFileHasDmgSignature" enum="Boolean">
  <owner>jialiul@chromium.org</owner>
  <summary>
    A Mac-only metric that records whether a given download file is a
    cryptographically signed DMG archive. This metric is logged before Chrome
    sends SafeBrowsing download pings.
  </summary>
</histogram>

<histogram
    name="SBClientDownload.DownloadFileWithoutDiskImageExtensionHasKolySignature"
    enum="Boolean">
  <owner>jialiul@chromium.org</owner>
  <summary>
    Records whether download files without an Apple disk image file extension
    have a 'koly' signature. This can be used to identify distribution of disk
    image files to Mac users without simply relying on file extension. This
    metric is logged before Chrome sends SafeBrowsing download pings.
  </summary>
</histogram>

<histogram name="SBClientDownload.DownloadRequestDuration" units="ms">
  <owner>mattm@chromium.org</owner>
  <summary>
    Records the total time it takes for the SafeBrowsing download service to
    check whether the content of a download is malicious or not, including file
    feature extraction, whitelist checking, and server ping. This histogram only
    includes checks that sent a ping to the SafeBrowsing server. It does not
    include requests that were cancelled, but does include requests that
    received a bad response.
  </summary>
</histogram>

<histogram name="SBClientDownload.DownloadRequestNetError" enum="NetErrorCodes">
  <owner>mattm@chromium.org</owner>
  <summary>
    The net error code for all CheckClientDownloadRequest URLFetchers.
  </summary>
</histogram>

<histogram name="SBClientDownload.DownloadRequestNetworkDuration" units="ms">
  <owner>mattm@chromium.org</owner>
  <summary>
    Records the time it takes for the SafeBrowsing download service ping. It is
    not recorded for requests that were cancelled.
  </summary>
</histogram>

<histogram name="SBClientDownload.DownloadRequestNetworkStats"
    enum="SBClientDownloadCheckDownloadStats">
  <owner>mattm@chromium.org</owner>
  <summary>
    Records the results of SafeBrowsing binary download checks which caused a
    server ping.
  </summary>
</histogram>

<histogram name="SBClientDownload.DownloadRequestPayloadSize" units="bytes">
  <owner>mattm@chromium.org</owner>
  <summary>
    The size of the upload data for CheckClientDownloadRequest URLFetchers.
  </summary>
</histogram>

<histogram name="SBClientDownload.DownloadRequestResponseCode"
    enum="HttpResponseCode">
  <owner>mattm@chromium.org</owner>
  <summary>
    For CheckClientDownloadRequest URLFetchers with successful status, the HTTP
    response code that was received.
  </summary>
</histogram>

<histogram name="SBClientDownload.DownloadRequestTimeoutDuration" units="ms">
  <owner>mattm@chromium.org</owner>
  <summary>
    Records the portion of the SafeBrowsing download service check starting with
    the point CheckClientDownloadRequest::StartTimeout() is called. It is
    recorded regardless if a ping was sent or not. It is not recorded for
    requests that were cancelled.
  </summary>
</histogram>

<histogram name="SBClientDownload.DownloadRequestTimeoutStats"
    enum="SBClientDownloadCheckDownloadStats">
  <owner>mattm@chromium.org</owner>
  <summary>
    For SafeBrowsing binary download checks which reached the
    CheckClientDownloadRequest::StartTimeout() call, records the final result
    (once the check finishes or is cancelled).
  </summary>
</histogram>

<histogram name="SBClientDownload.ExtractDmgFeaturesTime" units="ms">
  <owner>rsesek@chromium.org</owner>
  <summary>
    Records the time it takes for the SafeBrowsing download service to extract
    info from a downloaded DMG file.
  </summary>
</histogram>

<histogram name="SBClientDownload.ExtractImageHeadersTime" units="ms">
  <owner>grt@chromium.org</owner>
  <summary>
    Records the time it takes for the SafeBrowsing download service to extract
    image headers from a downloaded binary.
  </summary>
</histogram>

<histogram name="SBClientDownload.ExtractRarFeaturesTime" units="ms">
  <owner>vakh@chromium.org</owner>
  <summary>
    Records the time it takes for the SafeBrowsing download service to extract
    info from a downloaded rar file.
  </summary>
</histogram>

<histogram name="SBClientDownload.ExtractSignatureFeaturesTime" units="ms">
  <owner>mattm@chromium.org</owner>
  <summary>
    Records the time it takes for the SafeBrowsing download service to extract
    signature info from a downloaded binary. This includes both unsigned and
    signed binaries.
  </summary>
</histogram>

<histogram name="SBClientDownload.ExtractZipFeaturesTime" units="ms">
  <owner>mattm@chromium.org</owner>
  <summary>
    Records the time it takes for the SafeBrowsing download service to extract
    info from a downloaded zip file.
  </summary>
</histogram>

<histogram name="SBClientDownload.PPAPIDownloadRequest.RequestDuration"
    units="ms" expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>Time taken to complete a PPAPIDownloadRequest.</summary>
</histogram>

<histogram name="SBClientDownload.PPAPIDownloadRequest.RequestOutcome"
    enum="SBClientDownloadPPAPIDownloadRequestOutcome"
    expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>
    Outcome of running CheckPPAPIDownloadRequest. Most failure modes cause an
    UNKNOWN result to be returned to the caller. If the attempt succeeds, the
    result returned to the caller is based on the SafeBrowsing resopnse. The
    final result returned is counted in
    SBClientDownload.PPAPIDownloadRequest.Result.
  </summary>
</histogram>

<histogram name="SBClientDownload.PPAPIDownloadRequest.Result"
    enum="SBClientDownloadCheckResult" expires_after="2018-08-30">
  <owner>asanka@chromium.org</owner>
  <summary>Result returned to the caller of CheckPPAPIDownloadRequest.</summary>
</histogram>

<histogram name="SBClientDownload.RarFileArchivedBinariesCount" units="count">
  <owner>vakh@chromium.org</owner>
  <summary>
    The original number of archived_binaries found in a rar-like file when it's
    scanned, if at least one is found.  The actual number sent in the download
    request may be capped below this value.
  </summary>
</histogram>

<histogram name="SBClientDownload.RarFileHasArchiveButNoExecutable"
    enum="Boolean">
  <owner>vakh@chromium.org</owner>
  <summary>
    For each rar file analyzed by the SafeBrowsing download service, records
    true if the rar did not contain any executables but did contain another
    archive file, false otherwise.
  </summary>
</histogram>

<histogram name="SBClientDownload.RarFileHasExecutable" enum="Boolean">
  <owner>vakh@chromium.org</owner>
  <summary>
    For each rar file analyzed by the SafeBrowsing download service, records if
    the rar contained an executable file.
  </summary>
</histogram>

<histogram name="SBClientDownload.RarFileSuccess" enum="BooleanSuccess">
  <owner>vakh@chromium.org</owner>
  <summary>
    For each rar file analyzed by the SafeBrowsing download service, records if
    the unpacking was 100% successful.
  </summary>
</histogram>

<histogram name="SBClientDownload.RarOpenSuccess" enum="BooleanSuccess">
  <owner>vakh@chromium.org</owner>
  <summary>
    For each rar file analyzed by the SafeBrowsing download service, records if
    the file could be opened. This should be close to 100% success because the
    library doesn't actually open the file; it is handed an open file handle and
    the Open() function call sets that as the file handle to use.
  </summary>
</histogram>

<histogram name="SBClientDownload.RarValidArchive" enum="BooleanSuccess">
  <owner>vakh@chromium.org</owner>
  <summary>
    For each rar file analyzed by the SafeBrowsing download service, records if
    the unrar library considers this file a valid RAR archive. It includes
    checking the following, and more: magic number is present, valid RAR version
    format can be parsed, headers are valid, etc.
  </summary>
</histogram>

<histogram name="SBClientDownload.SignedBinaryDownload"
    enum="SBClientDownloadIsSignedBinary">
  <owner>mattm@chromium.org</owner>
  <summary>
    Records the number of signed vs. unsigned executables that are downloaded.
  </summary>
</histogram>

<histogram name="SBClientDownload.SignedOrWhitelistedDownload">
  <obsolete>
    Deprecated in Chrome 50. Replaced by
    SBClientDownload.CheckWhitelistResult.*.
  </obsolete>
  <owner>mattm@chromium.org</owner>
  <summary>
    Counter which is incremented whenever an executable is downloaded which is
    either signed or whose URL matches the download whitelist.
  </summary>
</histogram>

<histogram name="SBClientDownload.UnsupportedScheme"
    enum="SBClientDownloadExtensions">
  <owner>jialiul@chromium.org</owner>
  <summary>
    Records how often different file extensions are downloaded with schemes that
    aren't supported by Safe Browsing (e.g. ftp, gopher, content, cid, etc).
  </summary>
</histogram>

<histogram name="SBClientDownload.ZipFileArchivedBinariesCount" units="count">
  <owner>nparker@chromium.org</owner>
  <summary>
    The original number of archived_binaries found in a zip-like file when it's
    scanned, if at least one is found.  The actual number sent in the download
    request may be capped below this value.
  </summary>
</histogram>

<histogram name="SBClientDownload.ZipFileContainsAppDirectory" enum="Boolean">
  <owner>jialiul@chromium.org</owner>
  <summary>
    A Mac-only metric that records whether a downloaded zip file contains an
    .app directory, signifying the presence of installable software.
  </summary>
</histogram>

<histogram name="SBClientDownload.ZipFileHasArchiveButNoExecutable"
    enum="Boolean">
  <owner>mattm@chromium.org</owner>
  <summary>
    For each zip file analyzed by the SafeBrowsing download service, records
    true if the zip did not contain any executables but did contain another zip
    file, false otherwise.
  </summary>
</histogram>

<histogram name="SBClientDownload.ZipFileHasExecutable" enum="Boolean">
  <owner>mattm@chromium.org</owner>
  <summary>
    For each zip file analyzed by the SafeBrowsing download service, records if
    the zip contained an executable file.
  </summary>
</histogram>

<histogram name="SBClientDownload.ZipFileSuccess" enum="BooleanSuccess">
  <owner>nparker@chromium.org</owner>
  <summary>
    For each zip file analyzed by the SafeBrowsing download service, records if
    the unpacking was 100% successful.
  </summary>
</histogram>

<histogram name="SBClientMalware.ClassificationStart" enum="BooleanHit">
  <owner>noelutz@chromium.org</owner>
  <summary>
    The number of pages that we could have possibly classified (essentially the
    number of top page navigations by users with SBClientMalware enabled). The
    name is slightly misleading as it is recorded before
    &quot;Preclassification&quot; happens.
  </summary>
</histogram>

<histogram name="SBClientMalware.IPBlacklistRequestNetError"
    enum="NetErrorCodes">
  <owner>noelutz@chromium.org</owner>
  <summary>
    The net error code for all ClientMalwareRequest URLFetchers.
  </summary>
</histogram>

<histogram name="SBClientMalware.IPBlacklistRequestPayloadSize" units="bytes">
  <owner>noelutz@chromium.org</owner>
  <summary>
    The size of the upload data for ClientMalwareRequest URLFetchers.
  </summary>
</histogram>

<histogram name="SBClientMalware.IPBlacklistRequestResponseCode"
    enum="HttpResponseCode">
  <owner>noelutz@chromium.org</owner>
  <summary>
    For ClientMalwareRequest URLFetchers with successful status, the HTTP
    response code that was received.
  </summary>
</histogram>

<histogram name="SBClientMalware.PreClassificationCheckFail"
    enum="SBClientDetectionPreClassificationCheckFail">
  <owner>noelutz@chromium.org</owner>
  <summary>
    Records the number of malware classifications that were skipped because a
    pre-classification check failed.
  </summary>
</histogram>

<histogram name="SBClientMalware.ResourceUrlMatchedBadIp"
    enum="BooleanMatchedBadIp">
  <owner>jialiul@chromium.org</owner>
  <summary>
    True if at least one resource url matched the malware IP list. Recorded when
    client side malware feature extraction is done.
  </summary>
</histogram>

<histogram name="SBClientMalware.SentReports" enum="SBClientMalwareSentReports">
  <owner>noelutz@chromium.org</owner>
  <summary>
    Measures the success rate of sending malware reports.  Sending a report can
    fail due to a client reaching the limit on the number of reports it can send
    per day or due to the report failing to be serialized.
  </summary>
</histogram>

<histogram name="SBClientMalware.ServerDeterminesMalware"
    enum="BooleanIsMalware">
  <owner>jialiul@chromium.org</owner>
  <summary>The counts for malware verdicts given by server side model.</summary>
</histogram>

<histogram name="SBClientMalware.UnexpectedPageId" enum="BooleanHit">
  <obsolete>
    Deprecated 03/2014.  That part of the code got deleted.
  </obsolete>
  <owner>noelutz@chromium.org</owner>
  <summary>
    Counts the number of times the page ID that completed the page load does not
    match the browse info page ID.  We expect that number to be zero.
  </summary>
</histogram>

<histogram name="SBClientPhishing.CancelClassificationReason"
    enum="SBClientPhishingCancelClassificationReason">
  <owner>nparker@chromium.org</owner>
  <summary>
    The counts for various reasons why an in-progress phishing classification
    was canceled.
  </summary>
</histogram>

<histogram name="SBClientPhishing.CheckNoPendingClassificationFailed">
  <obsolete>
    Removed in M47.
  </obsolete>
  <owner>noelutz@chromium.org</owner>
  <summary>
    The number of times client-side phishing classifier expected to have no
    pending classifications running but that check failed.
  </summary>
</histogram>

<histogram name="SBClientPhishing.ClassificationStart" enum="BooleanHit">
  <owner>noelutz@chromium.org</owner>
  <summary>
    The number of pages that we could have possibly classified (essentially the
    number of top page navigations by users with SBClientPhishing enabled). The
    name is slightly misleading as it is recorded before
    &quot;Preclassification&quot; happens.
  </summary>
</histogram>

<histogram name="SBClientPhishing.ClientDeterminesPhishing"
    enum="BooleanIsPhishing">
  <owner>jialiul@chromium.org</owner>
  <summary>
    The counts for phishing verdicts given by client side model.
  </summary>
</histogram>

<histogram name="SBClientPhishing.ClientModelDownloadResponseOrErrorCode"
    enum="CombinedHttpResponseAndNetErrorCode">
  <owner>vakh@google.com</owner>
  <summary>
    Response or error codes from the SafeBrowsing service. Logged after a
    request for the client side model finishes to capture the response code or
    the error code for that HTTP request.
  </summary>
</histogram>

<histogram name="SBClientPhishing.ClientModelStatus"
    enum="SBClientPhishingClientModelStatus">
  <owner>nparker@chromium.org</owner>
  <summary>
    The counts for various model status codes that we get after loading a new
    client-side phishing model.
  </summary>
</histogram>

<histogram name="SBClientPhishing.DOMFeatureChunkTime" units="ms">
  <owner>gab@chromium.org</owner>
  <summary>
    The time that an individual chunk of DOM feature extraction work took.
  </summary>
</histogram>

<histogram name="SBClientPhishing.DOMFeatureFrameRemoved">
  <owner>gab@chromium.org</owner>
  <summary>
    The number of times that DOM feature extraction finished early because the
    active WebDocument's frame was removed during traversal.
  </summary>
</histogram>

<histogram name="SBClientPhishing.DOMFeatureIterations">
  <owner>gab@chromium.org</owner>
  <summary>
    The number of iterations that the DOM feature extractor took to finish.
  </summary>
</histogram>

<histogram name="SBClientPhishing.DOMFeatureResumeTime" units="ms"
    expires_after="2018-08-30">
  <owner>gab@chromium.org</owner>
  <summary>
    The time that it took to resume DOM feature extraction for the phishing
    classifier.  Longer times may indicate that the page DOM changed between
    chunks of work and the extractor had to re-traverse up to the saved
    position.
  </summary>
</histogram>

<histogram name="SBClientPhishing.DOMFeatureTimeout">
  <owner>gab@chromium.org</owner>
  <summary>
    The number of phishing classifications that were aborted because DOM feature
    extraction took too long.
  </summary>
</histogram>

<histogram name="SBClientPhishing.DOMFeatureTotalTime" units="ms">
  <owner>gab@chromium.org</owner>
  <summary>
    The time that the DOM feature extarctor took to finish, summed across all
    chunks of work.
  </summary>
</histogram>

<histogram name="SBClientPhishing.GrabPhishingThumbnail" units="ms">
  <obsolete>
    Removed in M47
  </obsolete>
  <owner>noelutz@chromium.org</owner>
  <summary>Time spent generating the thumbnail.</summary>
</histogram>

<histogram name="SBClientPhishing.IllegalFeatureValue">
  <owner>nparker@chromium.org</owner>
  <summary>
    The number of features which were omitted from phishing classification
    because they were added with an illegal value.  This would indicate a bug.
  </summary>
</histogram>

<histogram name="SBClientPhishing.InitPrivateNetworksFailed">
  <obsolete>
    Deprecated in Chrome 37, which now uses //net's internal matching.
  </obsolete>
  <owner>mattm@chromium.org</owner>
  <summary>
    The number of times that the phishing detection service could not be
    initialized due to an error parsing the private IP networks.  This would
    indicate a bug.
  </summary>
</histogram>

<histogram name="SBClientPhishing.InvalidWhitelistExpression">
  <obsolete>
    Deprecated 12/2011.  Whitelist entries are no longer part of
    ClientPhishingResponse.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of whitelist_expression entries in a ClientPhishingResponse that
    could not be canonicalized.
  </summary>
</histogram>

<histogram name="SBClientPhishing.PreClassificationCheckFail"
    enum="SBClientDetectionPreClassificationCheckFail">
  <owner>noelutz@chromium.org</owner>
  <summary>
    Records the number of phishing classifications that were skipped because a
    pre-classification check failed.
  </summary>
</histogram>

<histogram name="SBClientPhishing.ReportLimitSkipped" enum="BooleanHit">
  <owner>noelutz@chromium.org</owner>
  <summary>
    The number of phishing classifications that were previously cached as being
    phishing but that will get re-classified (to possibly fix false positives).
  </summary>
</histogram>

<histogram name="SBClientPhishing.RequestNotSerialized">
  <owner>noelutz@chromium.org</owner>
  <summary>
    The number of phishing classifier pingbacks that were skipped because
    serializing the request protocol buffer to string failed.
  </summary>
</histogram>

<histogram name="SBClientPhishing.RequestSatisfiedFromCache" enum="BooleanHit">
  <owner>noelutz@chromium.org</owner>
  <summary>
    The number of times that a cached phishing classification result was used,
    rather than pinging the server.
  </summary>
</histogram>

<histogram name="SBClientPhishing.ScorerCreationStatus"
    enum="SBClientPhishingScorerCreationStatus">
  <owner>noelutz@chromium.org</owner>
  <summary>
    Records the status when we create a scorer object for the client-side
    phishing detection classifier.
  </summary>
</histogram>

<histogram name="SBClientPhishing.ServerDeterminesPhishing"
    enum="BooleanIsPhishing">
  <owner>jialiul@chromium.org</owner>
  <summary>
    The counts for phishing verdicts given by server side model.
  </summary>
</histogram>

<histogram name="SBClientPhishing.SkipClassificationReason"
    enum="SBClientPhishingSkipClassificationReason">
  <owner>jialiul@chromium.org</owner>
  <summary>
    The counts for various reasons why a phishing classification is skipped.
  </summary>
</histogram>

<histogram name="SBClientPhishing.TermFeatureBreakIterError">
  <owner>noelutz@chromium.org</owner>
  <summary>
    The number of phishing classifications that were aborted because the term
    feature extractor failed to initialize an ICU break iterator.
  </summary>
</histogram>

<histogram name="SBClientPhishing.TermFeatureChunkTime" units="ms">
  <owner>noelutz@chromium.org</owner>
  <summary>
    The time that an individual chunk of term feature extraction work took.
  </summary>
</histogram>

<histogram name="SBClientPhishing.TermFeatureIterations">
  <owner>noelutz@chromium.org</owner>
  <summary>
    The number of iterations that the term feature extractor took to finish.
  </summary>
</histogram>

<histogram name="SBClientPhishing.TermFeatureTimeout">
  <owner>noelutz@chromium.org</owner>
  <summary>
    The number of phishing classification that were aborted because term feature
    extraction took too long.
  </summary>
</histogram>

<histogram name="SBClientPhishing.TermFeatureTotalTime" units="ms">
  <owner>noelutz@chromium.org</owner>
  <summary>
    The time that the term feature extarctor took to finish, summed across all
    chunks of work.
  </summary>
</histogram>

<histogram name="SBClientPhishing.TooManyFeatures">
  <owner>noelutz@chromium.org</owner>
  <summary>
    The number of times that the limit on the number of phishing classifier
    features for a page was reached.  This may indicate a bug, or that
    kMaxFeatureSize is too small.
  </summary>
</histogram>

<histogram name="SBClientPhishing.URLFeatureTime" units="ms">
  <owner>noelutz@chromium.org</owner>
  <summary>
    The time taken to extract URL features for the phishing classifier.
  </summary>
</histogram>

<histogram name="SBDownloadFeedback.Activations" enum="DownloadItem.DangerType">
  <owner>mattm@chromium.org</owner>
  <summary>
    Count of times download feedback has been started, broken down by danger
    type.
  </summary>
</histogram>

<histogram name="SBDownloadFeedback.ActiveFeedbacks">
  <owner>mattm@chromium.org</owner>
  <summary>
    When a new download feedback request is added, records the number of
    download requests currently active and/or pending.
  </summary>
</histogram>

<histogram name="SBDownloadFeedback.Eligible" enum="DownloadItem.DangerType">
  <owner>mattm@chromium.org</owner>
  <summary>
    Count of times eligible download notifications are shown. Broken down by
    danger type.
  </summary>
</histogram>

<histogram name="SBDownloadFeedback.EmptyFilePathFailure" enum="Boolean">
  <owner>jialiul@chromium.org</owner>
  <summary>
    Count of times download feedback cannot be sent due to empty file path.
  </summary>
</histogram>

<histogram name="SBDownloadFeedback.Shown" enum="DownloadItem.DangerType">
  <obsolete>
    Starting with M32, replaced by SBDownloadFeedback.Eligible.
  </obsolete>
  <owner>mattm@chromium.org</owner>
  <summary>
    Count of times download feedback button has been shown, broken down by
    danger type.
  </summary>
</histogram>

<histogram name="SBDownloadFeedback.SizeEligibleKB" units="KB">
  <owner>mattm@chromium.org</owner>
  <summary>
    Size of downloads that were of the correct danger type, regardless if they
    meet the max file size check or if they are actually uploaded or not.
  </summary>
</histogram>

<histogram name="SBDownloadFeedback.SizeFailure" units="bytes">
  <owner>mattm@chromium.org</owner>
  <summary>
    Size of downloads that failed to be uploaded to the feedback service.
  </summary>
</histogram>

<histogram name="SBDownloadFeedback.SizeSuccess" units="bytes">
  <owner>mattm@chromium.org</owner>
  <summary>
    Size of downloads that were successfully uploaded to the feedback service.
  </summary>
</histogram>

<histogram name="SBDownloadFeedback.UploadRequestedByServer"
    enum="DownloadUploadRequestedByServer">
  <owner>nparker@chromium.org</owner>
  <summary>
    For each non-SAFE file, records whether the server requested that that file
    be uploaded.

    Logged before checking the file size, so it may be dropped there.
  </summary>
</histogram>

<histogram name="SBDownloadFeedback.UploadResult"
    enum="SBDownloadFeedbackUploadResult">
  <owner>mattm@chromium.org</owner>
  <summary>
    Final result of attempt to upload binary to download feedback service.
  </summary>
</histogram>

<histogram name="SBIRS.BLAHashTime" units="ms">
  <obsolete>
    Blacklist Load analysis was removed in M63.
  </obsolete>
  <owner>caitkp@google.com</owner>
  <summary>
    The elapsed time to compute the hash of a blacklisted module.
  </summary>
</histogram>

<histogram name="SBIRS.BLASignatureTime" units="ms">
  <obsolete>
    Blacklist Load analysis was removed in M63.
  </obsolete>
  <owner>caitkp@google.com</owner>
  <summary>
    The elapsed time to validate the signature of a blacklisted module.
  </summary>
</histogram>

<histogram name="SBIRS.DiscardedIncident" enum="IncidentType">
  <owner>caitkp@google.com</owner>
  <summary>
    The type of incident discarded by the safe browsing incident reporting
    service as a result of profile or service destruction.
  </summary>
</histogram>

<histogram name="SBIRS.DownloadMetadata.DeleteSuccess" enum="BooleanSuccess"
    expires_after="2018-08-30">
  <owner>caitkp@chromium.org</owner>
  <summary>The result of deleting a profile's download metadata file.</summary>
</histogram>

<histogram name="SBIRS.DownloadMetadata.ReadResult" enum="MetadataReadResult"
    expires_after="2018-08-30">
  <owner>caitkp@chromium.org</owner>
  <summary>The result of reading a profile's download metadata file.</summary>
</histogram>

<histogram name="SBIRS.DownloadMetadata.WriteResult" enum="MetadataWriteResult"
    expires_after="2018-08-30">
  <owner>caitkp@chromium.org</owner>
  <summary>The result of writing a profile's download metadata file.</summary>
</histogram>

<histogram name="SBIRS.DroppedIncident" enum="IncidentType">
  <owner>caitkp@google.com</owner>
  <summary>
    The type of incident given to the safe browsing incident reporting service
    but dropped as a result of not participating in safe browsing.
  </summary>
</histogram>

<histogram name="SBIRS.EnvCollectionTime" units="ms" expires_after="2018-08-30">
  <owner>caitkp@google.com</owner>
  <summary>
    The elapsed time to collect environmental data for a safe browsing incident
    report.
  </summary>
</histogram>

<histogram name="SBIRS.FindDownloadedBinaryTime" units="ms"
    expires_after="2018-08-30">
  <owner>caitkp@google.com</owner>
  <summary>
    The elapsed time to find the most recent binary download from all loaded
    profiles when creating a safe browsing incident report.
  </summary>
</histogram>

<histogram name="SBIRS.Incident" enum="IncidentType">
  <owner>caitkp@google.com</owner>
  <summary>
    The type of incident included in an incident report by the safe browsing
    incident reporting service.
  </summary>
</histogram>

<histogram name="SBIRS.IncidentCount">
  <owner>caitkp@google.com</owner>
  <summary>
    The number of incidents collated into a single safe browsing incident
    report.
  </summary>
</histogram>

<histogram name="SBIRS.InterIncidentTime" units="ms" expires_after="2018-08-30">
  <owner>caitkp@google.com</owner>
  <summary>
    The elapsed time between two successive incidents collated into the same
    incident report by the safe browsing incident reporting service.
  </summary>
</histogram>

<histogram name="SBIRS.NoDownloadIncident" enum="IncidentType">
  <owner>proberge@google.com</owner>
  <summary>
    The type of incident pruned by the safe browsing incident reporting service
    as a result of not having a matching binary download.
  </summary>
</histogram>

<histogram name="SBIRS.PrunedIncident" enum="IncidentType">
  <owner>proberge@google.com</owner>
  <summary>
    The type of incident pruned from a report in the safe browsing incident
    reporting service as a result of having previously been reported.
  </summary>
</histogram>

<histogram name="SBIRS.PruneRatio" units="%">
  <obsolete>
    Deprecated 08/2015.
  </obsolete>
  <owner>caitkp@google.com</owner>
  <summary>
    The percentage of incidents pruned from a safe browsing incident report on
    account of having been previously reported.
  </summary>
</histogram>

<histogram name="SBIRS.PSSDataStoreSize" units="bytes">
  <owner>grt@google.com</owner>
  <summary>
    The size, in bytes, of a profile's platform state store. This hisogram is
    logged on each write, which always replaces any previous contents.
  </summary>
</histogram>

<histogram name="SBIRS.PSSLoadResult" enum="PlatformStateStoreLoadResult">
  <owner>grt@google.com</owner>
  <summary>The result of loading data from the platform state store.</summary>
</histogram>

<histogram name="SBIRS.ReceivedIncident" enum="IncidentType">
  <owner>caitkp@google.com</owner>
  <summary>
    The type of incident received by the safe browsing incident reporting
    service.
  </summary>
</histogram>

<histogram name="SBIRS.ReportPayloadSize" units="bytes">
  <owner>proberge@google.com</owner>
  <summary>The size, in bytes, of a safe browsing incident report.</summary>
</histogram>

<histogram name="SBIRS.ReportUploadTime" units="ms">
  <owner>caitkp@google.com</owner>
  <summary>The elapsed time to upload a safe browsing incident report.</summary>
</histogram>

<histogram name="SBIRS.StateStoreInit" enum="StateStoreInitResult">
  <owner>proberge@google.com</owner>
  <summary>
    The result of initializing the state store and comparing the preferences to
    the platform-specific state store.
  </summary>
</histogram>

<histogram name="SBIRS.SuspiciousModuleDetectionTime" units="ms">
  <obsolete>
    Suspicious Module detection was removed in M63.
  </obsolete>
  <owner>proberge@google.com</owner>
  <summary>
    The elapsed time to check loaded modules against the module whitelist.
  </summary>
</histogram>

<histogram name="SBIRS.SuspiciousModuleReportCount" units="modules">
  <obsolete>
    Suspicious Module detection reporting removed in M63.
  </obsolete>
  <owner>proberge@google.com</owner>
  <summary>The number of suspicious modules found.</summary>
</histogram>

<histogram name="SBIRS.SuspiciousModuleReportingTime" units="ms">
  <obsolete>
    Suspicious Module detection reporting removed in M63.
  </obsolete>
  <owner>proberge@google.com</owner>
  <summary>
    The elapsed time to create incidents for suspicious modules.
  </summary>
</histogram>

<histogram name="SBIRS.UploadResult" enum="ReportProcessingResult">
  <owner>caitkp@google.com</owner>
  <summary>
    The result of an attempted report upload by the safe browsing incident
    reporting service.
  </summary>
</histogram>

<histogram name="SBIRS.VerifyBinaryIntegrity.0" units="ms"
    expires_after="2018-08-30">
  <owner>caitkp@google.com</owner>
  <summary>
    The elapsed time to verify the binary integrity of chrome.exe.
  </summary>
</histogram>

<histogram name="SBIRS.VerifyBinaryIntegrity.1" units="ms"
    expires_after="2018-08-30">
  <owner>caitkp@google.com</owner>
  <summary>
    The elapsed time to verify the binary integrity of chrome.dll.
  </summary>
</histogram>

<histogram name="SBIRS.VerifyBinaryIntegrity.2" units="ms"
    expires_after="2018-08-30">
  <owner>caitkp@google.com</owner>
  <summary>
    The elapsed time to verify the binary integrity of chrome_child.dll.
  </summary>
</histogram>

<histogram name="SBIRS.VerifyBinaryIntegrity.3" units="ms"
    expires_after="2018-08-30">
  <owner>caitkp@google.com</owner>
  <summary>
    The elapsed time to verify the binary integrity of chrome_elf.dll.
  </summary>
</histogram>

<histogram name="SBOffDomainInclusion.Abort" enum="ContentResourceType">
  <obsolete>
    Superseded by SBOffDomainInclusion2.Abort in December 2015.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Logs the resource type of each resource request for which the off-domain
    inclusion analysis was aborted. This histogram is suffixed with the abort
    reason.
  </summary>
</histogram>

<histogram name="SBOffDomainInclusion.Detected" enum="ContentResourceType">
  <obsolete>
    Deprecated 01/2015.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Logs the resource type of each resource request for which an off-domain
    inclusion was detected by the OffDomainInclusionDetector.
  </summary>
</histogram>

<histogram name="SBOffDomainInclusion.EmptyMainFrameURL"
    enum="ContentResourceType">
  <obsolete>
    Deprecated 01/2015. Moved to SBOffDomainInclusion.Abort.EmptyMainFrameURL.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Logs the resource type of each resource request for which the main frame URL
    was unexpectedly empty in the OffDomainInclusionDetector.
  </summary>
</histogram>

<histogram name="SBOffDomainInclusion.InHistory" enum="ContentResourceType">
  <obsolete>
    Superseded by SBOffDomainInclusion2.InHistory in December 2015.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Logs the resource type of each resource request for which the off-domain
    inclusion analysis concluded in no inclusion whitelist hit but a browsing
    history hit.
  </summary>
</histogram>

<histogram name="SBOffDomainInclusion.InvalidMainFrameURL"
    enum="ContentResourceType">
  <obsolete>
    Deprecated 01/2015 (was never reported, confirming experiment that handling
    it is irrelevant).
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Logs the resource type of each resource request for which the main frame URL
    was unexpectedly invalid (and not empty) in the OffDomainInclusionDetector.
  </summary>
</histogram>

<histogram name="SBOffDomainInclusion.RequestAnalyzed"
    enum="ContentResourceType">
  <obsolete>
    Superseded by SBOffDomainInclusion2.RequestAnalyzed in December 2015.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Logs the resource type of each resource request analyzed by the
    OffDomainInclusionDetector.
  </summary>
</histogram>

<histogram name="SBOffDomainInclusion.Suspicious" enum="ContentResourceType">
  <obsolete>
    Superseded by SBOffDomainInclusion2.Suspicious in December 2015.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Logs the resource type of each resource request for which an off-domain
    inclusion was detected by the OffDomainInclusionDetector and considered
    suspicious.
  </summary>
</histogram>

<histogram name="SBOffDomainInclusion.Whitelisted" enum="ContentResourceType">
  <obsolete>
    Superseded by SBOffDomainInclusion2.Suspicious in December 2015.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Logs the resource type of each resource request for which the off-domain
    inclusion analysis concluded in an inclusion whitelist hit.
  </summary>
</histogram>

<histogram name="SBOffDomainInclusion2.Abort" enum="ContentResourceType2">
  <obsolete>
    Deprecated 2016-05 as the OffDomainInclusionDetector was removed.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Logs the resource type of each resource request for which the off-domain
    inclusion analysis was aborted. This histogram is suffixed with the abort
    reason.
  </summary>
</histogram>

<histogram name="SBOffDomainInclusion2.InHistory" enum="ContentResourceType2">
  <obsolete>
    Deprecated 2016-05 as the OffDomainInclusionDetector was removed.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Logs the resource type of each resource request for which the off-domain
    inclusion analysis concluded in no inclusion whitelist hit but a browsing
    history hit.
  </summary>
</histogram>

<histogram name="SBOffDomainInclusion2.RequestAnalyzed"
    enum="ContentResourceType2">
  <obsolete>
    Deprecated 2016-05 as the OffDomainInclusionDetector was removed.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Logs the resource type of each resource request analyzed by the
    OffDomainInclusionDetector.
  </summary>
</histogram>

<histogram name="SBOffDomainInclusion2.Suspicious" enum="ContentResourceType2">
  <obsolete>
    Deprecated 2016-05 as the OffDomainInclusionDetector was removed.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Logs the resource type of each resource request for which an off-domain
    inclusion was detected by the OffDomainInclusionDetector and considered
    suspicious.
  </summary>
</histogram>

<histogram name="SBOffDomainInclusion2.Whitelisted" enum="ContentResourceType2">
  <obsolete>
    Deprecated 2016-05 as the OffDomainInclusionDetector was removed.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Logs the resource type of each resource request for which the off-domain
    inclusion analysis concluded in an inclusion whitelist hit.
  </summary>
</histogram>

<histogram base="true" name="Scheduler.Experimental.Renderer.CPUTimePerThread"
    enum="RendererSchedulerThreadType">
  <owner>altimin@chromium.org</owner>
  <summary>
    Total cpu time of scheduler-managed threads in the renderer process.

    It is supposed that Scheduler.Experimental.Renderer.CPUTimePerThread.Tracked
    and Scheduler.Experimental.Renderer.CPUTimePerThread.Untracked histograms
    should be analysed together.

    The bucket value is the sum of thread durations of all tasks in this thread
    across all browsing instances. This metric is reported each time we execute
    a task. Due to thread time being expensive to measure, only 0.01% of threads
    report this metric.
  </summary>
</histogram>

<histogram base="true"
    name="Scheduler.Experimental.Renderer.TotalTime.Wall.MainThread" units="s">
  <owner>altimin@chromium.org</owner>
  <summary>
    Sum of durations of all scheduler-managed tasks in the renderer process.

    Due to implementation constraints a difference between .Positive and
    .Negative subhistograms should be analysed. See
    blink::scheduler::TotalDurationMetricReporter for details.

    These metrics are updated each time a new task is executed.
  </summary>
</histogram>

<histogram name="Scheduling.ActivateDuration" units="microseconds">
  <obsolete>
    Replaced by ActivateDuration2, due to inefficient bucketing scheme.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    How long it takes for the compositor to simply activate the pending tree.
    Does not include any PrepareTiles or raster time.
  </summary>
</histogram>

<histogram name="Scheduling.ActivateDuration2" units="microseconds">
  <owner>brianderson@chromium.org</owner>
  <summary>
    How long it takes for the compositor to simply activate the pending tree.
    Does not include any PrepareTiles or raster time.

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

<histogram name="Scheduling.BeginImplFrameLatency2" units="microseconds">
  <owner>stanisc@chromium.org</owner>
  <summary>
    The time from v-sync to when the main side actually starts the
    BeginImplFrame.

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

<histogram name="Scheduling.BeginMainFrameIntervalCritical"
    units="microseconds">
  <obsolete>
    Replaced by BeginMainFrameIntervalCritical2, due to inefficient bucketing
    scheme.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    This is the time delta between back-to-back BeginMainFrames completions on
    the compositor side when the on_critical_path flag is set, regardless of
    whether they abort (have no updates) or commit (have updates).

    The interval is only recorded when the BeginMainFrames are running
    continuously; sepcifically when another BeginMainFrame is requested by the
    next BeginImplFrame after a) an abort or b) activation.
  </summary>
</histogram>

<histogram name="Scheduling.BeginMainFrameIntervalNotCritical"
    units="microseconds">
  <obsolete>
    Replaced by BeginMainFrameIntervalNotCritical2, due to inefficient bucketing
    scheme.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    This is the time delta between back-to-back BeginMainFrames completions on
    the compositor side when the on_critical_path flag is not set, regardless of
    whether they abort (have no updates) or commit (have updates).

    The interval is only recorded when the BeginMainFrames are running
    continuously; sepcifically when another BeginMainFrame is requested by the
    next BeginImplFrame after a) an abort or b) activation.
  </summary>
</histogram>

<histogram name="Scheduling.BeginMainFrameQueueDurationCritical"
    units="microseconds">
  <obsolete>
    Replaced by BeginMainFrameQueueDurationCritical2, due to inefficient
    bucketing scheme.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    How long it takes for the main side to start the BeginMainFrame in response
    to the compositor's SendBeginMainFrame when the on_critical_path flag is
    set.
  </summary>
</histogram>

<histogram name="Scheduling.BeginMainFrameQueueDurationCritical2"
    units="microseconds">
  <owner>brianderson@chromium.org</owner>
  <summary>
    How long it takes for the main side to start the BeginMainFrame in response
    to the compositor's SendBeginMainFrame when the on_critical_path flag is
    set.

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

<histogram name="Scheduling.BeginMainFrameQueueDurationNotCritical"
    units="microseconds">
  <obsolete>
    Replaced by BeginMainFrameQueueDurationNotCritical2, due to inefficient
    bucketing scheme.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    How long it takes for the main side to start the BeginMainFrame in response
    to the compositor's SendBeginMainFrame when the on_critical_path flag is not
    set.
  </summary>
</histogram>

<histogram name="Scheduling.BeginMainFrameStartToCommitDuration"
    units="microseconds">
  <obsolete>
    Replaced by BeginMainFrameStartToCommitDuration2, due to inefficient
    bucketing scheme.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    The time from when the main side actually starts the BeginMainFrame to when
    the commit completes on the impl side.
  </summary>
</histogram>

<histogram name="Scheduling.BeginMainFrameStartToCommitDuration2"
    units="microseconds">
  <owner>brianderson@chromium.org</owner>
  <summary>
    The time from when the main side actually starts the BeginMainFrame to when
    the commit completes on the impl side.

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

<histogram name="Scheduling.BeginMainFrameToCommitDuration"
    units="microseconds">
  <obsolete>
    Replaced by BeginMainFrameQueueDurationCritical,
    BeginMainFrameQueueDurationNotCritical, and
    BeginMainFrameStartToCommitDuration.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    How long it takes for the blink main thread to respond to the compositor's
    SendBeginMainFrame.
  </summary>
</histogram>

<histogram name="Scheduling.Browser.BeginMainFrameIntervalCritical2"
    units="microseconds">
  <obsolete>
    Deprecated in 06/2018, M69, due to too much noise in the collected data.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    This is the time delta between back-to-back BeginMainFrames completions on
    the compositor side when the on_critical_path flag is set, regardless of
    whether they abort (have no updates) or commit (have updates).

    The interval is only recorded when the BeginMainFrames are running
    continuously; sepcifically when another BeginMainFrame is requested by the
    next BeginImplFrame after a) an abort or b) activation.

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

<histogram name="Scheduling.Browser.BeginMainFrameIntervalNotCritical2"
    units="microseconds">
  <obsolete>
    Deprecated in 07/2018, M69. All begin frames are in critical path for
    browser, no data is reported.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    This is the time delta between back-to-back BeginMainFrames completions on
    the compositor side when the on_critical_path flag is not set, regardless of
    whether they abort (have no updates) or commit (have updates).

    The interval is only recorded when the BeginMainFrames are running
    continuously; sepcifically when another BeginMainFrame is requested by the
    next BeginImplFrame after a) an abort or b) activation.

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

<histogram name="Scheduling.Browser.BeginMainFrameQueueDurationNotCritical2"
    units="microseconds">
  <obsolete>
    Deprecated in 07/2018, M69. All begin frames are in critical path for
    browser, no data is reported.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    How long it takes for the main side to start the BeginMainFrame in response
    to the compositor's SendBeginMainFrame when the on_critical_path flag is not
    set.

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

<histogram name="Scheduling.Browser.BeginMainFrameStartToCommit"
    units="microseconds">
  <obsolete>
    Replaced by BeginMainFrameStartToCommitDuration. This was recorded as a
    result of a typo in the code that didn't include &quot;Duration&quot;.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    The time from when the main side actually starts the BeginMainFrame to when
    the commit completes on the impl side.
  </summary>
</histogram>

<histogram name="Scheduling.Browser.BeginMainFrameStartToCommit2"
    units="microseconds">
  <obsolete>
    Replaced by BeginMainFrameStartToCommitDuration2. This was recorded as a
    result of a typo in the code that didn't include &quot;Duration&quot;.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    The time from when the main side actually starts the BeginMainFrame to when
    the commit completes on the impl side.
  </summary>
</histogram>

<histogram name="Scheduling.Browser.CommitInterval2" units="microseconds">
  <obsolete>
    Deprecated in 06/2018, M69, due to too much noise in the collected data.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    The time delta between the *draw* times of back-to-back BeginMainFrames that
    result in a commit.

    The interval is only recorded when the BeginMainFrames are running and
    committing continuously, where continuously means when another
    BeginMainFrame is requested by the next BeginImplFrame after activation.

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

<histogram name="Scheduling.Browser.DrawInterval2" units="microseconds">
  <obsolete>
    Deprecated in 06/2018, M69, due to too much noise in the collected data.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    The time delta between the draw times of back-to-back BeginImplFrames,
    regardless of whether or not they result in a swap.

    The interval is only recorded when every BeginImplFrame wants to draw.

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

<histogram name="Scheduling.Browser.DrawIntervalWithCompositedAnimations2"
    units="microseconds">
  <obsolete>
    Deprecated in 07/2018, M69, due to too much noise in the data.
  </obsolete>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    The time delta between the draw times of back-to-back BeginImplFrames,
    regardless of whether or not they result in a swap, when there is at least
    one composited animation.

    The interval is only recorded when every BeginImplFrame wants to draw.

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

<histogram name="Scheduling.Browser.DrawIntervalWithMainThreadAnimations2"
    units="microseconds">
  <obsolete>
    Deprecated in 07/2018, M69, due to too much noise in the data.
  </obsolete>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    The time delta between the draw times of back-to-back BeginImplFrames of new
    active trees only, regardless of whether or not they result in a swap, when
    there is at least one main thread animation.

    The interval is only recorded when every BeginImplFrame wants to draw.

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

<histogram name="Scheduling.Browser.PendingTreeDuration" units="microseconds">
  <obsolete>
    Deprecated in 07/2018, M69. Since there is no pending tree in Browser, no
    data is ever reported.
  </obsolete>
  <owner>ericrk@chromium.org</owner>
  <summary>
    Time between creating a pending tree and activating that tree. This differs
    from Scheduling.ActivateDuration in that it includes time taken to raster
    the pending tree, not just the time to activate it.

    The interval is recorded each time a pending tree is activated.

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

<histogram name="Scheduling.Browser.PendingTreeRasterDuration"
    units="microseconds">
  <obsolete>
    Deprecated in 07/2018, M69. Since there is no pending tree in Browser, no
    data is ever reported.
  </obsolete>
  <owner>khushalsagar@chromium.org</owner>
  <summary>
    Time between starting raster work on the pending tree and when it is ready
    to activate. Unlike PendingTreeDuration which - includes the time to commit
    to this tree, the raster duration and the time for which the pending tree
    waits before it can be activated - this only measures the time taken to
    rasterize tiles required for activation.

    The interval is recorded each time we are notifed that a pending tree is
    ready for activation.

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

<histogram name="Scheduling.Browser.ReadyToActivateToActivationDuration2.Impl"
    units="microseconds">
  <obsolete>
    Deprecated in 07/2018, M69. No data reported because there is no pending
    tree on impl thread for browser side.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    How long does the pending tree wait after it is ready to be activated and
    before it is activated.

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

<histogram name="Scheduling.Browser.ReadyToActivateToActivationDuration2.Main"
    units="microseconds">
  <owner>brianderson@chromium.org</owner>
  <summary>
    How long does the pending tree wait after it is ready to be activated and
    before it is activated.

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

<histogram name="Scheduling.CommitInterval" units="microseconds">
  <obsolete>
    Replaced by CommitInterval2, due to inefficient bucketing scheme.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    The time delta between the *draw* times of back-to-back BeginMainFrames that
    result in a commit.

    The interval is only recorded when the BeginMainFrames are running and
    committing continuously, where continuously means when another
    BeginMainFrame is requested by the next BeginImplFrame after activation.
  </summary>
</histogram>

<histogram name="Scheduling.CommitToReadyToActivateDuration"
    units="microseconds">
  <obsolete>
    Replaced by CommitToReadyToActivateDuration2, due to inefficient bucketing
    scheme.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    How long it takes for the compositor to rasterize pending tree content after
    a commit before it is ready for activation.
  </summary>
</histogram>

<histogram name="Scheduling.CommitToReadyToActivateDuration2"
    units="microseconds">
  <owner>brianderson@chromium.org</owner>
  <summary>
    How long it takes for the compositor to rasterize pending tree content after
    a commit before it is ready for activation.

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

<histogram name="Scheduling.DrawDuration" units="microseconds">
  <obsolete>
    Replaced by DrawDuration2, due to inefficient bucketing scheme.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>How long it takes the compositor to draw a frame.</summary>
</histogram>

<histogram name="Scheduling.DrawDuration2" units="microseconds">
  <owner>brianderson@chromium.org</owner>
  <summary>
    How long it takes the compositor to draw a frame.

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

<histogram name="Scheduling.DrawInterval" units="microseconds">
  <obsolete>
    Replaced by DrawInterval2, due to inefficient bucketing scheme.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    The time delta between the draw times of back-to-back BeginImplFrames,
    regardless of whether or not they result in a swap.

    The interval is only recorded when every BeginImplFrame wants to draw.
  </summary>
</histogram>

<histogram name="Scheduling.DrawIntervalWithMainThreadCompositableAnimations2"
    units="microseconds">
  <obsolete>
    Deprecated 05/2018 because the experiment described in Issue 754471 is
    completed.
  </obsolete>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    The time delta between the draw times of back-to-back BeginImplFrames of new
    active trees only, regardless of whether or not they result in a swap, when
    there is at least one main thread animation that could be composited but
    not, due to running experiment.

    The interval is only recorded when every BeginImplFrame wants to draw.
  </summary>
</histogram>

<histogram name="Scheduling.ImageInvalidationUpdateDuration"
    units="microseconds">
  <obsolete>
    Deprecated 03/28/2018
  </obsolete>
  <owner>khushalsagar@chromium.org</owner>
  <summary>
    Duration for updating animated images and invalidating layers for images
    invalidated on the sync tree in the compositor. This interval is recorded
    each time the sync tree is updated after a commit or an impl-side
    invalidation.
  </summary>
</histogram>

<histogram name="Scheduling.InvalidationToReadyToActivateDuration2"
    units="microseconds">
  <owner>brianderson@chromium.org</owner>
  <summary>
    How long it takes for the compositor to rasterize pending tree content after
    an impl-side invalidation before it is ready for activation.

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

<histogram name="Scheduling.MainAndImplFrameTimeDelta" units="microseconds">
  <obsolete>
    Replaced by MainAndImplFrameTimeDelta2, due to inefficient bucketing scheme.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    Recorded every time the compositor draws with a new active tree. A value of
    0 indicates the main-side started and finished within the same frame
    interval as the impl-side. Positive values correspond to how old any
    main-side updates are compared to the impl-side updates. If there are no
    mid-frame updates, this metric is a good proxy for how well the main and
    impl threads are synchronized.
  </summary>
</histogram>

<histogram name="Scheduling.MainAndImplFrameTimeDelta2" units="microseconds">
  <owner>brianderson@chromium.org</owner>
  <summary>
    Recorded every time the compositor draws with a new active tree. A value of
    0 indicates the main-side started and finished within the same frame
    interval as the impl-side. Positive values correspond to how old any
    main-side updates are compared to the impl-side updates. If there are no
    mid-frame updates, this metric is a good proxy for how well the main and
    impl threads are synchronized.

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

<histogram name="Scheduling.PrepareTilesDuration" units="microseconds">
  <obsolete>
    Replaced by PrepareTIlesDuration2, due to inefficient bucketing scheme.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    How long it takes the compositor to PreapreTiles, which determines what
    rasterization work to do.
  </summary>
</histogram>

<histogram name="Scheduling.PrepareTilesDuration2" units="microseconds">
  <owner>brianderson@chromium.org</owner>
  <summary>
    How long it takes the compositor to PreapreTiles, which determines what
    rasterization work to do.

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

<histogram name="Scheduling.ReadyToActivateToActivationDuration"
    units="microseconds">
  <obsolete>
    Replaced by ReadyToActivateToActivationDuration2, due to inefficient
    bucketing scheme.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    How long does the pending tree wait after it is ready to be activated and
    before it is activated.

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

<histogram name="Scheduling.Renderer.BeginMainFrameIntervalCritical2"
    units="microseconds">
  <owner>brianderson@chromium.org</owner>
  <summary>
    This is the time delta between back-to-back BeginMainFrames completions on
    the compositor side when the on_critical_path flag is set, regardless of
    whether they abort (have no updates) or commit (have updates).

    The interval is only recorded when the BeginMainFrames are running
    continuously; sepcifically when another BeginMainFrame is requested by the
    next BeginImplFrame after a) an abort or b) activation.

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

<histogram name="Scheduling.Renderer.BeginMainFrameIntervalNotCritical2"
    units="microseconds">
  <owner>brianderson@chromium.org</owner>
  <summary>
    This is the time delta between back-to-back BeginMainFrames completions on
    the compositor side when the on_critical_path flag is not set, regardless of
    whether they abort (have no updates) or commit (have updates).

    The interval is only recorded when the BeginMainFrames are running
    continuously; sepcifically when another BeginMainFrame is requested by the
    next BeginImplFrame after a) an abort or b) activation.

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

<histogram name="Scheduling.Renderer.BeginMainFrameQueueDurationNotCritical2"
    units="microseconds">
  <owner>brianderson@chromium.org</owner>
  <summary>
    How long it takes for the main side to start the BeginMainFrame in response
    to the compositor's SendBeginMainFrame when the on_critical_path flag is not
    set.

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

<histogram name="Scheduling.Renderer.CommitInterval2" units="microseconds">
  <owner>brianderson@chromium.org</owner>
  <summary>
    The time delta between the *draw* times of back-to-back BeginMainFrames that
    result in a commit.

    The interval is only recorded when the BeginMainFrames are running and
    committing continuously, where continuously means when another
    BeginMainFrame is requested by the next BeginImplFrame after activation.

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

<histogram name="Scheduling.Renderer.DrawInterval2" units="microseconds">
  <owner>brianderson@chromium.org</owner>
  <summary>
    The time delta between the draw times of back-to-back BeginImplFrames,
    regardless of whether or not they result in a swap.

    The interval is only recorded when every BeginImplFrame wants to draw.

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

<histogram name="Scheduling.Renderer.DrawIntervalWithCompositedAnimations2"
    units="microseconds">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    The time delta between the draw times of back-to-back BeginImplFrames,
    regardless of whether or not they result in a swap, when there is at least
    one composited animation.

    The interval is only recorded when every BeginImplFrame wants to draw.

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

<histogram name="Scheduling.Renderer.DrawIntervalWithMainThreadAnimations2"
    units="microseconds">
  <owner>paint-dev@chromium.org</owner>
  <summary>
    The time delta between the draw times of back-to-back BeginImplFrames of new
    active trees only, regardless of whether or not they result in a swap, when
    there is at least one main thread animation.

    The interval is only recorded when every BeginImplFrame wants to draw.

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

<histogram name="Scheduling.Renderer.PendingTreeDuration" units="microseconds">
  <owner>ericrk@chromium.org</owner>
  <summary>
    Time between creating a pending tree and activating that tree. This differs
    from Scheduling.ActivateDuration in that it includes time taken to raster
    the pending tree, not just the time to activate it.

    The interval is recorded each time a pending tree is activated.

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

<histogram name="Scheduling.Renderer.PendingTreeRasterDuration"
    units="microseconds">
  <owner>khushalsagar@chromium.org</owner>
  <summary>
    Time between starting raster work on the pending tree and when it is ready
    to activate. Unlike PendingTreeDuration which - includes the time to commit
    to this tree, the raster duration and the time for which the pending tree
    waits before it can be activated - this only measures the time taken to
    rasterize tiles required for activation.

    The interval is recorded each time we are notifed that a pending tree is
    ready for activation.

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

<histogram name="Scheduling.Renderer.ReadyToActivateToActivationDuration2"
    units="microseconds">
  <owner>brianderson@chromium.org</owner>
  <summary>
    How long does the pending tree wait after it is ready to be activated and
    before it is activated.

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

<histogram name="Scheduling.SwapAckWasFast" enum="BooleanWasFast">
  <obsolete>
    Deprecated in 07/2018, M69. The swap ack is always received within 8
    seconds.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>
    True if the swap ack was received within approximately 8 seconds of the
    swap. Although 8 seconds isn't exactly fast, it is a threshold that
    represents a hang or the appearance of a hang.
  </summary>
</histogram>

<histogram name="Scheduling.SwapToAckLatency" units="microseconds">
  <obsolete>
    Replaced by SwapToAckLatency2, due to inefficient bucketing scheme.
  </obsolete>
  <owner>brianderson@chromium.org</owner>
  <summary>How long it takes the swap ack to return after a swap.</summary>
</histogram>

<histogram name="Scheduling.SwapToAckLatency2" units="microseconds">
  <owner>brianderson@chromium.org</owner>
  <summary>
    How long it takes the swap ack to return after a swap.

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

<histogram name="ScreenLocker.AuthenticationFailure" enum="UnlockType">
  <owner>sammiequon@chromium.org</owner>
  <summary>
    What type of authentication was attempted when the user failed to unlock the
    lock screen.
  </summary>
</histogram>

<histogram name="ScreenLocker.AuthenticationFailureTime" units="ms">
  <owner>sammiequon@chromium.org</owner>
  <summary>The time spent for authentication in case of a failure.</summary>
</histogram>

<histogram name="ScreenLocker.AuthenticationSuccess" enum="UnlockType">
  <owner>sammiequon@chromium.org</owner>
  <summary>
    What type of authentication was attempted when the user successfully
    unlocked the lock screen.
  </summary>
</histogram>

<histogram name="ScreenLocker.AuthenticationSuccessTime" units="ms">
  <owner>sammiequon@chromium.org</owner>
  <summary>The time spent for authentication in case of a success.</summary>
</histogram>

<histogram name="ScreenLocker.ScreenLockTime" units="ms">
  <owner>sammiequon@chromium.org</owner>
  <summary>The time spent before the screen locker is ready.</summary>
</histogram>

<histogram name="Sdch3.AdvertisedWithSecureScheme" enum="BooleanHttps">
  <obsolete>
    Experiment complete, histogram gathering code removed.
  </obsolete>
  <owner>ellyjones@chromium.org</owner>
  <summary>
    Whether an SDCH dictionary was advertised over a secure scheme or not. This
    histogram is logged inside SdchManager at advertisement time.
  </summary>
</histogram>

<histogram name="Sdch3.Advertisement_Count">
  <obsolete>
    Deprecated 2017-9.
  </obsolete>
  <summary>
    The number of dictionaries advertised in an HTTP GET transaction that
    supports SDCH.  Note that only non-zero advertisements are logged.
  </summary>
</histogram>

<histogram name="Sdch3.BlacklistReason" enum="SdchProblemCode">
  <obsolete>
    Deprecated 2017-9.
  </obsolete>
  <summary>
    The reason why a blacklist blocking a request from advertising SDCH was
    implemented.  There is one entry in this histogram per inhibited request.
  </summary>
</histogram>

<histogram name="Sdch3.Dictionary size loaded" units="bytes">
  <obsolete>
    Deprecated 2017-9.
  </obsolete>
  <summary>
    Each sample is the byte count for a dictionary that is loaded by Chrome. A
    dictionary is loaded shortly after the first Google query performed in each
    session, and allows future SDCH transactions to be encoded/decoded using
    that dictionary.
  </summary>
</histogram>

<histogram name="Sdch3.DictionaryFate" enum="SdchDictionaryFate">
  <obsolete>
    Deprecated 2017-9.
  </obsolete>
  <summary>
    The fate, both on input and output, of dictionary requests.  There is
    intended to be two entries in this histogram for each Get-Dictionary seen
    (except failed requests are not currently tracked).
  </summary>
</histogram>

<histogram name="Sdch3.DictionaryUseCount">
  <obsolete>
    Deprecated 2017-9.
  </obsolete>
  <summary>
    The number of times a dictionary has been successfully used for decoding,
    recorded at the time it is evicted from the manager.
  </summary>
</histogram>

<histogram name="Sdch3.Experiment2_Decode">
  <obsolete>
    Replaced by Sdch3.Experiment3_Holdback.
  </obsolete>
  <summary>
    Duration in time from when a request was made, until all bytes were
    received.  During the running of an SDCH latency experiment, these packets
    were part of an SDCH encoded transmission made after the link had proven it
    was capable of handling SDCH compression.
  </summary>
</histogram>

<histogram name="Sdch3.Experiment2_Holdback">
  <obsolete>
    Replaced by Sdch3.Experiment3_Holdback.
  </obsolete>
  <summary>
    Duration in time from when a request was made, until all bytes were
    received.  During the running of an SDCH latency experiment, these packets
    were part of a holdback, which precluded SDCH despite the fact that the link
    had proven it was capable of handling SDCH compression.
  </summary>
</histogram>

<histogram name="Sdch3.Experiment3_Decode">
  <obsolete>
    Deprecated 2017-9.
  </obsolete>
  <summary>
    Duration in time from the first byte of a request was received, until all
    bytes were received.  During the running of an SDCH latency experiment,
    these packets were part of an SDCH encoded transmission made after the link
    had proven it was capable of handling SDCH compression.
  </summary>
</histogram>

<histogram name="Sdch3.Experiment3_Holdback">
  <obsolete>
    Deprecated 2017-9.
  </obsolete>
  <summary>
    Duration in time from the first byte of a request was received, until all
    bytes were received.  During the running of an SDCH latency experiment,
    these packets were part of a holdback, which precluded SDCH despite the fact
    that the link had proven it was capable of handling SDCH compression.
  </summary>
</histogram>

<histogram name="Sdch3.Experiment_Decode">
  <obsolete>
    Replaced by Sdch3.Experiment2_Decode.
  </obsolete>
  <summary>
    Duration in time from when a request was made, until all bytes were
    received.  During the running of an SDCH latency experiment, these packets
    were part of an SDCH encoded transmission made after the link had proven it
    was capable of handling SDCH compression.
  </summary>
</histogram>

<histogram name="Sdch3.Experiment_Holdback">
  <obsolete>
    Replaced by Sdch3.Experiment2_Holdback.
  </obsolete>
  <summary>
    Duration in time from when a request was made, until all bytes were
    received.  During the running of an SDCH latency experiment, these packets
    were part of a holdback, which precluded SDCH despite the fact that the link
    had proven it was capable of handling SDCH compression.
  </summary>
</histogram>

<histogram name="Sdch3.Experiment_Holdback_1st_To_2nd_c" units="ms">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    Sampling only transmissions with 5 or more packets, the duration between
    receipt of the 1st **NON**-SDCH encoded packet to receipt of the 2nd packet,
    for processing by the SDCH filter.  Packet count boundaries are calculated
    each time a read from the filter is called, assuming 1430 bytes of data per
    packet since the last boundary calculation.  This *tends* to properly count
    small packets, but can err if small packets come at roughly the same time.
    During the running of an SDCH latency experiment, these packets were part of
    a holdback, which precluded SDCH despite the fact that the link had proven
    it was capable of handling SDCH compression.
  </summary>
</histogram>

<histogram name="Sdch3.Experiment_Holdback_1st_To_Last_a" units="ms">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    The duration between receipt of the 1st holdback (non-SDCH encoded) packet
    and receipt of the last packet.  Only groups that are part of the holdback
    (i.e., could have been sdch encoded) are sampled.
  </summary>
</histogram>

<histogram name="Sdch3.Experiment_Holdback_2nd_To_3rd_c" units="ms">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    Sampling only transmissions with 5 or more packets, the duration between
    receipt of the 2nd **NON**-SDCH encoded packet to receipt of the 3rd packet,
    for processing by the SDCH filter.  Packet count boundaries are calculated
    each time a read from the filter is called, assuming 1430 bytes of data per
    packet since the last boundary calculation.  This *tends* to properly count
    small packets, but can err if small packets come at roughly the same time.
    During the running of an SDCH latency experiment, these packets were part of
    a holdback, which precluded SDCH despite the fact that the link had proven
    it was capable of handling SDCH compression.
  </summary>
</histogram>

<histogram name="Sdch3.Experiment_Holdback_3rd_To_4th_c" units="ms">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    Sampling only transmissions with 5 or more packets, the duration between
    receipt of the 3rd **NON**-SDCH encoded packet to receipt of the 4th packet,
    for processing by the SDCH filter.  Packet count boundaries are calculated
    each time a read from the filter is called, assuming 1430 bytes of data per
    packet since the last boundary calculation.  This *tends* to properly count
    small packets, but can err if small packets come at roughly the same time.
    During the running of an SDCH latency experiment, these packets were part of
    a holdback, which precluded SDCH despite the fact that the link had proven
    it was capable of handling SDCH compression.
  </summary>
</histogram>

<histogram name="Sdch3.Experiment_Holdback_4th_To_5th_c" units="ms">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    Sampling only transmissions with 5 or more packets, the duration between
    receipt of the 4th **NON**-SDCH encoded packet to receipt of the 5th packet,
    for processing by the SDCH filter.  Packet count boundaries are calculated
    each time a read from the filter is called, assuming 1430 bytes of data per
    packet since the last boundary calculation.  This *tends* to properly count
    small packets, but can err if small packets come at roughly the same time.
    During the running of an SDCH latency experiment, these packets were part of
    a holdback, which precluded SDCH despite the fact that the link had proven
    it was capable of handling SDCH compression.
  </summary>
</histogram>

<histogram name="Sdch3.FilterUseBeforeDisabling">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    If SDCH decoding was disabled client side, this records how many URLs were
    processed by the SDCH filter before disabling this feature.  The most common
    number is 1, which happens when there is one home-page tab that contains
    SDCH encoded data, for which there is no dictionary loaded into the Chrome
    process (yet), since Chrome was just restarted.  Large values in this
    histogram are indicative of flaky decompression, that works for a while, and
    then is disabled.  Values of 2 or 3 may appear if a user has more than one
    home page with a query, and restarts there browser.
  </summary>
</histogram>

<histogram name="Sdch3.FirstUseInterval" units="ms">
  <obsolete>
    Deprecated 2017-9.
  </obsolete>
  <summary>
    The amount of time between creation/load of an SDCH dictionary and its first
    use.
  </summary>
</histogram>

<histogram name="Sdch3.Network_Decode_1st_To_2nd_c" units="ms">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    Sampling only transmissions with 5 or more packets, the duration between
    receipt of the 1st SDCH encoded packet and receipt of the 2nd packet, for
    processing by the SDCH filter.  Packet count boundaries are calculated each
    time a read from the filter is called, assuming 1430 bytes of data per
    packet since the last boundary calculation.  This *tends* to properly count
    small packets, but can err if small packets come at roughly the same time.
  </summary>
</histogram>

<histogram name="Sdch3.Network_Decode_1st_To_Last_a" units="ms">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    The duration between receipt of the 1st SDCH encoded packet and receipt of
    the last packet, for processing by the SDCH filter.
  </summary>
</histogram>

<histogram name="Sdch3.Network_Decode_2nd_To_3rd_c" units="ms">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    Sampling only transmissions with 5 or more packets, the duration between
    receipt of the 2nd SDCH encoded packet and receipt of the 3rd packet, for
    processing by the SDCH filter.  Packet count boundaries are calculated each
    time a read from the filter is called, assuming 1430 bytes of data per
    packet since the last boundary calculation.  This *tends* to properly count
    small packets, but can err if small packets come at roughly the same time.
  </summary>
</histogram>

<histogram name="Sdch3.Network_Decode_3rd_To_4th_c" units="ms">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    Sampling only transmissions with 5 or more packets, the duration between
    receipt of the 3rd SDCH encoded packet and receipt of the 4th packet, for
    processing by the SDCH filter. Packet count boundaries are calculated each
    time a read from the filter is called, assuming 1430 bytes of data per
    packet since the last boundary calculation.  This *tends* to properly count
    small packets, but can err if small packets come at roughly the same time.
  </summary>
</histogram>

<histogram name="Sdch3.Network_Decode_4th_To_5th_c" units="ms">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    Sampling only transmissions with 5 or more packets, the duration between
    receipt of the 4th SDCH encoded packet and receipt of the 5th packet, for
    processing by the SDCH filter. Packet count boundaries are calculated each
    time a read from the filter is called, assuming 1430 bytes of data per
    packet since the last boundary calculation.  This *tends* to properly count
    small packets, but can err if small packets come at roughly the same time.
  </summary>
</histogram>

<histogram name="Sdch3.Network_Decode_Bytes_Processed_a" units="bytes">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    (discontinued 7/29/2009, and replaced by
    Sdch3.Network_Decode_Bytes_Processed_b) The number of bytes processed
    (received over the net or from cache) by the SDCH filter chain.
  </summary>
</histogram>

<histogram name="Sdch3.Network_Decode_Bytes_Processed_b" units="bytes">
  <obsolete>
    Deprecated 2017-9.
  </obsolete>
  <summary>
    The number of bytes processed (received over the net or from cache) by the
    SDCH filter chain.
  </summary>
</histogram>

<histogram name="Sdch3.Network_Decode_Bytes_VcdiffOut_a" units="bytes">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    The number of bytes emitted after decoding by the SDCH filter.
  </summary>
</histogram>

<histogram name="Sdch3.Network_Decode_Latency_F_a" units="ms">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    The duration between putting the first byte of a request (such as a GET) on
    the wire, until the last by of compressed SDCH encoded content is received
    (with durations over 10 minutes discarded).  During a planned latency
    experiment, some clients will receive encoded SDCH data, and other will
    received mere gzip'ed data (that passes through the SDCH filter unchanged).
  </summary>
</histogram>

<histogram name="Sdch3.Network_Decode_Packets_b">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    An approximation to the total number of SDCH encoded packets received for
    processing by the SDCH filter. Packet count boundaries are calculated each
    time a read from the filter is called, assuming 1430 bytes of data per
    packet since the last boundary calculation.  This *tends* to properly count
    small packets, but can err if small packets come at roughly the same time.
  </summary>
</histogram>

<histogram name="Sdch3.Network_Decode_Ratio_a" units="bytes">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    The ratio of the number of bytes read from the network (or cache) and fed to
    the filter chain (usually the gunzip filter) vs. the number of bytes emitted
    by the SDCH filter to be rendered.  This is commonly described as the SDCH
    compression ratio.
  </summary>
</histogram>

<histogram name="Sdch3.Network_Pass-through_1st_To_2nd_c" units="ms">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    Sampling only transmissions with 5 or more packets, the duration between
    receipt of the 1st **NON**-SDCH encoded packet to receipt of the 2nd packet,
    for processing by the SDCH filter.  Packet count boundaries are calculated
    each time a read from the filter is called, assuming 1430 bytes of data per
    packet since the last boundary calculation.  This *tends* to properly count
    small packets, but can err if small packets come at roughly the same time.
  </summary>
</histogram>

<histogram name="Sdch3.Network_Pass-through_1st_To_Last_a" units="ms">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    The duration between receipt of the 1st **NON**-SDCH encoded packet to
    receipt of the last packet, for processing by the SDCH filter.
  </summary>
</histogram>

<histogram name="Sdch3.Network_Pass-through_2nd_To_3rd_c" units="ms">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    Sampling only transmissions with 5 or more packets, the duration between
    receipt of the 2nd **NON**-SDCH encoded packet to receipt of the 3rd packet,
    for processing by the SDCH filter.  Packet count boundaries are calculated
    each time a read from the filter is called, assuming 1430 bytes of data per
    packet since the last boundary calculation.  This *tends* to properly count
    small packets, but can err if small packets come at roughly the same time.
  </summary>
</histogram>

<histogram name="Sdch3.Network_Pass-through_3rd_To_4th_c" units="ms">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    Sampling only transmissions with 5 or more packets, the duration between
    receipt of the 3rd **NON**-SDCH encoded packet to receipt of the 4th packet,
    for processing by the SDCH filter.  Packet count boundaries are calculated
    each time a read from the filter is called, assuming 1430 bytes of data per
    packet since the last boundary calculation.  This *tends* to properly count
    small packets, but can err if small packets come at roughly the same time.
  </summary>
</histogram>

<histogram name="Sdch3.Network_Pass-through_4th_To_5th_c" units="ms">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    Sampling only transmissions with 5 or more packets, the duration between
    receipt of the 4th **NON**-SDCH encoded packet to receipt of the 5th packet,
    for processing by the SDCH filter.  Packet count boundaries are calculated
    each time a read from the filter is called, assuming 1430 bytes of data per
    packet since the last boundary calculation.  This *tends* to properly count
    small packets, but can err if small packets come at roughly the same time.
  </summary>
</histogram>

<histogram name="Sdch3.Network_Pass-through_Latency_F_a" units="ms">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    The duration between putting the first byte of a request (such as a GET) on
    the wire, until the last by gzip compressed content is received and
    passed-through unchanged by the SDCH filter (with durations over 10 minutes
    discarded).  During a planned latency experiment, some clients will receive
    encoded SDCH data, and other will received mere gzip'ed data (that passes
    through the SDCH filter unchanged).
  </summary>
</histogram>

<histogram name="Sdch3.Network_Pass-through_Packets_b">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    The total number of **NON**-SDCH encoded packets received for processing by
    the SDCH filter in one URL fetch. Packet count boundaries are calculated
    each time a read from the filter is called, assuming 1430 bytes of data per
    packet since the last boundary calculation.  This *tends* to properly count
    small packets, but can err if small packets come at roughly the same time.
  </summary>
</histogram>

<histogram name="Sdch3.NetworkBytesSavedByCompression" units="bytes">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <owner>ellyjones@chromium.org</owner>
  <summary>
    The absolute difference in bytes between the amount of data entering the
    SDCH filter and the amount of data exiting the SDCH filter.
  </summary>
</histogram>

<histogram name="Sdch3.NetworkBytesSpent" units="bytes">
  <obsolete>
    Deprecated 2017-9.
  </obsolete>
  <owner>ellyjones@chromium.org</owner>
  <summary>
    Absolute sizes, in bytes, of SDCH dictionaries fetched over the network.
    These are logged in SdchOwner when dictionary fetches complete.
  </summary>
</histogram>

<histogram name="Sdch3.PartialBytesIn" units="bytes">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    If/when a ProblemCode INCOMPLETE_SDCH_CONTENT reports that the VCDIFF
    decoder still has internally buffered data that has never been read, this
    histogram reports the number of bytes that were received over the net (or
    from the cache) and fed to the start of the filter chain (usually to the
    gunzip filter).
  </summary>
</histogram>

<histogram name="Sdch3.PartialVcdiffIn" units="bytes">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    If/when a ProblemCode INCOMPLETE_SDCH_CONTENT reports that the VCDIFF
    decoder still has internally buffered data that has never been read, this
    histogram reports the number of bytes that were received over the net (or
    from the cache) and fed to VCDIFF decoder (usually after gunzipping).
  </summary>
</histogram>

<histogram name="Sdch3.PartialVcdiffOut" units="bytes">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    If/when a ProblemCode INCOMPLETE_SDCH_CONTENT reports that the VCDIFF
    decoder still has internally buffered data that has never been read, this
    histogram reports the number of bytes that were output by the VCDIFF decoder
    (and sent toward the renderer).
  </summary>
</histogram>

<histogram name="Sdch3.PersistenceFailureReason"
    enum="SdchPersistenceFailureReason">
  <obsolete>
    Deprecated 2017-9.
  </obsolete>
  <summary>
    Tracks failures that occur when reading in or writing out persisted
    dictionary information.
  </summary>
</histogram>

<histogram name="Sdch3.ProblemCodes_3" enum="SdchProblemCode">
  <obsolete>
    Deprecated 2014-11. Sdch3.ProblemCodes_5 used instead.
  </obsolete>
  <summary>Each sample is the report of a distinct problem code.</summary>
</histogram>

<histogram name="Sdch3.ProblemCodes_4" enum="SdchProblemCode">
  <obsolete>
    Deprecated 2014-11. Sdch3.ProblemCodes_5 used instead.
  </obsolete>
  <summary>Each sample is the report of a distinct problem code.</summary>
</histogram>

<histogram name="Sdch3.ProblemCodes_5" enum="SdchProblemCode">
  <obsolete>
    Deprecated 2017-9.
  </obsolete>
  <summary>Each sample is the report of a distinct problem code.</summary>
</histogram>

<histogram name="Sdch3.ResponseCorruptionDetection.Cached"
    enum="SdchResponseCorruptionDetectionCauses">
  <obsolete>
    Deprecated 2017-9.
  </obsolete>
  <summary>
    Attempted SDCH decoding can fail at the Read() filter processing stage.  In
    some of those cases, the request is corrupted enough that it must be either
    retried or failed completely.  This histogram records the details of why the
    request was considered corrupted, for results returned from the cache.
  </summary>
</histogram>

<histogram name="Sdch3.ResponseCorruptionDetection.Uncached"
    enum="SdchResponseCorruptionDetectionCauses">
  <obsolete>
    Deprecated 2017-9.
  </obsolete>
  <summary>
    Attempted SDCH decoding can fail at the Read() filter processing stage.  In
    some of those cases, the request is corrupted enough that it must be either
    retried or failed completely.  This histogram records the details of why the
    request was considered corrupted for results returned from the network.
  </summary>
</histogram>

<histogram name="Sdch3.TimeWeightedMemoryUse" units="bytes">
  <obsolete>
    Deprecated 2017-9.
  </obsolete>
  <owner>ellyjones@chromium.org</owner>
  <summary>
    Measures the time-weighted memory use of SDCH dictionaries, in bytes. The
    numerator is bytes of dictionary times seconds that dictionary was in
    memory, and the denominator is seconds that the Chrome process lives.
  </summary>
</histogram>

<histogram name="Sdch3.UnflushedBufferSize" units="bytes">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    If/when a ProblemCode UNFLUSHED_CONTENT reports that the SDCH filter is
    still buffering output of the VCDIFF decoder that has never been read, this
    histogram reports the number of bytes that were in that buffer.
  </summary>
</histogram>

<histogram name="Sdch3.UnflushedBytesIn" units="bytes">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    If/when a ProblemCode UNFLUSHED_CONTENT reports that the SDCH filter is
    still buffering output of the VCDIFF decoder  that has never been read, this
    histogram reports the number of bytes that were received over the net (or
    from the cache) and fed to the start of the filter chain (usually to the
    gunzip filter).
  </summary>
</histogram>

<histogram name="Sdch3.UnflushedVcdiffIn" units="bytes">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    If/when a ProblemCode UNFLUSHED_CONTENT reports that the SDCH filter is
    still buffering output of the VCDIFF decoder that has never been read, this
    histogram reports the number of bytes that were received over the net (or
    from the cache) and fed to VCDIFF decoder (usually after gunzipping).
  </summary>
</histogram>

<histogram name="Sdch3.UnflushedVcdiffOut" units="bytes">
  <obsolete>
    Deprecated 2016-11.
  </obsolete>
  <summary>
    If/when a ProblemCode UNFLUSHED_CONTENT reports that the SDCH filter is
    still buffering output of the VCDIFF decoder  that has never been read, this
    histogram reports the number of bytes that were output by the VCDIFF decoder
    (and sent toward the renderer).
  </summary>
</histogram>

<histogram name="Sdch3.UsageInterval" units="ms">
  <obsolete>
    Use Sdch3.UsageInterval2 instead.
  </obsolete>
  <summary>
    The amount of time from the last time an SDCH dictionary was used.  For the
    first use of a dictionary, the maximum time is used.
  </summary>
</histogram>

<histogram name="Sdch3.UsageInterval2" units="ms">
  <obsolete>
    Deprecated 2017-9.
  </obsolete>
  <summary>
    The amount of time from the last time an SDCH dictionary was used.  Not
    recorded on first dictionary use. First use is recorded as
    Sdch3.FirstUseInterval.
  </summary>
</histogram>

<histogram name="Search.AddSearchProvider" enum="AddSearchProvider">
  <obsolete>
    Replaced by Search.AddSearchProvider2, which is also now obsolete.
  </obsolete>
  <owner>estade@chromium.org</owner>
  <summary>
    Measures how much the user modifies their search engines, whether through
    window.external.AddSearchProvider or chrome://settings.
  </summary>
</histogram>

<histogram name="Search.AddSearchProvider2" enum="AddSearchProvider">
  <obsolete>
    AddSearchProvider was removed 05/2016.
  </obsolete>
  <owner>estade@chromium.org</owner>
  <summary>
    Measures usage of window.external.AddSearchProvider and user interaction
    with the resulting confirmation dialog (if any). Only works on Views
    platforms (Win, Linux, CrOS).
  </summary>
</histogram>

<histogram name="Search.ContextualSearch.All.ResultsSeen" enum="Boolean">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records whether the user opened the panel when it was shown. Recorded for
    all gestures for all users when the UX is hidden. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearch.Ranker.FeaturesAvailable"
    enum="Boolean">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Logs that the UX has entered a state where features are available to be
    recorded to Ranker.  A value of true indicates that the available features
    include outcomes, false if they are just features at inference-time. Use to
    correlate with what actually gets recorded in the Search.
    ContextualSearch.Ranker.Recorded histogram. Recorded when a tap gesture is
    recognized that might trigger our UX (for pure features), and when the UX is
    actually shown (for outcomes). Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearch.Ranker.Model.Status"
    enum="RankerModelStatus">
  <owner>hamelphi@google.com</owner>
  <summary>Tracks the outcome of attempts to download a Ranker Model.</summary>
</histogram>

<histogram name="Search.ContextualSearch.Ranker.NotSuppressed.ResultsSeen"
    enum="ContextualSearchResultsSeen">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records whether the user opened the panel when a tap was not suppressed by
    Ranker. Recorded when the UX is hidden. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearch.Ranker.Recorded" enum="Boolean">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Logs that features were recorded to Ranker and whether it was an outcome or
    not. Recorded when the UX is shown or hidden. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearch.Ranker.RecordedNative" enum="Boolean">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Logs that features were recorded to Ranker from native code and whether it
    was an outcome or not. Recorded when the UX is shown or hidden. Implemented
    for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearch.Ranker.Suppressed" enum="Boolean">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records Ranker's prediction about whether a tap should be suppressed or not.
    Recorded when the UX is hidden. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearch.Ranker.Timer.DownloadModel" units="ms">
  <owner>hamelphi@google.com</owner>
  <summary>
    Time taken for the Ranker Model Loader to download its model from the
    configured URL, in ms.
  </summary>
</histogram>

<histogram name="Search.ContextualSearch.Ranker.Timer.ParseModel" units="ms">
  <owner>hamelphi@google.com</owner>
  <summary>
    Time taken for the Ranker Model Loader to parse its model, in ms.
  </summary>
</histogram>

<histogram name="Search.ContextualSearch.Ranker.Timer.ReadModel" units="ms">
  <owner>hamelphi@google.com</owner>
  <summary>
    Time taken for the Ranker Model Loader to read its model from local storage
    (cache), in ms.
  </summary>
</histogram>

<histogram name="Search.ContextualSearch.Ranker.Timer.WriteModel" units="ms">
  <owner>hamelphi@google.com</owner>
  <summary>
    Time taken for the Ranker Model Loader to write its model to local storage,
    in ms.
  </summary>
</histogram>

<histogram name="Search.ContextualSearch.Ranker.WasAbleToPredict"
    enum="Boolean">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records whether Ranker was able to make a prediction about tap suppression.
    Recorded when the UX is triggered by tap. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearch.Ranker.WouldSuppress.ResultsSeen"
    enum="ContextualSearchResultsSeen">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records whether the user opened the panel when a tap would be suppressed by
    Ranker if suppression was enforced. Recorded when the UX is hidden.
    Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearch.Tap.ResultsSeen" enum="Boolean">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records whether the user opened the panel when it was shown in response to a
    tap gesture, for all users. Recorded when the UX is hidden. Implemented for
    Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchAllCapsResultsSeen"
    enum="ContextualSearchResultsSeen">
  <obsolete>
    Deprecated 05/2017 because it's no longer ever used.
  </obsolete>
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether search results were seen during a contextual search where the
    selected text consisted of all capital letters. Only logged when contextual
    search is triggered due to a tap. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchBarNoOverlap.PeekDuration" units="ms">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The duration that the panel was peeking before being opened when triggered
    by a tap that was in a part of the screen where it overlaps the Bar. Logged
    when the panel is closed after being opened. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchBarOverlap"
    enum="ContextualSearchTapSuppression">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether a Tap was suppressed because the Bar overlapped the selection area.
    Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchBarOverlap.PeekDuration" units="ms">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The duration that the panel was peeking before being opened when triggered
    by a tap at the bottom of the screen where it overlaps the Bar.  Logged when
    the panel is closed after being opened. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchBarOverlapSeen"
    enum="ContextualSearchBarOverlapSeen">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether the Bar overlapped the selection area and whether the results were
    seen. Recorded when the UX is hidden. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchBasePageProtocol"
    enum="ContextualSearchBasePageProtocol">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The protocol of the base page, logged at the time that any Search Term
    Resolution Response is recieved.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchBlacklistSeen"
    enum="ContextualSearchBlacklistSeen">
  <obsolete>
    Discontinued on 5/2017 due to experiment being completed.
  </obsolete>
  <owner>donnd@chromium.org</owner>
  <owner>pedrosimonetti@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The details (blacklist reason and whether the results were seen) of every
    search term issued by a tap gesture. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchContextualCardsIntegration.DataShown"
    enum="Boolean">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether Contextual Cards data was shown in the Contextual Search Bar.
    Contextual Cards data is included with the search term resolution response.
    Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchContextualCardsIntegration.ResultsSeen"
    enum="ContextualSearchResultsSeen">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether search results were seen as part of a Contextual Search when
    Contextual Cards data was shown. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchDurationBetweenTriggerAndScrollNotSeen"
    units="ms">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The duration between the panel being triggered and the panel being dismissed
    due to a scroll when search results were not seen. Implemented for Android.
    Prior to M57 this was recorded on tap and longpress; on M57+ it is only
    recorded on tap.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchDurationBetweenTriggerAndScrollSeen"
    units="ms">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The duration between the panel being triggered and the panel being dismissed
    due to a scroll when search results were seen. Implemented for Android.
    Prior to M57 this was recorded on tap and longpress; on M57+ it is only
    recorded on tap.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchDurationNonPrefetched" units="ms">
  <obsolete>
    Discontinued on 2/2017 Due to data being buggy and not useful.
  </obsolete>
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The time from opening the panel until the SERP is fully loaded. Applies only
    to non-prefetched requests. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchDurationPrefetched" units="ms">
  <obsolete>
    Discontinued on 2/2017 Due to data being buggy and not useful.
  </obsolete>
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The time from opening the panel until the SERP is fully loaded. Applies only
    to prefetched requests. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchDurationSeen" units="ms">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The time from initiating to ending a contextual search, when results were
    seen as part of the search. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchDurationUnseen" units="ms">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The time from initiating to ending a contextual search, when results were
    not seen as part of the search and the search did not end with the beginning
    of another contextual search. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchDurationUnseenChained" units="ms">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The time from initiating to ending a contextual search, when results were
    not seen as part of the search and the search ended with the beginning of
    another contextual search. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchEnterClosed"
    enum="ContextualSearchEnterClosedStateChange">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The details (previous state and reason) of the first entry into the closed
    panel state within a contextual search. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchEnterExpanded"
    enum="ContextualSearchEnterExpandedStateChange">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The details (previous state and reason) of the first entry into the expanded
    panel state within a contextual search. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchEnterMaximized"
    enum="ContextualSearchEnterMaximizedStateChange">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The details (previous state and reason) of the first entry into the
    maximized panel state within a contextual search. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchEnterPeeked"
    enum="ContextualSearchEnterPeekedStateChange">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The details (previous state and reason) of the first entry into the peeked
    panel state within a contextual search. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchEntitySeen"
    enum="ContextualSearchResultsSeen">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether search results were seen as part of a Contextual Search when a tap
    was on a word that we think is an entity. Recorded when Contextual Search is
    dismissed. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchExitClosed"
    enum="ContextualSearchExitClosedStateChange">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The details (destination state and reason) of the first exit out of the
    closed panel state within a contextual search. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchExitExpanded"
    enum="ContextualSearchExitExpandedStateChange">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The details (destination state and reason) of the first exit out of the
    expanded panel state within a contextual search. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchExitMaximized"
    enum="ContextualSearchExitMaximizedStateChange">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The details (destination state and reason) of the first exit out of the
    maximized panel state within a contextual search. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchExitPeeked"
    enum="ContextualSearchExitPeekedStateChange">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The details (destination state and reason) of the first exit out of the
    peeked panel state within a contextual search. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchFallbackSearchRequestStatus"
    enum="ContextualSearchSearchRequestStatus">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The status of the Contextual Search fallback Search request. Implemented for
    Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchFirstRunFlowOutcome"
    enum="ContextualSearchPreferenceState">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The state of the Contextual Search Preference after the first run flow.
    Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchFirstRunPanelSeen"
    enum="ContextualSearchFirstRunPanelSeen">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether the first run flow's panel was seen as part of a contextual search.
    Only logged when the user triggered the first run flow yet exited the search
    still in the undecided preference state. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchIconSpriteAnimated"
    enum="ContextualSearchIconSpriteAnimated">
  <obsolete>
    Contextual Search icon sprite removed 04/2017.
  </obsolete>
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether search results were seen, whether the search provider icon sprite
    was animated when the panel first appeared, and the triggering gesture. If
    animation is disabled due to a field trial, we still log
    &quot;animated&quot; if the animation would have run otherwise.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchIPHShown" enum="Boolean">
  <owner>donnd@chromium.org</owner>
  <owner>mahmoudi@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The number of times the Contextual Search panel is opened, categorized by
    whether In-Product Help for Contextual Search was shown before. Logged when
    the panel is opened. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchLiteralSearchDuration" units="ms">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The time from starting a literal search until the results in the SERP start
    to become viewable. Applies only to prefetched requests. Implemented for
    Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchLowPrioritySearchRequestStatus"
    enum="ContextualSearchSearchRequestStatus">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The status of the Contextual Search low priority Search request. Implemented
    for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchMandatoryPromoOutcomeByGesture"
    enum="ContextualSearchOutcomeByGesture">
  <owner>donnd@chromium.org</owner>
  <owner>pedrosimonetti@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The outcome of the mandatory Promo broken down by original triggering
    gesture. Logged for each view of the promo. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchNormalPrioritySearchRequestStatus"
    enum="ContextualSearchSearchRequestStatus">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The status of the Contextual Search normal priority Search request.
    Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchPanelOpenDuration" units="ms">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The time from opening the panel beyond peek until the panel is closed.
    Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchPanelOpenedIPHShown" enum="Boolean">
  <owner>donnd@chromium.org</owner>
  <owner>mahmoudi@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The number of times the Contextual Search panel is opened, categorized by
    whether In-Product Help for opening the panel was shown before. Logged when
    the panel is opened. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchPeekPromoCount" units="count">
  <obsolete>
    Removed because the feature no longer exists.
  </obsolete>
  <owner>donnd@chromium.org</owner>
  <owner>pedrosimonetti@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The number of times the Peek Promo was seen. This histogram will be emitted
    when the Panel closes. The panel is always visible when the Peek Promo is
    shown, so this histogram will always be emitted after a Promo is shown
    (except in the case of a crash). This histogram does not care whether the
    Panel was opened.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchPeekPromoCountUntilOpened"
    units="count">
  <obsolete>
    Removed because the feature no longer exists.
  </obsolete>
  <owner>donnd@chromium.org</owner>
  <owner>pedrosimonetti@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The number of times the Peek Promo was seen until the Panel was opened. This
    histogram will be emitted when the Panel closes, if the Panel was opened
    with the Peek Promo visible. If the Panel is not opened, nothing will be
    emitted.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchPeekPromoOutcome"
    enum="ContextualSearchPeekPromoOutcome">
  <obsolete>
    Removed because the feature no longer exists.
  </obsolete>
  <owner>donnd@chromium.org</owner>
  <owner>pedrosimonetti@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The outcome of the Contextual Search Peek Promo for those who have seen the
    promo and for those who would have seen the promo if it was enabled, so we
    can compare the effect of the promo on users opening the Panel. This
    histogram will be emitted when the Panel closes, if the conditions to
    display the Peek Promo are met, regardless of whether the Peek Promo was
    actually visible (the Promo is controlled by Finch) and regardless of
    whether the Panel was opened.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchPreferenceState"
    enum="ContextualSearchPreferenceState">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The state of the Contextual Search Preference. Can be logged multiple times.
    Used to determine the population size (user view). Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchPreferenceStateChange"
    enum="ContextualSearchPreferenceState">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The Contextual Search preference state after a modification from the
    preference menu. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchPrefetchSummary"
    enum="ContextualSearchPrefetchSummary">
  <obsolete>
    Discontinued on 2/2017 Due to data not being useful.
  </obsolete>
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    A summary histogram for prefetch timings, indicating fully preloaded, etc.
    Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchPrevious28DayCtr" units="%">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The CTR from the previous 28 day period for each user, expressed as a
    percentage. Logged the first time the panel is closed in each new week.
    Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchPrevious28DayImpressions" units="views">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The number of user impressions of the Bar from the previous 28 day period.
    Logged the first time the panel is closed in each new week. Implemented for
    Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchPreviousWeekCtr" units="%">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The CTR from the previous week for each user, expressed as a percentage.
    Logged the first time the panel is closed in each new week. Implemented for
    Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchPreviousWeekImpressions" units="views">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The number of user impressions of the Bar from the previous week. Logged the
    first time the panel is closed in each new week. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchPromoOpenCount" units="opens">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The total count of times that the bar with the promo has been opened. Once
    the user decides, this counter is no longer updated.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchPromoOutcomeByGesture"
    enum="ContextualSearchOutcomeByGesture">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The outcome of the promo broken down by original triggering gesture. Logged
    for each view of the promo.  Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchPromoSeenByGesture"
    enum="ContextualSearchSeenByGesture">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether the promo was seen, broken down by original triggering gesture.
    Logged each time the promo was activated.  Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchPromoTapsBeforeFirstOpen" units="taps">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The historic number of taps that showed a peeking bar with the opt-out promo
    before the first time the user opened the panel.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchPromoTapsForNeverOpened" units="taps">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The historic number of taps that showed a peeking bar with the opt-out promo
    for users who have never opened the panel. This count may be limited by the
    Finch config param promo_on_limited_taps.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchPromoTapsRemaining" units="taps">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The number of remaining taps that can trigger the promo for this user.
    Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchQuickActions.Category"
    enum="ContextualSearchQuickActionCategory">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The category of quick actions shown in the Contextual Search bar. Recorded
    when the quick action is set. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchQuickActions.Clicked"
    enum="BooleanClicked">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether a quick action in the Contextual Search bar was clicked. Recorded
    when Contextual Search is dismissed. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchQuickActions.IntentResolution"
    enum="ContextualSearchQuickActionIntentResolution">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether a Contextual Search quick action intent resolved to zero, one, or
    many apps. Recorded when the quick action intent URI is resolved.
    Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchQuickActions.ResultsSeen"
    enum="ContextualSearchResultsSeen">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether search results were seen as part of a Contextual Search when a quick
    action was shown. Recorded when Contextual Search is dismissed. Implemented
    for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchQuickActions.Shown" enum="BooleanShown">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether a quick action was shown in the Contextual Search bar. Recorded when
    the quick action is set. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchQuickAnswerSeen"
    enum="ContextualSearchQuickAnswerSeen">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether a Quick Answer was activated, considered an answer, and seen.
    Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchRecentScrollNotSeen" units="ms">
  <obsolete>
    Deprecated 02/2017.
  </obsolete>
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The duration since a recent scroll when the results were not seen. Recorded
    when the UX is hidden. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchRecentScrollSeen" units="ms">
  <obsolete>
    Deprecated 02/2017.
  </obsolete>
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The duration since a recent scroll when the results were seen. Recorded when
    the UX is hidden. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchRecentScrollSuppression"
    enum="ContextualSearchTapSuppression">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether showing the Tap to Search UX in response to a Tap was suppressed by
    a recent scroll. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchResolutionDuration" units="ms">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The time from starting a resolving search until the Search Term Resolves.
    Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchResolvedSearchDuration" units="ms">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The time from starting a resolving search until the results in the SERP
    start to become viewable. Applies only to prefetched requests. Implemented
    for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchResolvedTermWords"
    enum="ContextualSearchResolvedTermWords">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether the search term was single or multi-word, logged at the time that
    any Search Term Resolution Response is recieved.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchResultsSeen"
    enum="ContextualSearchResultsSeen">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether search results were seen as part of a contextual search. Implemented
    for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchResultsSeenByGesture"
    enum="ContextualSearchSeenByGesture">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether search results were seen, broken down by original triggering
    gesture. Only includes users that have enabled. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchResultsSeenSelectionWasUrl"
    enum="ContextualSearchSeenByGesture">
  <obsolete>
    Deprecated 05/2017 because it's no longer ever used.
  </obsolete>
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether search results were seen (Contextual Search panel was opened) when
    the selection was part of a URL, broken down by original triggering gesture.
    Includes both users that have enabled Contextual Search and users that are
    undecided (have neither enabled or disabled the feature). Implemented for
    Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchScreenTopSuppressed"
    enum="ContextualSearchTapSuppression">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether Taps near the top of the screen was suppressed. Implemented for
    Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchSecondTapMlOverrideSeen" enum="Boolean">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether results were seen for a second tap that was allowed to override ML
    Tap Suppression. Recorded when the UX is hidden. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchSecondTapSeen"
    enum="ContextualSearchResultsSeen">
  <obsolete>
    Removed 11/2017 because the data is no longer valuable.
  </obsolete>
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether results were seen for a Tap during suppression when Tap Suppression
    is enabled. Recorded when the UX is hidden. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchSelectionLengthNotSeen" units="chars">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The length of the triggering selection when search results were not seen.
    Only logged when contextual search is triggered due to a tap. Implemented
    for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchSelectionLengthSeen" units="chars">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The length of the triggering selection when search results were seen. Only
    logged when contextual search is triggered due to a tap. Implemented for
    Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchSelectionLengthSuppression"
    enum="ContextualSearchTapSuppression">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether a Tap was suppressed because the selection length was less than the
    minimum selection length. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchSelectionValid"
    enum="ContextualSearchSelectionValid">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether a Contextual Search selection was valid. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchSerpLoadedOnClose"
    enum="ContextualSearchLoaded">
  <obsolete>
    Removed 02/2017 because the data is no longer valuable.
  </obsolete>
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether the SERP was fully loaded when an opened panel was closed.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchShouldTranslate"
    enum="ContextualSearchShouldTranslate">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Emitted when a translate one-box should be forced, to indicate if it
    actually was forced or simply would have been forced if not disabled by a
    flag in the variations_service.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchStartedWithCapitalResultsSeen"
    enum="ContextualSearchResultsSeen">
  <obsolete>
    Removed 05/2017 because the data is no longer needed.
  </obsolete>
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether search results were seen during a contextual search where the
    selected text started with a capital letter but was not all capital letters.
    Only logged when contextual search is triggered due to a tap. Implemented
    for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchTapDurationNotSeen" units="ms">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The duration of a tap that triggered a Contextual Search when the user does
    not open the panel. Implemented for Android.  Logged when the panel closes
    after being triggered by a tap.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchTapDurationSeen" units="ms">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The duration of a tap that triggered a Contextual Search when the user does
    open the panel. Implemented for Android.  Logged when the panel closes after
    being triggered by a tap and subsequently opened.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchTapIPHShown" enum="Boolean">
  <owner>donnd@chromium.org</owner>
  <owner>mahmoudi@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The number of times the Contextual Search is triggered by tapping,
    categorized by whether In-Product Help for tapping was shown before. Logged
    when Contextual Search is triggered by tapping. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchTapLongDurationSeen"
    enum="ContextualSearchResultsSeen">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether results were seen for a Tap that was of long duration. Recorded when
    the UX is hidden. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchTapLongWordSeen"
    enum="ContextualSearchResultsSeen">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether results were seen for a Tap that was on a word considered long.
    Recorded when the UX is hidden. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchTapOnWordMiddleSeen"
    enum="ContextualSearchResultsSeen">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether results were seen for a Tap that was on the middle part of a word.
    Recorded when the UX is hidden. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchTapShortDurationSeen"
    enum="ContextualSearchResultsSeen">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether results were seen for a Tap that was of short duration. Recorded
    when the UX is hidden. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchTapShortWordSeen"
    enum="ContextualSearchResultsSeen">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether results were seen for a Tap that was on a word considered short.
    Recorded when the UX is hidden. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchTapsSinceOpenDecided" units="taps">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The count of taps that showed a peeking bar without the opt-out promo since
    this user has last opened the panel.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchTapsSinceOpenUndecided" units="taps">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The count of taps that showed a peeking bar with the opt-out promo since
    this user has last opened the panel.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchTapSuppressionSeen"
    enum="ContextualSearchResultsSeen">
  <obsolete>
    Removed 11/2017 because the data is no longer valuable.
  </obsolete>
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether results were seen for a Tap before suppression when Tap Suppression
    is enabled. Recorded when the UX is hidden. Implemented for Android.
  </summary>
</histogram>

<histogram
    name="Search.ContextualSearchTapSuppressionSeen.AnyHeuristicSatisfied"
    enum="ContextualSearchSuppressionResultsSeen">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Whether results were seen for a Tap and whether any suppression heuristic
    was satisifed. Recorded when the UX is still shown (suppression not enabled,
    only logged). Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchTimeToSearch" units="ms">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The time between tapping on a word and performing a search. Implemented for
    Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchTopLocationNotSeen" units="dps">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The DPs count histogram for Taps that were not seen. Implemented for
    Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchTopLocationSeen" units="dps">
  <owner>donnd@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    The DPs count histogram for Taps that were seen. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.ContextualSearchTranslateCondition" enum="Boolean">
  <owner>donnd@chromium.org</owner>
  <owner>mahmoudi@chromium.org</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
        For each contextual search that is triggered by tap, records whether the
    translation conditions are met. Implemented for Android.
  </summary>
</histogram>

<histogram name="Search.DefaultSearchChangeOrigin"
    enum="DefaultSearchChangeOrigin">
  <owner>mathp@chromium.org</owner>
  <summary>
    The origin/cause of a change to the default search provider.
  </summary>
</histogram>

<histogram name="Search.DefaultSearchProvider" enum="OmniboxSearchEngine">
  <obsolete>
    Made obsolete around Chrome 32.  Use Search.DefaultSearchProviderType
    instead.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The id of the default search engine that is loaded after Chrome startup. See
    src/chrome/browser/search_engines/prepopulate_engines.json for more info.
  </summary>
</histogram>

<histogram name="Search.DefaultSearchProviderType"
    enum="OmniboxSearchEngineType">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The type of the default search engine that is loaded when a profile is
    opened or after a profile reset.  Note that at least one profile is opened
    on startup. Due to an error, there was a period from roughly May 9 2014 to
    May 23 2014 during which this was not being logged.
  </summary>
</histogram>

<histogram name="Search.DesktopSearch.RedirectionInfobarCloseAction"
    enum="DesktopSearchRedirectionInfobarCloseAction">
  <obsolete>
    Deprecated 05/2016 because desktop searches are no longer opened in the
    default browser.
  </obsolete>
  <owner>fdoray@chromium.org</owner>
  <summary>
    The action performed by the user to close the infobar explaining that a
    desktop search has been redirected to the default search engine.
  </summary>
</histogram>

<histogram name="Search.DesktopSearch.URLAction" enum="DesktopSearchURLAction">
  <obsolete>
    Deprecated 05/2016 because desktop searches are no longer opened in the
    default browser.
  </obsolete>
  <owner>fdoray@chromium.org</owner>
  <summary>
    The action performed when a desktop search URL is passed to the browser
    through the command line.
  </summary>
</histogram>

<histogram name="Search.GsaAccountChangeNotificationSource"
    enum="GsaAccountChangeNotificationSource">
  <owner>lizeb@chromium.org</owner>
  <summary>
    On Android, when GSA tells Chrome about an account change, what is the
    notification mechanism used, which is either the service connection, or a
    broadcast. Recorded once per account change.
  </summary>
</histogram>

<histogram name="Search.GsaBroadcastsAccountChanges"
    enum="BooleanAccountChange">
  <owner>lizeb@chromium.org</owner>
  <summary>
    On Android, whether GSA tells Chrome about account changes through the
    service or through a broadcast. This is reported at most once per Chrome
    startup.
  </summary>
</histogram>

<histogram name="Search.GsaProcessMemoryPss" units="KB">
  <obsolete>
    Deprecated 06/2017, no longer recorded.
  </obsolete>
  <owner>lizeb@chromium.org</owner>
  <summary>
    On Android, when Chrome connects to a bound service exposed by GSA, the
    memory footprint of the GSA process in KB, as measured by PSS. Reported at
    most once per Chrome startup.
  </summary>
</histogram>

<histogram name="Search.HistoryReport.DeltaFile.LastSeqNo" units="count"
    expires_after="M71">
  <owner>wychen@chromium.org</owner>
  <owner>yusufo@chromium.org</owner>
  <summary>
    The last sequential number in the delta file for Icing. This is measured on
    cold start.
  </summary>
</histogram>

<histogram name="Search.HistoryReport.DeltaFile.LevelDBEntries" units="entries"
    expires_after="2019-06-01">
  <owner>wychen@chromium.org</owner>
  <owner>yusufo@chromium.org</owner>
  <summary>
    The number of entries in the delta file level DB for Icing. This is measured
    on cold start.
  </summary>
</histogram>

<histogram name="Search.HistoryReport.UsageReportsBuffer.LevelDBEntries"
    units="entries" expires_after="2019-06-01">
  <owner>wychen@chromium.org</owner>
  <owner>yusufo@chromium.org</owner>
  <summary>
    The number of entries in the usage report level DB for Icing. This is
    measured on cold start.
  </summary>
</histogram>

<histogram name="Search.IcingContextReportingStatus"
    enum="IcingContextReportingStatus">
  <owner>joaodasilva@chromium.org</owner>
  <summary>
    Records the reason why a context report to Icing failed, every time Chrome
    attemps to record the current context (tab switching, navigations, etc).
    Also records reasons why context reporting might be disabled. Recorded on
    Android only.
  </summary>
</histogram>

<histogram name="Search.MigratedPrefToDictionaryValue" enum="BooleanHit">
  <obsolete>
    Deprecated after migrator is deleted in 12/2016.
  </obsolete>
  <owner>caitkp@chromium.org</owner>
  <summary>
    The number of times that a user-selected DSE was migrated from separate
    String/List/..Value preferences to the new single DictionaryValue used in
    M36.
  </summary>
</histogram>

<histogram name="Search.PartnershipSearchPerformed" enum="SearchEntryPoint">
  <owner>yusufo@chromium.org</owner>
  <summary>
    The entry point used for all searches performed under partnership after the
    Android search engine promo dialog was shown. This is a dialog prompting the
    user to pick a default search engine. This metric is collected for every
    search query performed.
  </summary>
</histogram>

<histogram name="Search.SearchEngineListedInPromoDialog"
    enum="OmniboxSearchEngineType">
<!-- Name completed by histogram_suffixes name="SearchEnginePromoOrdering" and name="SearchEnginePromoDeviceType" -->

  <owner>yusufo@chromium.org</owner>
  <summary>
    The search engines listed in the options for search engine promo. This is an
    Android specific dialog prompting the user to pick a default search engine.
    The dialog was shown on a device that had Chrome before it was first
    introduced.
  </summary>
</histogram>

<histogram name="Search.SearchEngineSelectionInPromoDialog"
    enum="OmniboxSearchEngineType">
  <owner>yusufo@chromium.org</owner>
  <summary>
    The search engine selected by the user from the search engine promo. This is
    an Android specific dialog prompting the user to pick a default search
    engine. The dialog was shown on a device that had Chrome before it was first
    introduced.
  </summary>
</histogram>

<histogram name="Search.SearchWidgetUseAndDeviceInfo"
    enum="SearchWidgetUseInfo">
  <owner>yusufo@chromium.org</owner>
  <summary>
    The current state for search widget use and whether the device is a
    partnership device related with the Android Search Widget. Collected on
    every cold start.
  </summary>
</histogram>

<histogram name="SearchAnswer.AnswerVisibleTime" units="ms">
  <owner>vadimt@chromium.org</owner>
  <summary>Time between showing and hiding the answer card.</summary>
</histogram>

<histogram name="SearchAnswer.LoadingTime" units="ms">
  <owner>vadimt@chromium.org</owner>
  <summary>
    Time between sending an answer server request and the end of loading of the
    answer card. Failed requests and requests not returning an answer are not
    counted.
  </summary>
</histogram>

<histogram name="SearchAnswer.NavigationTime" units="ms">
  <owner>vadimt@chromium.org</owner>
  <summary>
    Time between sending an answer server request and successful finish of
    navigation. Failed requests and requests not returning an answer are not
    counted.
  </summary>
</histogram>

<histogram name="SearchAnswer.RequestResult" enum="SearchAnswerRequestResult">
  <owner>vadimt@chromium.org</owner>
  <summary>Result of a answer server request.</summary>
</histogram>

<histogram name="SearchAnswer.ResizeAfterLoadTime" units="ms">
  <owner>vadimt@chromium.org</owner>
  <summary>
    Time between successfully loading an answer card request and updating its
    preferred size. There might be no or more than one size update per card
    load. Size updates that happen before the card finishes loading are ignored
    since they are not visible.
  </summary>
</histogram>

<histogram
    name="Security.CertificateTransparency.MainFrameNavigationCompliance"
    enum="CTComplianceStatus">
  <owner>estark@chromium.org</owner>
  <summary>
    The compliance of each main frame navigation's connection with the
    Certificate Transparency policy. Recorded whenever a main-frame,
    non-same-page navigation is committed. Connections can be compliant, or they
    can be non-compliant for one of several reasons (not enough Signed
    Certificate Timestamps [SCTs], not diverse enough SCTs, or the build was old
    so CT compliance wasn't checked).
  </summary>
</histogram>

<histogram
    name="Security.HTTPBad.NavigationStartedAfterUserWarnedAboutSensitiveInput"
    units="ms">
  <owner>estark@chromium.org</owner>
  <summary>
    Records the time from when a page was put into a warning state because of a
    sensitive input on an HTTP page until a navigation starts. Recorded at most
    once per main-frame navigation. The Finch trial 'mark-non-secure-as'
    controls whether the user sees an omnibox warning for this state, or just a
    console warning.
  </summary>
</histogram>

<histogram name="Security.HTTPBad.UserWarnedAboutSensitiveInput"
    enum="BooleanShown">
  <obsolete>
    Deprecated on 2016-11-10 because this is replaced by two separate metrics:
    Security.HTTPBad.UserWarnedAboutSensitiveInput.CreditCard and
    Security.HTTPBad.UserWarnedAboutSensitiveInput.Password.
  </obsolete>
  <owner>elawrence@chromium.org</owner>
  <owner>estark@chromium.org</owner>
  <summary>
    Whether a &quot;Not Secure&quot; warning was shown in the omnibox because a
    security-sensitive form field was rendered in a non-secure context. Logged
    at most once per main-frame navigation.
  </summary>
</histogram>

<histogram name="Security.HTTPBad.UserWarnedAboutSensitiveInput.CreditCard"
    enum="BooleanShown">
  <owner>elawrence@chromium.org</owner>
  <owner>estark@chromium.org</owner>
  <summary>
    Whether a &quot;Not Secure&quot; warning was shown in the omnibox because a
    credit card form field was rendered in a non-secure context. Logged at most
    once per main-frame navigation.
  </summary>
</histogram>

<histogram name="Security.HTTPBad.UserWarnedAboutSensitiveInput.Password"
    enum="BooleanShown">
  <owner>elawrence@chromium.org</owner>
  <owner>estark@chromium.org</owner>
  <summary>
    Whether a &quot;Not Secure&quot; warning was shown in the omnibox because a
    password form field was rendered in a non-secure context. Logged at most
    once per main-frame navigation.
  </summary>
</histogram>

<histogram
    name="Security.HTTPBad.WebContentsDestroyedAfterUserWarnedAboutSensitiveInput"
    units="ms">
  <owner>estark@chromium.org</owner>
  <summary>
    Records the time delta between when a page was put into a warning state
    because of a sensitive input on an HTTP page and when the WebContents was
    destroyed. Recorded at most once per main-frame navigation, and it is not
    recorded if the user starts a navigation before the WebContents is
    destroyed. The Finch trial 'mark-non-secure-as' controls whether the user
    sees an omnibox warning for this state, or just a console warning.
  </summary>
</histogram>

<histogram base="true" name="Security.PageEndReason" enum="PageEndReason">
  <owner>cthomp@chromium.org</owner>
  <summary>
    Records the reason the page visit ended (e.g., reload, tab closed, new
    navigation, etc.) for page loads that committed.
  </summary>
</histogram>

<histogram name="Security.PageInfo.Action.HttpsUrl.Dangerous"
    enum="WebsiteSettingsAction">
  <owner>estark@chromium.org</owner>
  <summary>
    Tracks Page Info bubble actions that take place on an HTTPS URL that has
    been marked dangerous or not secure (such as for malware or broken HTTPS).
  </summary>
</histogram>

<histogram name="Security.PageInfo.Action.HttpsUrl.Downgraded"
    enum="WebsiteSettingsAction">
  <owner>estark@chromium.org</owner>
  <summary>
    Tracks Page Info bubble actions that take place on a valid HTTPS URL that
    has a security issue (e.g. mixed content).
  </summary>
</histogram>

<histogram name="Security.PageInfo.Action.HttpsUrl.Valid"
    enum="WebsiteSettingsAction">
  <obsolete>
    Deprecated 2018-01-31, split into ValidEV and ValidNonEV.
  </obsolete>
  <owner>estark@chromium.org</owner>
  <summary>
    Tracks Page Info bubble actions that take place on a valid HTTPS URL with no
    security issues (e.g. no mixed content).
  </summary>
</histogram>

<histogram name="Security.PageInfo.Action.HttpsUrl.ValidEV"
    enum="WebsiteSettingsAction">
  <owner>estark@chromium.org</owner>
  <summary>
    Tracks Page Info bubble actions that take place on a valid HTTPS URL with no
    security issues (e.g. no mixed content) and an Extended Validation
    Certificate.
  </summary>
</histogram>

<histogram name="Security.PageInfo.Action.HttpsUrl.ValidNonEV"
    enum="WebsiteSettingsAction">
  <owner>estark@chromium.org</owner>
  <summary>
    Tracks Page Info bubble actions that take place on a valid HTTPS URL with no
    security issues (e.g. no mixed content), but no Extended Validation
    Certificate.
  </summary>
</histogram>

<histogram name="Security.PageInfo.Action.HttpUrl.Dangerous"
    enum="WebsiteSettingsAction">
  <owner>estark@chromium.org</owner>
  <summary>
    Tracks Page Info bubble actions that take place on an HTTP URL that has been
    marked dangerous (such as for malware).
  </summary>
</histogram>

<histogram name="Security.PageInfo.Action.HttpUrl.Neutral"
    enum="WebsiteSettingsAction">
  <owner>estark@chromium.org</owner>
  <summary>
    Tracks Page Info bubble actions that take place on an HTTP URL that does not
    have an omnibox security indicator warning associated with it.
  </summary>
</histogram>

<histogram name="Security.PageInfo.Action.HttpUrl.Warning"
    enum="WebsiteSettingsAction">
  <owner>estark@chromium.org</owner>
  <summary>
    Tracks Page Info bubble actions that take place on an HTTP URL that has been
    given a &quot;Not secure&quot; warning in the omnibox.
  </summary>
</histogram>

<histogram name="Security.PageInfo.TimeOpen">
  <owner>cthomp@chromium.org</owner>
  <summary>
    Records the amount of time the Page Info bubble is open before the user
    closes it or takes an action which closes it.
  </summary>
</histogram>

<histogram name="Security.PageInfo.TimeOpen.Action">
  <owner>cthomp@chromium.org</owner>
  <summary>
    Records the amount of time the Page Info bubble is open before the user
    closes it, for cases where the user has performed an action inside it.
  </summary>
</histogram>

<histogram name="Security.PageInfo.TimeOpen.NoAction">
  <owner>cthomp@chromium.org</owner>
  <summary>
    Records the amount of time the Page Info bubble is open before the user
    closes it, for cases where the user performed no action inside it.
  </summary>
</histogram>

<histogram name="Security.SecurityLevel.CryptographicScheme"
    enum="SecurityLevel">
  <owner>estark@chromium.org</owner>
  <summary>
    Records the security level of a page with a cryptographic scheme (e.g.
    https). This histogram is recorded once at navigation commit time, and can
    be called again for the same document if the security level changes
    dynamically. Note that the security level can change very quickly after
    commit time, for example if the page includes mixed content on load (which
    can downgrade the security level). This histogram should be analyzed with
    care because each recorded security level is not necessarily user-visible:
    in particular, a page may commit as a secure level (SECURE, EV_SECURE,
    SECURE_WITH_POLICY_INSTALLED_CERT) but get quickly downgraded to NONE if it
    shows mixed content on load. Therefore the histogram values should be
    regarded as an upper-bound on what the user actually sees for these security
    levels.
  </summary>
</histogram>

<histogram name="Security.SecurityLevel.DownloadStarted" enum="SecurityLevel">
  <owner>cthomp@chromium.org</owner>
  <summary>
    Records the security level of the page that initiated a download (rather
    than the security state of the connection to the download URL itself). The
    recorded security level is the level of the page the download was initiated
    from, not that of the download URL. This histogram is not recorded for
    downloads that are initiated in a new tab or window, as the security level
    of the initiating page cannot be tracked.
  </summary>
</histogram>

<histogram name="Security.SecurityLevel.FormSubmission" enum="SecurityLevel">
  <owner>carlosil@chromium.org</owner>
  <owner>cthomp@chromium.org</owner>
  <summary>
    Records the security level of a page when submitting a form. This histogram
    is recorded whenever a form submission navigation begins. The recorded
    security level is the level of the page the form was submitted from, not the
    one that the form targets.
  </summary>
</histogram>

<histogram name="Security.SecurityLevel.NoncryptographicScheme"
    enum="SecurityLevel">
  <owner>estark@chromium.org</owner>
  <summary>
    Records the security level of a page with a non-cryptographic scheme (e.g.
    http). This histogram is recorded once at navigation commit time, and can be
    called again for the same document if the security level changes
    dynamically. Note that the security level can change very quickly after
    commit time, for example if the page includes a password field on load
    (which can downgrade the security level). This histogram should be analyzed
    with care because each recorded security level is not necessarily
    user-visible: in particular, a page may commit as NONE or HTTP_SHOW_WARNING
    but get quickly downgraded to HTTP_SHOW_WARNING or DANGEROUS, depending on
    field trial configuration, if it shows a password field on load. Therefore
    the histogram values should be regarded as an upper-bound on what the user
    actually sees for the NONE and HTTP_SHOW_WARNING levels.
  </summary>
</histogram>

<histogram name="Security.SecurityLevel.OnCommit" enum="SecurityLevel">
  <owner>cthomp@chromium.org</owner>
  <summary>
    Records the security level of a page at the time the navigation commits.
    Note that the security level of a page can change after commit time, so this
    histogram should often be compared against
    Security.SecurityLevel.OnComplete.
  </summary>
</histogram>

<histogram name="Security.SecurityLevel.OnComplete" enum="SecurityLevel">
  <owner>cthomp@chromium.org</owner>
  <summary>
    Records the security level of a page at the end of the page visit (i.e.,
    navigating away from the page, reloading the page, clicking a link, closing
    the tab, etc.). Note that this security level can be different than the
    initial security level of the page, so this histogram should often be
    compared against Security.SecuritLevel.OnCommit.
  </summary>
</histogram>

<histogram base="true" name="Security.SiteEngagement">
  <owner>cthomp@chromium.org</owner>
  <summary>
    The final Site Engagement score (0 to 100) of a URL during a visit to a
    page. Recorded when the user closes the page or initiates a new navigation.
  </summary>
</histogram>

<histogram base="true" name="Security.SiteEngagementDelta">
  <owner>cthomp@chromium.org</owner>
  <summary>
    The change in Site Engagement score for a site between the page navigation
    committing and the user closing the page or navigating away. Recorded when
    the user closes the page or initiates a new navigation.

    The delta is logged as a linear count in [0, 100]. To use, convert back to
    the original difference (in the range [-100,100]) by multiplying by 2 and
    subtracting 100.
  </summary>
</histogram>

<histogram base="true" name="Security.TimeOnPage">
  <owner>cthomp@chromium.org</owner>
  <summary>
    Records the time spent on the page (the time that the page was in the
    foreground from the start of the navigation to the page visit completing due
    to a new navigation or the tab being closed). This aggregates all foreground
    time over the entire visit (multiple times in the foreground are added
    together).
  </summary>
</histogram>

<histogram name="Security.TreatInsecureOriginAsSecure">
  <owner>mkwst@chromium.org</owner>
  <summary>
    Records the number of origins which will be treated as secure based on their
    presence in the '--unsafely-treat-insecure-origin-as-secure' command-line
    flag.
  </summary>
</histogram>

<histogram name="Security.XFrameOptions" enum="XFrameOptions">
  <owner>mkwst@chromium.org</owner>
  <owner>arthursonzogni@chromium.org</owner>
  <summary>
    Record uses of the X-Frame-Options header when a page is loaded as an
    iframe.
  </summary>
</histogram>

<histogram name="SequencedWorkerPool.ShutdownDelayTime" units="ms">
  <obsolete>
    Deprecated 02/2018. SequencedWorkerPool has been removed.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    How long it takes to wait for tasks that block shutdown to complete.
  </summary>
</histogram>

<histogram name="SequencedWorkerPool.TaskCount">
  <obsolete>
    Histogram wasn't even reported anymore when ownership was taken in 11/2015.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    How many pending tasks there are on each request for work from a worker
    thread.
  </summary>
</histogram>

<histogram name="SequencedWorkerPool.UnrunnableTaskCount">
  <obsolete>
    Histogram wasn't even reported anymore when ownership was taken in 11/2015.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>How many tasks we skip over to find the next runnable task.</summary>
</histogram>

<histogram name="ServicesCustomization.LoadResult"
    enum="ServicesCustomizationLoadResult">
  <owner>alemate@chromium.org</owner>
  <summary>
    Records result of fetching and parsing OEM customization manifest. See
    ServicesCustomizationDocument class for more info. Used only on Chrome OS.
  </summary>
</histogram>

<histogram name="ServiceWorker.AbortPaymentEvent.Time" units="ms">
  <owner>jinho.bang@samsung.com</owner>
  <summary>
    The time taken between dispatching an AbortPaymentEvent to a Service Worker
    and receiving a message that it finished handling the event. Includes the
    time for the waitUntil() promise to settle.
  </summary>
</histogram>

<histogram name="ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time"
    units="ms">
  <owner>horo@chromium.org</owner>
  <summary>
    The time taken for the browser to find and possibly start an active worker
    to dispatch a FetchEvent for a main frame resource request. BEWARE: This
    metric includes the time taken for redirects. It starts when the URLRequest
    is created, and ends when the worker is ready. For context, a FetchEvent can
    only be dispatched to an ACTIVATED worker that is running (it has been
    successfully started). The measurements starts when the browser process
    receives the request. The browser then finds the worker appropriate for this
    request (if there is none, this metric is not recorded). If that worker is
    already started, the browser process can send the request to it, so the
    measurement ends quickly. Otherwise the browser process has to start the
    worker and the measurement ends when the worker is successfully started (we
    do not include in the time it takes for the worker to become ACTIVATED). The
    metric is not recorded in the following situations: 1) The worker was in
    state INSTALLED or ACTIVATING, and the browser had to wait for it to become
    ACTIVATED. This is to avoid including the time to execute the activate event
    handlers in the worker's script. 2) The worker was started for the fetch AND
    DevTools was attached during startup. This is intended to avoid including
    the time for debugging. 3) The request is for New Tab Page. This is because
    it tends to dominate the stats and makes the results largely skewed.

    It will be removed after NetS13nSW ships. https://crbug.com/715640
  </summary>
</histogram>

<histogram name="ServiceWorker.ActivatedWorkerPreparationForMainFrame.Type"
    enum="ServiceWorkerPreparationType">
  <owner>falken@chromium.org</owner>
  <summary>
    The type of preparation needed for the browser to find and possibly start an
    active worker to dispatch a FetchEvent for a main frame resource request.
    See details at ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time.
    The suffixed histograms for .Time record the time required for each type.

    This is recorded regardless of whether NetS13nSW (https://crbug.com/715640)
    is enabled or disabled.
  </summary>
</histogram>

<histogram name="ServiceWorker.ActivateEvent.Time" units="ms">
  <owner>shimazu@chromium.org</owner>
  <summary>
    Execution time of ServiceWorkerGlobalScope.onactivate. Includes the time for
    waitUntil() promise to settle.
  </summary>
</histogram>

<histogram name="ServiceWorker.ActivateEventExecutionTime" units="ms">
  <obsolete>
    Deprecated 2015-05 in favor of ServiceWorker.ActivateEvent.Time.
  </obsolete>
  <owner>shimazu@chromium.org</owner>
  <summary>
    Execution time of ServiceWorkerGlobalScope.onactivate. Includes the time for
    waitUntil() promise to settle.
  </summary>
</histogram>

<histogram name="ServiceWorker.ActivateEventStatus"
    enum="ServiceWorkerStatusCode">
  <owner>falken@chromium.org</owner>
  <summary>
    The result of dispatching the activate event to the worker. This is recorded
    to both ServiceWorker.ActivateEventStatus and whichever of
    ServiceWorker.ActivateEventStatus_InShutdown
    ServiceWorker.ActivateEventStatus_NotInShutdown is appropriate. (InShutdown
    means the context was null or ServiceWorkerProcessManger::Shutdown was
    called.)
  </summary>
</histogram>

<histogram name="ServiceWorker.BackgroundFetchAbortEvent.Time" units="ms">
  <owner>peter@chromium.org</owner>
  <summary>
    The time taken between dispatching a BackgroundFetchAbortEvent to a Service
    Worker and receiving a message that it finished handling the event. Includes
    the time for the waitUntil() promise to settle.
  </summary>
</histogram>

<histogram name="ServiceWorker.BackgroundFetchClickEvent.Time" units="ms">
  <owner>peter@chromium.org</owner>
  <summary>
    The time taken between dispatching a BackgroundFetchClickEvent to a Service
    Worker and receiving a message that it finished handling the event. Includes
    the time for the waitUntil() promise to settle.
  </summary>
</histogram>

<histogram name="ServiceWorker.BackgroundFetchedEvent.Time" units="ms">
  <owner>peter@chromium.org</owner>
  <summary>
    The time taken between dispatching a BackgroundFetchedEvent to a Service
    Worker and receiving a message that it finished handling the event. Includes
    the time for the waitUntil() promise to settle.
  </summary>
</histogram>

<histogram name="ServiceWorker.BackgroundFetchFailEvent.Time" units="ms">
  <owner>peter@chromium.org</owner>
  <summary>
    The time taken between dispatching a BackgroundFetchFailEvent to a Service
    Worker and receiving a message that it finished handling the event. Includes
    the time for the waitUntil() promise to settle.
  </summary>
</histogram>

<histogram name="ServiceWorker.BackgroundSyncEvent.Time" units="ms">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The time taken between dispatching a SyncEvent to a Service Worker and
    receiving a message that it finished handling the event. Includes the time
    for the waitUntil() promise to settle.
  </summary>
</histogram>

<histogram name="ServiceWorker.CacheStorageInstalledScript.CachedMetadataSize"
    units="bytes">
  <owner>horo@chromium.org</owner>
  <summary>
    The length of cached metadata of scripts which are stored to the
    CacheStorage by the installing service worker.
  </summary>
</histogram>

<histogram
    name="ServiceWorker.CacheStorageInstalledScript.CachedMetadataTotalSize"
    units="bytes">
  <owner>horo@chromium.org</owner>
  <summary>
    The total length of cached metadata of scripts which are stored to the
    CacheStorage by the installing service worker.
  </summary>
</histogram>

<histogram name="ServiceWorker.CacheStorageInstalledScript.Count" units="count">
  <owner>horo@chromium.org</owner>
  <summary>
    The counts of scripts which are stored to the CacheStorage by the installing
    service worker.
  </summary>
</histogram>

<histogram name="ServiceWorker.CacheStorageInstalledScript.ScriptSize"
    units="bytes">
  <owner>horo@chromium.org</owner>
  <summary>
    The length of scripts which are stored to the CacheStorage by the installing
    service worker.
  </summary>
</histogram>

<histogram name="ServiceWorker.CacheStorageInstalledScript.ScriptTotalSize"
    units="bytes">
  <owner>horo@chromium.org</owner>
  <summary>
    The total length of scripts which are stored to the CacheStorage by the
    installing service worker.
  </summary>
</histogram>

<histogram name="ServiceWorker.CanMakePaymentEvent.Time" units="ms">
  <owner>jinho.bang@samsung.com</owner>
  <summary>
    The time taken between dispatching an CanMakePaymentEvent to a Service
    Worker and receiving a message that it finished handling the event. Includes
    the time for the waitUntil() promise to settle.
  </summary>
</histogram>

<histogram name="ServiceWorker.ContextRequestHandlerStatus"
    enum="ServiceWorkerContextRequestHandlerStatus">
  <owner>falken@chromium.org</owner>
  <summary>
    The result of ServiceWorkerContextRequestHandler handling a request for a
    service worker script. The histogram is suffixed to distinguish new vs
    installed workers and main vs imported scripts.

    Note that since M64, this no longer includes most script loads because those
    are handled by ServiceWorkerInstalledScriptsManager, which doesn't record
    this histogram.

    It will be removed after NetS13nSW ships. https://crbug.com/715640
  </summary>
</histogram>

<histogram name="ServiceWorker.CookieChangeEvent.Time" units="ms">
  <owner>pwnall@chromium.org</owner>
  <summary>
    The time taken between dispatching a CookieChangeEvent to a Service Worker
    and receiving a message that it finished handling the event. Includes the
    time for the waitUntil() promise to settle.
  </summary>
</histogram>

<histogram name="ServiceWorker.Database.DestroyDatabaseResult"
    enum="ServiceWorkerDatabaseStatus">
  <owner>nhiroki@chromium.org</owner>
  <summary>
    Records result of destroy database operations in ServiceWorkerDatabase.
  </summary>
</histogram>

<histogram name="ServiceWorker.Database.OpenResult"
    enum="ServiceWorkerDatabaseStatus">
  <owner>nhiroki@chromium.org</owner>
  <summary>
    Records result of opening a database for ServiceWorkerDatabase.
  </summary>
</histogram>

<histogram name="ServiceWorker.Database.ReadResult"
    enum="ServiceWorkerDatabaseStatus">
  <owner>nhiroki@chromium.org</owner>
  <summary>Records result of read operations in ServiceWorkerDatabase.</summary>
</histogram>

<histogram name="ServiceWorker.Database.WriteResult"
    enum="ServiceWorkerDatabaseStatus">
  <owner>nhiroki@chromium.org</owner>
  <summary>
    Records result of write operations in ServiceWorkerDatabase.
  </summary>
</histogram>

<histogram name="ServiceWorker.DiskCache.InitResult">
  <owner>nhiroki@chromium.org</owner>
  <summary>
    Records result of opening a disk cache for ServiceWorkerDiskCache.
  </summary>
</histogram>

<histogram name="ServiceWorker.DiskCache.ReadResponseResult"
    enum="ServiceWorkerReadResponseResult">
  <owner>nhiroki@chromium.org</owner>
  <summary>
    Records result of reading response from ServiceWorkerDiskCache.
  </summary>
</histogram>

<histogram name="ServiceWorker.DiskCache.WriteResponseResult"
    enum="ServiceWorkerWriteResponseResult">
  <owner>bashi@chromium.org</owner>
  <owner>nhiroki@chromium.org</owner>
  <summary>
    Records result of writing response into ServiceWorkerDiskCache. This is not
    recorded when response has no body. Note that this is recorded on every
    write operation, and can there can be multiple write operations for the same
    response if it is large enough.

    This is recorded regardless of whether NetS13nSW (https://crbug.com/715640)
    is enabled or disabled.
  </summary>
</histogram>

<histogram name="ServiceWorker.DiskCacheMigrator.MigrationResult"
    enum="ServiceWorkerDiskCacheMigrationStatus">
  <obsolete>
    Deprecated because the migrator was removed as of 12/2015.
  </obsolete>
  <owner>nhiroki@chromium.org</owner>
  <summary>
    Records result of ServiceWorkerDiskCacheMigrator::Start that migrates
    resources in BlockFile backend to Simple backend.
  </summary>
</histogram>

<histogram name="ServiceWorker.DiskCacheMigrator.MigrationTime" units="ms">
  <obsolete>
    Deprecated because the migrator was removed as of 12/2015.
  </obsolete>
  <owner>nhiroki@chromium.org</owner>
  <summary>
    Execution time of ServiceWorkerDiskCache migration from BlockFile to Simple.
  </summary>
</histogram>

<histogram name="ServiceWorker.DiskCacheMigrator.NumberOfMigratedResources"
    units="count">
  <obsolete>
    Deprecated because the migrator was removed as of 12/2015.
  </obsolete>
  <owner>nhiroki@chromium.org</owner>
  <summary>
    The counts of resources migrated by ServiceWorkerDiskCacheMigrator. This
    includes the main script and imported scripts.
  </summary>
</histogram>

<histogram name="ServiceWorker.EmbeddedWorkerInstanceClient.StartWorker"
    enum="ServiceWorkerRendererStartWorker">
  <owner>panicker@chromium.org</owner>
  <summary>
    Records when StartWorker is received on the renderer. This is used to
    surface discrepancy between StartWorker being sent on the browser side and
    not getting received by renderer.
    EmbeddedWorkerInstance.Start.TimeToSendStartWorker should be used as a
    baseline. TODO(panicker): This should be removed after investigation of
    crbug/790903, potentially in M68.
  </summary>
</histogram>

<histogram name="ServiceWorker.EventDispatchingDelay" units="ms">
  <owner>horo@chromium.org</owner>
  <summary>
    The time taken between sending an event IPC from the browser process to a
    Service Worker and executing the event handler in the Service Worker.

    For subresource fetch events (_FETCH_SUB_RESOURCE suffix) When NetS13nSW
    (https://crbug.com/715640) is enabled, this is the time between sending a
    DispatchFetchEvent message from the main thread and executing the event
    handler in the Service Worker.
  </summary>
</histogram>

<histogram name="ServiceWorker.EventHandledRatioType.Fetch"
    enum="ServiceWorkerEventHandleRatioType">
  <obsolete>
    Removed July 2018 (M69)
  </obsolete>
  <owner>kinuko@chromium.org</owner>
  <summary>
    Records the proportion of (non foreign) fetch events that are handled
    compared to the number of events that are fired for a ServiceWorker.
    Recorded each time the ServiceWorker is stopped when at least one event was
    fired.
  </summary>
</histogram>

<histogram name="ServiceWorker.EventHandledRatioType.ForeignFetch"
    enum="ServiceWorkerEventHandleRatioType">
  <obsolete>
    Removed July 2018 (M69)
  </obsolete>
  <owner>mek@chromium.org</owner>
  <summary>
    Records the proportion of foreign fetch events that are handled compared to
    the number of events that are fired for a ServiceWorker.  Recorded each time
    the ServiceWorker is stopped when at least one event was fired.
  </summary>
</histogram>

<histogram name="ServiceWorker.ExtendableMessageEvent.Time" units="ms">
  <owner>nhiroki@chromium.org</owner>
  <summary>
    The time taken between dispatching an ExtendableMessageEvent to a Service
    Worker and receiving a message that it finished handling the event. Includes
    the time for the waitUntil() promise to settle.
  </summary>
</histogram>

<histogram name="ServiceWorker.ExternalRequest.Time" units="ms">
  <owner>lazyboy@chromium.org</owner>
  <summary>
    The duration an external request spent to keep a service worker alive.
    Currently, extension service workers use external requests to keep the
    worker alive during the time the worker requests an extension API.
  </summary>
</histogram>

<histogram name="ServiceWorker.FetchEvent.Fallback.Time" units="ms">
  <owner>jeremyarcher@chromium.org</owner>
  <summary>
    The time taken between dispatching a FetchEvent to a Service Worker and
    receiving a fallback-to-network reply.
  </summary>
</histogram>

<histogram name="ServiceWorker.FetchEvent.HasResponse.Time" units="ms">
  <owner>jeremyarcher@chromium.org</owner>
  <summary>
    The time taken between dispatching a FetchEvent to a Service Worker and
    receiving a response. Includes the time for the respondWith() promise to
    settle.
  </summary>
</histogram>

<histogram name="ServiceWorker.FetchEvent.MainResource.Status"
    enum="ServiceWorkerStatusCode">
  <owner>falken@chromium.org</owner>
  <summary>
    The result of dispatching a fetch event to a Service Worker for a main
    resource request (i.e., a request for a navigation or a shared worker).

    This is recorded regardless of whether NetS13nSW (https://crbug.com/715640)
    is enabled or disabled.
  </summary>
</histogram>

<histogram name="ServiceWorker.FetchEvent.Subresource.Status"
    enum="ServiceWorkerStatusCode">
  <owner>falken@chromium.org</owner>
  <summary>
    The result of dispatching a fetch event to a Service Worker for a
    subresource request (i.e., not a navigation or a shared worker request).

    This is recorded regardless of whether NetS13nSW (https://crbug.com/715640)
    is enabled or disabled.
  </summary>
</histogram>

<histogram name="ServiceWorker.FetchEvent.Time" units="ms">
  <obsolete>
    Deprecated on 2015-07-13; please use
    ServiceWorker.FetchEvent.HasResponse.Time or
    ServiceWorker.FetchEvent.Fallback.Time.
  </obsolete>
  <owner>shimazu@chromium.org</owner>
  <summary>
    Execution time of ServiceWorkerGlobalScope.onfetch. Includes the time for
    the respondWith() promise to settle.
  </summary>
</histogram>

<histogram name="ServiceWorker.FetchEvent.WaitUntil.Time" units="ms">
  <owner>shimazu@chromium.org</owner>
  <summary>
    The time taken between dispatching a FetchEvent to a Service Worker and
    finishing the FetchEvent. Includes the time for the waitUntil() promise to
    settle. If there is no waitUntil promise, this will be almost the same with
    HasResponse.Time or Fallback.Time.
  </summary>
</histogram>

<histogram name="ServiceWorker.FetchEventExecutionTime" units="ms">
  <obsolete>
    Deprecated 2015-05 in favor of ServiceWorker.FetchEvent.Time.
  </obsolete>
  <owner>shimazu@chromium.org</owner>
  <summary>
    Execution time of ServiceWorkerGlobalScope.onfetch. Includes the time for
    the respondWith() promise to settle.
  </summary>
</histogram>

<histogram name="ServiceWorker.ForeignFetch.OriginCount">
  <obsolete>
    Deprecated April 2018.
  </obsolete>
  <owner>mek@chromium.org</owner>
  <summary>
    The number of origins a particular service worker with foreign fetch
    registrations will intercept fetches from. A value of zero indicates that
    the foreign fetch service worker intercepts requests from any origin.
    Recorded at the end of a successful install event, if the service worker
    registered for foreign fetch. A service worker that registers for foreign
    fetch must always intercept fetches from at least one origin or intercept
    fetches from all origins.
  </summary>
</histogram>

<histogram name="ServiceWorker.ForeignFetch.ScopeCount">
  <obsolete>
    Deprecated April 2018.
  </obsolete>
  <owner>mek@chromium.org</owner>
  <summary>
    The number of foreign fetch scopes a particular service worker registered
    for. Recorded at the end of every successful install event. A value of zero
    indicates that the service worker did not register for foreign fetch.
  </summary>
</histogram>

<histogram name="ServiceWorker.ForeignFetchEvent.Fallback.Time" units="ms">
  <owner>mek@chromium.org</owner>
  <summary>
    The time taken between dispatching a ForeignFetchEvent to a Service Worker
    and receiving a fallback-to-network reply. Includes the time for the
    waitUntil() promise to settle, if any.
  </summary>
</histogram>

<histogram name="ServiceWorker.ForeignFetchEvent.HasResponse.Time" units="ms">
  <owner>mek@chromium.org</owner>
  <summary>
    The time taken between dispatching a ForeignFetchEvent to a Service Worker
    and receiving a response. Includes the time for the respondWith() promise to
    settle.
  </summary>
</histogram>

<histogram name="ServiceWorker.ForeignFetchEvent.WaitUntil.Time" units="ms">
  <owner>shimazu@chromium.org</owner>
  <summary>
    The time taken between dispatching a ForeignFetchEvent to a Service Worker
    and finishing the ForeignFetch. Includes the time for the waitUntil()
    promise to settle. If there is no waitUntil promise, this will be almost the
    same with HasResponse.Time or Fallback.Time.
  </summary>
</histogram>

<histogram name="ServiceWorker.InstallEvent.Time" units="ms">
  <owner>shimazu@chromium.org</owner>
  <summary>
    The time taken between dispatching an InstallEvent to a Service Worker and
    receiving a message that it finished handling the event. Includes the time
    for the waitUntil() promise to settle.
  </summary>
</histogram>

<histogram name="ServiceWorker.InstallEventExecutionTime" units="ms">
  <obsolete>
    Deprecated 2015-05 in favor of ServiceWorker.InstallEvent.Time.
  </obsolete>
  <owner>shimazu@chromium.org</owner>
  <summary>
    Execution time of ServiceWorkerGlobalScope.oninstall. Includes the time for
    the waitUntil() promise to settle.
  </summary>
</histogram>

<histogram name="ServiceWorker.InstallEventStatus"
    enum="ServiceWorkerStatusCode">
  <owner>falken@chromium.org</owner>
  <summary>The result of dispatching the install event to the worker.</summary>
</histogram>

<histogram name="ServiceWorker.MainFramePageLoad" enum="ServiceWorkerSite">
  <owner>horo@chromium.org</owner>
  <summary>
    Counts main frame page loads controlled by a service worker.
  </summary>
</histogram>

<histogram name="ServiceWorker.MainFramePageLoad.CoreTransition"
    enum="CorePageTransition">
  <obsolete>
    Deprecated 2018-01 in favor of
    PageLoad.Clients.ServiceWorker.PageTransition.
  </obsolete>
  <owner>horo@chromium.org</owner>
  <summary>
    The transition type for main frame page loads controlled by a service
    worker.
  </summary>
</histogram>

<histogram name="ServiceWorker.MainFramePageLoad.RedirectChainLength"
    units="urls">
  <obsolete>
    Deprecated 2018-01.
  </obsolete>
  <owner>horo@chromium.org</owner>
  <summary>
    Total length of the server redirects during main frame page loads controlled
    by a service worker.
  </summary>
</histogram>

<histogram name="ServiceWorker.MessageEvent.Time" units="ms">
  <obsolete>
    Deprecated 2016-04 in favor of ServiceWorker.ExtendableMessageEvent.Time.
  </obsolete>
  <owner>shimazu@chromium.org</owner>
  <summary>Execution time of ServiceWorkerGlobalScope.onmessage.</summary>
</histogram>

<histogram name="ServiceWorker.MessageEventExecutionTime" units="ms">
  <obsolete>
    Deprecated 2015-05 in favor of ServiceWorker.MessageEvent.Time.
  </obsolete>
  <owner>shimazu@chromium.org</owner>
  <summary>Execution time of ServiceWorkerGlobalScope.onmessage.</summary>
</histogram>

<histogram name="ServiceWorker.NavigationHintPrecision" enum="BooleanEnabled">
  <obsolete>
    This experiment was turned down, see https://crbug.com/616502.
  </obsolete>
  <owner>horo@chromium.org</owner>
  <summary>
    The precision of the speculative launch of Service Workers for navigation
    hints. Recorded when the worker is stopped. If there was no main/sub frame
    fetch event fired on the worker, this value is false. This means that the
    speculative launch wasn't helpful.
  </summary>
</histogram>

<histogram name="ServiceWorker.NavigationPreload.ConcurrentTime" units="ms">
  <obsolete>
    Deprecated June 2017 in favor of ServiceWorker.NavPreload.ConcurrentTime,
    see https://crbug.com/728035.
  </obsolete>
  <owner>falken@chromium.org</owner>
  <summary>
    The duration of time when both (1) a service worker is being found and
    possibly started up, (2) the navigation preload request is in-flight. The
    measurement ends once either the worker is prepared, or the navigation
    preload response is received (OnReceiveResponse() is called). This is a
    rough estimate of the performance win of using navigation preload, ignoring
    concurrency overhead. This histogram is recorded when a navigation preload
    response is succesfully forwarded to the service worker's fetch event, with
    the same restrictions as for
    ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time. The sample is
    additionally recorded to the appropriate suffixed histograms.
  </summary>
</histogram>

<histogram name="ServiceWorker.NavigationPreload.FinishedBeforeStartWorker"
    enum="BooleanNavPreloadFinishedFirst">
  <obsolete>
    Deprecated June 2017 in favor of ServiceWorker.NavPreload.FinishedFirst, see
    https://crbug.com/728035.
  </obsolete>
  <owner>falken@chromium.org</owner>
  <summary>
    Whether the navigation preload response arrived before the activated and
    running service worker was prepared. This histogram is recorded when a
    navigation preload response is succesfully forwarded to the service worker's
    fetch event, with the same restrictions as for
    ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time. The sample is
    additionally recorded to the appropriate suffixed histograms.
  </summary>
</histogram>

<histogram name="ServiceWorker.NavigationPreload.HeaderSize" units="bytes">
  <owner>horo@chromium.org</owner>
  <summary>
    The size of Service-Worker-Navigation-Preload header when the navigation
    preload request is to be sent. The default value of the header is
    &quot;true&quot;, so the default size is 4.
  </summary>
</histogram>

<histogram name="ServiceWorker.NavigationPreload.NavPreloadAfterSWStart"
    units="ms">
  <obsolete>
    Deprecated June 2017. No replacement exists. See https://crbug.com/728035.
  </obsolete>
  <owner>falken@chromium.org</owner>
  <summary>
    This is recorded in the case where the activated and running service worker
    was prepared before the navigation preload response arrived. It is the
    remaining time it took to receive the response after the worker was
    prepared.

    This histogram is recorded when a navigation preload response is succesfully
    forwarded to the service worker's fetch event (for the case mentioned
    above), with the same restrictions as for
    ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time. The sample is
    additionally recorded to the appropriate suffixed histograms.
  </summary>
</histogram>

<histogram name="ServiceWorker.NavigationPreload.ResponseTime" units="ms">
  <obsolete>
    Deprecated June 2017 in favor of ServiceWorker.NavPreload.ResponseTime. See
    https://crbug.com/728035.
  </obsolete>
  <owner>falken@chromium.org</owner>
  <summary>
    The time taken for the navigation preload response to start, i.e., when
    OnReceiveResponse() is called. This histogram is recorded when a navigation
    preload response is successfully forwarded to the service worker's fetch
    event, with the same restrictions as for
    ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time. The sample is
    additionally recorded to the appropriate suffixed histograms.
  </summary>
</histogram>

<histogram name="ServiceWorker.NavigationPreload.SWStartAfterNavPreload"
    units="ms">
  <obsolete>
    Deprecated June 2017 in favor of ServiceWorker.NavPreload.WorkerWaitTime.
    See https://crbug.com/728035.
  </obsolete>
  <owner>falken@chromium.org</owner>
  <summary>
    This is recorded in the case where the navigation preload response arrived
    before the activated and running service worker was prepared. It is the
    remaining time it took to prepare the worker after the response arrived.

    This histogram is recorded when a navigation preload response is succesfully
    forwarded to the service worker's fetch event (for the case mentioned
    above), with the same restrictions as for
    ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time. The sample is
    additionally recorded to the appropriate suffixed histograms.
  </summary>
</histogram>

<histogram name="ServiceWorker.NavPreload.ConcurrentTime" units="ms">
  <owner>falken@chromium.org</owner>
  <summary>
    The duration of time when both (1) a service worker is being found and
    possibly started up, (2) the navigation preload request is in-flight. The
    measurement ends once either the worker is prepared, or the navigation
    preload response is received (OnReceiveResponse() is called). This is a
    rough estimate of the performance win of using navigation preload, ignoring
    concurrency overhead. This histogram is recorded when a navigation preload
    response is succesfully forwarded to the service worker's fetch event, with
    the same restrictions enumerated 1) through 3) for
    ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time. The sample is
    only recorded to the appropriate suffixed histograms.

    It will be removed after NetS13nSW ships. https://crbug.com/715640
  </summary>
</histogram>

<histogram name="ServiceWorker.NavPreload.FinishedFirst"
    enum="BooleanNavPreloadFinishedFirst">
  <owner>falken@chromium.org</owner>
  <summary>
    Whether the navigation preload response arrived before the activated and
    running service worker was prepared. This histogram is recorded when a
    navigation preload response is succesfully forwarded to the service worker's
    fetch event, with the same restrictions numbered 1) through 3) for
    ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time. The sample is
    only recorded to the appropriate suffixed histograms.

    It will be removed after NetS13nSW ships. https://crbug.com/715640
  </summary>
</histogram>

<histogram name="ServiceWorker.NavPreload.ResponseTime" units="ms">
  <owner>falken@chromium.org</owner>
  <summary>
    The time taken for the navigation preload response to start, i.e., when
    OnReceiveResponse() is called. This histogram is recorded when a navigation
    preload response is successfully forwarded to the service worker's fetch
    event, with the same restrictions numbered 1) through 3) for
    ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time. The sample is
    only recorded to the appropriate suffixed histograms.

    It will be removed after NetS13nSW ships. https://crbug.com/715640
  </summary>
</histogram>

<histogram name="ServiceWorker.NavPreload.WorkerPreparationType"
    enum="ServiceWorkerPreparationType">
  <owner>falken@chromium.org</owner>
  <summary>
    The type of preparation needed for the browser to find and possibly start an
    active worker to dispatch a FetchEvent for a main frame resource request,
    when navigation preload also occurred.

    This histogram is recorded when a navigation preload response is succesfully
    forwarded to the service worker's fetch event (for the case mentioned
    above), with the same restrictions numbered 1) through 3) as for
    ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time. The sample is
    only recorded to the appropriate suffixed histograms.

    This is similar to
    ServiceWorker.ActivatedWorkerPreparationForMainFrame.Type_NavigationPreloadEnabled.
    The difference is ServiceWorker.NavPreload.WorkerPreparationType gets logged
    if the navigation preload successfully occurred, at the same time as the
    other ServiceWorker.NavPreload.* metrics so is more safely comparable to
    them. We could deprecate the Type_NavigationPreloadEnabled histogram if it
    turns out there is no significant difference.

    It will be removed after NetS13nSW ships. https://crbug.com/715640
  </summary>
</histogram>

<histogram name="ServiceWorker.NavPreload.WorkerWaitTime" units="ms">
  <owner>falken@chromium.org</owner>
  <summary>
    This is recorded in the case where the navigation preload response arrived
    before the activated and running service worker was prepared. It is the
    remaining time it took to prepare the worker after the response arrived.

    This histogram is recorded when a navigation preload response is succesfully
    forwarded to the service worker's fetch event (for the case mentioned
    above), with the same restrictions numbered 1) through 3) as for
    ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time. The sample is
    only recorded to the appropriate suffixed histograms.
  </summary>
</histogram>

<histogram name="ServiceWorker.NotificationClickEvent.Time" units="ms">
  <owner>peter@chromium.org</owner>
  <summary>
    The time taken between dispatching a NotificationClickEvent to a Service
    Worker and receiving a message that it finished handling the event. Includes
    the time for the waitUntil() promise to settle.
  </summary>
</histogram>

<histogram name="ServiceWorker.NotificationClickEventExecutionTime" units="ms">
  <obsolete>
    Deprecated 2015-05 in favor of ServiceWorker.NotificationClickEvent.Time.
  </obsolete>
  <owner>peter@chromium.org</owner>
  <summary>
    Execution time of ServiceWorkerGlobalScope.onnotificationclick.
  </summary>
</histogram>

<histogram name="ServiceWorker.NotificationCloseEvent.Time" units="ms">
  <owner>nsatragno@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    The time taken between dispatching a NotificationCloseEvent to a Service
    Worker and receiving a message that it finished handling the event. Includes
    the time for the waitUntil() promise to settle.
  </summary>
</histogram>

<histogram name="ServiceWorker.PageLoad" enum="ServiceWorkerSite">
  <owner>falken@chromium.org</owner>
  <summary>Counts page loads controlled by a service worker.</summary>
</histogram>

<histogram name="ServiceWorker.PaymentRequestEvent.Time" units="ms">
  <owner>jinho.bang@samsung.com</owner>
  <summary>
    The time taken between dispatching an PaymentRequestEvent to a Service
    Worker and receiving a message that it finished handling the event. Includes
    the time for the waitUntil() promise to settle.
  </summary>
</histogram>

<histogram name="ServiceWorker.PushEvent.Time" units="ms">
  <owner>johnme@chromium.org</owner>
  <summary>
    The time taken between dispatching a PushEvent to a Service Worker and
    receiving a message that it finished handling the event. Includes the time
    for the waitUntil() promise to settle.
  </summary>
</histogram>

<histogram name="ServiceWorker.PushEventExecutionTime" units="ms">
  <obsolete>
    Deprecated 2015-05 in favor of ServiceWorker.PushEvent.Time.
  </obsolete>
  <owner>johnme@chromium.org</owner>
  <summary>Execution time of ServiceWorkerGlobalScope.onpush.</summary>
</histogram>

<histogram name="ServiceWorker.RegisteredOriginCount" units="origins">
  <owner>falken@chromium.org</owner>
  <summary>
    The number of origins that have a service worker registration. Recorded near
    browser startup, when the service worker storage system is initialized.
  </summary>
</histogram>

<histogram name="ServiceWorker.RequestTimeouts.Count"
    enum="ServiceWorkerMetrics.EventType">
  <owner>jeremyarcher@google.com</owner>
  <summary>
    The number of Service Worker request timeouts, by request type.
  </summary>
</histogram>

<histogram name="ServiceWorker.Runtime" units="ms">
  <owner>falken@chromium.org</owner>
  <summary>
    The amount of time a service worker ran for (wall time). Starts recording
    when the service worker finished starting, and stops when the service worker
    finished stopping. Not recorded if DevTools was attached to the service
    worker at some point while it was running.
  </summary>
</histogram>

<histogram name="ServiceWorker.ScriptCachedMetadataSize" units="bytes">
  <owner>horo@chromium.org</owner>
  <summary>
    The length of cached metadata of Service Worker scripts. Logged on each load
    of Service Worker script only when the cached metadata is available. It
    doesn't include the size of imported scripts.
  </summary>
</histogram>

<histogram name="ServiceWorker.ScriptCachedMetadataTotalSize" units="bytes">
  <owner>horo@chromium.org</owner>
  <summary>
    The total length of cached metadata of Service Worker scripts. Logged on
    each start of Service Worker only when the cached metadata is available. It
    includes the main script and imported scripts.
  </summary>
</histogram>

<histogram name="ServiceWorker.ScriptCount" units="count">
  <owner>horo@chromium.org</owner>
  <summary>
    The counts of scripts per Service Worker. Logged on each start of Service
    Worker. It includes the main script and imported scripts.
  </summary>
</histogram>

<histogram name="ServiceWorker.ScriptLoadSuccess" enum="BooleanSuccess">
  <obsolete>
    Removed June 2018 (M69). This was recorded as 100% success since service
    worker script streaming launched in M64, since load failures didn't reach
    this UMA. When there is an error reading the script from storage, it's
    typically recorded as a start worker failure under
    SERVICE_WORKER_ERROR_DISK_CACHE.
  </obsolete>
  <owner>falken@chromium.org</owner>
  <summary>
    Whether loading the service worker script succeeded. Only recorded for
    installed service workers. Recorded by the browser process when reported
    back by the renderer during worker startup.
  </summary>
</histogram>

<histogram name="ServiceWorker.ScriptSize" units="bytes">
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The length of Service Worker scripts. Logged on each load of Service Worker
    script. It doesn't include the size of imported scripts.
  </summary>
</histogram>

<histogram name="ServiceWorker.ScriptTotalSize" units="bytes">
  <owner>horo@chromium.org</owner>
  <summary>
    The total length of Service Worker scripts. Logged on each start of Service
    Worker. It includes the main script and imported scripts.
  </summary>
</histogram>

<histogram name="ServiceWorker.SendStopWorker.Status"
    enum="ServiceWorkerStatusCode">
  <owner>falken@chromium.org</owner>
  <summary>
    The result of trying to send the IPC message to a renderer process telling
    it to stop an embedded worker. Recorded in EmbeddedWorkerInstance::Stop.
    This was previously recorded for both the IPC and Mojo service worker
    implementations, but as of Jan 2017, this is only recorded for the IPC
    implementation. This histogram will be removed after the IPC implementation
    is removed.
  </summary>
</histogram>

<histogram name="ServiceWorker.StartForNavigationHint.Result"
    enum="ServiceWorkerStartForNavigationHintResult">
  <owner>horo@chromium.org</owner>
  <summary>
    The result of starting a service worker for a navigation hint.
  </summary>
</histogram>

<histogram name="ServiceWorker.StartHintPrecision" enum="BooleanEnabled">
  <owner>horo@chromium.org</owner>
  <summary>
    The precision of the speculative launch of Service Workers for navigation
    hints. Recorded when the worker is stopped. True if a fetch event for a
    main/sub frame navigation was fired on the worker before it stopped;
    otherwise, false. False means the speculative launch wasn't helpful.
  </summary>
</histogram>

<histogram name="ServiceWorker.StartNewWorker.Status"
    enum="ServiceWorkerStatusCode">
  <owner>falken@chromium.org</owner>
  <summary>
    The result of trying to start a Service Worker that has not yet installed.
    See also ServiceWorker.StartWorker.Status for installed workers.
  </summary>
</histogram>

<histogram name="ServiceWorker.StartNewWorker.Time" units="ms">
  <owner>falken@chromium.org</owner>
  <summary>
    The time taken to start a Service Worker that has not yet installed, from
    process allocation to ACK of started from the renderer (which occurs after
    script execution). This may include script download time. The metric is not
    recorded if DevTools was ever attached to the Service Worker during startup.
    See also ServiceWorker.StartWorker.Time for installed workers.
  </summary>
</histogram>

<histogram name="ServiceWorker.StartTiming.ClockConsistency"
    enum="CrossProcessTimeDelta" expires_after="2019-07-30">
  <owner>falken@chromium.org</owner>
  <owner>shimazu@chromium.org</owner>
  <summary>
    Recorded on each successful service worker startup.
    ServiceWorker.StartTiming.* uses timing data from both the renderer process
    and browser process. This histogram describes whether the clocks are known
    to be accurate and consistent accross processes, and whether the actual
    timing data for this worker startup was consistent, i.e., TimeTicks did not
    go backwards.

    If the clocks and timing were inconsistent, ServiceWorker.StartTiming.*
    metrics (other than this one) are not recorded.
  </summary>
</histogram>

<histogram name="ServiceWorker.StartTiming.Duration" units="ms"
    expires_after="2021-07-30">
  <owner>falken@chromium.org</owner>
  <owner>shimazu@chromium.org</owner>
  <summary>
    The time taken to start a service worker that is already installed, from
    start of the start sequence (finding a renderer) to ACK of started from the
    renderer (which occurs after script execution). The metric is not recorded
    if DevTools was ever attached to the Service Worker during startup. It does
    not include time, if any, waiting for the service worker to finish stopping
    before asking it to start, if that occurred.
  </summary>
</histogram>

<histogram
    name="ServiceWorker.StartTiming.ReceivedStartWorkerToScriptEvaluationStart"
    units="ms" expires_after="2021-07-30">
  <owner>falken@chromium.org</owner>
  <owner>shimazu@chromium.org</owner>
  <summary>
    The time taken from (a) the renderer receiving the start worker IPC message,
    to (b) initial JavaScript evaluation starting on the worker thread. Recorded
    when ServiceWorker.StartTiming.Duration is recorded.
  </summary>
</histogram>

<histogram name="ServiceWorker.StartTiming.ScriptEvaluationEndToEnd" units="ms"
    expires_after="2021-07-30">
  <owner>falken@chromium.org</owner>
  <owner>shimazu@chromium.org</owner>
  <summary>
    The time taken from (a) initial JavaScript evaluation finishing on the
    worker thread, to (b) the browser receiving the worker started IPC message
    (the final step of worker startup). Recorded when
    ServiceWorker.StartTiming.Duration is recorded.
  </summary>
</histogram>

<histogram
    name="ServiceWorker.StartTiming.ScriptEvaluationStartToScriptEvaluationEnd"
    units="ms" expires_after="2021-07-30">
  <owner>falken@chromium.org</owner>
  <owner>shimazu@chromium.org</owner>
  <summary>
    The time taken from (a) initial JavaScript evaluation starting on the worker
    thread, to (b) initial JavaScript evaluation finishing on the worker thread.
    Recorded when ServiceWorker.StartTiming.Duration is recorded.
  </summary>
</histogram>

<histogram
    name="ServiceWorker.StartTiming.SentStartWorkerToReceivedStartWorker"
    units="ms" expires_after="2021-07-30">
  <owner>falken@chromium.org</owner>
  <owner>shimazu@chromium.org</owner>
  <summary>
    The time taken from (a) the browser sending the start worker IPC message, to
    (b) the renderer receiving the start worker IPC message. Recorded when
    ServiceWorker.StartTiming.Duration is recorded.
  </summary>
</histogram>

<histogram name="ServiceWorker.StartTiming.StartToReceivedStartWorker"
    units="ms" expires_after="2021-07-30">
  <owner>falken@chromium.org</owner>
  <owner>shimazu@chromium.org</owner>
  <summary>
    The time taken from (a) the start of service worker startup, to (b) the
    renderer receiving the start worker IPC message. Recorded when
    ServiceWorker.StartTiming.Duration is recorded.
  </summary>
</histogram>

<histogram name="ServiceWorker.StartTiming.StartToScriptEvaluationEnd"
    units="ms" expires_after="2021-07-30">
  <owner>falken@chromium.org</owner>
  <owner>shimazu@chromium.org</owner>
  <summary>
    The time taken from (a) the start of service worker startup, to (b) initial
    JavaScript evaluation finishing on the worker thread. Recorded when
    ServiceWorker.StartTiming.Duration is recorded.
  </summary>
</histogram>

<histogram name="ServiceWorker.StartTiming.StartToScriptEvaluationStart"
    units="ms" expires_after="2021-07-30">
  <owner>falken@chromium.org</owner>
  <owner>shimazu@chromium.org</owner>
  <summary>
    The time taken from (a) the start of service worker startup, to (b) initial
    JavaScript evaluation starting on the worker thread. Recorded when
    ServiceWorker.StartTiming.Duration is recorded.
  </summary>
</histogram>

<histogram name="ServiceWorker.StartTiming.StartToSentStartWorker" units="ms"
    expires_after="2021-07-30">
  <owner>falken@chromium.org</owner>
  <owner>shimazu@chromium.org</owner>
  <summary>
    The time taken from (a) the start of service worker startup, to (b) the
    browser sending the start worker IPC message. Recorded when
    ServiceWorker.StartTiming.Duration is recorded.
  </summary>
</histogram>

<histogram name="ServiceWorker.StartWorker.AfterFailureStreak"
    enum="ServiceWorkerStatusCode">
  <owner>falken@chromium.org</owner>
  <summary>
    The result of trying to start a service worker after it has failed
    consecutively. Recorded only for installed workers.
  </summary>
</histogram>

<histogram name="ServiceWorker.StartWorker.FailureStreak" units="count">
  <owner>falken@chromium.org</owner>
  <summary>
    The number of consecutive startup failures of a service worker. Recorded
    each time the service worker failed (so there is double counting: failing
    twice results in 1 and 2 being logged). Only for installed workers.
  </summary>
</histogram>

<histogram name="ServiceWorker.StartWorker.FailureStreakEnded" units="count">
  <owner>falken@chromium.org</owner>
  <summary>
    When a worker startup succeeded after failing, the number of times the
    worker had consecutively failed. Recorded only for installed workers.
  </summary>
</histogram>

<histogram
    name="ServiceWorker.StartWorker.InstalledScriptsSender.FinishedReason"
    enum="ServiceWorkerInstalledScriptsManager.FinishedReason">
  <owner>shimazu@chromium.org</owner>
  <summary>
    The result of sending installed scripts over
    ServiceWorkerInstalledScriptsSender. This is recorded after every start
    worker attempt that sent the scripts through
    ServiceWorkerInstalledScriptsSender.
  </summary>
</histogram>

<histogram name="ServiceWorker.StartWorker.Purpose"
    enum="ServiceWorkerMetrics.EventType">
  <owner>falken@chromium.org</owner>
  <summary>
    The purpose for starting up a service worker. Recorded only for installed
    workers.
  </summary>
</histogram>

<histogram name="ServiceWorker.StartWorker.Status"
    enum="ServiceWorkerStatusCode">
  <owner>falken@chromium.org</owner>
  <summary>
    The result of trying to start a Service Worker that is already installed.
    See also ServiceWorker.StartNewWorker.Status for new workers. See also
    ServiceWorker.StartWorker.StatusByPurpose_* for the breakdown by event type.
  </summary>
</histogram>

<histogram name="ServiceWorker.StartWorker.StatusByPurpose"
    enum="ServiceWorkerStatusCode">
  <owner>falken@chromium.org</owner>
  <summary>
    The result of trying to start a service worker for a particular event type
    (see ServiceWorker.StartWorker.Status for the total). Only recorded for
    installed workers. For event type:
  </summary>
</histogram>

<histogram name="ServiceWorker.StartWorker.Time" units="ms">
  <owner>falken@chromium.org</owner>
  <summary>
    The time taken to start a Service Worker that is already installed, from
    process allocation to ACK of started from the renderer (which occurs after
    script execution). The metric is not recorded if DevTools was ever attached
    to the Service Worker during startup. See also
    ServiceWorker.StartNewWorker.Time for new workers.
  </summary>
</histogram>

<histogram name="ServiceWorker.StartWorker.Timeout.StartPurpose"
    enum="ServiceWorkerMetrics.EventType">
  <owner>falken@chromium.org</owner>
  <summary>
    Records the start purpose for a service worker that timed out while starting
    up. Recorded only for installed workers.
  </summary>
</histogram>

<histogram name="ServiceWorker.StartWorker.TimeoutPhase"
    enum="EmbeddedWorkerStartingPhase">
  <owner>falken@chromium.org</owner>
  <summary>
    The phase the EmbeddedWorker was in when ServiceWorker startup timed out.
  </summary>
</histogram>

<histogram name="ServiceWorker.StopWorker.Status"
    enum="ServiceWorkerStopStatus">
  <obsolete>
    Removed from code in Oct 2015, replaced with ServiceWorker.WorkerStopped.
  </obsolete>
  <owner>falken@chromium.org</owner>
  <summary>
    The result of trying to stop a Service Worker. Recorded only for installed
    Service Workers that succesfully stopped or were detected as stalling. If a
    worker stalled and later stopped, it will be recorded as both STALLED and
    STALLED_THEN_STOPPED.
  </summary>
</histogram>

<histogram name="ServiceWorker.StopWorker.Time" units="ms">
  <owner>falken@chromium.org</owner>
  <summary>The time taken to stop a Service Worker.</summary>
</histogram>

<histogram name="ServiceWorker.Storage.DeleteAndStartOverResult"
    enum="ServiceWorkerDeleteAndStartOverResult">
  <owner>nhiroki@chromium.org</owner>
  <summary>
    Records result of storage recovery operations in ServiceWorkerStorage.
  </summary>
</histogram>

<histogram name="ServiceWorker.Storage.DiskCacheMigrationResult"
    enum="ServiceWorkerDiskCacheMigrationResult">
  <obsolete>
    Deprecated because the migrator was removed as of 12/2015.
  </obsolete>
  <owner>nhiroki@chromium.org</owner>
  <summary>
    Records the final result of diskcache migration in ServiceWorkerStorage.
    ServiceWorker.DiskCacheMigrator.MigrationResult records more detailed status
    of migration operations.
  </summary>
</histogram>

<histogram name="ServiceWorker.Storage.PurgeResourceResult"
    enum="NetErrorCodes">
  <owner>nhiroki@chromium.org</owner>
  <summary>
    Records successes and failures of purging a stale resource in
    ServiceWorkerStorage.
  </summary>
</histogram>

<histogram name="ServiceWorker.TerminateThread.Time" units="ms">
  <obsolete>
    Deprecated in June 2017.
  </obsolete>
  <owner>falken@chromium.org</owner>
  <summary>
    The time taken in the renderer process between the main thread asking the
    worker thread to terminate and getting ACK that it terminated.
  </summary>
</histogram>

<histogram name="ServiceWorker.TimeBetweenEvents" units="ms">
  <obsolete>
    Deprecated in June 2017.
  </obsolete>
  <owner>falken@chromium.org</owner>
  <summary>
    Called at the beginning of each ServiceWorkerVersion::Dispatch*Event
    function: the time elapsed since idle. Generally this is the time between
    one event ending and one event starting, if the worker remained running in
    the interim.
  </summary>
</histogram>

<histogram name="ServiceWorker.UnhandledEventRatio" units="%">
  <obsolete>
    Deprecated 2015-06 in favor of ServiceWorker.EventHandledStatus*.
  </obsolete>
  <owner>kinuko@chromium.org</owner>
  <summary>
    Records the ratio of unhandled events to all events that are dispatched to
    each ServiceWorker.  Recorded when each ServiceWorkerVersion is destructed.
  </summary>
</histogram>

<histogram name="ServiceWorker.URLRequestJob.FallbackedRequestMode"
    enum="FetchRequestMode">
  <owner>horo@chromium.org</owner>
  <summary>
    Records the the mode of request that was fallbacked to the network by the
    Service Worker.
  </summary>
</histogram>

<histogram name="ServiceWorker.URLRequestJob.MainResource.Result"
    enum="ServiceWorkerURLRequestJobResult">
  <owner>falken@chromium.org</owner>
  <summary>
    Records the result of a main resource request forwarded to a Service Worker.
  </summary>
</histogram>

<histogram name="ServiceWorker.URLRequestJob.MainResource.StatusZeroError"
    enum="ServiceWorkerResponseError">
  <owner>falken@chromium.org</owner>
  <summary>
    Records the error provided when the renderer returns a response with status
    code zero to a main resource request forwarded to a Service Worker (i.e.,
    ServiceWorker.URLRequestJob.MainResource.Result was
    REQUEST_JOB_ERROR_RESPONSE_STATUS_ZERO).
  </summary>
</histogram>

<histogram name="ServiceWorker.URLRequestJob.Subresource.Result"
    enum="ServiceWorkerURLRequestJobResult">
  <owner>falken@chromium.org</owner>
  <summary>
    Records the result of a subresource request forwarded to a Service Worker.
  </summary>
</histogram>

<histogram name="ServiceWorker.URLRequestJob.Subresource.StatusZeroError"
    enum="ServiceWorkerResponseError">
  <owner>falken@chromium.org</owner>
  <summary>
    Records the error provided when the renderer returns a response with status
    code zero to a subresource request forwarded to a Service Worker (i.e.,
    ServiceWorker.URLRequestJob.Subresource.Result was
    REQUEST_JOB_ERROR_RESPONSE_STATUS_ZERO).
  </summary>
</histogram>

<histogram name="ServiceWorker.WorkerForMessageFound" enum="Boolean">
  <owner>falken@chromium.org</owner>
  <summary>
    True if a message from the renderer intended for a browser-side embedded
    worker instance found its recipient. False if the instance did not exist
    when the message was received (e.g., it was a detached worker). Recorded in
    EmbeddedWorkerRegistry::GetWorkerForMessage.
  </summary>
</histogram>

<histogram name="ServiceWorker.WorkerStopped" enum="ServiceWorkerStoppedStatus">
  <owner>falken@chromium.org</owner>
  <summary>
    The mechanism by which a service worker entered running status STOPPED.
  </summary>
</histogram>

<histogram name="ServiceWorkerCache.Cache" units="ms">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The time to perform operations on the Cache object in the ServiceWorker
    Cache API.
  </summary>
</histogram>

<histogram name="ServiceWorkerCache.Cache.AddResponseType"
    enum="FetchResponseType">
  <owner>nhiroki@chromium.org</owner>
  <summary>
    Records the response type to be added in the Cache by Cache.add()/addAll().
  </summary>
</histogram>

<histogram name="ServiceWorkerCache.Cache.AllWritesResponseType"
    enum="FetchResponseType">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Records the response type to be added in the Cache by all operations that
    write to the cache.
  </summary>
</histogram>

<histogram name="ServiceWorkerCache.CacheStorage" units="ms">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The time to perform operations on the CacheStorage object in the
    ServiceWorker Cache API.
  </summary>
</histogram>

<histogram name="ServiceWorkerCache.CreateCacheStorageResult"
    enum="BooleanCreated">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Whether a new ServiceWorkerCacheStorage and its directory were successfully
    created on disk.
  </summary>
</histogram>

<histogram name="ServiceWorkerCache.IndexSizeDifference" units="bytes">
  <owner>cmumford@chromium.org</owner>
  <summary>
    The absolute difference between the ServiceWorker Cache size saved to the
    CacheStorage index and the actual cache size when opened.
  </summary>
</histogram>

<histogram name="ServiceWorkerCache.InitBackendResult"
    enum="CacheStorageErrorType">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The result of opening the backend in the ServiceWorker Cache API.
  </summary>
</histogram>

<histogram name="ServiceWorkerCache.Response.HasDeprecatedURL" enum="Boolean">
  <owner>horo@chromium.org</owner>
  <summary>
    True if a response read from the CacheStorage has a url field. This field
    was deprecated in M57.
  </summary>
</histogram>

<histogram name="ServiceWorkerCache.Scheduler.IsOperationSlow" enum="Boolean">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    An operation is slow (true) if it takes at least 10 seconds to run. If an
    operation never completes, it will still be recorded as slow.
  </summary>
</histogram>

<histogram name="ServiceWorkerCache.Scheduler.OperationDuration" units="ms">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The time in ms from when an operation is started until it completes.
  </summary>
</histogram>

<histogram name="ServiceWorkerCache.Scheduler.QueueDuration" units="ms">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The time in ms from when an operation was queued until its task is posted.
  </summary>
</histogram>

<histogram name="ServiceWorkerCache.Scheduler.QueueLength" units="operations">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The number of operations in the scheduling queue just before enqueuing a new
    operation.
  </summary>
</histogram>

<histogram name="Session.ClosedTabCounts" units="operations">
  <owner>rohitrao@chromium.org</owner>
  <summary>
    The number of tabs closed by the user during the current session
    (launch/foregrounding to backgrounding).

    This histogram is only logged on iOS when the application is backgrounded.
  </summary>
</histogram>

<histogram name="Session.NewTabCounts" units="operations">
  <owner>rohitrao@chromium.org</owner>
  <summary>
    The number of tabs created by the user during the current session
    (launch/foregrounding to backgrounding).

    This histogram is only logged on iOS when the application is backgrounded.
  </summary>
</histogram>

<histogram name="Session.OpenedTabCounts" units="operations">
  <owner>rohitrao@chromium.org</owner>
  <summary>
    The number of times the user changed the active tab (this can happen when
    manually selecting a new tab, when a pre-rendered tab is made active, when
    closing the current tab and the next one is selected) during the current
    session (launch/foregrounding to backgrounding).

    This histogram is only logged on iOS when the application is backgrounded.
  </summary>
</histogram>

<histogram name="Session.TotalDuration" units="ms">
  <owner>asvitkine@chromium.org</owner>
  <owner>chrisha@chromium.org</owner>
  <summary>
    The length of a session (launch/foregrounding to backgrounding) in
    milliseconds.

    Desktop: This also takes into account user interaction and audio events.
    Starting from M55 the session length is recorded by discounting for default
    inactivity timeout.  Also, until M69, there was a bug that caused
    double-counting of some sessions.

    Android: There is a known issue where JavaScript dialogs and other things
    that take focus away from the Chrome activity can cause this metric to
    record a session end prematurely. See: crbug.com/678276.
  </summary>
</histogram>

<histogram name="Session.TotalDuration.NotOptedInToSyncWithAccount" units="ms">
  <owner>feuunk@chromium.org</owner>
  <summary>
    The amount of active browsing time that was spent not being opted in to sync
    but while having a refresh token for a user's account.

    This time is measured from when the user starts interacting with the browser
    until either they stopped interacting with the browser or their signin or
    sync status changes. These end-points are when the metric is emitted.

    Because a duration can end either because the user became inactive or
    because their status changed, the distribution of individual durations
    measured are unlikely to be helpful. Instead, please compare total
    durations.

    This metric is only recorded on Win/Mac/Linux.

    One caveat with this metric is that if the user has multiple profiles open
    at the same time, their session activity will be logged from all the
    profiles, instead of only from the profile that the user is using at that
    moment.
  </summary>
</histogram>

<histogram name="Session.TotalDuration.NotOptedInToSyncWithoutAccount"
    units="ms">
  <owner>feuunk@chromium.org</owner>
  <summary>
    The amount of active browsing time that was spent not being opted in to sync
    and not having a refresh token for a user's account.

    This time is measured from when the user starts interacting with the browser
    until either they stopped interacting with the browser or their signin or
    sync status changes. These end-points are when the metric is emitted.

    Because a duration can end either because the user became inactive or
    because their status changed, the distribution of individual durations
    measured are unlikely to be helpful. Instead, please compare total
    durations.

    This metric is only recorded on Win/Mac/Linux.

    One caveat with this metric is that if the user has multiple profiles open
    at the same time, their session activity will be logged from all the
    profiles, instead of only from the profile that the user is using at that
    moment.
  </summary>
</histogram>

<histogram name="Session.TotalDuration.OptedInToSyncWithAccount" units="ms">
  <owner>feuunk@chromium.org</owner>
  <summary>
    The total session duration (see Session.TotalDuration) that was spent being
    opted in to sync while having a valid refresh token for the account.

    This time is measured from when the user starts interacting with the browser
    until either they stopped interacting with the browser or their signin or
    sync status changes. These end-points are when the metric is emitted.

    Because a duration can end either because the user became inactive or
    because their status changed, the distribution of individual durations
    measured are unlikely to be helpful. Instead, please compare total
    durations.

    This metric is only recorded on Win/Mac/Linux.

    One caveat with this metric is that if the user has multiple profiles open
    at the same time, their session activity will be logged from all the
    profiles, instead of only from the profile that the user is using at that
    moment.
  </summary>
</histogram>

<histogram name="Session.TotalDuration.OptedInToSyncWithoutAccount" units="ms">
  <owner>feuunk@chromium.org</owner>
  <summary>
    The total session duration (see Session.TotalDuration) that was spent being
    opted in to sync without a having a valid refresh token for the account.

    This can for example be the case if the user signed out of the web, changed
    their password, or otherwise invalidated their signin.

    This time is measured from when the user starts interacting with the browser
    until either they stopped interacting with the browser or their signin or
    sync status changes. These end-points are when the metric is emitted.

    Because a duration can end either because the user became inactive or
    because their status changed, the distribution of individual durations
    measured are unlikely to be helpful. Instead, please compare total
    durations.

    This metric is only recorded on Win/Mac/Linux.

    One caveat with this metric is that if the user has multiple profiles open
    at the same time, their session activity will be logged from all the
    profiles, instead of only from the profile that the user is using at that
    moment.
  </summary>
</histogram>

<histogram name="Session.TotalDuration.WithAccount" units="ms">
  <owner>feuunk@chromium.org</owner>
  <summary>
    The total session duration (see Session.TotalDuration) that was spent with
    an account signed into the content area.

    The difference between the With(out)Account measurements and the
    Opted(In/Out)ToSyncWith(out)Account measurements is that these metrics are
    derived from the user's cookies, not their refresh tokens.

    This time is measured from when the user starts interacting with the browser
    until either they stopped interacting with the browser or their signin
    status changes. These end-points are when the metric is emitted.

    Because a duration can end either because the user became inactive or
    because their status changed, the distribution of individual durations
    measured are unlikely to be helpful. Instead, please compare total
    durations.

    This metric is only recorded on Win/Mac/Linux.

    One caveat with this metric is that if the user has multiple profiles open
    at the same time, their session activity will be logged from all the
    profiles, instead of only from the profile that the user is using at that
    moment.
  </summary>
</histogram>

<histogram name="Session.TotalDuration.WithoutAccount" units="ms">
  <owner>feuunk@chromium.org</owner>
  <summary>
    The total session duration (see Session.TotalDuration) that was spent
    without an account signed into the content area.

    The difference between the With(out)Account measurements and the
    Opted(In/Out)ToSyncWith(out)Account measurements is that these metrics are
    derived from the user's cookies, not their refresh tokens.

    This time is measured from when the user starts interacting with the browser
    until either they stopped interacting with the browser or their signin
    status changes. These end-points are when the metric is emitted.

    Because a duration can end either because the user became inactive or
    because their status changed, the distribution of individual durations
    measured are unlikely to be helpful. Instead, please compare total
    durations.

    This metric is only recorded on Win/Mac/Linux.

    One caveat with this metric is that if the user has multiple profiles open
    at the same time, their session activity will be logged from all the
    profiles, instead of only from the profile that the user is using at that
    moment.
  </summary>
</histogram>

<histogram name="Session.TotalDurationMax1Day" units="ms">
  <owner>asvitkine@chromium.org</owner>
  <owner>chrisha@chromium.org</owner>
  <summary>
    The length of a session (launch/foregrounding to backgrounding) in
    milliseconds.

    Desktop: This also takes into account user interaction and audio events.
    Starting from M55 the session length is recorded by discounting for default
    inactivity timeout.  Also, until M69, there was a bug that caused
    double-counting of some sessions.

    Android: This histogram isn't logged on Android.  See instead
    Session.TotalDuration.
  </summary>
</histogram>

<histogram name="SessionCrashed.Bubble" enum="SessionCrashedBubbleUserAction">
  <owner>yiyaoliu@chromium.org</owner>
  <summary>How did the user interact with the SessionCrashed Bubble?</summary>
</histogram>

<histogram name="SessionRestore.Actions" enum="SessionRestoreActions">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The actions that have occurred in a session restore timeline. These are to
    be interpreted as raw event counts. Tabs are almost certainly deferred due
    to the existence memory pressure, but this may not always be the case.
  </summary>
</histogram>

<histogram name="SessionRestore.AllTabsLoaded" units="ms">
  <owner>chrisha@chromium.org</owner>
  <owner>georgesak@chromium.org</owner>
  <summary>
    The time from SessionRestore start until all tabs have finished loading.
  </summary>
</histogram>

<histogram name="SessionRestore.command_size" units="bytes">
  <obsolete>
    Deprecated 2017-02 as not actionable.
  </obsolete>
  <summary>
    The size of the commands written to disk. See SessionBackend for details.
  </summary>
</histogram>

<histogram name="SessionRestore.FirstTabPainted" units="ms">
  <obsolete>
    Deprecated 2014-10 in favor of SessionRestore.ForegroundTabFirstPaint and
    ultimately SessionRestore.ForegroundTabFirstPaint3.
  </obsolete>
  <owner>jeremy@chromium.org</owner>
  <owner>sky@chromium.org</owner>
  <summary>TBD</summary>
</histogram>

<histogram name="SessionRestore.ForegroundTabFirstLoaded" units="ms">
  <owner>chrisha@chromium.org</owner>
  <owner>georgesak@chromium.org</owner>
  <summary>
    The time from SessionRestore start until a visible tab has finished loading.
  </summary>
</histogram>

<histogram name="SessionRestore.ForegroundTabFirstPaint" units="ms">
  <obsolete>
    Deprecated 2015-03-13 in favor of SessionRestore.ForegroundTabFirstPaint2
    and ultimately SessionRestore.ForegroundTabFirstPaint3.
  </obsolete>
  <owner>jeremy@chromium.org</owner>
  <owner>sky@chromium.org</owner>
  <summary>
    Deprecated 2015-03-13 in favor of SessionRestore.ForegroundTabFirstPaint2
    and ultimately SessionRestore.ForegroundTabFirstPaint3.
  </summary>
</histogram>

<histogram name="SessionRestore.ForegroundTabFirstPaint2" units="ms">
  <obsolete>
    Deprecated 2015-05 in favor of SessionRestore.ForegroundTabFirstPaint3.
  </obsolete>
  <owner>jeremy@chromium.org</owner>
  <owner>sky@chromium.org</owner>
  <summary>
    The time from SessionRestore start until a visible tab's first paint. This
    metric only records paints that have occurred after a tab has loaded.
  </summary>
</histogram>

<histogram name="SessionRestore.ForegroundTabFirstPaint3" units="ms">
  <owner>chrisha@chromium.org</owner>
  <owner>georgesak@chromium.org</owner>
  <summary>
    The time from SessionRestore start until a visible tab's first paint.
  </summary>
</histogram>

<histogram name="SessionRestore.FrameUniqueNameFromRequestedNameSize"
    units="characters">
  <obsolete>
    Deprecated 2018-05-02. This data was used to confirm that the unique name
    generation change succeeded in reducing memory usage, and is no longer
    needed.
  </obsolete>
  <owner>dcheng@chromium.org</owner>
  <summary>
    The size of a unique name derived from the browsing context name. Emitted
    when generating a unique name for a new subframe or when a subframe's
    browsing context name is changed before the first real load is committed.
    Only applies to subframes as main frames always have an empty unique name.
  </summary>
</histogram>

<histogram name="SessionRestore.FrameUniqueNameLength" units="bytes">
  <obsolete>
    Deprecated 2017-08 due to unique name generation change. Please use
    SessionRestore.FrameUniqueNameFromRequestedNameSize and
    SessionRestore.FrameUniqueNameWithFramePathSize instead.
  </obsolete>
  <owner>dcheng@chromium.org</owner>
  <summary>
    Records the length of unique names for web frames that are saved as part of
    session restore data. It is logged each time the unique name changes, which
    typically happens when a web frame is first created or its name is changed
    by mutating window.name.
  </summary>
</histogram>

<histogram name="SessionRestore.FrameUniqueNameOriginalRequestedNameSize"
    units="characters">
  <obsolete>
    Deprecated 2018-05-02. This data was used to confirm that the unique name
    generation change succeeded in reducing memory usage, and is no longer
    needed.
  </obsolete>
  <owner>dcheng@chromium.org</owner>
  <summary>
    The size of the browsing context name (based on the iframe name attribute or
    window.name) when generating the unique name. Emitted when generating a
    unique name for a new subframe or when a subframe's browsing context name is
    changed before the first real load is committed. Only applies to subframes
    as main frames always have an empty unique name.
  </summary>
</histogram>

<histogram name="SessionRestore.FrameUniqueNameWithFramePathSize"
    units="characters">
  <obsolete>
    Deprecated 2018-05-02. This data was used to confirm that the unique name
    generation change succeeded in reducing memory usage, and is no longer
    needed.
  </obsolete>
  <owner>dcheng@chromium.org</owner>
  <summary>
    The size of a unique name when falling back to the frame path algorithm. The
    fallback path is used when the browsing context name is empty or non-unique.
    Emitted when generating a unique name for a new subframe or when a
    subframe's browsing context name is changed before the first real load is
    committed. Only applies to subframes as main frames always have an empty
    unique name.
  </summary>
</histogram>

<histogram name="SessionRestore.FrameUniqueNameWithFramePathSizePerComponent"
    units="characters per depth">
  <obsolete>
    Deprecated 2018-05-02. This data was used to confirm that the unique name
    generation change succeeded in reducing memory usage, and is no longer
    needed.
  </obsolete>
  <owner>dcheng@chromium.org</owner>
  <summary>
    The size of a unique name when falling back to the frame path algorithm,
    divided by the depth of the frame. Used to normalize sizes for deeper nodes
    in a frame tree. Emitted when generating a unique name for a new subframe or
    when a subframe's browsing context name is changed before the first real
    load is committed. Only applies to subframes as main frames always have an
    empty unique name.
  </summary>
</histogram>

<histogram name="SessionRestore.last_session_file_size" units="KB">
  <obsolete>
    Deprecated 2017-02 as not actionable.
  </obsolete>
  <summary>The size, in k, of the last session file on disk.</summary>
</histogram>

<histogram name="SessionRestore.NavEntryCommittedLongPeriod">
  <obsolete>
    Deprecated 2017-02 as not actionable.
  </obsolete>
  <summary>
    Like NavEntryCommittedPeriod, but specifically to provide a clearer
    breakdown of samples in the 10 minutes - 8 hours range.
  </summary>
</histogram>

<histogram name="SessionRestore.NavEntryCommittedPeriod" units="ms">
  <obsolete>
    Deprecated 2017-02 as not actionable.
  </obsolete>
  <summary>
    Milliseconds between subsequent Save() operations due to a nav entry being
    committed (new tab created + nav initiated).
  </summary>
</histogram>

<histogram name="SessionRestore.NavigationListPrunedLongPeriod">
  <obsolete>
    Deprecated 2017-02 as not actionable.
  </obsolete>
  <summary>
    Like NavListPrunedPeriod, but specifically to provide a clearer breakdown of
    samples in the 10 minutes - 8 hours range.
  </summary>
</histogram>

<histogram name="SessionRestore.NavigationListPrunedPeriod" units="ms">
  <obsolete>
    Deprecated 2017-02 as not actionable.
  </obsolete>
  <summary>
    Milliseconds between subsequent Save() operations due to the navigation list
    being pruned (typically a change in back/forward stacks).
  </summary>
</histogram>

<histogram name="SessionRestore.ParallelTabLoads">
  <obsolete>
    Deprecated 2017-02 as not actionable.
  </obsolete>
  <summary>
    The number of tabs that were loaded simultaneously when restoring a session.
  </summary>
</histogram>

<histogram name="SessionRestore.read_session_file_time" units="ms">
  <obsolete>
    Deprecated 2017-02 as not actionable.
  </obsolete>
  <summary>
    Amount of time to read and assemble the commands from the last session.
  </summary>
</histogram>

<histogram name="SessionRestore.RestoredSubframeURL" enum="BooleanRestoredURL">
  <owner>creis@chromium.org</owner>
  <summary>
    How often history navigations in subframes restore a different URL than the
    frame's default src URL.  This indicates how much users rely on subframe
    session history items.
  </summary>
</histogram>

<histogram name="SessionRestore.RestoredTab.SiteEngagementScore" units="score">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The site engagement score associated with a tab restored by session restore,
    recorded at the moment the tab is restored.
  </summary>
</histogram>

<histogram name="SessionRestore.RestoredTab.TimeSinceActive" units="ms">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The time since a restored tab was last active.  This is the cumulative
    amount of time that has passed since the tab was last visible.  Time accrues
    while a browser is active and the tab remains inactive.  If the tab is
    restored and remains inactive in a subsequent browsing session the time
    continues to accrue.  Visible tabs report a value of 0 for this.  This is
    recorded at the moment the tab is restored during a session restore.
  </summary>
</histogram>

<histogram name="SessionRestore.RestoreSubframeFramePathLength" units="bytes">
  <owner>creis@chromium.org</owner>
  <summary>
    Records the length of unique names that include frame paths, for subframes
    that are restoring a different URL than the frame's default src URL during a
    history navigation.  Large values here would indicate a possible challenge
    for the plan to truncate frame unique names (to save memory).
  </summary>
</histogram>

<histogram name="SessionRestore.SaveLongPeriod">
  <obsolete>
    Deprecated 2017-02 as not actionable.
  </obsolete>
  <summary>
    Like SavePeriod, but specifically to provide a clearer breakdown of samples
    in the 10 minutes - 8 hours range.
  </summary>
</histogram>

<histogram name="SessionRestore.SavePeriod" units="ms">
  <obsolete>
    Deprecated 2017-02 as not actionable.
  </obsolete>
  <summary>
    Amount of time between subsequent SessionService Save() operations (aka
    updates to session data).
  </summary>
  <details>
    Periods longer than 10 minutes are grouped together; see SaveLongPeriod for
    resolution.
  </details>
</histogram>

<histogram name="SessionRestore.SubFrameUniqueNameChangedBeforeFirstCommit"
    enum="BooleanSuccess">
  <owner>dcheng@chromium.org</owner>
  <summary>
    How often a subframe is assigned a new name between the initial empty
    document and the first navigation.
  </summary>
</histogram>

<histogram name="SessionRestore.TabActions" enum="SessionRestoreTabActions">
  <owner>chrisha@chromium.org</owner>
  <summary>
    A breakdown of key events that occur to individual tabs as they are
    processed by an ongoing session restore.
  </summary>
</histogram>

<histogram name="SessionRestore.TabClosedLongPeriod">
  <obsolete>
    Deprecated 2017-02 as not actionable.
  </obsolete>
  <summary>
    TabClosedPeriod, but specifically to provide a clearer breakdown of samples
    in the 10 minutes - 8 hours range.
  </summary>
</histogram>

<histogram name="SessionRestore.TabClosedPeriod" units="ms">
  <obsolete>
    Deprecated 2017-02 as not actionable.
  </obsolete>
  <summary>
    Milliseconds between subsequent Save() operations due to a tab being closed.
  </summary>
</histogram>

<histogram name="SessionRestore.TabCount" units="tabs">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The number of tabs involved in a single session restore event.
  </summary>
</histogram>

<histogram name="SessionRestore.TabLoadTimeout" enum="BooleanTimedOut">
  <owner>zhenw@chromium.org</owner>
  <summary>
    The boolean indicates whether the tab load was initiated because a previous
    tab load completed (including the tab was closed) or whether the tab load
    was initiated because a timer fired to start the next load (true) during
    session restore.
  </summary>
</histogram>

<histogram name="SessionStorageContext.CachePurgedInKB" units="KB">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Total size of the HTML5 SessionStorage browser-side cache purged in KB when
    memory pressure signal was triggered or cache size hit the limits.
  </summary>
</histogram>

<histogram name="SessionStorageContext.CacheSizeInKB" units="KB">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Total size of the HTML5 SessionStorage databases in KB in the browser-side
    cache. Recorded each time a new database is opened in memory.
  </summary>
</histogram>

<histogram name="SessionStorageContext.CommitResult" enum="LevelDBStatus">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The result of an attempt to commit SessionStorage data to the database.
  </summary>
</histogram>

<histogram name="SessionStorageContext.DatabaseOpenError" enum="LevelDBStatus">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The result of a failed attempt to open a LevelDB database for
    SessionStorage.
  </summary>
</histogram>

<histogram name="SessionStorageContext.DatabaseOpenError.Disk"
    enum="LevelDBStatus">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The result of a failed attempt to open a LevelDB database for SessionStorage
    on disk.
  </summary>
</histogram>

<histogram name="SessionStorageContext.DatabaseOpenError.Memory"
    enum="LevelDBStatus">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The result of a failed attempt to open a LevelDB database for SessionStorage
    in memory.
  </summary>
</histogram>

<histogram name="SessionStorageContext.DestroyDBResult" enum="LevelDBStatus">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The result of attempting to delete the SessionStorage database.
  </summary>
</histogram>

<histogram name="SessionStorageContext.DirectoryOpenError"
    enum="PlatformFileError">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The reason opening a directory for the LevelDB database that backs
    LocalStorage failed.
  </summary>
</histogram>

<histogram name="SessionStorageContext.OpenError" enum="LocalStorageOpenError">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The reason opening the LevelDB database that backs SessionStorage failed.
  </summary>
</histogram>

<histogram base="true" name="SessionStorageContext.OpenResultAfter"
    enum="LocalStorageOpenError">
<!-- Name completed by histogram_suffixes name="SessionStorageContextOpenReasons" -->

  <owner>dmurph@chromium.org</owner>
  <summary>
    The result of opening the LevelDB database that backs SessionStorage.
  </summary>
</histogram>

<histogram name="SessionStorageContext.ReadNamespacesError"
    enum="LevelDBStatus">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The reason reading the namespaces metadata of the SessionStorage database
    failed.
  </summary>
</histogram>

<histogram name="SessionStorageContext.ReadNextMapIdError" enum="LevelDBStatus">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The reason reading the next data map id metadata of the SessionStorage
    database failed.
  </summary>
</histogram>

<histogram name="SessionStorageContext.ReadVersionError" enum="LevelDBStatus">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The reason reading the schema version of the SessionStorage database failed.
  </summary>
</histogram>

<histogram name="SessionStorageDatabase.Commit" enum="LevelDBStatus">
  <owner>cmumford@chromium.org</owner>
  <summary>The result of a commit to the sessionStorage database.</summary>
</histogram>

<histogram name="SessionStorageDatabase.Open" enum="SessionStorageDatabaseOpen">
  <owner>michaeln@chromium.org</owner>
  <summary>
    The result (success, failure, or database recreated) of trying to open the
    LevelDB database for sessionStorage.
  </summary>
</histogram>

<histogram name="Settings.DefaultSearchProvider" enum="OmniboxSearchEngine">
  <obsolete>
    Deprecated in Chrome 30.  Use Search.DefaultSearchProviderType instead.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The id of the default search engine domain that is specified in user
    preferences when a profile is loaded.
  </summary>
</histogram>

<histogram name="Settings.EnforcementGroupDeterminedFromTrial"
    enum="BooleanSuccess">
  <owner>gab@chromium.org</owner>
  <summary>
    Whether the SettingsEnforcement group was successfully determined from the
    field trial or if it had to revert to the hardcoded default.
  </summary>
</histogram>

<histogram name="Settings.FilterOnLoadTime" units="ms"
    expires_after="2018-08-30">
  <owner>gab@chromium.org</owner>
  <summary>
    The amount of time it took to run PrefHashFilter::FilterOnLoad on startup.
  </summary>
</histogram>

<histogram name="Settings.FilterSerializeDataTime" units="ms"
    expires_after="2018-08-30">
  <owner>gab@chromium.org</owner>
  <summary>
    The amount of time it took to run PrefHashFilter::FilterSerializeData on the
    UI thread prior to writing the Preferences file to disk. Only logged when
    PrefHashFilter::FilterSerializeData actually had work to do.
  </summary>
</histogram>

<histogram name="Settings.GivenShowHomeButton_HomePageIsNewTabPage"
    enum="Boolean">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Whether or not the home page user preference is set to the default NTP value
    when a profile is loaded. This is only logged if the home button is shown.
  </summary>
</histogram>

<histogram name="Settings.HashesDictionaryTrusted" enum="BooleanValid">
  <owner>csharp@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Logged on profile load. Indicates whether the hashes dictionary for this
    profile is trusted.
  </summary>
</histogram>

<histogram name="Settings.HomePageDomain" enum="OmniboxSearchEngine">
  <obsolete>
    Deprecated in Chrome 30.  Replaced by Settings.HomePageEngineType.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The id of the home page domain that is specified in user preferences when a
    profile is loaded.
  </summary>
</histogram>

<histogram name="Settings.HomePageEngineType" enum="OmniboxSearchEngineType">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Tries to pretend the home page URL is a search URL, and records the search
    engine type of that URL by comparing the TLD+1 of the home page URL with
    those of the different known search engines.  Recorded when a profile is
    opened, if a home page URL has been set.  Note that at least one profile is
    opened on startup.
  </summary>
</histogram>

<histogram name="Settings.HomePageIsNewTabPage" enum="Boolean">
  <obsolete>
    Deprecated 08/05/2013. Replaced by
    Settings.GivenShowHomeButton_HomePageIsNewTabPage.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Whether or not the home page user preference is set to the default NTP value
    when a profile is loaded.
  </summary>
</histogram>

<histogram name="Settings.HomePageIsNewTabPage.PulledFromSync" enum="Boolean"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The value of the home-page-is-new-tab-page pref when pulled down from sync
    to update an out-of-sync local pref store.
  </summary>
</histogram>

<histogram name="Settings.HomePageIsNewTabPage.PushedToSync" enum="Boolean"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The value of the home-page-is-new-tab-page pref when pushed up to sync from
    a change made locally.
  </summary>
</histogram>

<histogram name="Settings.InitializedFromMasterPrefs" enum="BooleanSuccess">
  <owner>csharp@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Logged on first run when generating the Preferences file from
    master_preferences. True if serializing the generated Preferences file to
    disk was successful, false otherwise. Note: this event does not occur if
    there is no master_preferences file on first run.
  </summary>
</histogram>

<histogram name="Settings.JsonDataReadSizeKilobytes" units="KB">
  <owner>gab@chromium.org</owner>
  <summary>
    The size (in kilobytes) of the JSON settings read from disk on startup.
    Suffixed with the name of the corresponding JSON file.
  </summary>
</histogram>

<histogram name="Settings.JsonDataSizeKilobytes" units="KB">
  <obsolete>
    Deprecated 02/2015. Replaced by Settings.JsonDataReadSizeKilobytes.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    The size of the JSON settings content about to be written to disk in
    kilobytes. Suffixed with the name of the JSON file being written to disk.
  </summary>
</histogram>

<histogram name="Settings.JsonDataWriteCount" units="count">
  <owner>raymes@chromium.org</owner>
  <summary>
    The number of writes of a JSON file that occur in every 5 minute period of
    running Chrome. Suffixed with the name of the corresponding JSON file.
  </summary>
</histogram>

<histogram name="Settings.LegacyMachineIdGenerationSuccess"
    enum="BooleanSuccess">
  <owner>proberge@chromium.org</owner>
  <summary>
    Whether generation of the RLZ deterministic machine-specific device id was
    successful when creating the ProfilePrefStore.
  </summary>
</histogram>

<histogram name="Settings.LoadCompletedTime" units="ms">
  <owner>stevenjb@chromium.org</owner>
  <summary>
    The amount of time between the render frame host StartProvisionalLoad event
    and the render frame DocumentOnLoadCompleted event for the settings page.
  </summary>
</histogram>

<histogram name="Settings.LoadCompletedTime.MD" units="ms">
  <owner>stevenjb@chromium.org</owner>
  <summary>
    The amount of time between the render frame host StartProvisionalLoad event
    and the render frame DocumentOnLoadCompleted event for the md-settings page.
  </summary>
</histogram>

<histogram name="Settings.LoadDocumentTime" units="ms">
  <owner>stevenjb@chromium.org</owner>
  <summary>
    The amount of time between the render frame host StartProvisionalLoad and
    DidFinishDocumentLoad events for the settings page.
  </summary>
</histogram>

<histogram name="Settings.LoadDocumentTime.MD" units="ms">
  <owner>stevenjb@chromium.org</owner>
  <summary>
    The amount of time between the render frame host StartProvisionalLoad and
    DidFinishDocumentLoad events for the md-settings page.
  </summary>
</histogram>

<histogram name="Settings.MachineIdGenerationSuccess" enum="BooleanSuccess">
  <obsolete>
    Deprecated in Chrome 63, as we verified that machine id generation was not
    flaky.
  </obsolete>
  <owner>proberge@chromium.org</owner>
  <summary>
    Whether generation of the deterministic machine-specific device id was
    successful when initializing the PrefHashStore.
  </summary>
</histogram>

<histogram name="Settings.MigratedHashesFromLocalState" enum="BooleanMigrated">
  <obsolete>
    Deprecated in Chrome 54, as we stopped legacy migration of preferences.
  </obsolete>
  <owner>csharp@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Whether, while loading a profile, any preference hashes were migrated from
    Local State to either Preferences or Protected Preferences.
  </summary>
</histogram>

<histogram name="Settings.PinnedTabEngineTypes" enum="OmniboxSearchEngineType"
    expires_after="2018-08-30">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Tries to pretend pinned tab URLs are search URLs, and records the search
    engine types of those URLs by comparing the TLD+1s of the URLs with those of
    the different known search engines.  Recorded when a profile is opened, if
    there are pinned tabs.  Note that at least one profile is opened on startup.
  </summary>
</histogram>

<histogram name="Settings.PinnedTabs">
  <owner>mpearson@chromium.org</owner>
  <summary>The number of pinned tabs opened when a profile is loaded.</summary>
</histogram>

<histogram name="Settings.PinUnlockSetup" enum="LockScreenProgress">
  <owner>sammiequon@chromium.org</owner>
  <summary>
    The users progress through the pin unlock setup wizard. Each type
    corresponds to the user completeing a different stage of the setup wizard.
  </summary>
</histogram>

<histogram name="Settings.RegisterProfilePrefsTime" units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during RegisterProfilePrefs.
  </summary>
</histogram>

<histogram name="Settings.SearchLength">
  <owner>dschuyler@chromium.org</owner>
  <summary>
    The number of characters typed in the chrome://settings page search box.
    Intended to determine if we are making the user type too much to find what
    they are looking for (the search is incremental).
  </summary>
</histogram>

<histogram name="Settings.SearchLengthNoMatch">
  <owner>dschuyler@chromium.org</owner>
  <summary>
    If no matches are found when searching within the chrome://settings page,
    record the length of the search text.
  </summary>
</histogram>

<histogram name="Settings.SearchPageMatchCount">
  <owner>dschuyler@chromium.org</owner>
  <summary>
    The number of search page hits within the chrome://settings page.  This is
    especially important when the count is zero (i.e. we returned no hits for a
    given search in settings).  A search is considered complete via timeout
    since there is no concrete way to define the end of a search (the search is
    incremental).
  </summary>
</histogram>

<histogram name="Settings.SearchSections" enum="SettingsSections">
  <owner>dschuyler@chromium.org</owner>
  <summary>
    If there is no further activity in the search box for 1 second, this records
    one tick each time a settings section is shown as a result of searching
    withing the chrome://settings page.  If multiple matches are found within
    the same section, the section match is only recorded once.
  </summary>
</histogram>

<histogram name="Settings.SearchSubpageMatchCount">
  <owner>dschuyler@chromium.org</owner>
  <summary>
    The number of search subpage hits within the chrome://settings page.  This
    is different from Settings.SearchPageMatchCount in that it is tracking hits
    in subpages rather than top level pages. See also
    Settings.SearchPageMatchCount.
  </summary>
</histogram>

<histogram name="Settings.ShowHomeButton" enum="BooleanEnabled">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Whether or not the home button is enabled in user preferences when a profile
    is loaded.
  </summary>
</histogram>

<histogram name="Settings.ShowHomeButton.PulledFromSync" enum="BooleanEnabled"
    expires_after="2018-08-30">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The enabled state of the Home button pref when pulled down from sync to
    update an out-of-sync local pref store.
  </summary>
</histogram>

<histogram name="Settings.ShowHomeButton.PushedToSync" enum="BooleanEnabled"
    expires_after="2018-08-30">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The enabled state of the Home button pref when pushed up to sync from a
    change made locally.
  </summary>
</histogram>

<histogram name="Settings.ShowHomeButtonPreferenceState" enum="BooleanEnabled">
  <owner>danielpark@chromium.org</owner>
  <summary>
    If the home button is enabled or disabled at cold-start. This is only
    recorded if the home page feature flag is enabled or the home button is
    partner provided.
  </summary>
</histogram>

<histogram name="Settings.ShowHomeButtonPreferenceStateChanged"
    enum="BooleanEnabled">
  <owner>danielpark@chromium.org</owner>
  <summary>
    The new state of the show home button preference after it is changed by the
    user.
  </summary>
</histogram>

<histogram name="Settings.StartSetAsDefault" enum="BooleanHit">
  <owner>pmonette@chromium.org</owner>
  <summary>
    The user clicked &quot;Make Google Chrome the default browser&quot; on the
    settings page.
  </summary>
</histogram>

<histogram name="Settings.StartupPageDomains" enum="OmniboxSearchEngine">
  <obsolete>
    Deprecated in Chrome 30.  Replaced by Settings.StartupPageEngineTypes.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The ids of startup page domains that are specified in user preferences when
    a profile is loaded.
  </summary>
</histogram>

<histogram name="Settings.StartupPageEngineTypes"
    enum="OmniboxSearchEngineType" expires_after="2018-08-30">
  <owner>mpearson@chromium.org</owner>
  <summary>
    Tries to pretend the startup page URLs are search URLs, and records the
    search engine types of those URLs by comparing the TLD+1s of the URLs with
    those of the different known search engines.  Recorded when a profile is
    opened, if startup page URLs have been set.  Note that at least one profile
    is opened on startup.
  </summary>
</histogram>

<histogram name="Settings.StartupPageLoadSettings" enum="SessionStartupPref">
  <owner>mpearson@chromium.org</owner>
  <summary>The startup page settings when a profile is loaded.</summary>
</histogram>

<histogram name="Settings.StartupPageLoadSettings.PulledFromSync"
    enum="SessionStartupPref" expires_after="2018-08-30">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The startup page setting when pulled down from sync to update an out-of-sync
    local pref store.
  </summary>
</histogram>

<histogram name="Settings.StartupPageLoadSettings.PushedToSync"
    enum="SessionStartupPref" expires_after="2018-08-30">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The startup page setting when pushed up to sync from a change made locally.
  </summary>
</histogram>

<histogram name="Settings.StartupPageLoadURLs">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The number of URLs to be loaded on startup when a profile is loaded, if the
    startup page setting is set to load URLs.
  </summary>
</histogram>

<histogram name="Settings.StartupURLsMigration" enum="StartupURLsMigration">
  <obsolete>
    Deprecated 12/2015.
  </obsolete>
  <owner>mad@chromium.org</owner>
  <summary>The startup URLs pref migration steps.</summary>
</histogram>

<histogram name="Settings.StartupURLsResetTime" units="ms">
  <obsolete>
    Deprecated 12/2015.
  </obsolete>
  <owner>mad@chromium.org</owner>
  <summary>
    The time elapsed in milliseconds in between startup URLs pref migration. A
    value of 0 indicates that the last migration time was in the future due to
    e.g. an incorrect system time.
  </summary>
</histogram>

<histogram name="Settings.TimeToFirstSearch" units="ms">
  <owner>dschuyler@chromium.org</owner>
  <summary>
    The time between when the chrome://settings page is opened to the first time
    a search is done within that page.  This is intended to evaluate how long a
    user looks for a setting before giving up and searching for it.
  </summary>
</histogram>

<histogram name="Settings.TimeUntilInteractive" units="ms">
  <owner>dbeam@chromium.org</owner>
  <summary>
    The time until the settings Web UI is loaded, rendered, and interactive for
    users (as in they can change a setting). Automatically logged each time the
    settings page is opened (if not closed before interactive).
  </summary>
</histogram>

<histogram name="Settings.TrackedPreferenceChanged" enum="TrackedPreference">
  <owner>gab@chromium.org</owner>
  <summary>
    The id of a tracked preference whose value has been changed since the last
    time Chrome set it. Without a suffix, this histogram stands for preference
    validation using MACs in the JSON pref files.
  </summary>
</histogram>

<histogram name="Settings.TrackedPreferenceCleared" enum="TrackedPreference">
  <owner>gab@chromium.org</owner>
  <summary>
    The id of a tracked preference whose value has been cleared since the last
    time Chrome set it. Without a suffix, this histogram stands for preference
    validation using MACs in the JSON pref files.
  </summary>
</histogram>

<histogram name="Settings.TrackedPreferenceInitialized"
    enum="TrackedPreference">
  <owner>gab@chromium.org</owner>
  <summary>
    The id of a tracked preference whose last value isn't known. We may be just
    starting to track the preference, or local state may have been changed
    outside of Chrome. This should only happen once per pref per profile.
    Without a suffix, this histogram stands for preference validation using MACs
    in the JSON pref files.
  </summary>
</histogram>

<histogram name="Settings.TrackedPreferenceMigrated" enum="TrackedPreference">
  <obsolete>
    Deprecated 2014-07.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Logs the tracked preference id when it is migrated to the new MAC algorithm.
    This should only happen once per pref per profile.
  </summary>
</histogram>

<histogram name="Settings.TrackedPreferenceMigratedLegacyDeviceId"
    enum="TrackedPreference">
  <owner>gab@chromium.org</owner>
  <summary>
    The id of a tracked preference whose value has not changed since the last
    time Chrome set it, but which was last set using a legacy device ID. Each
    user should report this at most once per preference id and immediately be
    migrated to the latest hashing model. Without a suffix, this histogram
    stands for preference validation using MACs in the JSON pref files.
  </summary>
</histogram>

<histogram name="Settings.TrackedPreferenceNullInitialized"
    enum="TrackedPreference">
  <owner>gab@chromium.org</owner>
  <summary>
    The id of a tracked preference which was initialized despite the absence of
    a MAC as its value was NULL. Without a suffix, this histogram stands for
    preference validation using MACs in the JSON pref files.
  </summary>
</histogram>

<histogram name="Settings.TrackedPreferenceReset" enum="TrackedPreference">
  <owner>gab@chromium.org</owner>
  <summary>The id of a tracked preference which was reset by Chrome.</summary>
</histogram>

<histogram name="Settings.TrackedPreferencesAlternateStoreVersion"
    enum="PrefHashStoreVersion">
  <obsolete>
    Deprecated 2014-06.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    The version of a PrefHashStore, reported once for each alternate
    PrefHashStore (not associated to the default profile) from a delayed task on
    startup.
  </summary>
</histogram>

<histogram name="Settings.TrackedPreferencesAlternateStoreVersionUpdatedFrom"
    enum="PrefHashStoreVersion">
  <obsolete>
    Deprecated 2014-06.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    The previous version of an alternate PrefHashStore (not associated to the
    default profile) that was updated from a delayed task on startup. This
    should match Settings.TrackedPreferencesAlternateStoreVersion fairly closely
    for all versions but VERSION_LATEST which should never be reported here.
  </summary>
</histogram>

<histogram name="Settings.TrackedPreferencesInitializedForUnloadedProfile"
    enum="BooleanHit">
  <obsolete>
    Deprecated 2014-02 in favor of
    Settings.TrackedPreferencesAlternateStoreVersionUpdatedFrom.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Preference tracking was initialized for an unloaded profile. This should
    happen at most once per profile.
  </summary>
</histogram>

<histogram name="Settings.TrackedPreferencesNoEnforcementOnDomain"
    enum="BooleanEnabled" expires_after="2018-08-30">
  <owner>gab@chromium.org</owner>
  <summary>
    Whether settings enforcement was cancelled for a machine joined to a domain.
    Reported once per session on browser startup (note: this histogram was
    disabled for part of M40).
  </summary>
</histogram>

<histogram name="Settings.TrackedPreferenceTrustedInitialized"
    enum="TrackedPreference">
  <owner>gab@chromium.org</owner>
  <summary>
    The id of a tracked preference which was initialized despite the absence of
    a MAC as the current MACs are trusted, inferring that this is a newly
    tracked pref. Without a suffix, this histogram stands for preference
    validation using MACs in the JSON pref files.
  </summary>
</histogram>

<histogram name="Settings.TrackedPreferenceUnchanged" enum="TrackedPreference">
  <owner>gab@chromium.org</owner>
  <summary>
    The id of a tracked preference whose value has not changed since the last
    time Chrome set it. Without a suffix, this histogram stands for preference
    validation using MACs in the JSON pref files.
  </summary>
</histogram>

<histogram name="Settings.TrackedPreferenceWantedReset"
    enum="TrackedPreference">
  <owner>gab@chromium.org</owner>
  <summary>
    The id of a tracked preference which Chrome would have reset had the config
    allowed it.
  </summary>
</histogram>

<histogram name="Settings.TrackedSplitPreferenceChanged">
  <owner>gab@chromium.org</owner>
  <summary>
    The number of items that had changed in a dictionary pref when
    Settings.TrackedPreferenceChanged is reported for that pref.
  </summary>
</histogram>

<histogram name="Settings.ZoomLevelPreferencesMigrated" enum="BooleanMigrated">
  <obsolete>
    Deprecated 2015-08-18.
  </obsolete>
  <owner>wjmaclean@chromium.org</owner>
  <summary>
    Tracks migration to per-partition zoom-level preferences during profile
    initialization.
  </summary>
</histogram>

<histogram name="SettingsAppMonitor.InitializationResult" enum="BooleanSuccess">
  <owner>grt@chromium.org</owner>
  <summary>
    Indicates whether or not the Windows Settings app monitor was initialized.
  </summary>
</histogram>

<histogram name="SettingsResetBubble.NumNoThanksPerReset">
  <owner>mad@chromium.org</owner>
  <summary>
    Counts the number of times the user clicked on the No Thanks button of the
    settings reset bubble before clicking on the Reset button in the same Chrome
    session.
  </summary>
</histogram>

<histogram name="SettingsResetPrompt.ConfigError"
    enum="SettingsResetPromptConfigError">
  <owner>alito@chromium.org</owner>
  <summary>
    Indicates if an error was detected in the settings reset prompt config data
    while initializing the reset prompt configuration.
  </summary>
</histogram>

<histogram name="SettingsResetPrompt.DelayBeforePromptParam" units="seconds">
  <owner>alito@chromium.org</owner>
  <summary>
    The feature parameter determining the amount of time to wait after startup
    before attempting to show the settings reset prompt. Logged once after
    startup.
  </summary>
</histogram>

<histogram name="SettingsResetPrompt.DialogShown" enum="BooleanShown">
  <owner>alito@chromium.org</owner>
  <summary>
    Indicates whether the settings reset prompt dialog was shown to the user.
  </summary>
</histogram>

<histogram name="SettingsResetPrompt.NumberOfExtensionsDisabled"
    units="extensions">
  <obsolete>
    Deprecated on 2018-01-16.
  </obsolete>
  <owner>alito@chromium.org</owner>
  <summary>
    The number of extensions that were disabled after the user accepted the
    settings reset prompt.
  </summary>
</histogram>

<histogram name="SettingsResetPrompt.NumberOfExtensionsToDisable"
    units="extensions">
  <obsolete>
    Deprecated on 2018-01-16.
  </obsolete>
  <owner>alito@chromium.org</owner>
  <summary>
    The number of extensions that will be disabled if the user accepts the
    settings reset prompt. Logged once after startup.
  </summary>
</histogram>

<histogram name="SettingsResetPrompt.PromptAccepted" enum="BooleanAccepted">
  <owner>alito@chromium.org</owner>
  <summary>
    Indicates whether the user accepted the settings reset prompt.
  </summary>
</histogram>

<histogram name="SettingsResetPrompt.PromptRequired" enum="BooleanRequired">
  <owner>alito@chromium.org</owner>
  <summary>
    Indicates whether the settings reset prompt should be shown to the user
    based on the state of the user's settings.
  </summary>
</histogram>

<histogram name="SettingsResetPrompt.ResetState"
    enum="SettingsResetPromptResetState">
  <owner>alito@chromium.org</owner>
  <summary>
    Indicates whether the settings reset prompt is enabled for the user's
    setting, or the reason for it being disabled. Logged once after startup.
  </summary>
</histogram>

<histogram name="SettingsResetPrompt.SettingsReset"
    enum="SettingsResetPromptSettingsReset">
  <owner>alito@chromium.org</owner>
  <summary>
    Indicates which settings were reset after the user accepted the settings
    reset prompt.
  </summary>
</histogram>

<histogram name="SettingsResetPrompt.TimeUntilAccepted" units="ms">
  <owner>alito@chromium.org</owner>
  <summary>
    The time between the settings reset prompt dialog being shown and the user
    accepting the prompt.
  </summary>
</histogram>

<histogram name="SettingsResetPrompt.TimeUntilCanceled" units="ms">
  <owner>alito@chromium.org</owner>
  <summary>
    The time between the settings reset prompt dialog being shown and the user
    declining the prompt by clicking the cancel button.
  </summary>
</histogram>

<histogram name="SettingsResetPrompt.TimeUntilDeclined" units="ms">
  <obsolete>
    Deprecated in M59 in April 2017 and replaced by
    SettingsResetPrompt.TimeUntilCanceled and
    SettingsResetPrompt.TimeUntilDismissed.
  </obsolete>
  <owner>alito@chromium.org</owner>
  <summary>
    The time between the settings reset prompt dialog being shown and the user
    declining the prompt.
  </summary>
</histogram>

<histogram name="SettingsResetPrompt.TimeUntilDismissed" units="ms">
  <owner>alito@chromium.org</owner>
  <summary>
    The time between the settings reset prompt dialog being shown and the user
    dismissing the prompt, for example by clicking on the 'x' in the dialog or
    pressing the Escape key.
  </summary>
</histogram>

<histogram name="Setup.Install.AddAppContainerAce" enum="Boolean">
  <owner>forshaw@chromium.org</owner>
  <summary>
    True if the the installer successfully added AppContainer ACEs to the
    application directory during installation and updating.
  </summary>
</histogram>

<histogram name="Setup.Install.ApplyArchivePatchTime" units="ms">
  <owner>grt@chromium.org</owner>
  <summary>
    The elapesed time to apply a patch to a previous version's chrome.7z archive
    to generate a new chrome.7z archive. This histogram only applies to diff
    updates.
  </summary>
</histogram>

<histogram name="Setup.Install.DeleteAppHost" enum="BooleanDeletedOrNot">
  <owner>grt@chromium.org</owner>
  <summary>
    Hit following a successful install or update when the legacy
    &quot;app_host.exe&quot; binary is deleted from the filesystem.
  </summary>
</histogram>

<histogram name="Setup.Install.DeleteAppLauncherClientsKey"
    enum="BooleanDeletedOrNot">
  <owner>grt@chromium.org</owner>
  <summary>
    Hit following a successful install or update when the legacy &quot;app
    launcher&quot; Clients key is deleted from the registry.
  </summary>
</histogram>

<histogram name="Setup.Install.DeleteBinariesClientsKey"
    enum="BooleanDeletedOrNot">
  <owner>grt@chromium.org</owner>
  <summary>
    Hit following a successful install or update when the legacy
    &quot;binaries&quot; Clients key is deleted from the registry.
  </summary>
</histogram>

<histogram name="Setup.Install.DeleteIExecuteCommandClassKey"
    enum="BooleanDeletedOrNot">
  <owner>grt@chromium.org</owner>
  <summary>
    Hit following a successful install or update when the COM registration for
    the legacy &quot;IExecuteCommand&quot; implementation class key is deleted
    from the registry.
  </summary>
</histogram>

<histogram name="Setup.Install.DeleteInstallExtensionCommand"
    enum="BooleanDeletedOrNot">
  <owner>grt@chromium.org</owner>
  <summary>
    Hit following a successful install or update when the legacy
    &quot;install-extension&quot; app command is deleted from the registry.
  </summary>
</histogram>

<histogram name="Setup.Install.HasArchivePatch" enum="Boolean">
  <owner>grt@chromium.org</owner>
  <summary>
    True if the chrome.packed.7z archive contains a patch (in which case a diff
    update is taking place) or false if it contains a full archive (in which
    case a new install or a full update is taking place).
  </summary>
</histogram>

<histogram name="Setup.Install.LzmaUnPackNTSTATUS" enum="NTSTATUS">
  <owner>zmin@chromium.org</owner>
  <summary>
    Record the NTSTATUS code of unpacking the contents of a 7z file.
  </summary>
</histogram>

<histogram name="Setup.Install.LzmaUnPackStatus" enum="UnPackStatus">
  <owner>zmin@chromium.org</owner>
  <summary>Record the status of unpacking the contents of a 7z file.</summary>
</histogram>

<histogram name="Setup.Install.MultiChromeFrameRemoved"
    enum="MultiChromeFrameRemovalResult">
  <owner>grt@chromium.org</owner>
  <summary>
    Hit following a successful install or update when data from a legacy
    multi-install Chrome Frame is deleted from the registry.
  </summary>
</histogram>

<histogram name="Setup.Install.NumDeleteOldVersionsAttemptsBeforeAbort"
    units="Attempts">
  <owner>fdoray@chromium.org</owner>
  <summary>
    Number of calls to DeleteOldVerions() made by a --delete-old-versions
    process that didn't delete all files that belong to old versions of Chrome.
    A --delete-old-versions process exits when another process tries to acquire
    the SetupSingleton or after too many unsuccessful attempts to delete all old
    files. A --delete-old-versions process that successfully acquires the
    SetupSingleton records to either the
    Setup.Install.NumDeleteOldVersionsAttemptsBeforeAbort histogram or the
    Setup.Install.NumDeleteOldVersionsAttemptsBeforeSuccess histogram.
  </summary>
</histogram>

<histogram name="Setup.Install.NumDeleteOldVersionsAttemptsBeforeSuccess"
    units="Attempts">
  <owner>fdoray@chromium.org</owner>
  <summary>
    Number of calls to DeleteOldVersions() made by a --delete-old-versions
    process that successfully deleted all files that belong to old versions of
    Chrome. A --delete-old-versions process that successfully acquires the
    SetupSingleton records to either the
    Setup.Install.NumDeleteOldVersionsAttemptsBeforeAbort histogram or the
    Setup.Install.NumDeleteOldVersionsAttemptsBeforeSuccess histogram.
  </summary>
</histogram>

<histogram name="Setup.Install.PeakPagefileUsage" units="KB">
  <owner>huangs@chromium.org</owner>
  <summary>
    The peak page file usage by setup.exe in KB during install or uninstall
    attempt.
  </summary>
</histogram>

<histogram name="Setup.Install.PeakWorkingSetSize" units="KB">
  <owner>huangs@chromium.org</owner>
  <summary>
    The peak working set size of setup.exe in KB during install or uninstall
    attempt.
  </summary>
</histogram>

<histogram name="Setup.Install.Result" enum="SetupInstallResult">
  <owner>grt@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    The final exit-result of the entire run of setup.exe on Windows.
  </summary>
</histogram>

<histogram name="Setup.Install.SingletonAcquisitionResult"
    enum="SetupSingletonAcquisitionResult">
  <owner>fdoray@chromium.org</owner>
  <summary>
    The result of trying to acquire a setup singleton. On Windows, a setup.exe
    process must hold the setup singleton of a Chrome installation when it makes
    changes to it.
  </summary>
</histogram>

<histogram name="Setup.Install.StrandedChromeIsUsed" enum="BooleanUsage">
  <owner>grt@chromium.org</owner>
  <summary>
    The disposition of a stranded Chrome install discovered while updating
    multi-install Chrome Binaries. This metric is only logged in an edge case.
    The buckets indicate whether or not the &quot;stranded&quot; Chrome install
    has been used in the last 28 days. If so, it respresents a Chrome that has
    not been updating due to a logic flaw in the installer and will be repaired
    in the current update. If not, it likely represents Chrome Binaries that
    were previously used by Chrome Frame that has since been uninstalled and
    that will be uninstalled in a future update.
  </summary>
</histogram>

<histogram name="Setup.Install.UncompressArchivePatchTime" units="ms">
  <owner>grt@chromium.org</owner>
  <summary>
    The elapsed time to uncompress a chrome.7z patch. This histogram only
    applies to diff updates.
  </summary>
</histogram>

<histogram name="Setup.Install.UncompressFullArchiveTime" units="ms">
  <owner>grt@chromium.org</owner>
  <summary>
    The elapsed time to uncompress a full chrome.7z archive. This histogram only
    applies to new installs and to full updates.
  </summary>
</histogram>

<histogram name="Setup.Install.UnpackFullArchiveTime" units="ms">
  <owner>grt@chromium.org</owner>
  <summary>
    The elapsed time to unpack the uncompressed chrome.7z archive. This
    histogram applies to all installs and updates.
  </summary>
</histogram>

<histogram name="SharedMemory.CreateError" enum="SharedMemoryCreateError"
    expires_after="2018-08-30">
  <owner>erikchen@chromium.org</owner>
  <summary>
    A histogram entry is emitted each time a base::SharedMemory object is
    constructed. The value of the entry indicates the type of error encountered
    during construction.
  </summary>
</histogram>

<histogram name="SharedMemory.CreateWinError" enum="WinGetLastError">
  <owner>bcwhite@chromium.org</owner>
  <summary>
    A histogram entry is emitted each time a base::SharedMemory object could not
    be created due to a failed Windows system call. The value of the entry
    indicates the result of the GetLastError() API call.
  </summary>
</histogram>

<histogram name="SharedMemory.TimeSpentMakingAnonymousMemory" units="ms">
  <obsolete>
    Deprecated 2015-06 because the Finch experiment SharedMemoryCreateStrategy
    has finished running.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    The time spent making a new region of shared, anonymous memory. This metric
    is not emitted if the shared memory region is read only.
  </summary>
</histogram>

<histogram name="SharedWorker.RendererSurviveForWorkerTime" units="ms">
  <obsolete>
    Replaced with BrowserRenderProcessHost.KeepAliveDuration as of Aug 2017.
  </obsolete>
  <owner>horo@chromium.org</owner>
  <summary>
    A survival time of RenderProcessHostImpl for the In-renderer Shared Worker
    from when FastShutdownIfPossible() is called.
  </summary>
</histogram>

<histogram name="SharedWorker.TimeToDeleted" units="ms">
  <owner>horo@chromium.org</owner>
  <summary>
    The lifetime of a SharedWorkerHost. This roughly corresponds to the lifetime
    of SharedWorker.
  </summary>
</histogram>

<histogram name="SharedWorker.TimeToScriptLoaded" units="ms">
  <owner>horo@chromium.org</owner>
  <summary>
    The time from the creation of SharedWorkerHost until when WorkerScriptLoaded
    is called.
  </summary>
</histogram>

<histogram name="SharedWorker.TimeToScriptLoadFailed" units="ms">
  <owner>horo@chromium.org</owner>
  <summary>
    The time from the creation of SharedWorkerHost until when
    WorkerScriptLoadFailed is called.
  </summary>
</histogram>

<histogram name="ShortcutsProvider.DatabaseSize" expires_after="2018-08-30">
  <owner>mpearson@chromium.org</owner>
  <summary>
    The number of entries in shortcuts backend's database when initialized,
    which happens during profile load.
  </summary>
</histogram>

<histogram name="ShortcutsProvider.QueryIndexTime" units="ms">
  <owner>davidben@chromium.org</owner>
  <summary>
    The time it takes for the ShortcutsProvider to perform a query after the
    user has typed N characters.
  </summary>
</histogram>

<histogram name="Shutdown.browser_exit.time">
  <obsolete>
    Replaced by Shutdown.browser_exit.time2 to get more resolution into the tail
    of the distribution (10/2016).
  </obsolete>
  <owner>hashimoto@chromium.org</owner>
  <summary>
    Time for shutdown initiated by the browser exit menu command.
  </summary>
</histogram>

<histogram name="Shutdown.browser_exit.time2">
  <owner>hashimoto@chromium.org</owner>
  <summary>
    Time for shutdown initiated by the browser exit menu command.
  </summary>
</histogram>

<histogram name="Shutdown.browser_exit.time_per_process">
  <owner>hashimoto@chromium.org</owner>
  <summary>
    Time for shutdown initiated by the browser exit menu command per renderer
    process.
  </summary>
</histogram>

<histogram name="Shutdown.end_session.time">
  <obsolete>
    Replaced by Shutdown.end_session.time2 to get more resolution into the tail
    of the distribution (10/2016).
  </obsolete>
  <owner>hashimoto@chromium.org</owner>
  <summary>
    Time for shutdown initiated by an end session (user logs off, shuts down or
    reboots without explicitly exiting).
  </summary>
</histogram>

<histogram name="Shutdown.end_session.time2">
  <owner>hashimoto@chromium.org</owner>
  <summary>
    Time for shutdown initiated by an end session (user logs off, shuts down or
    reboots without explicitly exiting).
  </summary>
</histogram>

<histogram name="Shutdown.end_session.time_per_process">
  <owner>hashimoto@chromium.org</owner>
  <summary>
    Time for shutdown initiated by an end session (user logs off, shuts down or
    reboots without explicitly exiting) per renderer process.
  </summary>
</histogram>

<histogram name="Shutdown.renderers.slow">
  <owner>hashimoto@chromium.org</owner>
  <summary>
    The number of renderer processes that couldn't be shutdown quickly due to
    onbeforeunload or onunload listeners.
  </summary>
</histogram>

<histogram name="Shutdown.renderers.total">
  <owner>hashimoto@chromium.org</owner>
  <summary>
    The number of renderer processes running when shutdown was called.
  </summary>
</histogram>

<histogram name="Shutdown.ShutdownType" enum="ShutdownType">
  <owner>hashimoto@chromium.org</owner>
  <summary>The type of the last shutdown.</summary>
</histogram>

<histogram name="Shutdown.window_close.time" units="ms">
  <obsolete>
    Replaced by Shutdown.window_close.time2 to get more resolution into the tail
    of the distribution (10/2016).
  </obsolete>
  <owner>hashimoto@chromium.org</owner>
  <summary>
    Time for shutdown initiated by the last browser window being closed.
  </summary>
</histogram>

<histogram name="Shutdown.window_close.time2" units="ms">
  <owner>hashimoto@chromium.org</owner>
  <summary>
    Time for shutdown initiated by the last browser window being closed.
  </summary>
</histogram>

<histogram name="Shutdown.window_close.time_per_process">
  <owner>hashimoto@chromium.org</owner>
  <summary>
    Time for shutdown initiated by the last browser window being closed per
    renderer process.
  </summary>
</histogram>

<histogram name="Signin" enum="SigninHelperFlow">
  <owner>mlerman@chromium.org</owner>
  <summary>
    Tracks user interactions as they sign in through a flow. The suffix of the
    histogram indicates what UI widget or application flow triggered the signin
    flow.
  </summary>
</histogram>

<histogram name="Signin.AccountEquality" enum="SigninAccountEquality">
  <owner>skym@chromium.org</owner>
  <summary>
    There are two separate ways to test for account equality, using the account
    id or the email. Historically the email was always used, but going forward
    email will be modifiable. Now when we check account equality we use both
    approaches and emit this metric to capture if they agreed or not.
  </summary>
</histogram>

<histogram name="Signin.AccountReconcilorState.OnGaiaResponse"
    enum="SigninAccountReconcilorState">
  <owner>bzanotti@chromium.org</owner>
  <summary>
    Records the state of the account reconcilor when GAIA returns a specific
    response.
  </summary>
</histogram>

<histogram name="Signin.AddAccount" enum="BooleanSuccess">
  <owner>mlerman@chromium.org</owner>
  <summary>
    Track when chrome successfully adds an account. Failures are not tracked.
  </summary>
</histogram>

<histogram name="Signin.AndroidAccountSigninViewSeedingTime" units="ms">
  <owner>bsazonov@chromium.org</owner>
  <summary>
    The time it takes to seed accounts before proceeding to the account
    confirmation screen.
  </summary>
</histogram>

<histogram name="Signin.AndroidGetAccountsTime" units="ms">
  <owner>nyquist@chromium.org</owner>
  <summary>
    The time it takes to retrieve the list of accounts from the system.
  </summary>
</histogram>

<histogram name="Signin.AndroidGetAccountsTimeUiThread" units="ms">
  <owner>bsazonov@chromium.org</owner>
  <summary>
    The time it takes to retrieve the list of accounts from the system on the UI
    thread.
  </summary>
</histogram>

<histogram name="Signin.AndroidGmsUpdatingDialogShownTime" units="ms">
  <owner>bsazonov@chromium.org</owner>
  <summary>
    How long the &quot;Waiting for Google Play Services to finish updating&quot;
    dialog is shown.
  </summary>
</histogram>

<histogram name="Signin.AndroidPopulateAccountCacheWaitingTime" units="ms">
  <owner>bsazonov@chromium.org</owner>
  <summary>
    The time UI thread spent waiting for the list of accounts to be populated.
  </summary>
</histogram>

<histogram name="Signin.AndroidSigninPromoAction"
    enum="AndroidSigninPromoAction">
  <obsolete>
    Removed this histogram since we have had newly designed histograms
    Signin.SigninStartedAccessPoint, Signin.SigninCompletedAccessPoint, and
    Signin.SigninReason.
  </obsolete>
  <owner>guohui@chromium.org</owner>
  <summary>Track how a user interfacts with the android signin promo.</summary>
</histogram>

<histogram name="Signin.AuthenticatedLaunchUserEvent"
    enum="AuthenticatedLaunchUserEvent">
  <owner>zmin@chromium.org</owner>
  <summary>
    Records the UI event when user clicks a locked profile on UserManager.
    Please note that if the local reauth failed, UserManager might show Gaia
    Reauth dialog.
  </summary>
</histogram>

<histogram name="Signin.AuthError" enum="GoogleServiceAuthError">
  <owner>mlerman@chromium.org</owner>
  <summary>
    Log the type of GAIA authentication error that occur whenever the error
    state changes.
  </summary>
</histogram>

<histogram name="Signin.ChromePrimaryAccountStateOnWebSignout"
    enum="ChromePrimaryAccountStateInGaiaCookies">
  <owner>droger@chromium.org</owner>
  <summary>
    Logs the state of the Chrome account when the user signs out on the web.
    This assumes that a logout of the web is always a complete logout of all the
    web accounts (e.g. single session signout is not supported). TODO(droger):
    make this histogram obsolete when Dice is launched.
  </summary>
</histogram>

<histogram name="Signin.CookieJar.ChromeAccountRelation" enum="AccountRelation">
  <owner>skym@chromium.org</owner>
  <summary>
    The relation between the account signed into chrome, and the account(s) in
    the cookie jar. This metric is never recorded when not signed into chrome.
  </summary>
</histogram>

<histogram name="Signin.CookieJar.SignedInCount" units="accounts">
  <owner>skym@chromium.org</owner>
  <summary>The number of signed in accounts in the cookie jar.</summary>
</histogram>

<histogram name="Signin.CookieJar.SignedOutCount" units="accounts">
  <owner>skym@chromium.org</owner>
  <summary>The number of signed out accounts in the cookie jar.</summary>
</histogram>

<histogram name="Signin.CookieJar.StableAge" units="seconds">
  <owner>skym@chromium.org</owner>
  <summary>The amount of time since the cookie jar last changed.</summary>
</histogram>

<histogram name="Signin.CookieJar.TotalCount" units="accounts">
  <owner>skym@chromium.org</owner>
  <summary>The total number of accounts in the cookie jar.</summary>
</histogram>

<histogram name="Signin.DiceEnabledForProfile" enum="Boolean">
  <obsolete>
    Replaced by Signin.DiceMigrationStatus. Does not have any meaningful
    information.
  </obsolete>
  <owner>droger@chromium.org</owner>
  <summary>
    Whether Dice is enabled for the current profile, recorded at startup.
  </summary>
</histogram>

<histogram name="Signin.DiceMigrationStatus" enum="SigninDiceMigrationStatus">
  <owner>droger@chromium.org</owner>
  <summary>
    The Dice migration status, recorded at startup for each profile.
  </summary>
</histogram>

<histogram name="Signin.DiceResponseHeader" enum="SigninDiceResponseHeader">
  <owner>droger@chromium.org</owner>
  <summary>Records Dice responses (signin and signout).</summary>
</histogram>

<histogram name="Signin.DiceTokenFetchResult" enum="SigninDiceTokenFetchResult">
  <owner>droger@chromium.org</owner>
  <summary>Outcome of the token fetch in Dice signin.</summary>
</histogram>

<histogram name="Signin.DuringFirstRun">
  <owner>mlerman@chromium.org</owner>
  <summary>
    Track if the profile sign in took place during First Run or not. Logged at
    signin time. True means signin took place during First Run, False means
    anytime after.
  </summary>
</histogram>

<histogram name="Signin.ElapsedTimeFromInstallToSignin" units="minutes">
  <owner>mlerman@chromium.org</owner>
  <summary>
    Track how many minutes of local system time elapsed from when Chrome was
    installed to when Signin occured for this profile.
  </summary>
</histogram>

<histogram name="Signin.ForceSigninVerificationRequest" enum="BooleanRequested">
  <owner>zmin@chromium.org</owner>
  <summary>
    The number profile load events that needs a force-sign-in verification
    request. It's recorded when profile is loaded with an authentication token
    and force-sign-in policy is enabled.
  </summary>
</histogram>

<histogram name="Signin.ForceSigninVerificationTime" units="ms">
  <owner>zmin@chromium.org</owner>
  <summary>
    Elapsed time of the force-sign-in verfication if it's finished. It includes
    total network delay, retry delay and wait time due to no connection. The
    verfication will not be recorded if it's not finished before profile is
    signed out or removed from memory.
  </summary>
</histogram>

<histogram name="Signin.InvalidGaiaCredentialsReason"
    enum="SigninInvalidGaiaCredentialsReason">
  <owner>droger@chromium.org</owner>
  <summary>
    Reason for invalid Gaia credentials. Recorded when Signin.AuthError records
    invalid credentials.
  </summary>
</histogram>

<histogram name="Signin.InvestigatedScenario" enum="SigninInvestigatedScenario">
  <owner>skym@chromium.org</owner>
  <summary>
    Records the general type of signin that is occuring in relation to previous
    signin and local data.
  </summary>
</histogram>

<histogram name="Signin.IsShared" enum="BooleanIsShared">
  <owner>skym@chromium.org</owner>
  <summary>
    Current best guess if this device is shared between multiple users.
  </summary>
</histogram>

<histogram name="Signin.ListAccountsFailure" enum="GoogleServiceAuthError">
  <owner>mlerman@chromium.org</owner>
  <summary>
    Failure reason of ListAccounts call failure during account reconciliation,
    Chrome OS login, or signin internals queries.
  </summary>
</histogram>

<histogram name="Signin.ListAccountsRetry" enum="GoogleServiceAuthError">
  <owner>mlerman@chromium.org</owner>
  <summary>
    Retry reason of failed ListAccounts call during Chrome OS login during
    account reconciliation, Chrome OS login, or signin internals queries.
  </summary>
</histogram>

<histogram name="Signin.LoadTokenFromDB" enum="SigninLoadTokenFromDB">
  <owner>droger@chromium.org</owner>
  <summary>
    Action taken for tokens being loaded from the token database, at Chrome
    startup. Tokens can be either loaded into Chrome's token service or revoked.
  </summary>
</histogram>

<histogram name="Signin.OAuth2TokenGetFailure" enum="GoogleServiceAuthError">
  <owner>mlerman@chromium.org</owner>
  <summary>
    Reason fetching an OAuth2 Token failed. Available on all OSes.
  </summary>
</histogram>

<histogram name="Signin.OAuth2TokenGetRetry" enum="GoogleServiceAuthError">
  <owner>mlerman@chromium.org</owner>
  <summary>
    Reason fetching an OAuth2 Token is being retried. Available on all OSes.
  </summary>
</histogram>

<histogram name="Signin.OneClickConfirmation" enum="SigninFlowConfirmations">
  <owner>noms@chromium.org</owner>
  <summary>
    Count of the ways users interact with the confirmation dialogs of the new
    web based sign in to Chrome flow (accessed via the one click signin).
  </summary>
</histogram>

<histogram name="Signin.Reauth" enum="SigninReauthStates">
  <owner>noms@chromium.org</owner>
  <summary>Tracks events related to the reauthentication Gaia page.</summary>
</histogram>

<histogram name="Signin.Reconciler.AddedToChrome">
  <obsolete>
    Deprecated 2014-09 because chrome no longer tries to reconcile from the
    cookie jar to the browser.
  </obsolete>
  <owner>mlerman@chromium.org</owner>
  <summary>
    How many accounts were added to the browser's token service because they
    were in the cookie jar.
  </summary>
</histogram>

<histogram name="Signin.Reconciler.AddedToCookieJar">
  <owner>mlerman@chromium.org</owner>
  <summary>
    How many accounts were added to the cookie jar because they were in the
    browser's token service.
  </summary>
</histogram>

<histogram name="Signin.Reconciler.AllExternalCcResultCompleted"
    enum="BooleanSuccess">
  <owner>mlerman@chromium.org</owner>
  <summary>
    Records whether all external connections have been successfully checked (a
    value of &quot;true&quot;) or not (&quot;false&quot;) when the reconciler
    attempts to perform MergeSession.
  </summary>
</histogram>

<histogram name="Signin.Reconciler.DifferentPrimaryAccounts"
    enum="DifferentPrimaryAccounts">
  <owner>mlerman@chromium.org</owner>
  <summary>
    After execution of the account reconcilor, compares the primary account in
    the token service to the primary GAIA account of the cookie jar.
  </summary>
</histogram>

<histogram name="Signin.Reconciler.Duration">
  <owner>rogerta@chromium.org</owner>
  <summary>Records the execution time of the account reconciler.</summary>
</histogram>

<histogram name="Signin.Reconciler.ExternalCcResultTime.Completed">
  <owner>mlerman@chromium.org</owner>
  <summary>
    Records the time it took to successfully check all external connections
    whenever the reconciler performs a reconciliation.
  </summary>
</histogram>

<histogram name="Signin.Reconciler.ExternalCcResultTime.NotCompleted">
  <owner>mlerman@chromium.org</owner>
  <summary>
    Records the time it took to check only a portion of external connections
    whenever the reconciler performs a reconciliation.  This means that either a
    network error occured while checking some sites or the site did not respond
    before the check timeout.
  </summary>
</histogram>

<histogram name="Signin.Reconciler.RemovedFromCookieJar">
  <owner>mlerman@chromium.org</owner>
  <summary>
    How many accounts were removed from the cookie jar because they were not in
    the browser's token service.
  </summary>
</histogram>

<histogram name="Signin.RefreshTokenAnnotationRequest" enum="BooleanSuccess">
  <obsolete>
    Removed this histogram along with the code that was logging it.
  </obsolete>
  <owner>pavely@chromium.org</owner>
  <summary>
    Track when chrome successfully sends RefreshTokenAnnotationRequest.
  </summary>
</histogram>

<histogram name="Signin.RefreshTokenRevocationRequestProgress"
    enum="SigninRefreshTokenRevocationRequestProgress">
  <owner>droger@chromium.org</owner>
  <summary>
    Tracks the progress of revocation requests for refresh tokens, and can be
    used to check how many requests do not complete and why. Recorded for each
    refresh token revocation request from the token service.
  </summary>
</histogram>

<histogram name="Signin.RefreshTokenRevocationStatus"
    enum="GaiaTokenRevocationStatus">
  <owner>droger@chromium.org</owner>
  <summary>
    Reports the status (including error details) of token revocation requests
    after they complete.
  </summary>
</histogram>

<histogram name="Signin.SignedInDurationBeforeSignout" units="minutes">
  <owner>mlerman@chromium.org</owner>
  <summary>
    Track how many minutes of real time (not browser active time) elapsed
    between profile signin and signout.
  </summary>
</histogram>

<histogram name="Signin.SigninCompletedAccessPoint" enum="SigninAccessPoint">
  <owner>gogerald@chromium.org</owner>
  <summary>Logs the original access point of each completed sign in.</summary>
</histogram>

<histogram name="Signin.SigninReason" enum="SigninReason">
  <owner>gogerald@chromium.org</owner>
  <summary>Logs the reason of each completed sign in.</summary>
</histogram>

<histogram name="Signin.SigninSource" enum="SigninSource">
  <obsolete>
    Removed this histogram since we have had newly designed histograms
    Signin.SigninStartedAccessPoint, Signin.SigninCompletedAccessPoint, and
    Signin.SigninReason.
  </obsolete>
  <owner>noms@chromium.org</owner>
  <summary>
    Logs the original source that displayed the signin or reauth Gaia page,
    before the page is displayed.
  </summary>
</histogram>

<histogram name="Signin.SigninStartedAccessPoint" enum="SigninAccessPoint">
  <owner>gogerald@chromium.org</owner>
  <summary>
    Logs the original access point that displayed the signin or reauth Gaia
    page, before the page is displayed.
  </summary>
</histogram>

<histogram name="Signin.SignoutDeleteProfile" enum="BooleanDeletedOrNot">
  <owner>skym@chromium.org</owner>
  <summary>
    If the user chose to delete their profile or not when signing out of an
    unmanaged account. When the user is not given a choice this metric is not
    recorded.
  </summary>
</histogram>

<histogram name="Signin.SignoutProfile" enum="SigninSignoutProfile">
  <owner>mlerman@chromium.org</owner>
  <summary>Track how a profile gets signed out.</summary>
</histogram>

<histogram name="Signin.SwitchSyncAccount.Source"
    enum="SigninSwitchSyncAccountSource">
  <owner>bsazonov@chromium.org</owner>
  <summary>
    Tracks the usage of different flows that switch sync accounts. Logged after
    accounts have been switched.
  </summary>
</histogram>

<histogram name="Signin.TokenStateTransition" enum="SigninTokenStateTransition">
  <owner>droger@chromium.org</owner>
  <summary>
    Tracks the changes of refresh token states for all accounts. Tokens can have
    three states: Regular (retrieved from Gaia), Invalid (created by Chrome and
    known to be invalid) or None (no token). Recorded when a token is loaded or
    changed.
  </summary>
</histogram>

<histogram name="Signin.TokenTable.GetAllTokensSqlStatementValidity"
    enum="BooleanValid">
  <owner>msarda@chromium.org</owner>
  <summary>
    Counts how many times the SQL statements to get all tokens is valid.
  </summary>
</histogram>

<histogram name="Signin.TokenTable.ReadTokenFromDBResult"
    enum="SigninTokenTableReadTokenFromDBResult">
  <owner>msarda@chromium.org</owner>
  <summary>
    Counts the results of loading a refresh token from the token database.
  </summary>
</histogram>

<histogram name="Signin.UberTokenFailure" enum="GoogleServiceAuthError">
  <owner>mlerman@chromium.org</owner>
  <summary>
    Reason of failure to acquiring an ubertoken based on an already-minted
    access token. Available on all OSes.
  </summary>
</histogram>

<histogram name="Signin.UberTokenRetry" enum="GoogleServiceAuthError">
  <owner>mlerman@chromium.org</owner>
  <summary>
    Retry reason of failure to acquire an ubertoken based on an already-minted
    access token. Available on all OSes.
  </summary>
</histogram>

<histogram name="Signin.XDevicePromo.BrowsingSessionDuration" units="minutes">
  <owner>anthonyvd@chromium.org</owner>
  <owner>mlerman@chromium.org</owner>
  <summary>
    How long a browsing session was measured to be. Logged when a Browser window
    becomes active if the previous activation was longer than the minimum
    configured in the &quot;CrossDevicePromo&quot; experiment. Desktop only.
  </summary>
</histogram>

<histogram name="Signin.XDevicePromo.BrowsingSessionDurationComputed"
    units="minutes">
  <owner>anthonyvd@chromium.org</owner>
  <owner>mlerman@chromium.org</owner>
  <summary>
    How often browsers are considered activated, which in turn triggers the
    CrossDevicePromo. Logged every time a Browser window becomes active. We need
    this to estimate QPS for RPC calls. Desktop only.
  </summary>
</histogram>

<histogram name="Signin.XDevicePromo.Eligibility"
    enum="SigninXDevicePromoEligibility">
  <owner>anthonyvd@chromium.org</owner>
  <owner>mlerman@chromium.org</owner>
  <summary>
    The reasons for which a profile is or is not eligible for the Desktop Cross
    Device Sign In Promo. Logged every time a new Browsing session is detected
    as part of a Browser window becoming active. Desktop only.
  </summary>
</histogram>

<histogram name="Signin.XDevicePromo.Initialized"
    enum="SigninXDevicePromoInitialized">
  <owner>anthonyvd@chromium.org</owner>
  <owner>mlerman@chromium.org</owner>
  <summary>
    Tracks if profiles initialized the XDevicePromo, and if not, why. Logged at
    Profile startup and (if not initialized then) when a new browsing session is
    detected during Browser window activation. Desktop only.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.CacheSizeOnInit" units="KB">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The size of the cache at the time that the index has finished initializing.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.CheckCRCResult" enum="CheckCRCResult">
  <owner>morlovich@chromium.org</owner>
  <summary>
    Whether or not the CRC was checked at the moment when the last reference to
    a read-only entry stream is closed.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.CreationToIndex" units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The time from the creation of the simple cache backend until the index has
    been loaded from disk.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.CreationToIndexFail" units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The time from the creation of the simple cache backend until the index fails
    to load.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.DiskCloseLatency" units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The time to close (write out footers and close the file) the cache entry on
    disk. Includes only successful operations.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.DiskCreateLatency" units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The time to access (open for creation and write initial headers) the cache
    entry on disk. Includes only successful operations.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.DiskDoomLatency" units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The time to remove the cache entry on disk. Includes only individually
    doomed entries, not entries bulk-erased during eviction.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.DiskOpenLatency" units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The time to access (open and read headers from all files) the cache entry on
    disk. Includes only successful operations.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.DiskOpenStream2NonTinyLatency"
    units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The time to open the stream 2 file successfully on disk cache entry open
    with known key, when the size of payload is greater than 32 bytes.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.DiskOpenStream2TinyLatency" units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The time to open the stream 2 file successfully on disk cache entry open
    with known key, when the size of payload is 32 bytes or less.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.DiskWriteLatency" units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The time to write a chunk to the cache entry on disk. Includes only
    successful operations.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.EntryCreatedAndStream2Omitted"
    enum="SimpleCache.EntryCreatedAndStream2Omitted">
  <obsolete>
    Removed 2018-02. Not creating stream 2 on CreateEntry entries is indeed a
    good idea, since stream 2 writes are done on things opened with OpenEntry.
    (Which also means this metric wasn't good at evaluating the prevalence of
    stream 2 in general).
  </obsolete>
  <owner>morlovich@chromium.org</owner>
  <summary>
    Whether, upon creation of a new cache entry, the file for stream 2 was
    omitted since that stream was empty.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.EntryCreationResult"
    enum="BooleanSuccess">
  <owner>morlovich@chromium.org</owner>
  <summary>
    For entry creation operations that were sent to the disk, the result of
    creation.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.EntryCreationTime" units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>The time, in ms, spent creating a new entry on disk.</summary>
</histogram>

<histogram base="true" name="SimpleCache.EntryOpenedAndStream2Removed"
    enum="SimpleCache.EntryOpenedAndStream2Removed">
  <owner>morlovich@chromium.org</owner>
  <summary>
    Whether, upon opening of an existing cache entry, stream 2 was empty and the
    file for that stream was therefore removed.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.EntryOperationsPending">
  <owner>morlovich@chromium.org</owner>
  <summary>
    At the time that operations are run, the number of pending operations on a
    particular entry.
  </summary>
</histogram>

<histogram name="SimpleCache.Eviction.CacheSizeOnStart" units="bytes">
  <obsolete>
    Deprecated 2013 in favour of SimpleCache.Eviction.CacheSizeOnStart2
  </obsolete>
  <owner>morlovich@chromium.org</owner>
  <summary>The size of the cache at the beginning of an eviction.</summary>
</histogram>

<histogram base="true" name="SimpleCache.Eviction.CacheSizeOnStart2" units="KB">
  <owner>morlovich@chromium.org</owner>
  <summary>The size of the cache at the beginning of an eviction.</summary>
</histogram>

<histogram base="true" name="SimpleCache.Eviction.EntryCount">
  <owner>morlovich@chromium.org</owner>
  <summary>The number of entries to be erased in an eviction.</summary>
</histogram>

<histogram name="SimpleCache.Eviction.MaxCacheSizeOnStart" units="bytes">
  <obsolete>
    Deprecated 2013 in favour of SimpleCache.Eviction.MaxCacheSizeOnStart2
  </obsolete>
  <owner>morlovich@chromium.org</owner>
  <summary>
    The maximum allowed size of the cache at the beginning of an eviction.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.Eviction.MaxCacheSizeOnStart2"
    units="KB">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The maximum allowed size of the cache at the beginning of an eviction.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.Eviction.Result" enum="BooleanSuccess">
  <owner>morlovich@chromium.org</owner>
  <summary>The result of an eviction.</summary>
</histogram>

<histogram name="SimpleCache.Eviction.SizeOfEvicted" units="bytes">
  <obsolete>
    Deprecated 2013 in favour of SimpleCache.Eviction.SizeOfEvicted2
  </obsolete>
  <owner>morlovich@chromium.org</owner>
  <summary>The number of bytes to be erased in an eviction.</summary>
</histogram>

<histogram base="true" name="SimpleCache.Eviction.SizeOfEvicted2" units="KB">
  <owner>morlovich@chromium.org</owner>
  <summary>The amount of memory freed in an eviction.</summary>
</histogram>

<histogram name="SimpleCache.Eviction.SizeWhenDone" units="bytes">
  <obsolete>
    Deprecated 2013 in favour of SimpleCache.Eviction.SizeWhenDone2
  </obsolete>
  <owner>morlovich@chromium.org</owner>
  <summary>The size of the cache after running an eviction.</summary>
</histogram>

<histogram base="true" name="SimpleCache.Eviction.SizeWhenDone2" units="KB">
  <owner>morlovich@chromium.org</owner>
  <summary>The size of the cache after running an eviction.</summary>
</histogram>

<histogram base="true" name="SimpleCache.Eviction.TimeToDone" units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>Time spent completing an eviction.</summary>
</histogram>

<histogram base="true" name="SimpleCache.Eviction.TimeToSelectEntries"
    units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>Time spent selecting entries for eviction.</summary>
</histogram>

<histogram name="SimpleCache.FileDescriptorLimiterAction"
    enum="SimpleCache.FileDescriptorLimiterOp">
  <owner>morlovich@chromium.org</owner>
  <summary>
    This even is emitted when SimpleCache is forced to either close some files
    due to being over FD limit, or reopen files it had to close due to such
    limit earlier.
  </summary>
</histogram>

<histogram name="SimpleCache.FileDescriptorLimitHard" units="file descriptors">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The maximum limit of how many file descriptors a process can open.  Emitted
    each time the browser is launched, if the limit could be retrieved.  (This
    is the highest value we could raise the current limit to if we liked.)
  </summary>
</histogram>

<histogram name="SimpleCache.FileDescriptorLimitSoft" units="file descriptors">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The current limit of how many file descriptors a process can open.  Emitted
    each time the browser is launched, if the limit could be retrieved.  (We can
    raise this to the maximum limit if we like, without root access.)
  </summary>
</histogram>

<histogram name="SimpleCache.FileDescriptorLimitStatus"
    enum="SimpleCache.FileDescriptorLimitStatus">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The result of trying to get the file descriptor limit.  Emitted each time
    the browser is launched.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.GlobalOpenEntryCount">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The number of open entries across all caches backed by the Simple Cache. An
    entry is opened whenever a caller asks to open it to read or write cache
    data, and remains open until the last caller asks to close it. Logged
    whenever an entry is opened or closed.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.HeaderSize" units="bytes">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The size of the header stream of a Simple Cache entry, emitted every time
    the headers are written or rewritten.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.HeaderSizeChange"
    enum="SimpleCacheHeaderSizeChange">
  <obsolete>
    Removed 2018-06-05
  </obsolete>
  <owner>morlovich@chromium.org</owner>
  <summary>
    How the header size has changed in a Simple Cache entry, emitted every time
    a write operation occurs on the header stream.  (This includes the initial
    write, rewrites, and other writes that we couldn't classify.)
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.HeaderSizeDecreaseAbsolute"
    units="bytes">
  <obsolete>
    Removed 2018-06-05
  </obsolete>
  <owner>morlovich@chromium.org</owner>
  <summary>
    The absolute size decrease of the header stream of a Simple Cache entry,
    emitted every time the headers are rewritten with a smaller size.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.HeaderSizeDecreasePercentage"
    units="%">
  <obsolete>
    Removed 2018-06-05
  </obsolete>
  <owner>morlovich@chromium.org</owner>
  <summary>
    The relative size decrease of the header stream of a Simple Cache entry,
    emitted every time the headers are rewritten with a smaller size.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.HeaderSizeIncreaseAbsolute"
    units="bytes">
  <obsolete>
    Removed 2018-06-05
  </obsolete>
  <owner>morlovich@chromium.org</owner>
  <summary>
    The absolute size increase of the header stream of a Simple Cache entry,
    emitted every time the headers are rewritten with a larger size.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.HeaderSizeIncreasePercentage"
    units="%">
  <obsolete>
    Removed 2018-06-05
  </obsolete>
  <owner>morlovich@chromium.org</owner>
  <summary>
    The relative size increase of the header stream of a Simple Cache entry,
    emitted every time the headers are rewritten with a larger size.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.IndexCorrupt" enum="BooleanCorrupt">
  <owner>morlovich@chromium.org</owner>
  <summary>For each index load, whether the index file was corrupt.</summary>
</histogram>

<histogram base="true" name="SimpleCache.IndexCreatedEntryCount">
  <owner>morlovich@chromium.org</owner>
  <summary>The number of entries in a newly created index file.</summary>
</histogram>

<histogram base="true" name="SimpleCache.IndexEntriesLoaded">
  <owner>morlovich@chromium.org</owner>
  <summary>Number of entries loaded from the index file on start.</summary>
</histogram>

<histogram base="true" name="SimpleCache.IndexEntriesRestored">
  <owner>morlovich@chromium.org</owner>
  <summary>
    Number of entries restored from disk when there was no index or the index
    was corrupted.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.IndexFileStateOnLoad"
    enum="SimpleIndexState">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The state the index file is at when an attempt is made to load from it.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.IndexInitializationWaiters">
  <owner>morlovich@chromium.org</owner>
  <summary>
    At the time of index initialization, the number of enqueued jobs awaiting
    index initialization.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.IndexInitializeMethod"
    enum="SimpleCacheIndexInitializeMethod">
  <owner>morlovich@chromium.org</owner>
  <summary>The method used to initialize the simple cache index.</summary>
</histogram>

<histogram base="true" name="SimpleCache.IndexLoadTime" units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>
    Time (as measured on the worker pool) spent loading the index file.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.IndexNumEntriesOnInit" units="entries">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The number of entries in the index at the time that the index has finished
    initializing.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.IndexNumEntriesOnWrite">
  <owner>morlovich@chromium.org</owner>
  <summary>The number of entries written to the index on a flush.</summary>
</histogram>

<histogram base="true" name="SimpleCache.IndexRestoreTime" units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>
    Time (as measured on the worker pool) spent restoring the index file by
    iterating directory entries.
  </summary>
</histogram>

<histogram name="SimpleCache.IndexStale" enum="BooleanStale">
  <obsolete>
    Deprecated 07/2013, and replaced by IndexFileStateOnLoad.
  </obsolete>
  <owner>morlovich@chromium.org</owner>
  <summary>For each index load, whether the index file was stale.</summary>
</histogram>

<histogram base="true" name="SimpleCache.IndexWriteInterval.Background"
    units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The interval between index saves, for apps in the background.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.IndexWriteInterval.Foreground"
    units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The interval between index saves, for apps in the foreground.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.IndexWriteReason"
    enum="SimpleCacheIndexWriteReason">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The reason an index was written to disk. Recorded every time an index is
    saved.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.IndexWriteReasonAtLoad"
    enum="SimpleCacheIndexWriteReason">
  <owner>morlovich@chromium.org</owner>
  <summary>
    Recorded immediately after loading a fresh index (INDEX_STATE_FRESH or
    INDEX_STATE_FRESH_CONCURRENT_UPDATES), the reason the loaded index was
    written to disk.
  </summary>
</histogram>

<histogram name="SimpleCache.IndexWriteToDiskTime" units="ms">
  <obsolete>
    Deprecated 2013-05 in favour of
    SimpleCache.SimpleIndexWriteToDiskTime.Background and
    SimpleCache.SimpleIndexWriteToDiskTime.Foreground.
  </obsolete>
  <owner>morlovich@chromium.org</owner>
  <summary>
    The amount of time spend writing the index file to disk, measured starting
    at the beginning of the write on the callback thread, and calculated using
    the completion time on the worker pool.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.IndexWriteToDiskTime.Background"
    units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The amount of time spend writing the index file to disk, for apps in the
    background, measured starting at the beginning of the write on the callback
    thread, and calculated using the completion time on the worker pool.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.IndexWriteToDiskTime.Foreground"
    units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The amount of time spend writing the index file to disk, for apps in the
    foreground, measured starting at the beginning of the write on the callback
    thread, and calculated using the completion time on the worker pool.
  </summary>
</histogram>

<histogram name="SimpleCache.KeyMatchedOnOpen" enum="BooleanMatched">
  <obsolete>
    Deprecated 2016-05 as the match checking was moved back into the entry
    itself, so this result is now reported in the SimpleCache.x.SyncOpenResult
    histograms.
  </obsolete>
  <owner>morlovich@chromium.org</owner>
  <summary>
    For each call to OpenEntry, whether the key on disk matched the request key.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.LastClusterLossPercent" units="%">
  <obsolete>
    Deprecated 2018-01; not viewed as actionable.
  </obsolete>
  <owner>morlovich@chromium.org</owner>
  <summary>
    For each file in the Simple Cache, the percentage of disk space used by the
    cluster loss, the unused disk space in the last 4096 byte cluster of the
    file.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.LastClusterSize" units="bytes">
  <obsolete>
    Deprecated 2018-01; not viewed as actionable.
  </obsolete>
  <owner>morlovich@chromium.org</owner>
  <summary>
    For each file in the Simple Cache, the number of bytes in the last 4096 byte
    cluster when the entry is saved to disk.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.MaxCacheSizeOnInit" units="KB">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The maximum allowed size of the cache at the time that the index has
    finished initializing.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.NumOpsBlockedByPendingDoom"
    units="Ops">
  <owner>morlovich@chromium.org</owner>
  <summary>
    Number of operations that were queued behind a particular doom operation
    (with a mass doom counting as a single operation).
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.OpenEntryIndexState"
    enum="SimpleCacheOpenEntryIndexState">
  <owner>morlovich@chromium.org</owner>
  <summary>
    At the time that an entry is opened, the state of that entry in the index.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.PercentFullOnInit" units="%">
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The fullness (in percent) of the cache at the time that the index has
    finished initializing. The percentage is calculated as (cache_size * 100) /
    max_cache_size.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.QueueLatency.CreateEntry" units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>
    Delay between when the I/O portion of CreateEntry is enqueued and when its
    execution begins.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.QueueLatency.OpenEntry" units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>
    Delay between when the I/O portion of OpenEntry is enqueued and when its
    execution begins.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.QueueLatency.PendingDoom" units="ms">
  <owner>morlovich@chromium.org</owner>
  <summary>
    Delay between when an operation is deferred due to a pending doom for its
    key, and when it can resume execution.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.ReadIsParallelizable"
    enum="SimpleCacheReadParallelizable">
  <obsolete>
    Removed 2018-07-02. See https://crrev.com/c/1122706
  </obsolete>
  <owner>morlovich@chromium.org</owner>
  <summary>
    For each Read operation, whether it could have been issued in parallel of a
    previous Read operation.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.ReadResult"
    enum="SimpleCacheReadResult">
  <owner>morlovich@chromium.org</owner>
  <summary>The outcome of Entry::ReadData in the simple cache.</summary>
</histogram>

<histogram base="true" name="SimpleCache.ReadStream1FromPrefetched"
    enum="Boolean">
  <owner>morlovich@chromium.org</owner>
  <summary>
    Whether a read from stream 1 (conventionally used for payload body) was
    satisfied from prefetched data. Reported only on the first read operation on
    the stream (including if there are multiple readers, or even some writers).
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.StaleIndexExtraEntryCount"
    units="entries">
  <owner>morlovich@chromium.org</owner>
  <summary>
    Count of the number of entries recorded in the index, but not actually
    present in the cache. Recorded each time a stale index is found and a
    directory rescan is required.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.StaleIndexMissedEntryCount"
    units="entries">
  <owner>morlovich@chromium.org</owner>
  <summary>
    Count of the number of entries present in a cache, but not recorded in the
    index. Recorded each time a stale index is found and a directory rescan is
    required.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.StaleIndexQuality"
    enum="SimpleCacheStaleIndexQuality">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The quality of a &quot;stale&quot; index compared to a full directory
    rescan. Recorded immediately after every directory scan for stale indexes.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.SyncCheckEOFHasCrc"
    enum="BooleanHasCrc">
  <owner>morlovich@chromium.org</owner>
  <summary>
    For each EOFRecord found with a valid magic number, indicates if the record
    also contains a CRC.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.SyncCheckEOFResult"
    enum="SimpleCacheSyncCheckEOFResult">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The result, at the synchronous layer, of checking the EOF record of a cache
    entry.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.SyncCloseResult"
    enum="SimpleCacheSyncCloseResult">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The result, at the synchronous layer, of closing a cache entry.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.SyncCreatePlatformFileError"
    enum="PlatformFileError">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The platform error reported when attempting to create a new cache entry at
    the synchronous layer.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.SyncCreateResult"
    enum="SimpleCacheSyncCreateResult">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The result, at the synchronous layer, reported when attempting to create a
    new cache entry.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.SyncKeySHA256Result"
    enum="SimpleCacheSyncSHA256Result">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The result of the the key SHA256 check done when opening stream 0 for each
    entry.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.SyncOpenDidPrefetch" enum="Boolean">
  <owner>morlovich@chromium.org</owner>
  <summary>
    Whether an attempt was made to prefetch the entire file when executing
    disk_cache::Backend::OpenEntry.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.SyncOpenEntryAge" units="hours">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The age of the entry (time since last modified), when opened at the
    synchronous layer.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.SyncOpenPlatformFileError"
    enum="PlatformFileError">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The platform error reported when attempting to create a new cache entry at
    the synchronous layer.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.SyncOpenResult"
    enum="SimpleCacheSyncOpenResult">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The result, at the synchronous layer, reported when attempting to open a new
    cache entry.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.SyncWriteResult"
    enum="SimpleCacheSyncWriteResult">
  <owner>morlovich@chromium.org</owner>
  <summary>
    The result, at the synchronous layer, of writing to a cache entry.
  </summary>
</histogram>

<histogram base="true" name="SimpleCache.WriteDependencyType"
    enum="SimpleCacheWriteDependencyType">
  <obsolete>
    Removed 2018-07-02. See https://crrev.com/c/1122706
  </obsolete>
  <owner>morlovich@chromium.org</owner>
  <summary>
    Shows whether a write operation depends on the previous operation in queue
    particularly in the aspect of its possibility to run in parallel.
  </summary>
</histogram>

<histogram name="SimpleCache.WriteResult" enum="SimpleCacheWriteResult">
  <obsolete>
    Replaced 2013/09/03 by WriteResult2, which adds &quot;fast empty
    return&quot;, which previously showed up as &quot;success&quot;.
  </obsolete>
  <owner>morlovich@chromium.org</owner>
  <summary>The outcome of Entry::WriteData in the simple cache.</summary>
</histogram>

<histogram base="true" name="SimpleCache.WriteResult2"
    enum="SimpleCacheWriteResult">
  <owner>morlovich@chromium.org</owner>
  <summary>The outcome of Entry::WriteData in the simple cache.</summary>
</histogram>

<histogram name="SimpleGeolocation.Request.Event"
    enum="SimpleGeolocationRequestEvent">
  <owner>alemate@chromium.org</owner>
  <summary>Events in reqests processing of IP-based SimpleGeolocation.</summary>
</histogram>

<histogram name="SimpleGeolocation.Request.HasCellTowers"
    enum="SimpleGeolocationRequestHasCellTowers">
  <owner>skylarc@chromium.org</owner>
  <summary>
    This boolean histogram counts SimpleGeolocationRequests carrying a nonzero
    number of cell towers.
  </summary>
</histogram>

<histogram name="SimpleGeolocation.Request.HasWiFiAccessPoints"
    enum="SimpleGeolocationRequestHasWiFiAccessPoints">
  <owner>alemate@chromium.org</owner>
  <summary>
    This boolean histogram counts SimpleGeolocationRequests carrying nonzero
    number of WiFi access points.
  </summary>
</histogram>

<histogram name="SimpleGeolocation.Request.ResponseCode"
    enum="HttpResponseCode">
  <owner>alemate@chromium.org</owner>
  <summary>Http response codes in IP-based SimpleGeolocation.</summary>
</histogram>

<histogram name="SimpleGeolocation.Request.ResponseFailureTime" units="ms">
  <owner>alemate@chromium.org</owner>
  <summary>
    The time elapsed between the sending of the first API request and the time
    the final (failed) response was recorded. Includes all retries.
  </summary>
</histogram>

<histogram name="SimpleGeolocation.Request.ResponseSuccessTime" units="ms">
  <owner>alemate@chromium.org</owner>
  <summary>
    The time elapsed between the sending of the first API request and the time
    the final (successfull) response was recorded. Includes all retries.
  </summary>
</histogram>

<histogram name="SimpleGeolocation.Request.Result"
    enum="SimpleGeolocationRequestResult">
  <owner>alemate@chromium.org</owner>
  <summary>Result of SimpleGeolocationRequest.</summary>
</histogram>

<histogram name="SimpleGeolocation.Request.Retries">
  <owner>alemate@chromium.org</owner>
  <summary>Number of retries until the final response was recorded.</summary>
</histogram>

<histogram name="SiteEngagementService.DaysSinceLastShortcutLaunch"
    units="days">
  <owner>calamity@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    The number of days between launches of an origin saved to homescreen or as a
    bookmark app shortcut. Recorded at the second and each following launch of a
    specific origin from a shortcut, independently per origin.
  </summary>
</histogram>

<histogram name="SiteEngagementService.EngagementPercentageForHTTPS">
  <obsolete>
    Removed in M60. See crbug.com/712493.
  </obsolete>
  <owner>calamity@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <owner>felt@chromium.org</owner>
  <summary>
    The percentage of total site engagement accumulated by this profile for
    HTTPS URLs as a proportion of all engagement for HTTPS and HTTP URLs.
    Recorded at startup per non-incognito profile, and then upon the first
    engagement-increasing event every hour thereafter.
  </summary>
</histogram>

<histogram name="SiteEngagementService.EngagementScore">
  <owner>calamity@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    Distribution of the engagement scores accumulated by a user, recorded at
    startup per non-incognito profile, and then upon the first
    engagement-increasing event every hour thereafter.
  </summary>
</histogram>

<histogram name="SiteEngagementService.EngagementScore.HTTP">
  <obsolete>
    Removed in M60. See crbug.com/712493.
  </obsolete>
  <owner>calamity@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <owner>felt@chromium.org</owner>
  <summary>
    Distribution of the engagement scores accumulated by a user, recorded at
    startup per non-incognito profile, and then upon the first
    engagement-increasing event every hour thereafter. Limited specifically to
    HTTP URLs.
  </summary>
</histogram>

<histogram name="SiteEngagementService.EngagementScore.HTTPS">
  <obsolete>
    Removed in M60. See crbug.com/712493.
  </obsolete>
  <owner>calamity@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <owner>felt@chromium.org</owner>
  <summary>
    Distribution of the engagement scores accumulated by a user, recorded at
    startup per non-incognito profile, and then upon the first
    engagement-increasing event every hour thereafter. Limited specifically to
    HTTPS URLs.
  </summary>
</histogram>

<histogram name="SiteEngagementService.EngagementScore.IsZero" enum="Boolean">
  <owner>charleszhao@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <owner>kcarattini@chromium.org</owner>
  <summary>
    The distribution of zero versus non-zero engagement scores accumulated by
    the user, recorded at the same time as
    SiteEngagementService.EngagementScore.
  </summary>
</histogram>

<histogram name="SiteEngagementService.EngagementScoreBucket" units="%">
  <owner>calamity@chromium.org</owner>
  <summary>
    The percentage of sites on a user's profile that have engagement scores that
    fall in these buckets, recorded at startup per non-incognito profile, and
    then upon the first engagement-increasing event every hour thereafter.
  </summary>
</histogram>

<histogram name="SiteEngagementService.EngagementType"
    enum="SiteEngagementServiceEngagementType">
  <owner>calamity@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    The type of engagement (navigation, user input, etc.) which led to an
    accumulation in site engagement.
  </summary>
</histogram>

<histogram name="SiteEngagementService.MeanEngagement">
  <owner>calamity@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    The mean site engagement per origin accumulated by this profile, recorded at
    startup per non-incognito profile, and then upon the first
    engagement-increasing event every hour thereafter.
  </summary>
</histogram>

<histogram name="SiteEngagementService.MedianEngagement">
  <owner>calamity@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    The median site engagement per origin accumulated by this profile, recorded
    at startup per non-incognito profile, and then upon the first
    engagement-increasing event every hour thereafter.
  </summary>
</histogram>

<histogram name="SiteEngagementService.OriginsEngaged">
  <owner>calamity@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    The total number of origins with a non-zero site engagement score for this
    profile, recorded at startup per non-incognito profile, and then upon the
    first engagement-increasing event every hour thereafter.
  </summary>
</histogram>

<histogram name="SiteEngagementService.OriginsWithMaxDailyEngagement">
  <owner>calamity@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    The number of origins which have reached the daily site engagement point
    cap, recorded at startup per non-incognito profile, and then upon the first
    engagement-increasing event every hour thereafter. Thus, each bin N contains
    the number of clients where at least N origins have reached the maximum
    daily site engagement point cap.
  </summary>
</histogram>

<histogram name="SiteEngagementService.OriginsWithMaxEngagement">
  <owner>calamity@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    The number of origins which have reached the absolute site engagement point
    cap, recorded at startup per non-incognito profile, and then upon the first
    engagement-increasing event every hour thereafter. Thus, each bin N contains
    the number of clients where at least N origins have reached the maximum
    absolute site engagement point cap.
  </summary>
</histogram>

<histogram name="SiteEngagementService.PercentOriginsWithMaxEngagement">
  <owner>calamity@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    The percentage of all origins recorded by the site engagement service which
    have reached the absolute site engagement point cap, recorded at startup per
    non-incognito profile, and then upon the first engagement-increasing event
    every hour thereafter.
  </summary>
</histogram>

<histogram name="SiteEngagementService.ScoreDecayedFrom"
    units="engagement score">
  <owner>calamity@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    The site engagement score of an origin prior to applying decay. Recorded at
    the first engagement event after decay, independently per decay event.
  </summary>
</histogram>

<histogram name="SiteEngagementService.ScoreDecayedTo" units="engagement score">
  <owner>calamity@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    The site engagement score of an origin once decay has occured. Recorded at
    the first engagement event after decay, independently per decay event.
  </summary>
</histogram>

<histogram name="SiteEngagementService.TotalEngagement">
  <owner>calamity@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    The total site engagement accumulated by this profile, recorded at startup
    per non-incognito profile, and then upon the first engagement-increasing
    event every hour thereafter.
  </summary>
</histogram>

<histogram name="SiteIsolation.AllResponses">
  <owner>creis@chromium.org</owner>
  <summary>
    The count of all network responses received by a renderer. Each response is
    corresponding to one URL requested by a renderer. Incremented when the first
    network packet of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.BrowsingInstanceCount">
  <owner>creis@chromium.org</owner>
  <summary>
    The count of all current BrowsingInstances.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="SiteIsolation.CurrentRendererProcessCount">
  <owner>creis@chromium.org</owner>
  <summary>
    The count of all renderer processes, including WebUI and extensions.
    Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="SiteIsolation.Flags.IsolateOrigins" enum="BooleanEnabled">
  <owner>alexmos@chromium.org</owner>
  <summary>
    True if the --isolate-origins mode was enabled from the command line,
    about:flags, or enterprise policy.  Recorded on browser startup and then
    once every 24 hours.
  </summary>
</histogram>

<histogram name="SiteIsolation.Flags.SitePerProcess" enum="BooleanEnabled">
  <owner>alexmos@chromium.org</owner>
  <summary>
    True if the --site-per-process mode was enabled from the command line,
    about:flags, or enterprise policy.  Recorded on browser startup and then
    once every 24 hours.
  </summary>
</histogram>

<histogram name="SiteIsolation.IsolateAllSitesProcessCountEstimate">
  <owner>creis@chromium.org</owner>
  <summary>
    The upper bound of the predicted renderer process count if we isolated all
    sites, subject to the process limit.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="SiteIsolation.IsolateAllSitesProcessCountLowerBound">
  <owner>creis@chromium.org</owner>
  <summary>
    The lower bound of the predicted renderer process count if we isolated all
    sites, subject to the process limit.  Happens to be the number of unique
    sites.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="SiteIsolation.IsolateAllSitesProcessCountNoLimit">
  <owner>creis@chromium.org</owner>
  <summary>
    The predicted renderer process count if we isolated all sites and if there
    were no process limit.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="SiteIsolation.IsolateAllSitesTotalProcessCountEstimate">
  <owner>creis@chromium.org</owner>
  <summary>
    The predicted total process count if we isolated all sites, subject to the
    process limit.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="SiteIsolation.IsolateExtensionsProcessCountEstimate">
  <owner>nick@chromium.org</owner>
  <summary>
    The upper bound of the predicted renderer process count if we isolated only
    Chrome extensions, subject to the process limit.  Recorded once per UMA
    ping.
  </summary>
</histogram>

<histogram name="SiteIsolation.IsolateExtensionsProcessCountLowerBound">
  <owner>nick@chromium.org</owner>
  <summary>
    The lower bound of the predicted renderer process count if we isolated only
    Chrome extensions, subject to the process limit. Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="SiteIsolation.IsolateExtensionsProcessCountNoLimit">
  <owner>nick@chromium.org</owner>
  <summary>
    The predicted renderer process count if we isolated only Chrome extensions
    and if there were no process limit.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="SiteIsolation.IsolateExtensionsTotalProcessCountEstimate">
  <owner>nick@chromium.org</owner>
  <summary>
    The predicted total process count if we isolated only Chrome extensions,
    subject to the process limit.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="SiteIsolation.IsolateHttpsSitesProcessCountEstimate">
  <owner>creis@chromium.org</owner>
  <summary>
    The upper bound of the predicted renderer process count if we isolated only
    HTTPS (not HTTP) sites, subject to the process limit.  Recorded once per UMA
    ping.
  </summary>
</histogram>

<histogram name="SiteIsolation.IsolateHttpsSitesProcessCountLowerBound">
  <owner>creis@chromium.org</owner>
  <summary>
    The lower bound of the predicted renderer process count if we isolated only
    HTTPS (not HTTP) sites, subject to the process limit.  Happens to be the
    number of isolated sites.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="SiteIsolation.IsolateHttpsSitesProcessCountNoLimit">
  <owner>creis@chromium.org</owner>
  <summary>
    The predicted renderer process count if we isolated only HTTPS (not HTTP)
    sites and if there were no process limit.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="SiteIsolation.IsolateHttpsSitesTotalProcessCountEstimate">
  <owner>creis@chromium.org</owner>
  <summary>
    The predicted total process count if we isolated only HTTPS (not HTTP)
    sites, subject to the process limit.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="SiteIsolation.IsolateNothingProcessCountEstimate">
  <owner>creis@chromium.org</owner>
  <summary>
    The upper bound of the estimated renderer process count if we isolated no
    sites, subject to the process limit.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="SiteIsolation.IsolateNothingProcessCountLowerBound">
  <owner>creis@chromium.org</owner>
  <summary>
    The lower bound of the predicted renderer process count if we isolated no
    sites, subject to the process limit.  Happens to be the number of isolated
    sites.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="SiteIsolation.IsolateNothingProcessCountNoLimit">
  <owner>creis@chromium.org</owner>
  <summary>
    The predicted renderer process count if we isolated no sites and if there
    were no process limit.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="SiteIsolation.IsolateNothingTotalProcessCountEstimate">
  <owner>creis@chromium.org</owner>
  <summary>
    The predicted total process count if we isolated no sites, subject to the
    process limit.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="SiteIsolation.IsolateOrigins.Size" units="origins">
  <owner>alexmos@chromium.org</owner>
  <summary>
    The number of currently enabled isolated origins.  This includes origins
    specified via the --isolate-origins command-line flag as well as those
    configured via enterprise policy.  Recorded on browser startup.
  </summary>
</histogram>

<histogram name="SiteIsolation.LowMemoryMode.Transition" enum="BooleanEnabled">
  <owner>rsesek@chromium.org</owner>
  <summary>
    The number of times a render process transitions its main thread isolate
    into or out of memory savings mode. This is recorded per-renderer-process
    upon the creation of the first main frame or the destruction of the last
    main frame.
  </summary>
</histogram>

<histogram name="SiteIsolation.OutOfProcessIframes">
  <owner>nasko@chromium.org</owner>
  <summary>
    The count of all out-of-process iframes.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="SiteIsolation.ProxyCount">
  <owner>nick@chromium.org</owner>
  <summary>
    The count of all RenderFrameProxyHosts.  Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="SiteIsolation.ProxyCountPerBrowsingInstance">
  <owner>nick@chromium.org</owner>
  <summary>
    The count of RenderFrameProxyHosts in each BrowsingInstance.  Recorded each
    UMA ping, once per BrowsingInstance.
  </summary>
</histogram>

<histogram name="SiteIsolation.ReusePendingOrCommittedSite.CouldReuse"
    enum="ReusePendingOrCommittedSiteEnum">
  <owner>clamy@chromium.org</owner>
  <summary>
    Whether SiteInstances with a ProcessReusePolicy of
    REUSE_PENDING_OR_COMMITTED_SITE could reuse an existing RenderProcessHost or
    they had to create a new one. True when they reused an existing process,
    false when they created a new one.
  </summary>
</histogram>

<histogram name="SiteIsolation.SiteInstancesPerBrowsingInstance">
  <owner>nasko@chromium.org</owner>
  <summary>
    The count of SiteInstances in a single BrowsingInstance. Recorded each UMA
    ping, once per BrowsingInstance.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.Browser.Action"
    enum="SiteIsolationResponseAction">
  <owner>creis@chromium.org</owner>
  <summary>
    Various actions related to cross-site document blocking in the browser
    process, indicating whether the response was blocked from the renderer.
    Recorded as the response is processed in the network stack.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.Browser.Blocked" enum="ContentResourceType2">
  <owner>creis@chromium.org</owner>
  <summary>
    The total count of responses that were blocked by the cross-site document
    blocking logic in the browser process. Sampled with a resource type (0-17)
    when the response is blocked; up to 1024 bytes of the response are
    considered. This is also recorded with a suffix indicating the MIME type
    category.
  </summary>
</histogram>

<histogram
    name="SiteIsolation.XSD.Browser.Blocked.ContentLength.ValueIfAvailable"
    units="bytes">
  <owner>creis@chromium.org</owner>
  <summary>
    For each responses blocked by the cross-site document blocking logic in the
    browser process, logs network::ResourceResponseInfo::content_length of the
    response (but only if the content length value was available - if the value
    was not -1).
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.Browser.Blocked.ContentLength.WasAvailable"
    enum="BooleanAvailable">
  <owner>creis@chromium.org</owner>
  <summary>
    For each responses blocked by the cross-site document blocking logic in the
    browser process, logs whether network::ResourceResponseInfo::content_length
    was available (i.e. value was 0 or greated) or not available (i.e. value was
    equal to -1) if the value was available (i.e. the value was not -1).
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.Browser.BlockedForParserBreaker"
    enum="ContentResourceType2">
  <owner>creis@chromium.org</owner>
  <summary>
    The total count of responses that were blocked by the cross-site document
    blocking logic in the browser process, due to the presence of a Javascript
    parser-breaker pattern (like &quot;for(;;);&quot;, or &quot;)]}'&quot;, or a
    non-empty JSON dictionary like &quot;{\&quot;a\&quot;:&quot;. Sampled with a
    resource type (0-17) when the response is blocked; up to 1024 bytes of the
    response are considered.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.Browser.BytesReadForSniffing" units="bytes">
  <owner>creis@chromium.org</owner>
  <summary>
    The number of bytes of the network response buffered for sniffing purposes,
    when attempting to sniff the response to determine if it should be blocked
    as a cross-site document. Recorded after sniffing is attempted.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.DataLength" units="byte">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The number of bytes in the first network packet for a response with headers
    that imply potential illegal cross-site access. Recorded when the first
    network packet of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.HTML.Blocked">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of blocked cross-site document responses due to having HTML
    content type header and contents sniffed as HTML. Sampled with value of 1
    when the first network packet of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.HTML.Blocked.NonRenderableStatusCode">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a nonrenderable HTTP status code among blocked
    cross-site document responses due to their HTML contents. Sampled with value
    1 when the first network packet of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.HTML.Blocked.RenderableStatusCode"
    enum="ContentResourceType">
  <obsolete>
    Superseded by SiteIsolation.XSD.HTML.Blocked.RenderableStatusCode2 in
    December 2015.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a renderable HTTP status code sub-categorized by
    their requesting context type (e.g., image, script, etc.) among blocked
    cross-site document responses due to their HTML contents. Sampled with a
    resource type (0-14) when the first network packet of a response of this
    type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.HTML.Blocked.RenderableStatusCode2"
    enum="ContentResourceType2">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a renderable HTTP status code sub-categorized by
    their requesting context type (e.g., image, script, etc.) among blocked
    cross-site document responses due to their HTML contents. Sampled with a
    resource type (0-17) when the first network packet of a response of this
    type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.HTML.NoSniffBlocked.NonRenderableStatusCode">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a nonrenderable HTTP status code among blocked
    cross-site document responses due to having HTML content type and nosniff
    headers. Sampled with value 1 when the first network packet of a response of
    this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.HTML.NoSniffBlocked.RenderableStatusCode"
    enum="ContentResourceType">
  <obsolete>
    Superseded by SiteIsolation.XSD.HTML.NoSniffBlocked.RenderableStatusCode2 in
    December 2015.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a renderable HTTP status code sub-categorized by
    their requesting context type (e.g., image, script, etc.), among blocked
    cross-site document responses due to having HTML content type and nosniff
    headers. Sampled with a resource type (0-14) when the first network packet
    of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.HTML.NoSniffBlocked.RenderableStatusCode2"
    enum="ContentResourceType2">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a renderable HTTP status code sub-categorized by
    their requesting context type (e.g., image, script, etc.), among blocked
    cross-site document responses due to having HTML content type and nosniff
    headers. Sampled with a resource type (0-17) when the first network packet
    of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.HTML.NotBlocked">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of not blocked responses despite having an HTML content type
    header due to the failure of content sniffing. Sampled with value 1 when the
    first network packet of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.HTML.NotBlocked.MaybeJS">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses that may be parsed as JavaScript among not blocked
    responses. Sampled with value 1 when the first network packet of a response
    of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.JSON.Blocked">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of blocked cross-site document responses due to having JSON
    content type header and contents sniffed as JSON. Sampled with value 1 when
    the first network packet of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.JSON.Blocked.NonRenderableStatusCode">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a nonrenderable HTTP status code among blocked
    cross-site document responses due to their JSON contents. Sampled with value
    1 when the first network packet of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.JSON.Blocked.RenderableStatusCode"
    enum="ContentResourceType">
  <obsolete>
    Superseded by SiteIsolation.XSD.JSON.Blocked.RenderableStatusCode2 in
    December 2015.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a renderable HTTP status code sub-categorized by
    their requesting context type (e.g., image, script, etc.), among blocked
    cross-site document responses due to their JSON contents. Sampled with a
    resource type (0-14) when the first network packet of a response of this
    type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.JSON.Blocked.RenderableStatusCode2"
    enum="ContentResourceType2">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a renderable HTTP status code sub-categorized by
    their requesting context type (e.g., image, script, etc.), among blocked
    cross-site document responses due to their JSON contents. Sampled with a
    resource type (0-17) when the first network packet of a response of this
    type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.JSON.NoSniffBlocked.NonRenderableStatusCode">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a nonrenderable HTTP status code among blocked
    cross-site document responses due to having JSON content type and nosniff
    headers. Sampled with value 1 when the first network packet of a response of
    this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.JSON.NoSniffBlocked.RenderableStatusCode"
    enum="ContentResourceType">
  <obsolete>
    Superseded by SiteIsolation.XSD.JSON.NoSniffBlocked.RenderableStatusCode2 in
    December 2015.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a renderable HTTP status code sub-categorized by
    their requesting context type (e.g., image, script, etc.), among blocked
    cross-site document responses due to having JSON content type and nosniff
    headers. Sampled with a resource type (0-14) when the first network packet
    of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.JSON.NoSniffBlocked.RenderableStatusCode2"
    enum="ContentResourceType2">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a renderable HTTP status code sub-categorized by
    their requesting context type (e.g., image, script, etc.), among blocked
    cross-site document responses due to having JSON content type and nosniff
    headers. Sampled with a resource type (0-17) when the first network packet
    of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.JSON.NotBlocked">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of not blocked responses despite having an JSON content type
    header due to the failure of content sniffing. Sampled with value 1 when the
    first network packet of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.JSON.NotBlocked.MaybeJS">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses that may be parsed as JavaScript among not blocked
    responses with a JSON content type header. Sampled with value 1 when the
    first network packet of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.MimeType" enum="SiteIsolationMimeType">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    MIME type codes for content type header values of potentially cross-site
    document responses, excluding same-site or not http(s) urls. Sampled with a
    MIME type code (0-4) when the first network packet of a response of this
    type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.Plain.HTML.Blocked">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of blocked cross-site document responses due to having Plain
    content type header and contents sniffed as HTML. Sampled with value 1 when
    the first network packet of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.Plain.HTML.Blocked.NonRenderableStatusCode">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a nonrenderable HTTP status code among blocked
    responses due to their Plain.HTML contents. Sampled with value 1 when the
    first network packet of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.Plain.HTML.Blocked.RenderableStatusCode"
    enum="ContentResourceType">
  <obsolete>
    Superseded by SiteIsolation.XSD.Plain.HTML.Blocked.RenderableStatusCode2 in
    December 2015.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a renderable HTTP status code sub-categorized by
    their requesting context type (e.g., image, script, etc.), among blocked
    cross-site document responses due to their Plain.HTML contents. Sampled with
    a resource type (0-14) when the first network packet of a response of this
    type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.Plain.HTML.Blocked.RenderableStatusCode2"
    enum="ContentResourceType2">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a renderable HTTP status code sub-categorized by
    their requesting context type (e.g., image, script, etc.), among blocked
    cross-site document responses due to their Plain.HTML contents. Sampled with
    a resource type (0-17) when the first network packet of a response of this
    type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.Plain.JSON.Blocked">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of blocked cross-site document responses due to having Plain
    content type header and contents sniffed as JSON. Sampled with value 1 when
    the first network packet of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.Plain.JSON.Blocked.NonRenderableStatusCode">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a nonrenderable HTTP status code among blocked
    cross-site document responses due to their Plain.JSON contents. Sampled with
    value 1 when the first network packet of a response of this type is
    received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.Plain.JSON.Blocked.RenderableStatusCode"
    enum="ContentResourceType">
  <obsolete>
    Superseded by SiteIsolation.XSD.Plain.JSON.Blocked.RenderableStatusCode2 in
    December 2015.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a renderable HTTP status code sub-categorized by
    their requesting context type (e.g., image, script, etc.), among blocked
    cross-site document responses due to their Plain.JSON contents. Sampled with
    a resource type (0-14) when the first network packet of a response of this
    type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.Plain.JSON.Blocked.RenderableStatusCode2"
    enum="ContentResourceType2">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a renderable HTTP status code sub-categorized by
    their requesting context type (e.g., image, script, etc.), among blocked
    cross-site document responses due to their Plain.JSON contents. Sampled with
    a resource type (0-17) when the first network packet of a response of this
    type is received.
  </summary>
</histogram>

<histogram
    name="SiteIsolation.XSD.Plain.NoSniffBlocked.NonRenderableStatusCode">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a nonrenderable HTTP status code among blocked
    cross-site document responses due to having Plain content type and nosniff
    headers. Sampled with value 1 when the first network packet of a response of
    this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.Plain.NoSniffBlocked.RenderableStatusCode"
    enum="ContentResourceType">
  <obsolete>
    Superseded by SiteIsolation.XSD.Plain.NoSniffBlocked.RenderableStatusCode2
    in December 2015.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a renderable HTTP status code sub-categorized by
    their requesting context type (e.g., image, script, etc.), among blocked
    cross-site document responses due to having Plain content type and nosniff
    header. Sampled with a resource type (0-14) when the first network packet of
    a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.Plain.NoSniffBlocked.RenderableStatusCode2"
    enum="ContentResourceType2">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a renderable HTTP status code sub-categorized by
    their requesting context type (e.g., image, script, etc.), among blocked
    cross-site document responses due to having Plain content type and nosniff
    header. Sampled with a resource type (0-17) when the first network packet of
    a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.Plain.NotBlocked">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of not blocked responses despite having an Plain content type
    header due to the failure of content sniffing. Sampled with value 1 when the
    first network packet of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.Plain.NotBlocked.MaybeJS">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses that may be parsed as JavaScript among not blocked
    responses with a Plain content type header. Sampled with value 1 when the
    first network packet of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.Plain.XML.Blocked">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of blocked cross-site document responses due to having Plain
    content type header and contents sniffed as XML. Sampled with value 1 when
    the first network packet of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.Plain.XML.Blocked.NonRenderableStatusCode">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a nonrenderable HTTP status code among blocked
    cross-site document responses due to their Plain.XML contents. Sampled with
    value 1 when the first network packet of a response of this type is
    received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.Plain.XML.Blocked.RenderableStatusCode"
    enum="ContentResourceType">
  <obsolete>
    Superseded by SiteIsolation.XSD.Plain.XML.Blocked.RenderableStatusCode2 in
    December 2015.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with renderable HTTP status codes sub-categorized by
    their requesting context type (e.g., image, script, etc.), among blocked
    cross-site document responses due to their Plain.XML contents. Sampled with
    a resource type (0-14) when the first network packet of a response of this
    type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.Plain.XML.Blocked.RenderableStatusCode2"
    enum="ContentResourceType2">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with renderable HTTP status codes sub-categorized by
    their requesting context type (e.g., image, script, etc.), among blocked
    cross-site document responses due to their Plain.XML contents. Sampled with
    a resource type (0-17) when the first network packet of a response of this
    type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.XML.Blocked">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of blocked cross-site document responses due to having XML content
    type header and contents sniffed as XML. Sampled with value 1 when the first
    network packet of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.XML.Blocked.NonRenderableStatusCode">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with nonrenderable HTTP status codes among blocked
    cross-site document responses due to their XML contents. Sampled with value
    1 when the first network packet of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.XML.Blocked.RenderableStatusCode"
    enum="ContentResourceType">
  <obsolete>
    Superseded by SiteIsolation.XSD.XML.Blocked.RenderableStatusCode2 in
    December 2015.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with renderable HTTP status codes sub-categorized by
    their requesting context type (e.g., image, script, etc.), among blocked
    cross-site document responses due to their XML contents. Sampled with a
    resource type (0-14) when the first network packet of a response of this
    type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.XML.Blocked.RenderableStatusCode2"
    enum="ContentResourceType2">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with renderable HTTP status codes sub-categorized by
    their requesting context type (e.g., image, script, etc.), among blocked
    cross-site document responses due to their XML contents. Sampled with a
    resource type (0-17) when the first network packet of a response of this
    type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.XML.NoSniffBlocked.NonRenderableStatusCode">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a nonrenderable HTTP status code among blocked
    cross-site document responses due to having XML content type and nosniff
    headers. Sampled with value 1 when the first network packet of a response of
    this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.XML.NoSniffBlocked.RenderableStatusCode"
    enum="ContentResourceType">
  <obsolete>
    Superseded by SiteIsolation.XSD.XML.NoSniffBlocked.RenderableStatusCode2 in
    December 2015.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a renderable HTTP status code sub-categorized by
    their requesting context type (e.g., image, script, etc.), among blocked
    cross-site document responses due to having XML content type and nosniff
    headers. Sampled with a resource type (0-14) when the first network packet
    of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.XML.NoSniffBlocked.RenderableStatusCode2"
    enum="ContentResourceType2">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses with a renderable HTTP status code sub-categorized by
    their requesting context type (e.g., image, script, etc.), among blocked
    cross-site document responses due to having XML content type and nosniff
    headers. Sampled with a resource type (0-17) when the first network packet
    of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.XML.NotBlocked">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of not blocked responses despite having an XML content type header
    due to the failure of content sniffing. Sampled with value 1 when the first
    network packet of a response of this type is received.
  </summary>
</histogram>

<histogram name="SiteIsolation.XSD.XML.NotBlocked.MaybeJS">
  <obsolete>
    Removed in March 2018; in M67+, browser-process CORB policy is enabled.
  </obsolete>
  <owner>creis@chromium.org</owner>
  <summary>
    The count of responses that may be parsed as JavaScript among not blocked
    responses with an XML content type. Sampled with value 1 when the first
    network packet of a response of this type is received.
  </summary>
</histogram>

<histogram name="Skia.DrawScaleFactor" enum="SkiaScaleFactor">
  <owner>ericrk@chromium.org</owner>
  <summary>The scale factor of any images drawn by Skia.</summary>
</histogram>

<histogram name="Skia.DrawTiled" enum="BooleanTiled">
  <owner>ericrk@chromium.org</owner>
  <summary>
    Whether a call to drawBitmap(Rect) or drawImage(Rect) used the tiled or
    non-tiled rasterization path.
  </summary>
</histogram>

<histogram name="Skia.FilterQuality" enum="SkiaFilterQuality">
  <owner>ericrk@chromium.org</owner>
  <summary>
    The count of images drawn by Skia with a given filter quality.
  </summary>
</histogram>

<histogram name="Skia.LockTexturePath" enum="SkiaLockTexturePath">
  <owner>ericrk@chromium.org</owner>
  <summary>
    The path taken by Skia when it attempts to lock a texture for use.
  </summary>
</histogram>

<histogram name="SmartLock.EligibleDevicesCount" units="devices">
  <owner>jhawkins@chromium.org</owner>
  <summary>
    A count of the number of eligible SmartLock devices which can be used to
    unlock the user's Chromebook. Logged each time the list of eligible devices
    is updated. TODO(jhawkins): Log this again once we send this data from
    eligible phones.
  </summary>
</histogram>

<histogram name="SmartLock.EnabledDevicesCount" units="devices">
  <owner>jhawkins@chromium.org</owner>
  <summary>
    A count of the number of SmartLock devices which the user has enabled to
    unlock the user's Chromebook, i.e., the device connected to in the SmartLock
    setup flow. Logged each time the list of eligible devices is updated.
  </summary>
</histogram>

<histogram name="SmartLock.EnabledState" enum="SmartLockEnabledState">
  <owner>jhawkins@chromium.org</owner>
  <summary>
    The state of the SmartLock feature for the current user, set at login. The
    value is 'enabled' if the user has successfully enabled SmartLock via setup,
    disabled if the user has explicitly disabled the feature after it has been
    enabled, and unset if the feature is passively disabled, i.e., has never
    been enabled by the user.
  </summary>
</histogram>

<histogram name="SmartLock.ToggleFeature" enum="BooleanEnabled">
  <owner>jhawkins@chromium.org</owner>
  <summary>
    The number of times the user actively enabled or disabled the SmartLock
    feature via Settings.
  </summary>
</histogram>

<histogram name="SmartLock.ToggleFeature.Disable.Result" enum="BooleanSuccess">
  <owner>jhawkins@chromium.org</owner>
  <summary>The result of the operation to disable SmartLock.</summary>
</histogram>

<histogram name="Snackbar.Shown" enum="SnackbarIdentifier">
  <owner>ianwen@chromium.org</owner>
  <summary>
    Records how many times a particular snackbar was shown to the user.
  </summary>
</histogram>

<histogram name="SoftwareReporter.Cleaner.CleaningTime" units="ms">
  <owner>alito@chromium.org</owner>
  <summary>
    The time between sending the user's response to the Chrome Cleaner process
    and the Cleaner process terminating. This histogram is logged only for
    successfully completed runs of the cleaner.
  </summary>
</histogram>

<histogram name="SoftwareReporter.Cleaner.CleanupResult"
    enum="SoftwareReporterCleanupResult">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    The final status of the Chrome Cleanup Tool run (e.g. succeeded, failed,
    reboot required).
  </summary>
</histogram>

<histogram name="SoftwareReporter.Cleaner.DownloadHttpResponseCode"
    enum="HttpResponseCode">
  <obsolete>
    Deprecated as of 09/2017. Replaced with
    SoftwareReporter.Cleaner.DownloadStatusErrorCode.
  </obsolete>
  <owner>ftirelo@chromium.org</owner>
  <summary>
    The HTTP response code for the Chrome Cleanup Tool download request.
  </summary>
</histogram>

<histogram name="SoftwareReporter.Cleaner.DownloadStatus"
    enum="SoftwareReporterCleanerDownloadStatus">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    An indication if an attempt to download the Chrome Cleanup Tool succeeded or
    the reason why it failed.
  </summary>
</histogram>

<histogram name="SoftwareReporter.Cleaner.DownloadStatusErrorCode"
    enum="CombinedHttpResponseAndNetErrorCode">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    The HTTP response or net error code when trying to download the Chrome
    Cleanup Tool.
  </summary>
</histogram>

<histogram name="SoftwareReporter.Cleaner.HasCompleted" enum="SRTCompleted">
  <owner>mad@chromium.org</owner>
  <summary>
    The state of software reporter cleaner tool runs. A value of &quot;Not
    Completed&quot; can mean either the tool crashed, or the tool was still
    running when Chrome checked.
  </summary>
</histogram>

<histogram name="SoftwareReporter.Cleaner.HasRebooted" enum="BooleanRebooted">
  <owner>mad@chromium.org</owner>
  <summary>
    Whether a reboot happened since the software reporter cleaner tool has
    finished execution with a pre-reboot exit code.
  </summary>
</histogram>

<histogram name="SoftwareReporter.Cleaner.NumberOfDownloadAttempts"
    units="counts">
  <obsolete>
    Deprecated on 2018-01-15.
  </obsolete>
  <owner>ftirelo@chromium.org</owner>
  <summary>
    The number of attempts to download the Chrome Cleanup tool until it either
    succeeds or fails.
  </summary>
</histogram>

<histogram name="SoftwareReporter.Cleaner.RebootPromptShown"
    enum="SoftwareReporterRebootPromptType">
  <owner>veranika@chromium.org</owner>
  <summary>
    Indicates how the user was prompted to reboot the machine to complete a run
    of the Chrome Cleanup Tool.
  </summary>
</histogram>

<histogram name="SoftwareReporter.Cleaner.RebootResponse" enum="Boolean">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    Indicates that the user accepted to initiate a reboot to complete a run of
    the Chrome Cleanup Tool. This is logged the user starts a reboot from the
    cleanup card in the Settings page. We can't track when the reboot is not
    initiated, because it can happen at any moment in the future (there is no
    prompt blocking the user).
  </summary>
</histogram>

<histogram name="SoftwareReporter.Cleaner.RunningTime" units="ms">
  <owner>mad@chromium.org</owner>
  <summary>How long it took to run the software reporter cleaner tool.</summary>
</histogram>

<histogram name="SoftwareReporter.Cleaner.ScanningTime" units="ms">
  <owner>alito@chromium.org</owner>
  <summary>
    The time between launching the Chrome Cleaner process and the cleaner having
    scanned the user's machine and Chrome receiving an IPC call with the
    results.
  </summary>
</histogram>

<histogram name="SoftwareReporter.Cleaner.SettingsPageActiveOnRebootRequired"
    enum="SoftwareReporterCleanerSettingsPageActiveOnRebootRequired">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    Indicates if the Settings page was the active tab once a cleanup finished
    with reboot required.
  </summary>
</histogram>

<histogram name="SoftwareReporter.Cleaner.TimeToCompleteDownload" units="ms">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    The time between the first attempt to download the Chrome Cleanup tool and a
    successful download or the last unsuccessful attempt to download without
    retrying.
  </summary>
</histogram>

<histogram name="SoftwareReporter.Cleaner.Version">
  <owner>mad@chromium.org</owner>
  <summary>The build version of the software reporter cleaner tool.</summary>
</histogram>

<histogram name="SoftwareReporter.CleanerLogsAcceptance" enum="BooleanAccepted">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    Whether the user accepted to upload logs from Chrome Cleanup Tool. This is
    logged when the user accepts the Chrome prompt to start a cleanup either
    from the prompt dialog or from the cleanup card in the Settings page.
  </summary>
</histogram>

<histogram name="SoftwareReporter.CleanupCard" enum="Boolean">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    Whether the Chrome Cleanup Tool card in the Settings page has been shown.
  </summary>
</histogram>

<histogram name="SoftwareReporter.CleanupStarted"
    enum="SoftwareReporterCleanupStarted">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    Indicates where the user started a cleanup from (e.g. from the prompt dialog
    or the settings page).
  </summary>
</histogram>

<histogram name="SoftwareReporter.ExperimentErrors"
    enum="SoftwareReporterExperimentError">
  <owner>joenotcharles@chromium.org</owner>
  <summary>
    Whether a configuration error prevented the experimental Software Reporter
    from running.
  </summary>
</histogram>

<histogram name="SoftwareReporter.FoundUwSReadError" enum="BooleanError">
  <owner>mad@chromium.org</owner>
  <summary>
    Whether there was an error reading the registry key containing UwS found by
    the Software Removal Tool.
  </summary>
</histogram>

<histogram name="SoftwareReporter.IPCDisconnected"
    enum="SoftwareReporterIPCDisconnected">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    Indicates when the IPC with the Chrome Cleanup Tool process is disconnected
    from Chrome. Success is logged when it's disconnected and no longer needed
    (the user already responded to the prompt in Chrome or the cleaner process
    terminated normally); failures are logged when the IPC is disconnected, but
    communication between Chrome and the cleaner process is still required (e.g.
    while Chrome is waiting for scanning results or when the cleaner is waiting
    for the user's response from Chrome).
  </summary>
</histogram>

<histogram name="SoftwareReporter.LastUploadResult" enum="BooleanSuccess">
  <owner>mad@chromium.org</owner>
  <summary>The result of the most recent SRT log upload.</summary>
</histogram>

<histogram name="SoftwareReporter.LogsUploadEnabled"
    enum="SoftwareReporterLogsUploadEnabled">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    If logs uploads are enabled in the Software Reporter or the reason why it is
    disabled. Recorded before each run of the Software Reporter.
  </summary>
</histogram>

<histogram name="SoftwareReporter.LogsUploadResult"
    enum="SoftwareReporterLogsUploadResult">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    The result of the most recent Software Reporter logs upload. Written by the
    Software Reporter in the registry and sent by Chrome after the reporter
    finishes.
  </summary>
</histogram>

<histogram name="SoftwareReporter.LogsUploadResultRegistryError"
    enum="SoftwareReporterLogsUploadResultRegistryError">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    Error encountered when reading the software reporter logs upload result from
    the registry.
  </summary>
</histogram>

<histogram name="SoftwareReporter.MajorVersion">
  <owner>mad@chromium.org</owner>
  <summary>
    As SoftwareReporter.MinorVersion, but a double word combination of the other
    components of the version of the software reporter. The high word is the
    first component when there are more than one, and the low word is either the
    second or third one, depending if there are at least 3, or 4 components.
  </summary>
</histogram>

<histogram name="SoftwareReporter.MemoryUsed" units="KB">
  <owner>alito@chromium.org</owner>
  <summary>
    The memory used by the software reporter tool as reported by the tool itself
    via the registry. Logged just after the software reporter tool has finished.
  </summary>
</histogram>

<histogram name="SoftwareReporter.MinorVersion">
  <owner>mad@chromium.org</owner>
  <summary>
    The last component of the version of the software reporter that was executed
    so we can identify when users are not getting their component updated as
    quickly as we expect it.
  </summary>
</histogram>

<histogram name="SoftwareReporter.NoPromptReason"
    enum="SoftwareReporterNoPromptReason">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    The reason why the user has not been prompted to run the Chrome Cleanup Tool
    (e.g. no unwanted software found, user recently prompted).
  </summary>
</histogram>

<histogram name="SoftwareReporter.NumberOfFilesToDelete" units="counts">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    The number of files to be deleted by the Chrome Cleanup Tool.
  </summary>
</histogram>

<histogram name="SoftwareReporter.OnDemandUpdateRequired"
    enum="BooleanRequired">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    Whether an on-demand update of the Software Reporter component was needed
    for a user-initiated cleanup.
  </summary>
</histogram>

<histogram name="SoftwareReporter.OnDemandUpdateSucceeded"
    enum="BooleanSuccess">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    Whether an on-demand update of the Software Reporter component succeeded,
    when needed for a user-initiated cleanup.
  </summary>
</histogram>

<histogram name="SoftwareReporter.PostCleanupSettingsReset" units="counts">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    The number of profiles whose settings will be reset once a successful
    cleanup completes.
  </summary>
</histogram>

<histogram name="SoftwareReporter.PromptDialog.TimeUntilDone" units="ms">
  <owner>alito@chromium.org</owner>
  <summary>
    The time between the Chrome Cleaner dialog being shown and the dialog being
    closed.
  </summary>
</histogram>

<histogram name="SoftwareReporter.PromptDialogResponse"
    enum="SoftwareReporterPromptDialogResponse">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    The user response on the modal Chrome Cleanup Tool prompt dialog (e.g.
    accepted, cancelled).
  </summary>
</histogram>

<histogram name="SoftwareReporter.PromptShown" enum="Boolean">
  <obsolete>
    Replaced 2017-08-01 with SoftwareReporter.PromptShownWithType.
  </obsolete>
  <owner>ftirelo@chromium.org</owner>
  <summary>
    Whether the user has been prompted to run the Chrome Cleanup Tool.
  </summary>
</histogram>

<histogram name="SoftwareReporter.PromptShownWithType"
    enum="SoftwareReporterPromptShownWithType">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    Whether the user has been prompted to run the Chrome Cleanup Tool and which
    type of prompt has been shown.

    This is logged once a prompt is presented to the user.
  </summary>
</histogram>

<histogram name="SoftwareReporter.PromptUsage" enum="SRTPromptUsage">
  <obsolete>
    Deprecated as of 2017-11-01. Replaced with
    SoftwareReporter.PromptDialogResponse.
  </obsolete>
  <owner>mad@chromium.org</owner>
  <summary>Usage of the Software Removal Tool (SRT) Prompt.</summary>
</histogram>

<histogram name="SoftwareReporter.ReporterSequenceResult"
    enum="SoftwareReporterSequenceResult">
  <owner>ftirelo@chromium.org</owner>
  <summary>Indicates the result of a reporter sequence once it ends.</summary>
</histogram>

<histogram name="SoftwareReporter.ReporterSequenceType"
    enum="SoftwareReporterSequenceType">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    Indicates the type of a reporter sequence run on the user system. Logged
    when the sequence is scheduled to start.
  </summary>
</histogram>

<histogram name="SoftwareReporter.RunningTime" units="ms">
  <owner>alito@chromium.org</owner>
  <summary>
    The amount of time it took to run the software reporter tool as reported by
    the tool itself via the registry. Logged just after the software reporter
    tool has finished.
  </summary>
</histogram>

<histogram name="SoftwareReporter.RunningTimeAccordingToChrome" units="ms">
  <owner>alito@chromium.org</owner>
  <summary>
    The amount of time it took for the software reporter to run as measured by
    chrome. Logged just after the software reporter tool has finished.
  </summary>
</histogram>

<histogram name="SoftwareReporter.RunningTimeRegistryError"
    enum="SwReporterRunningTimeRegistryError">
  <owner>alito@chromium.org</owner>
  <summary>
    Error encountered when reading the software reporter tool's start and end
    times from the registry.
  </summary>
</histogram>

<histogram name="SoftwareReporter.ScannerLogsAcceptance" enum="BooleanAccepted">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    Whether the user accepted to upload scanner logs from Chrome Cleanup Tool.
    This is logged when the user starts a scan for the Settings page and is only
    logged for user-initiated cleanups.
  </summary>
</histogram>

<histogram name="SoftwareReporter.Step" enum="SwReporterStep">
  <owner>mad@chromium.org</owner>
  <summary>
    The registration and execution steps for the software reporter.
  </summary>
</histogram>

<histogram name="SoftwareReporter.TaggedProfileForResetting" enum="Boolean">
  <owner>ftirelo@chromium.org</owner>
  <summary>
    Registers when a profile is tagged for settings reset before a run of the
    Chrome Cleanup Tool.
  </summary>
</histogram>

<histogram name="SoftwareReporter.UploadFailureCount">
  <owner>mad@chromium.org</owner>
  <summary>
    The total count of SRT log upload failures experienced by this machine for
    all time. This value is reported at startup by Chrome and is capped at 64.
  </summary>
</histogram>

<histogram name="SoftwareReporter.UploadLongestFailureRun">
  <owner>mad@chromium.org</owner>
  <summary>
    The longest run of upload failures logged by SRT runs. This value is
    reported at startup by Chrome and is capped at 64.
  </summary>
</histogram>

<histogram name="SoftwareReporter.UploadSuccessCount">
  <owner>mad@chromium.org</owner>
  <summary>
    The total count of successful SRT log uploads experienced by this machine
    for all time. This value is reported at startup by Chrome and is capped at
    64.
  </summary>
</histogram>

<histogram name="SpecialLocale.PromotionDialog" enum="SpecialLocalePromoAction">
  <owner>ianwen@chromium.org</owner>
  <summary>
    Records how users interact with the special locale promotion dialog.
  </summary>
</histogram>

<histogram name="Spellcheck.Android.Available" enum="BooleanAvailable">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Whether the Android spellchecking service was available at the start of a
    new spellchecking session. Note that the user can disable the Android
    spellchecking service in settings, in which case it will show up as not
    available in the histogram.
  </summary>
</histogram>

<histogram name="SpellCheck.Android.Latency" units="ms">
  <owner>timvolodine@chromium.org</owner>
  <summary>
    Measures the amount of time it takes to receive results from the
    spellchecking service on Android. More precisely this is the
    SystemClock.elapsedRealtime() between the
    SpellCheckerSession.getSentenceSuggestions() and the invocation of the
    onGetSentenceSuggestions() callback.
  </summary>
</histogram>

<histogram name="SpellCheck.SpellingService.Enabled" enum="BooleanEnabled">
  <owner>groby@chromium.org</owner>
  <owner>rlp@chromium.org</owner>
  <summary>
    Whether the user has opted in to asking Google for spelling suggestions.
    Recorded both when spelling is initialized and when the preference is
    changed.
  </summary>
</histogram>

<histogram name="Sqlite.AppCache.Error" enum="SqliteErrorCode">
  <obsolete>
    Moved to Sqlite.Error.AppCache in M-27.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Error codes returned by sqlite for the appcache db.</summary>
</histogram>

<histogram name="Sqlite.AutoCommitTime" units="ms">
  <owner>shess@chromium.org</owner>
  <summary>
    Record times for INSERT/UPDATE/DELETE statements run outside of an explicit
    transaction.
  </summary>
</histogram>

<histogram name="Sqlite.CloseFailure" enum="SqliteErrorCode">
  <owner>shess@chromium.org</owner>
  <summary>Error which prevented database close.</summary>
</histogram>

<histogram name="Sqlite.CommitTime" units="ms">
  <owner>shess@chromium.org</owner>
  <summary>Record time spent in explicit COMMIT statements.</summary>
</histogram>

<histogram name="Sqlite.Cookie.Error" enum="SqliteErrorCode">
  <obsolete>
    Moved to Sqlite.Error.Cookie in M-27.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Error codes returned by sqlite the cookie db.</summary>
</histogram>

<histogram name="Sqlite.DatabaseTracker.Error" enum="SqliteErrorCode">
  <obsolete>
    Moved to Sqlite.Error.DatabaseTracker in M-27.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Error codes returned by sqlite the websqldb tracker db.</summary>
</histogram>

<histogram name="Sqlite.DeprecationVersionResult"
    enum="SqliteVersionDeprecation">
  <owner>shess@chromium.org</owner>
  <summary>
    Annotations for which bits of sql::MetaTable::CheckDeprecated() fire.
  </summary>
</histogram>

<histogram name="Sqlite.DomainBoundCerts.Error" enum="SqliteErrorCode">
  <obsolete>
    Moved to Sqlite.Error.DomainBoundCerts in M-27.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Error codes returned by sqlite for the domain-bound certs db.
  </summary>
</histogram>

<histogram name="Sqlite.DomStorageDatabase.Error" enum="SqliteErrorCode">
  <obsolete>
    Moved to Sqlite.Error.DomStorageDatabase in M-27.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Error codes returned by sqlite for the domstorage db.</summary>
</histogram>

<histogram name="Sqlite.Error" enum="SqliteErrorCode">
  <owner>shess@chromium.org</owner>
  <summary>SQLite extended error codes.</summary>
</histogram>

<histogram name="Sqlite.Error.IOERR" enum="SqliteIOERRCode">
  <obsolete>
    Replaced 5/14/2013 by expanded Sqlite.Error histogram.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>SQLite extended SQLITE_IOERR codes for all databases.</summary>
</histogram>

<histogram name="Sqlite.History.Error" enum="SqliteErrorCode">
  <obsolete>
    Moved to Sqlite.Error.History in M-27.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Error codes returned by sqlite for the history db.</summary>
</histogram>

<histogram name="Sqlite.MemoryKB.OneDay" units="KB">
  <owner>shess@chromium.org</owner>
  <summary>
    SQLite memory footprint from sqlite3_memory_used() recorded 1 day after
    first database is opened by sql::Connection.
  </summary>
</histogram>

<histogram name="Sqlite.MemoryKB.OneHour" units="KB">
  <owner>shess@chromium.org</owner>
  <summary>
    SQLite memory footprint from sqlite3_memory_used() recorded 1 hour after
    first database is opened by sql::Connection.
  </summary>
</histogram>

<histogram name="Sqlite.MemoryKB.OneWeek" units="KB">
  <owner>shess@chromium.org</owner>
  <summary>
    SQLite memory footprint from sqlite3_memory_used() recorded 1 week after
    first database is opened by sql::Connection.
  </summary>
</histogram>

<histogram name="Sqlite.MemoryKB.TenMinutes" units="KB">
  <owner>shess@chromium.org</owner>
  <summary>
    SQLite memory footprint from sqlite3_memory_used() recorded 10 minutes after
    first database is opened by sql::Connection.
  </summary>
</histogram>

<histogram name="Sqlite.Migration.History" units="ms">
  <owner>shess@chromium.org</owner>
  <summary>
    Time used to migrate History database schema to a new version.
  </summary>
</histogram>

<histogram name="Sqlite.OpenFailure" enum="SqliteErrorCode">
  <owner>shess@chromium.org</owner>
  <summary>Error which prevented database open.</summary>
</histogram>

<histogram name="Sqlite.OpenProbeFailure" enum="SqliteErrorCode">
  <owner>shess@chromium.org</owner>
  <summary>Error from first read of the database.</summary>
</histogram>

<histogram name="Sqlite.QueryTime" units="ms">
  <owner>shess@chromium.org</owner>
  <summary>Record times for all statements run against the database.</summary>
</histogram>

<histogram name="Sqlite.Quota.Error" enum="SqliteErrorCode">
  <obsolete>
    Moved to Sqlite.Error.Quota in M-27.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Error codes returned by sqlite for the quota db.</summary>
</histogram>

<histogram name="Sqlite.RazeDatabase" enum="SqliteErrorCode">
  <owner>shess@chromium.org</owner>
  <summary>Errors attempting to Raze() database.</summary>
</histogram>

<histogram name="Sqlite.RazeDatabase2" enum="SqliteErrorCode">
  <owner>shess@chromium.org</owner>
  <summary>Errors on second attempt to Raze() database.</summary>
</histogram>

<histogram name="Sqlite.RazeDatabaseTruncate" enum="SqliteErrorCode">
  <owner>shess@chromium.org</owner>
  <summary>Errors truncating database for Raze().</summary>
</histogram>

<histogram name="Sqlite.RecoveryAttachError" enum="SqliteErrorCode">
  <owner>shess@chromium.org</owner>
  <summary>
    SQLite error code from failed ATTACH in sql::Recovery::Init().
  </summary>
</histogram>

<histogram name="Sqlite.RecoveryEvents" enum="SqliteRecoveryEventEnum">
  <owner>shess@chromium.org</owner>
  <summary>
    Records specific failure and success cases in sql::Recovery implementation,
    to determine which cases warrant further development.  This histogram tracks
    detected errors, some of which may cause multiple results.  See recovery.cc
    for details.
  </summary>
</histogram>

<histogram name="Sqlite.RecoveryHandle" enum="SqliteErrorCode">
  <owner>shess@chromium.org</owner>
  <summary>Error from sqlite3_backup_init() in sql::Recovery.</summary>
</histogram>

<histogram name="Sqlite.RecoveryStep" enum="SqliteErrorCode">
  <owner>shess@chromium.org</owner>
  <summary>Error from sqlite3_backup_step() in sql::Recovery.</summary>
</histogram>

<histogram name="Sqlite.SizeKB" units="Kb">
  <owner>peria@chromium.org</owner>
  <owner>shess@chromium.org</owner>
  <summary>Size in kilobytes of pre-existing database at startup.</summary>
</histogram>

<histogram name="Sqlite.Stats" enum="SqliteStatsEnum">
  <owner>shess@chromium.org</owner>
  <summary>Stats for different API calls in sql/.</summary>
</histogram>

<histogram name="Sqlite.Text.Error" enum="SqliteErrorCode">
  <obsolete>
    Moved to Sqlite.Error.Text in M-27.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Error codes returned by sqlite the full text db.</summary>
</histogram>

<histogram name="Sqlite.Thumbnail.Error" enum="SqliteErrorCode">
  <obsolete>
    Moved to Sqlite.Error.Thumbnail in M-27.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Error codes returned by sqlite for the thumbnail db.</summary>
</histogram>

<histogram name="Sqlite.UpdateTime" units="ms">
  <owner>shess@chromium.org</owner>
  <summary>
    Record times for statements which could update the database file.  Includes
    commit and autocommit time.
  </summary>
</histogram>

<histogram name="Sqlite.Version">
  <owner>shess@chromium.org</owner>
  <summary>Version of pre-existing database at startup.</summary>
</histogram>

<histogram name="Sqlite.Vfs" units="bytes">
  <obsolete>
    Removed 2018/02/06.
  </obsolete>
  <owner>shess@chromium.org</owner>
  <summary>
    Buffer sizes passed to browser-process SQLite VFS functions.
  </summary>
</histogram>

<histogram name="Sqlite.Vfs_Events" enum="SqliteVfsEvents">
  <obsolete>
    Removed 2018/02/06.
  </obsolete>
  <owner>shess@chromium.org</owner>
  <summary>
    I/O operations measured by browser-process SQLite VFS wrapper.
  </summary>
</histogram>

<histogram name="Sqlite.Web.Error" enum="SqliteErrorCode">
  <obsolete>
    Moved to Sqlite.Error.Web in M-27.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Error codes returned by sqlite the web db.</summary>
</histogram>

<histogram name="sri.resource_integrity_mismatch_event"
    enum="SRIResourceIntegrityMismatchEvent">
  <obsolete>
    Removed 07/2017. Reference: crbug.com/708041
  </obsolete>
  <owner>jww@chromium.org</owner>
  <summary>
    When resources are checked for mismatching integrity and whether the
    mismatch forces a refetch.
  </summary>
</histogram>

<histogram name="SSL.CertificateErrorHelpCenterVisited"
    enum="SSLErrorLearnMoreNavigationResult">
  <owner>carlosil@chromium.org</owner>
  <summary>
    When the &quot;Learn more&quot; link on an SSL interstitial is clicked, this
    histogram records if the navigation succeded, if it failed with an
    interstitial, or if it failed with a different error.
  </summary>
</histogram>

<histogram name="SSL.CertificateErrorReportEvent"
    enum="CertificateErrorReportEvent">
  <owner>meacer@chromium.org</owner>
  <summary>
    Users can opt in to send reports of certificate validation errors to Google.
    This records the outcome whenever Chrome sends such a report.

    Some certificate validation reports might not be received because proxies,
    firewalls or other content filters might filter report uploads.
  </summary>
</histogram>

<histogram name="SSL.CertificateErrorReportFailure" enum="NetErrorCodes">
  <owner>estark@chromium.org</owner>
  <summary>
    Users can opt in to send reports of certificate validation errors to Google.
    This records the error code whenever Chrome fails to send such a report.
  </summary>
</histogram>

<histogram name="SSL.ExpectCTReportFailure" enum="NetErrorCodes">
  <obsolete>
    Deprecated as of 07/2016. Replaced with SSL.ExpectCTReportFailure2.
  </obsolete>
  <owner>estark@chromium.org</owner>
  <summary>
    Sites can opt in to Expect CT, a reporting feature that sends a report
    whenever a TLS connection does not have valid Certificate Transparency
    information associated with it. This records the error code when Chrome
    fails to send an Expect CT report.
  </summary>
</histogram>

<histogram name="SSL.ExpectCTReportFailure2" enum="NetErrorCodes">
  <owner>estark@chromium.org</owner>
  <summary>
    Sites can opt in to Expect CT, a reporting feature that sends a report
    whenever a TLS connection does not have valid Certificate Transparency
    information associated with it. This records the error code when Chrome
    fails to send an Expect CT report.
  </summary>
</histogram>

<histogram name="SSL.ExpectCTReportSendingAttempt">
  <owner>estark@chromium.org</owner>
  <summary>
    Sites can opt in to Expect CT, a reporting feature that sends a report
    whenever a TLS connection does not have valid Certificate Transparency
    information associated with it. This metric fires whenever Chrome attempts
    to send an Expect CT report.
  </summary>
</histogram>

<histogram name="SSL.InsecureContent" enum="InsecureContentType">
  <owner>estark@chromium.org</owner>
  <summary>
    Keeps track of various insecure content events, such as loading an HTTP
    script from an HTTPS page.
  </summary>
</histogram>

<histogram name="SSL.MarkHttpAsStatus" enum="MarkHttpAsStatus">
  <obsolete>
    Deprecated December 2017 (M65). This information in this histogram can be
    found in LoginCustomFlags (for users who have set a flag) or by filtering to
    users with the MarkHttpAs feature enabled (for seeing the field trial
    breakdown).
  </obsolete>
  <owner>estark@chromium.org</owner>
  <owner>felt@chromium.org</owner>
  <summary>
    Reports whether the user has selected to mark HTTP origins with an
    experimental UI treatment (such as showing a warning on HTTP pages that
    collect sensitive information). This histogram is recorded whenever the
    security level (the overall security state of a page, roughly corresponding
    to the lock icon) is computed for an HTTP page.
  </summary>
</histogram>

<histogram name="SSL.MarkNonSecureAsStatus" enum="MarkNonSecureAsStatus">
  <obsolete>
    Deprecated 09/2016 and replaced with SSL.MarkHttpAsStatus.
  </obsolete>
  <owner>palmer@chromium.org</owner>
  <summary>
    Reports whether the user has selected to mark non-secure origins as Neutral
    (the status quo), Dubious, or Non-Secure.
  </summary>
</histogram>

<histogram name="SSORecallPromo.AccountsAvailable">
  <owner>msarda@chromium.org</owner>
  <summary>
    Number of accounts available for Single Sign On with the current device,
    recorded at the time the SSO Promo is shown.
  </summary>
</histogram>

<histogram name="SSORecallPromo.PromoAction" enum="SSOPromoUserAction">
  <owner>msarda@chromium.org</owner>
  <summary>
    Action the user takes when the Single Sign On promotion is shown.
  </summary>
</histogram>

<histogram name="SSORecallPromo.PromoSeenCount">
  <owner>msarda@chromium.org</owner>
  <summary>
    Number of times the promotion has been seen on the current device.
  </summary>
</histogram>

<histogram name="Stability.Android.PendingMinidumpsOnStartup" units="minidumps">
  <obsolete>
    Deprecated in M60. Roughly 50% of Chrome startups that had *any* pending
    minidumps had at least one pending minidump without any logcat output. About
    5% had multiple minidumps without any logcat output.
  </obsolete>
  <owner>isherman@chromium.org</owner>
  <summary>
    The number of un-uploaded minidumps present in the Android Crash Reports
    directory. Each minidump file (should) correspond to a crash. This is
    recorded on startup, just prior to initiating uploading for these minidumps.
    This is intended as a temporary metric, to be removed around M60:
    http://crbug.com/699785
  </summary>
</histogram>

<histogram name="Stability.Android.PendingMinidumpsOnStartup.SansLogcat"
    units="minidumps">
  <obsolete>
    Deprecated in M60. Roughly 50% of Chrome startups that had *any* pending
    minidumps had at least one pending minidump without any logcat output. About
    5% had multiple minidumps without any logcat output.
  </obsolete>
  <owner>isherman@chromium.org</owner>
  <summary>
    The number of un-uploaded minidumps present in the Android Crash Reports
    directory that do not yet have logcat output attached. Each minidump file
    (should) correspond to a crash. This is recorded on startup, just prior to
    initiating uploading for all pending minidumps. This is intended as a
    temporary metric, to be removed around M60: http://crbug.com/699785
  </summary>
</histogram>

<histogram name="Stability.Android.ProcessedCrashCounts"
    enum="AndroidProcessedCrashCounts">
  <owner>boliu@chromium.org</owner>
  <summary>
    Individual enum counts specific conditions of child process terminations.
    There are too many individual states to enumerate into a single histogram,
    so this effectively does the aggregration that normally happens on the
    server side in the client instead. The benefit is this is easily extensible
    in the future, and downside is that it does not allow additional server side
    analysis. Note a single child process termination may fall into multiple
    enums.
  </summary>
</histogram>

<histogram name="Stability.Android.RendererCrash" enum="Boolean">
  <owner>wnwen@chromium.org</owner>
  <summary>
    Counts renderer crashes including OOMs. Android only. Mirrors old stability
    proto renderer crashes.
  </summary>
</histogram>

<histogram name="Stability.Android.StrongBindingOomRemainingBindingState"
    enum="Android.ChildProcessBindingStateCombination">
  <owner>boliu@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    Record the state of child service bindings left when a child service with
    strong binding is OOM killed by Android. Recorded when such a OOM kill is
    detected by browser. Note this does not distinguish process type, and is for
    example recorded for both GPU and renderer process.
  </summary>
</histogram>

<histogram name="Stability.BadMessageTerminated.Chrome"
    enum="BadMessageReasonChrome">
  <owner>nick@chromium.org</owner>
  <owner>jamescook@chromium.org</owner>
  <summary>
    Count of processes killed by chrome/browser because they sent an IPC that
    couldn't be properly handled. Categories are the reasons (code locations)
    for the kills.
  </summary>
</histogram>

<histogram name="Stability.BadMessageTerminated.Content"
    enum="BadMessageReasonContent">
  <owner>jam@chromium.org</owner>
  <owner>jamescook@chromium.org</owner>
  <summary>
    Count of child processes killed because they sent an IPC that couldn't be
    properly handled. Categories are the reasons (code locations) for the kills.
  </summary>
</histogram>

<histogram name="Stability.BadMessageTerminated.Extensions"
    enum="BadMessageReasonExtensions">
  <owner>jamescook@chromium.org</owner>
  <summary>
    Count of extension processes killed because they sent an IPC that couldn't
    be properly handled. Categories are the reasons (code locations) for the
    kills.
  </summary>
</histogram>

<histogram name="Stability.BadMessageTerminated.GuestView"
    enum="BadMessageReasonGuestView">
  <owner>mcnee@chromium.org</owner>
  <owner>nick@chromium.org</owner>
  <summary>
    Count of processes killed because they sent a bad IPC that couldn't be
    properly handled. Categories are the reasons (code locations) for the kills.
  </summary>
</histogram>

<histogram name="Stability.BadMessageTerminated.NaCl"
    enum="BadMessageReasonNaCl">
  <owner>nick@chromium.org</owner>
  <owner>jamescook@chromium.org</owner>
  <summary>
    Count of processes killed because they sent a NaCl IPC that couldn't be
    properly handled. Categories are the reasons (code locations) for the kills.
  </summary>
</histogram>

<histogram name="Stability.BadMessageTerminated.PasswordManager"
    enum="BadMessageReasonPasswordManager">
  <owner>nick@chromium.org</owner>
  <owner>jamescook@chromium.org</owner>
  <summary>
    Count of processes killed because they sent a bad IPC that couldn't be
    properly handled. Categories are the reasons (code locations) for the kills.
  </summary>
</histogram>

<histogram name="Stability.BrowserExitCodes" enum="WindowsExitCode">
  <owner>siggi@chromium.org</owner>
  <summary>
    Records the exit code of the browser process (on Windows) from the previous
    launch. On crash, the exit code will indicate the exception code of the
    crash. This is emitted in stability data with the first report on a
    subsequent launch. Note: Due to https://crbug.com/805754, the enum labels
    for RESULT_CODE_* are off by 1 for M56 and earlier.
  </summary>
</histogram>

<histogram name="Stability.ChildFrameCrash.Visibility" enum="CrashVisibility">
  <owner>boliu@chromium.org</owner>
  <owner>lfg@chromium.org</owner>
  <owner>lukasza@chromium.org</owner>
  <summary>
    Logged after detecting that a sad subframe is shown (logged at most once per
    crash).
  </summary>
</histogram>

<histogram name="Stability.CrashedProcessAge.Extension" units="ms">
  <owner>lukasza@chromium.org</owner>
  <summary>
    The age of a crashed extension process. Not logged on iOS. Logged together
    with CrashExitCodes.Extension.
  </summary>
</histogram>

<histogram name="Stability.CrashedProcessAge.Renderer" units="ms">
  <owner>lukasza@chromium.org</owner>
  <summary>
    The age of a crashed extension process. Not logged on iOS. Logged together
    with CrashExitCodes.Renderer.
  </summary>
</histogram>

<histogram name="Stability.ExitFunnel" units="ms">
  <owner>siggi@chromium.org</owner>
  <summary>
    Temporary instrumentation to record the Windows browser's exit path. See
    http://crbug.com/412384.
  </summary>
</histogram>

<histogram name="Stability.Internals.DataDiscardCount" units="counts">
  <owner>manzagop@chromium.org</owner>
  <summary>
    Number of times stability data was discarded. This is accumulated since the
    last report, even across versions. This is logged during stability metric
    recording for the following log sent.
  </summary>
</histogram>

<histogram name="Stability.Internals.InitialStabilityLogDeferredCount"
    units="counts">
  <owner>manzagop@chromium.org</owner>
  <summary>
    Number of times the initial stability log upload was deferred to the next
    startup. This is logged during stability metric recording for the following
    log sent.
  </summary>
</histogram>

<histogram name="Stability.Internals.SystemCrashCount" units="crashes">
  <owner>siggi@chromium.org</owner>
  <summary>
    Number of times a browser crash was detected, where the browser was last
    known to be alive in a Windows system session that terminated abnormally.
  </summary>
</histogram>

<histogram name="Stability.Internals.VersionMismatchCount" units="counts">
  <owner>manzagop@chromium.org</owner>
  <summary>
    Number of times the version number stored in prefs did not match the
    serialized system profile version number. This is logged during stability
    metric recording.
  </summary>
</histogram>

<histogram name="Stability.MobileSessionShutdownType"
    enum="MobileSessionShutdownType">
  <owner>lpromero@chromium.org</owner>
  <owner>olivierrobin@chromium.org</owner>
  <summary>
    Type of the shutdown. This histogram is recorded at startup and logs a
    sample for the previous session. A clean shutdown is one where the app
    enters the background before being killed. Other shutdowns are all some sort
    of crash. The absence of a crash log indicates that the app was killed by
    the OS, normally due to memory pressure. If memory pressure is extremely
    high, the app may not have had a chance to response to a memory warning
    before being killed. For first launch after upgrade, the crash reports may
    be discarded before this histogram is written to so it's not possible to
    determine if there's a valid crash log present or not.
  </summary>
</histogram>

<histogram name="Stability.RendererUnresponsiveBeforeTermination"
    enum="BooleanUnresponsive">
  <owner>dtapuska@chromium.org</owner>
  <summary>
    If the renderer is considered unresponsive from the browser's perspective
    before the process is terminated. This metric is being used to figure out
    crash reports that have all idle threads and perhaps the process is being
    terminated when it shouldn't be. crbug.com/615090.
  </summary>
</histogram>

<histogram name="Stars.Goog_Related" units="%">
  <owner>yefim@chromium.org</owner>
  <summary>
    Percentage of clips with Google related urls (points to internal Google
    resources). Logs every time user goes to chrome://bookmarks.
  </summary>
</histogram>

<histogram name="Stars.Goog_Related_20_Percent" units="%">
  <owner>yefim@chromium.org</owner>
  <summary>
    Percentage of clips with Google related urls within first 20 (points to
    internal Google resources). Logs every time user goes to chrome://bookmarks.
  </summary>
</histogram>

<histogram name="Stars.Images_Percent" units="%">
  <owner>yefim@chromium.org</owner>
  <summary>
    Percentage of clips with images. Logs every time user goes to
    chrome://bookmarks.
  </summary>
</histogram>

<histogram name="Stars.Images_Percent_First20" units="%">
  <owner>yefim@chromium.org</owner>
  <summary>
    Percentage of clips with images within first 20. Logs every time user goes
    to chrome://bookmarks.
  </summary>
</histogram>

<histogram name="Stars.LaunchLocation" enum="StarsLaunchLocation">
  <owner>ianwen@chromium.org</owner>
  <summary>Logs a UI location from which a bookmark is launched.</summary>
</histogram>

<histogram name="Stars.No_Images_Snippets" units="%">
  <owner>yefim@chromium.org</owner>
  <summary>
    Percentage of clips without images or snippets. Logs every time user goes to
    chrome://bookmarks.
  </summary>
</histogram>

<histogram name="Stars.No_Img_No_Snippet_20_Percent" units="%">
  <owner>yefim@chromium.org</owner>
  <summary>
    Percentage of clips without images or snippets within first 20. Logs every
    time user goes to chrome://bookmarks.
  </summary>
</histogram>

<histogram name="Startup.AfterStartupTaskCount">
  <owner>michaeln@chromium.org</owner>
  <summary>
    The number of after-startup tasks that were queued prior to startup
    completion and deferred until that time.
  </summary>
</histogram>

<histogram name="Startup.AfterStartupTaskDelayedUntilTime" units="ms">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Time from the process creation until deferred after-startup tasks began
    running.
  </summary>
</histogram>

<histogram name="Startup.Android.Cold.TimeToFirstContentfulPaint" units="ms">
  <owner>pasko@chromium.org</owner>
  <owner>alexilin@chromium.org</owner>
  <summary>
    Android: The time from the activity creation point to the first contentful
    paint of the first loaded page. It's not recorded when the first loaded page
    is non http(s) page like a chrome error page, a new tab page, a blank page.
    It's also not recorded if the application wasn't in the foreground since the
    start till the end of event.
  </summary>
</histogram>

<histogram name="Startup.Android.Cold.TimeToFirstNavigationCommit" units="ms">
  <owner>pasko@chromium.org</owner>
  <owner>alexilin@chromium.org</owner>
  <summary>
    Android: The time from the activity creation point to the moment the first
    navigation is committed, i.e. when renderer gets the first byte of the
    document. It's not recorded when the first loaded page is non http(s) page
    like a chrome error page, a new tab page, a blank page. It's also not
    recorded if the application wasn't in the foreground since the start till
    the end of event.
  </summary>
</histogram>

<histogram name="Startup.Android.Experimental.Cold.TimeToFirstContentfulPaint"
    units="ms">
  <obsolete>
    This metric was deprecated in M68 in favour of
    &quot;Startup.Android.Cold.TimeToFirstContentfulPaint.Tabbed&quot;. It has
    moved out of experimental and records a smaller range of numbers (medium
    times instead of long times). The &quot;.Tabbed&quot; suffix is added since
    the histogram is being tracked for WebApkActivity using the
    &quot;.WebApk&quot; suffix.
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <owner>alexilin@chromium.org</owner>
  <summary>
    Android: The time from the activity creation point to the first contentful
    paint of the first loaded page. It's not recorded when the first loaded page
    is non http(s) page like a chrome error page, a new tab page, a blank page.
    It's also not recorded if the application wasn't in the foreground since the
    start till the end of event.
  </summary>
</histogram>

<histogram name="Startup.Android.Experimental.Cold.TimeToFirstNavigationCommit"
    units="ms">
  <obsolete>
    This metric was deprecated in M68 in favour of
    &quot;Startup.Android.Cold.TimeToFirstNavigationCommit.Tabbed&quot;. It has
    moved out of experimental and records a smaller range of numbers (medium
    times instead of long times). The &quot;.Tabbed&quot; suffix is added since
    the histogram is being tracked for WebApkActivity using the
    &quot;.WebApk&quot; suffix.
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <owner>alexilin@chromium.org</owner>
  <summary>
    Android: The time from the activity creation point to the moment the first
    navigation is committed, i.e. when renderer gets the first byte of the
    document. It's not recorded when the first loaded page is non http(s) page
    like a chrome error page, a new tab page, a blank page. It's also not
    recorded if the application wasn't in the foreground since the start till
    the end of event.
  </summary>
</histogram>

<histogram name="Startup.AppListFirstPaintColdStart" units="ms">
  <obsolete>
    Deprecated 03/2018 with Mash AppList refactoring.
  </obsolete>
  <owner>tapted@chromium.org</owner>
  <summary>
    Time for a newly created browser process to perform the first paint of the
    app launcher, when started with the --show-app-list flag and with no
    currently running Chrome processes.
  </summary>
</histogram>

<histogram name="Startup.AppListFirstPaintWarmStart" units="ms">
  <obsolete>
    Deprecated 03/2018 with Mash AppList refactoring.
  </obsolete>
  <owner>tapted@chromium.org</owner>
  <summary>
    Time for a running browser process to perform the first paint of the app
    launcher. Measured from the time a second Chrome process started, which sent
    its --show-app-list command line argument to the already-running process and
    will soon exit.
  </summary>
</histogram>

<histogram name="Startup.BlockForCrashpadHandlerStartupTime" units="ms">
  <owner>crashpad-dev@chromium.org</owner>
  <summary>
    The amount of time that elapsed during in
    crash_report::BlockUntilHandlerStarted().
  </summary>
</histogram>

<histogram name="Startup.BringToForegroundReason"
    enum="BooleanBringToForegroundReason">
  <owner>johnme@chromium.org</owner>
  <summary>
    Records the cause, each time Chrome is brought to the foreground. Currently
    only checks if a NotificationUIManager notification was shown in the last 5
    seconds (includes Web Notifications, but not media or Cast).
  </summary>
</histogram>

<histogram name="Startup.BrowserLaunchURLCount" units="urls">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    Measured when Chrome is invoked, this counts the number of URLs passed via
    command line. Note that this handles the case of a URL passed to Chrome
    starting up, or when a running Chrome is given the message to open a new
    URL.
  </summary>
</histogram>

<histogram name="Startup.BrowserMainRunnerImplInitializeLongTime" units="ms">
  <owner>robliao@chromium.org</owner>
  <summary>
    The amount of time that elapsed during BrowserMainRunnerImpl::Initialize.
  </summary>
</histogram>

<histogram name="Startup.BrowserMainRunnerImplInitializeStep1Time" units="ms">
  <owner>robliao@chromium.org</owner>
  <summary>
    The amount of time that elapsed during the first section of
    BrowserMainRunnerImpl::Initialize.
  </summary>
</histogram>

<histogram name="Startup.BrowserMainRunnerImplInitializeStep2Time" units="ms">
  <owner>robliao@chromium.org</owner>
  <summary>
    The amount of time that elapsed during the second section of
    BrowserMainRunnerImpl::Initialize.
  </summary>
</histogram>

<histogram name="Startup.BrowserMainToRendererMain" units="ms">
  <owner>fdoray@chromium.org</owner>
  <summary>
    Time from the ChromeMain() entry in the browser process to the first
    RendererMain() entry.
  </summary>
</histogram>

<histogram name="Startup.BrowserMessageLoopStart.To.MainNavigationStart"
    units="ms">
  <obsolete>
    Removed 2/2018, as MessageLoopStart is after MainNavigationStart with
    browser-side navigation.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Time between Startup.BrowserMessageLoopStartTime and
    Startup.FirstWebContents.MainNavigationStart. Recorded explicitly to allow
    easy breakdown of Startup.FirstWebContents.MainNavigationStart when
    diagnosing issues.
  </summary>
</histogram>

<histogram name="Startup.BrowserMessageLoopStart.To.NonEmptyPaint2" units="ms">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Time between Startup.BrowserMessageLoopStartTime and
    Startup.FirstWebContents.NonEmptyPaint2. Recorded explicitly to allow easy
    breakdown of Startup.FirstWebContents.NonEmptyPaint2 when diagnosing issues.
  </summary>
</histogram>

<histogram name="Startup.BrowserMessageLoopStartHardFaultCount" units="faults">
  <owner>chrisha@chromium.org</owner>
  <owner>fdoray@chromium.org</owner>
  <summary>
    The number of hard faults incurred in the browser process from startup to
    start of the main thread's message loop, not including first runs of the
    browser. This is only reported on Windows 7 and greater.
  </summary>
</histogram>

<histogram name="Startup.BrowserMessageLoopStartHardFaultCount.FirstRun"
    units="faults">
  <obsolete>
    Removed 1/2016.
  </obsolete>
  <owner>chrisha@chromium.org</owner>
  <summary>
    The number of hard faults incurred in the browser process from startup to
    start of the main thread's message loop on first run. This is only reported
    on Windows 7 and greater.
  </summary>
</histogram>

<histogram name="Startup.BrowserMessageLoopStartHardFaultCount.Success"
    enum="BooleanSuccess">
  <obsolete>
    Deprecated 12/2015. No longer tracked because values collected on stable
    show that the function pretty much never fails (succeeds 99.9996% of the
    time).
  </obsolete>
  <owner>chrisha@chromium.org</owner>
  <owner>fdoray@chromium.org</owner>
  <summary>
    If OS support was detected (Windows 7 and greater) indicates whether it was
    possible to determine the number of hard faults that have occurred in the
    process from startup to start of the main thread's message loop. This can
    fail because the underlying call is inherently racy.
  </summary>
</histogram>

<histogram name="Startup.BrowserMessageLoopStartTime" units="ms">
  <owner>fdoray@chromium.org</owner>
  <summary>
    Time from browser startup to the start of the main thread's message loop.
  </summary>
</histogram>

<histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry" units="ms">
  <obsolete>
    Deprecated 12/2016. crbug.com/634408
  </obsolete>
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Time from main entry to the start of the main thread's message loop. This
    stat is only recorded after 7 minutes of OS uptime to try to mitigate the
    variance resulting from Chrome being autostarted. Replaced with
    Startup.BrowserMessageLoopStartTimeFromMainEntry2 which is recorded all the
    time.
  </summary>
</histogram>

<histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry.FirstRun"
    units="ms">
  <obsolete>
    Deprecated 12/2016. crbug.com/634408
  </obsolete>
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Time from main entry to the start of the main thread's message loop on first
    run. This stat is only recorded after 7 minutes of OS uptime to try to
    mitigate the variance resulting from Chrome being autostarted. Replaced with
    Startup.BrowserMessageLoopStartTimeFromMainEntry.FirstRun2 which is recorded
    all the time.
  </summary>
</histogram>

<histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry.FirstRun2"
    units="ms">
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Time from main entry to the start of the main thread's message loop on first
    run.
  </summary>
</histogram>

<histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry2" units="ms">
  <obsolete>
    Deprecated 2018-01 in favor of
    Startup.BrowserMessageLoopStartTimeFromMainEntry3 which does not involve a
    conversion from Time to TimeTicks.
  </obsolete>
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Time from main entry to the start of the main thread's message loop.
  </summary>
</histogram>

<histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry3" units="ms">
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Time from main entry to the start of the main thread's message loop.
  </summary>
</histogram>

<histogram name="Startup.BrowserOpenTabs">
  <owner>fdoray@chromium.org</owner>
  <summary>
    Time taken to open the initial tab or to restore tabs from previous session.
  </summary>
</histogram>

<histogram name="Startup.BrowserProcessImpl_PreMainMessageLoopRunTime"
    units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during
    BrowserProcessImpl::PreMainMessageLoopRun.
  </summary>
</histogram>

<histogram name="Startup.BrowserWindow.FirstPaint" units="ms">
  <owner>mblsha@yandex-team.ru</owner>
  <summary>
    Time from browser startup to the time the first Browser window has finished
    painting its children.
  </summary>
</histogram>

<histogram name="Startup.BrowserWindow.FirstPaint.CompositingEnded" units="ms">
  <owner>mblsha@yandex-team.ru</owner>
  <summary>
    Time from browser startup to the time the GPU has finished compositing after
    first Browser window has finished painting its children. At this point the
    Browser interface is visible on screen. Measures how much time does it take
    for GPU to actually paint the first time.
  </summary>
</histogram>

<histogram name="Startup.BrowserWindowDisplay" units="ms">
  <owner>fdoray@chromium.org</owner>
  <summary>
    Time from browser startup to the time the browser window initially becomes
    visible.
  </summary>
</histogram>

<histogram name="Startup.ChromeCast.TimeToDisplayVideo" units="ms">
  <obsolete>
    Deprecated 7/2015. To be replaced with Cast events.
  </obsolete>
  <owner>jeremy@chromium.org</owner>
  <summary>
    The elapsed time from the ChromeCast application launch to the first video
    frame displayed.
  </summary>
</histogram>

<histogram name="Startup.ColdStartWithExternalURLTime" units="ms">
  <owner>jif@chromium.org</owner>
  <summary>
    The duration of all initializations in a cold start triggered by an external
    URL.
  </summary>
</histogram>

<histogram name="Startup.ColdStartWithoutExternalURLTime" units="ms">
  <owner>jif@chromium.org</owner>
  <summary>
    The duration of all initializations in a cold start not triggered by an
    external URL.
  </summary>
</histogram>

<histogram name="Startup.CreateFirstProfile" units="ms">
  <owner>fdoray@chromium.org</owner>
  <summary>
    How long it takes to load the original profile synchronously on the UI
    thread.
  </summary>
</histogram>

<histogram
    name="Startup.Experimental.FirstWebContents.MainFrameLoad.ManyBuckets"
    units="ms">
  <obsolete>
    Removed in M-41.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    An experimental metric only collected on the dev and canary channels.
    Measure the elapsed time from process launch to the first main frame load of
    the first web contents. Uses significantly more buckets, with reduced
    ranges.
  </summary>
</histogram>

<histogram
    name="Startup.Experimental.FirstWebContents.MainFrameLoad.StandardBuckets"
    units="ms">
  <obsolete>
    Moved to Startup.FirstWebContents.MainFrameLoad in M-41.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    An experimental metric only collected on the dev and canary channels.
    Measure the elapsed time from process launch to the first main frame load of
    the first web contents. Uses standard bucket ranges.
  </summary>
</histogram>

<histogram
    name="Startup.Experimental.FirstWebContents.NonEmptyPaint.ManyBuckets"
    units="ms">
  <obsolete>
    Removed in M-41.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    An experimental metric only collected on the dev and canary channels.
    Measure the elapsed time from process launch to the first non-empty paint of
    the first web contents. Uses significantly more buckets, with reduced
    ranges.
  </summary>
</histogram>

<histogram
    name="Startup.Experimental.FirstWebContents.NonEmptyPaint.StandardBuckets"
    units="ms">
  <obsolete>
    Moved to Startup.FirstWebContents.NonEmptyPaint in M-41.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <summary>
    An experimental metric only collected on the dev and canary channels.
    Measure the elapsed time from process launch to the first non-empty paint of
    the first web contents. Uses standard bucket ranges.
  </summary>
</histogram>

<histogram name="Startup.FirstCommitNavigationTime" units="ms">
  <obsolete>
    Replaced by Startup.FirstCommitNavigationTime2
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <summary>
    [Android only] The time from the earliest entry point in the browser process
    to the moment the first navigation is committed, i.e. when renderer gets the
    first byte of the document.
  </summary>
</histogram>

<histogram name="Startup.FirstCommitNavigationTime2" units="ms">
  <obsolete>
    Replaced with Startup.FirstCommitNavigationTime3 on 6/2017
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <owner>wnwen@chromium.org</owner>
  <summary>
    [Android only] The time from the first foreground entry point in the app to
    the moment the first navigation is committed, i.e. when renderer gets the
    first byte of the document.
  </summary>
</histogram>

<histogram name="Startup.FirstCommitNavigationTime3" units="ms">
  <obsolete>
    Replaced with Startup.Android.Experimental.Cold.TimeToFirstNavigationCommit
    on 11/2017
  </obsolete>
  <owner>pasko@chromium.org</owner>
  <owner>wnwen@chromium.org</owner>
  <summary>
    [Android only] The time from the first foreground entry point in the app to
    the moment the first navigation is committed, i.e. when renderer gets the
    first byte of the document.
  </summary>
</histogram>

<histogram name="Startup.FirstWebContents.FinishReason"
    enum="StartupProfilingFinishReason">
  <owner>gab@chromium.org</owner>
  <summary>
    [Desktop] The reason for which startup profiling was deemed complete. Logged
    once per session on startup.
  </summary>
</histogram>

<histogram name="Startup.FirstWebContents.MainFrameLoad" units="ms">
  <obsolete>
    Deprecated with 3/2016 with M48.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    [Desktop] DEPRECATED (but kept as a known basis until M48 is phased out).
    Measure the elapsed time from process launch to the first main frame load of
    the first web contents. Deprecated in favor of
    Startup.FirstWebContents.MainFrameLoad2 which now avoids counting ill-cases
    (ref. FirstWebContentsProfiler::FinishReason).
  </summary>
</histogram>

<histogram name="Startup.FirstWebContents.MainFrameLoad2" units="ms">
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    [Desktop] Measure the elapsed time from process launch to the first main
    frame load of the first web contents. Only comprised of cases where the
    initial foreground tab gets to complete its rendering task unimpeded (an
    improvement over Startup.FirstWebContents.MainFrameLoad).
  </summary>
</histogram>

<histogram name="Startup.FirstWebContents.MainNavigationFinished" units="ms">
  <owner>gab@chromium.org</owner>
  <summary>
    [Desktop] Measure the elapsed time from process launch to the moment when
    the navigation is committed (first bytes received) in the first web
    contents' main frame.
  </summary>
</histogram>

<histogram name="Startup.FirstWebContents.MainNavigationStart" units="ms">
  <owner>gab@chromium.org</owner>
  <summary>
    [Desktop] Measure the elapsed time from process launch to the beginning of
    navigation in the first web contents' main frame.
  </summary>
</histogram>

<histogram name="Startup.FirstWebContents.NonEmptyPaint" units="ms">
  <obsolete>
    Deprecated with 3/2016 with M48.
  </obsolete>
  <owner>erikchen@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    [Desktop] DEPRECATED (but kept as a known basis until M48 is phased out).
    Measure the elapsed time from process launch to the first non- empty paint
    of the first web contents. Deprecated in favor of
    Startup.FirstWebContents.NonEmptyPaint2 which now avoids counting ill-cases
    (ref. FirstWebContentsProfiler::FinishReason).
  </summary>
</histogram>

<histogram name="Startup.FirstWebContents.NonEmptyPaint2" units="ms">
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    [Desktop] Measure the elapsed time from process launch to the first non-
    empty paint of the first web contents. Only comprised of cases where the
    initial foreground tab gets to complete its rendering task unimpeded (an
    improvement over Startup.FirstWebContents.NonEmptyPaint).
  </summary>
</histogram>

<histogram
    name="Startup.FirstWebContents.RenderProcessHostInit.ToNonEmptyPaint"
    units="ms">
  <owner>hans@chromium.org</owner>
  <summary>
    Time between RenderFrameHostImpl::Init and
    Startup.FirstWebContents.NonEmptyPaint2.
  </summary>
</histogram>

<histogram name="Startup.FirstWebContents.UINotResponsive" units="ms">
  <obsolete>
    Deprecated 10/2015.
  </obsolete>
  <owner>gayane@chromium.org</owner>
  <summary>
    [Desktop] Measures the execution time for a single task to execute on UI if
    it was not possible to execute UI tasks under 1/60s within certain limits,
    after WebContents was painted at least once. This is recorded at most once
    per Chrome launch. Used as a measure of responsiveness on startup.
  </summary>
</histogram>

<histogram name="Startup.FirstWebContents.UINotResponsive_10sec" units="ms">
  <obsolete>
    Deprecated 10/2015.
  </obsolete>
  <owner>gayane@chromium.org</owner>
  <summary>
    [Desktop] Measures the elapsed time for a single task to execute on UI if it
    was not possible to execute it under 1/60s within certain limits, 10 second
    after first WebContents was painted at least once.  This is recorded at most
    once per Chrome launch. Used as a measure of responsiveness on startup.
  </summary>
</histogram>

<histogram name="Startup.FirstWebContents.UINotResponsive_1sec" units="ms">
  <obsolete>
    Deprecated 10/2015.
  </obsolete>
  <owner>gayane@chromium.org</owner>
  <summary>
    [Desktop] Measures the elapsed time for a single task to execute on UI if it
    was not possible to execute it under 1/60s within certain limits, 1 second
    after first WebContents was painted at least once.  This is recorded at most
    once per Chrome launch. Used as a measure of responsiveness on startup.
  </summary>
</histogram>

<histogram name="Startup.FirstWebContents.UIResponsive" units="ms">
  <obsolete>
    Deprecated 10/2015.
  </obsolete>
  <owner>gayane@chromium.org</owner>
  <summary>
    [Desktop] Measures the elapsed time it takes for a task to execute on UI
    under 1/60s after first WebContents was painted at least once. This is
    recorded at most once per Chrome launch. Used as a measure of responsiveness
    on startup.
  </summary>
</histogram>

<histogram name="Startup.FirstWebContents.UIResponsive_10sec" units="ms">
  <obsolete>
    Deprecated 10/2015.
  </obsolete>
  <owner>gayane@chromium.org</owner>
  <summary>
    [Desktop] Measures the elapsed time it takes for a task to execute on UI
    under 1/60s, 10 second after the first WebContents was painted.  This is
    recorded at most once per Chrome launch. Used as a measure of responsiveness
    on startup.
  </summary>
</histogram>

<histogram name="Startup.FirstWebContents.UIResponsive_1sec" units="ms">
  <obsolete>
    Deprecated 10/2015.
  </obsolete>
  <owner>gayane@chromium.org</owner>
  <summary>
    [Desktop] Measures the elapsed time it takes for a task to execute on UI
    under 1/60s, 1 second after the first WebContents was painted. This is
    recorded at most once per Chrome launch. Used as a measure of responsiveness
    on startup.
  </summary>
</histogram>

<histogram name="Startup.Fling.TimeToDisplayVideo" units="ms">
  <obsolete>
    Deprecated 7/2015. To be replaced with Cast events.
  </obsolete>
  <owner>jeremy@chromium.org</owner>
  <summary>
    The elapsed time from the Fling application launch to the first video frame
    displayed.
  </summary>
</histogram>

<histogram name="Startup.IsResume">
  <obsolete>
    Deprecated 12/2011. Merged into MobileSessionStartType.
  </obsolete>
  <owner>jeremy@chromium.org</owner>
  <summary>Whether a startup is a resume (vs a cold start).</summary>
</histogram>

<histogram name="Startup.LoadTime.ExeMainToDllMain">
  <obsolete>
    Deprecated 12/2016. crbug.com/634408
  </obsolete>
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Time from the main() function in chrome.exe to chrome.dll's main(). This
    stat is only recorded after 7 minutes of OS uptime to try to mitigate the
    variance resulting from Chrome being autostarted. Replaced with
    Startup.LoadTime.ExeMainToDllMain2 which is recorded all the time.
  </summary>
</histogram>

<histogram name="Startup.LoadTime.ExeMainToDllMain2">
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Time from the main() function in chrome.exe to chrome.dll's main().
  </summary>
</histogram>

<histogram name="Startup.LoadTime.ProcessCreateToDllMain">
  <obsolete>
    Deprecated 12/2016. crbug.com/634408
  </obsolete>
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Time from the process creation to chrome.dll's main(). This stat is only
    recorded after 7 minutes of OS uptime to try to mitigate the variance
    resulting from Chrome being autostarted. Replaced with
    Startup.LoadTime.ProcessCreateToDllMain2 which is recorded all the time.
  </summary>
</histogram>

<histogram name="Startup.LoadTime.ProcessCreateToDllMain2">
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>Time from the process creation to chrome.dll's main().</summary>
</histogram>

<histogram name="Startup.LoadTime.ProcessCreateToExeMain">
  <obsolete>
    Deprecated 12/2016. crbug.com/634408
  </obsolete>
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Time from the process creation to executing the main() function in
    chrome.exe. This stat is only recorded after 7 minutes of OS uptime to try
    to mitigate the variance resulting from Chrome being autostarted. Replaced
    with Startup.LoadTime.ProcessCreateToExeMain2 which is recorded all the
    time.
  </summary>
</histogram>

<histogram name="Startup.LoadTime.ProcessCreateToExeMain2">
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Time from the process creation to executing the main() function in
    chrome.exe.
  </summary>
</histogram>

<histogram name="Startup.MobileSessionStartAction"
    enum="MobileSessionStartAction">
  <owner>olivierrobin@chromium.org</owner>
  <summary>
    The action requested on the application startup when called from another app
    or the OS.
  </summary>
</histogram>

<histogram name="Startup.MobileSessionStartFromApps"
    enum="MobileSessionCallerApp">
  <owner>olivierrobin@chromium.org</owner>
  <summary>The calling application (if any).</summary>
</histogram>

<histogram name="Startup.OSX.AwakeFromNib" units="ms"
    expires_after="2018-08-30">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The amount of time that elapsed between main entry and the invocation of
    -[AppControllerMac awakeFromNib].
  </summary>
</histogram>

<histogram name="Startup.OSX.DockIconWillFinishBouncing" units="ms">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The amount of time that elapsed between main entry and the invocation of
    -[AppControllerMac didFinishLaunching:]. At that point, the dock icon will
    finish its current animation and stop bouncing.
  </summary>
</histogram>

<histogram name="Startup.OSX.PostMainMessageLoopStart" units="ms">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The amount of time that elapsed between main entry and the invocation of
    ChromeBrowserMainPartsMac::PostMainMessageLoopStart.
  </summary>
</histogram>

<histogram name="Startup.OSX.PostProfileInit" units="ms">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The amount of time that elapsed between main entry and the invocation of
    ChromeBrowserMainPartsMac::PostProfileInit.
  </summary>
</histogram>

<histogram name="Startup.OSX.PreMainMessageLoopStart" units="ms"
    expires_after="2018-08-30">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The amount of time that elapsed between main entry and the invocation of
    ChromeBrowserMainPartsMac::PreMainMessageLoopStart.
  </summary>
</histogram>

<histogram name="Startup.OSX.PreProfileInit" units="ms"
    expires_after="2018-08-30">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The amount of time that elapsed between main entry and the invocation of
    ChromeBrowserMainPartsMac::PreProfileInit.
  </summary>
</histogram>

<histogram name="Startup.OSX.WillFinishLaunching" units="ms"
    expires_after="2018-08-30">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The amount of time that elapsed between main entry and the invocation of
    -[AppControllerMac willFinishLaunching:].
  </summary>
</histogram>

<histogram name="Startup.PreMainMessageLoopRunImplLongTime" units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during
    ChromeBrowserMainParts::PreMainMessageLoopRunImpl.
  </summary>
</histogram>

<histogram name="Startup.PreMainMessageLoopRunImplStep1Time" units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during the first untracked section of
    ChromeBrowserMainParts::PreMainMessageLoopRunImpl.
  </summary>
</histogram>

<histogram name="Startup.PreMainMessageLoopRunImplStep2Time" units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during the second untracked section of
    ChromeBrowserMainParts::PreMainMessageLoopRunImpl. Not written for Android.
  </summary>
</histogram>

<histogram name="Startup.PreMainMessageLoopRunImplStep3Time" units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during the third untracked section of
    ChromeBrowserMainParts::PreMainMessageLoopRunImpl. Not written for Android.
  </summary>
</histogram>

<histogram name="Startup.PreMainMessageLoopRunImplTime" units="ms">
  <obsolete>
    Deprecated as of 2/2015.
  </obsolete>
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during
    ChromeBrowserMainParts::PreMainMessageLoopRunImpl.
  </summary>
</histogram>

<histogram name="Startup.SameVersionStartupCount">
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    The number of startups the current version has been through. Reported once
    per Chrome session, on startup. Any user that reports X for this version
    will also have previously reported [1,X-1] for this version through the
    previous X-1 Chrome sessions.
  </summary>
</histogram>

<histogram name="Startup.ShowAppListColdStart" units="ms">
  <owner>tapted@chromium.org</owner>
  <summary>
    Time for a newly created browser process to reach the code that starts
    showing the app launcher, when started with the --show-app-list flag and
    with no currently running Chrome processes.
  </summary>
</histogram>

<histogram name="Startup.ShowAppListWarmStart" units="ms">
  <owner>tapted@chromium.org</owner>
  <summary>
    Time for a running browser process to reach the code that starts showing the
    app launcher. Measured from the time a second Chrome process started, which
    sent its --show-app-list command line argument to the already-running
    process and will soon exit.
  </summary>
</histogram>

<histogram name="Startup.SlowStartupBookmarksLoad" units="ms">
  <obsolete>
    Deprecated 06/2015.
  </obsolete>
  <owner>jeremy@chromium.org</owner>
  <summary>
    Time it takes to load bookmarks from disk. This measurement is only sent for
    startups that take &gt;10 seconds after an uptime of 7 minutes.
  </summary>
</histogram>

<histogram name="Startup.SlowStartupExtensionServiceInitAfterImport" units="ms">
  <obsolete>
    Deprecated 06/2015.
  </obsolete>
  <owner>jeremy@chromium.org</owner>
  <summary>
    Time it takes to finish initialization of the extension service including
    loading built-in extensions. This measurement is only sent for startups that
    take &gt;10 seconds after an uptime of 7 minutes.
  </summary>
</histogram>

<histogram name="Startup.SlowStartupFinalProfileInit" units="ms">
  <obsolete>
    Deprecated 06/2015.
  </obsolete>
  <owner>jeremy@chromium.org</owner>
  <summary>
    Time the final stages of profile initialization taking including
    initialization of profile keyed services. This measurement is only sent for
    startups that take &gt;10 seconds after an uptime of 7 minutes.
  </summary>
</histogram>

<histogram name="Startup.SlowStartupNSSInit" units="ms">
  <obsolete>
    Deprecated 06/2015.
  </obsolete>
  <owner>jeremy@chromium.org</owner>
  <summary>
    Time it takes to load the NSS libraries and initialize it. This measurement
    is only sent for startups that take &gt;10 seconds after an uptime of 7
    minutes.
  </summary>
</histogram>

<histogram name="Startup.SlowStartupPreferenceLoading" units="ms">
  <obsolete>
    Deprecated 06/2015.
  </obsolete>
  <owner>jeremy@chromium.org</owner>
  <summary>
    Time it takes to load preferences from disk. This measurement is only sent
    for startups that take &gt;10 seconds after an uptime of 7 minutes.
  </summary>
</histogram>

<histogram name="Startup.SlowStartupProfileIODataInit" units="ms">
  <obsolete>
    Deprecated 06/2015.
  </obsolete>
  <owner>jeremy@chromium.org</owner>
  <summary>
    Time it takes to initialize the ProfileIOData object - this includes
    initialization of the cookie store. This measurement is only sent for
    startups that take &gt;10 seconds after an uptime of 7 minutes.
  </summary>
</histogram>

<histogram name="Startup.SlowStartupSafeBrowsingGetDatabase" units="ms">
  <obsolete>
    Deprecated 06/2015.
  </obsolete>
  <owner>jeremy@chromium.org</owner>
  <summary>
    Time it takes to load the safe browsing database from disk. This measurement
    is only sent for startups that take &gt;10 seconds after an uptime of 7
    minutes.
  </summary>
</histogram>

<histogram name="Startup.SlowStartupSafeBrowsingServiceInitialize" units="ms">
  <obsolete>
    Deprecated 06/2015.
  </obsolete>
  <owner>jeremy@chromium.org</owner>
  <summary>
    Time it takes to initialize the safe browsing service. This measurement is
    only sent for startups that take &gt;10 seconds after an uptime of 7
    minutes.
  </summary>
</histogram>

<histogram name="Startup.SlowStartupSessionServiceCreateTabsAndWindows"
    units="ms">
  <obsolete>
    Deprecated 06/2015.
  </obsolete>
  <owner>jeremy@chromium.org</owner>
  <summary>
    Time it takes for session restore to finish initiating creation of restored
    tabs and windows. This measurement is only sent for startups that take
    &gt;10 seconds after an uptime of 7 minutes.
  </summary>
</histogram>

<histogram name="Startup.StartupBrowserCreator_ProcessCmdLineImplTime"
    units="ms">
  <obsolete>
    Deprecated 02/2015. Startup.StartupBrowserCreator_Start is more useful.
  </obsolete>
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during
    StartupBrowserCreator::ProcessCmdLineImpl.
  </summary>
</histogram>

<histogram name="Startup.StartupBrowserCreator_Start" units="ms">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during StartupBrowserCreator::Start().
  </summary>
</histogram>

<histogram name="Startup.SystemUptime" units="ms">
  <owner>fdoray@chromium.org</owner>
  <summary>
    The time elapsed between system boot and Chrome browser process launch. This
    is recorded just before the main message loop starts.
  </summary>
</histogram>

<histogram name="Startup.Temperature" enum="StartupTemperature">
  <owner>chrisha@chromium.org</owner>
  <owner>fdoray@chromium.org</owner>
  <summary>
    Indicates whether or not the given startup was warm, cold or unable to be
    determined. This is based off observing the number of hard faults that occur
    during startup prior to Startup.BrowserMessageLoopStartTime.
  </summary>
</histogram>

<histogram name="Startup.TimeOfDayGMT" units="HHMM">
  <owner>feuunk@chromium.org</owner>
  <summary>
    The time of day in GMT that the startup was performed. This is logged in
    HHMM format, with the minutes rounded down to the nearest 10 minute
    interval.

    This can be used to make traffic estimates for requests made from startup.
  </summary>
</histogram>

<histogram name="Startup.TimeSinceLastStartup" units="minutes">
  <owner>fdoray@chromium.org</owner>
  <summary>
    Time elapsed since the last startup that went up to the main message loop
    start. This is recorded just before the main message loop starts.
  </summary>
</histogram>

<histogram name="Startup.WarmStartTimeFromRemoteProcessStart" units="ms">
  <owner>fdoray@chromium.org</owner>
  <summary>
    Time for a running browser process to start processing the command line
    passed in by a second Chrome process, which just sent its command line
    arguments to the already-running process and will soon exit. Measured from
    the time the second Chrome process started.
  </summary>
</histogram>

<histogram name="StartupTimeBomb.Alarm" units="ms">
  <obsolete>
    Deprecated as of 10/2014.
  </obsolete>
  <owner>rch@chromium.org</owner>
  <summary>
    Time duration measured from the time the startup timebomb was started and
    when it went off.
  </summary>
</histogram>

<histogram name="Storage.BlacklistedImportantSites.Reason"
    enum="ClearDataSiteBlacklistCrossedReason">
  <owner>dmurph@chromium.org</owner>
  <summary>
    This is recorded for every site that the user blacklists when they when they
    clear browsing data. It indicates which signals were used to show the given
    site to the user that the user then chose to exclude from clearing.
  </summary>
</histogram>

<histogram name="Storage.Blob.Broken" enum="BooleanBroken">
  <owner>dmurph@chromium.org</owner>
  <summary>
    If a newly constructed blob is broken. See Storage.Blob.BrokenReason for a
    the broken reasons.
  </summary>
</histogram>

<histogram name="Storage.Blob.BrokenReason" enum="BlobBrokenReason">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The reason a blob is broken, reported only for broken blobs upon
    construction. See Storage.Blob.Broken for the breakdown of blobs broken vs
    unbroken.
  </summary>
</histogram>

<histogram name="Storage.Blob.BuildFromStreamResult"
    enum="BlobBuildFromStreamResult">
  <owner>mek@chromium.org</owner>
  <summary>
    The result of constructing a blob using the BlobRegistry.RegisterFromStream
    API.
  </summary>
</histogram>

<histogram name="Storage.Blob.CleanupSuccess" enum="Boolean">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Recorded when the old blob storage directories are cleared. This occurs on
    storage partition initialization, and is not recorded if there are no
    directories to clear. The value indicates if the file operations were a
    success.
  </summary>
</histogram>

<histogram name="Storage.Blob.CreateDirectoryResult" enum="PlatformFileError">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Recorded when we create the blob storage directory for the blob storage
    system. When we need to write blob data to files, we create this directory
    if it doesn't exist. We write blob data to files when either we have a new
    blob that's larger than our memory limit, or we're approaching our in-memory
    limit for blob storage.
  </summary>
</histogram>

<histogram name="Storage.Blob.ExceededMemory" enum="Boolean">
  <obsolete>
    Deprecated as of 3/2016. Use Storage.Blob.Broken to see the fraction of
    blobs that are broken, and Storage.Blob.BrokenReason for the number of
    broken blobs that are broken because of memory constraints.
  </obsolete>
  <owner>dmurph@chromium.org</owner>
  <summary>
    True if a created blob exceeded the internal in-memory storage memory limit
    for blobs.
  </summary>
</histogram>

<histogram name="Storage.Blob.FileReaderLoader.FailureType"
    enum="FileReaderLoaderFailureType">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Recorded when an error occurs in the FileReaderLoader, which is used to load
    blobs in the Renderer. FileReaderUser is mostly used for Javascript's
    'FileReader', but can also be used to read blobs for the IndexedDB
    renderer-side implementation. For the read error category, see
    Storage.Blob.FileReaderLoader.ReadError for a breakdown of the specific read
    error reasons.
  </summary>
</histogram>

<histogram name="Storage.Blob.FileReaderLoader.ReadError" enum="NetErrorCodes">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The error code reported by the blob system while trying to read a blob in
    the FileReaderLoader. Compare with the
    Storage.Blob.IDBRequestLoader.ReadError histogram to eliminate IndexedDB
    large-value blobs.
  </summary>
</histogram>

<histogram name="Storage.Blob.GetBlobFromUUIDTime" units="ms">
  <owner>mek@chromium.org</owner>
  <summary>
    The amount of time taken to complete the synchronous
    BlobRegistry.GetBlobFromUUID mojo call.
  </summary>
</histogram>

<histogram name="Storage.Blob.IDBRequestLoader.ReadError" enum="NetErrorCodes">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The error code reported by the blob system while trying to read an IndexedDB
    large-value blob in the IDBRequestLoader. These blobs are automatically
    created in Blink when a website writes a large value to IndexedDB.
  </summary>
</histogram>

<histogram name="Storage.Blob.InvalidReference" enum="RefcountOperation">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Counts the number of times we have an invalid refcount operation. An invalid
    increment means the blob didn't exist, and an invalid decrement means we
    don't have any record of the blob in our host.
  </summary>
</histogram>

<histogram name="Storage.Blob.InvalidURLRegister" enum="RefcountOperation">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Counts the number of times we have an invalid url registration operation. An
    invalid increment means the blob isn't in use by the host yet or the url is
    already mapped. An invalid decrement means the url isn't registered.
  </summary>
</histogram>

<histogram name="Storage.Blob.ItemCount" units="Blob Items">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The number of blob items in a blob, recorded at blob construction. (Blobs
    are immutable, so this won't change afterwards).
  </summary>
</histogram>

<histogram name="Storage.Blob.MaxDiskSpace" units="MB">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Records the calculated max disk space the blob storage system can use.
    Recorded on storage partition initialization.
  </summary>
</histogram>

<histogram name="Storage.Blob.MaxDiskSpaceAdjustment"
    enum="BlobStorageDiskSpaceAdjustment">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Recorded when the blob system changes adjustment types on its disk size. The
    disk can either be Frozen, Adjusted (near min external available disk
    space), or Normal. We record when we transition between these states, which
    can happen after any file operations in the blob system (paging data to disk
    or saving a new blob directly to disk).
  </summary>
</histogram>

<histogram name="Storage.Blob.PageFileSize" units="KB">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Size of a page file created for blob data by the blob storage system.
    Recorded before we create the file and write the blob items. We page blob
    data to files when we get close to our maximum blob memory usage.
  </summary>
</histogram>

<histogram name="Storage.Blob.PagingDisabled" enum="PlatformFileError">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Recorded when we disable paging blobs to file in the blob storage system.
    This occurs when we experience a filesystem error during writing blob data
    to disk. We write blob data to files when either we have a new blob that's
    larger than our memory limit, or we're approaching our in-memory limit for
    blob storage. The relevant error is recorded here.
  </summary>
</histogram>

<histogram name="Storage.Blob.RegisterBlobTime" units="ms">
  <owner>darin@chromium.org</owner>
  <summary>
    The amount of time taken to complete the synchronous
    BlobStorageMsg_RegisterBlob IPC.
  </summary>
</histogram>

<histogram name="Storage.Blob.RegisterPublicURLTime" units="ms">
  <owner>darin@chromium.org</owner>
  <summary>
    The amount of time taken to complete the synchronous
    BlobStorageMsg_RegisterPublicURL IPC.
  </summary>
</histogram>

<histogram name="Storage.Blob.RendererFileSeekFailed" enum="Boolean">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Whether seeking within a file (in order to write a part of a blob) failed in
    the renderer.
  </summary>
</histogram>

<histogram name="Storage.Blob.RendererFileWriteFailed" enum="Boolean">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Whether writing part of a blob to a file failed in the renderer.
  </summary>
</histogram>

<histogram name="Storage.Blob.ReusedItem" enum="BooleanReused">
  <owner>dmurph@chromium.org</owner>
  <summary>
    True if we reuse an item for a blob created from using Blob.slice, recorded
    in BlobStorageContext on blob creation.
  </summary>
</histogram>

<histogram base="true" name="Storage.Blob.SizeEvictedToDiskInKB" units="KB">
  <owner>ssid@chromium.org</owner>
  <summary>Records the total size of in-memory blobs evicted to disk.</summary>
</histogram>

<histogram name="Storage.Blob.StorageSizeAfterAppend" units="KB">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Records the total in-memory storage size of blobs before a blob item is
    appended.  Can be subtracted by Storage.Blob.StorageSizeBeforeAppend to find
    the true distribution of blob storage sizes.
  </summary>
</histogram>

<histogram name="Storage.Blob.StorageSizeBeforeAppend" units="KB">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Records the total in-memory storage size of blobs before a blob item is
    appended.  Can be subtracted from Storage.Blob.StorageSizeAfterAppend to
    find the true distribution of blob storage sizes.
  </summary>
</histogram>

<histogram name="Storage.Blob.TotalSize" units="KB">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The total in-memory size in KB of finished blobs. Recorded in
    BlobStorageContext when the blob is finished being created. This can include
    memory that is shared with other blobs or memory from repeated internal
    items.
  </summary>
</histogram>

<histogram name="Storage.Blob.TotalUnsharedSize" units="KB">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The total amount of unique memory used to create a blob. Recorded in
    BlobStorageContext when the blob is finished being created. This does not
    include memory that is shared with other blobs. If multiple of the same blob
    item is present, then this number will reflect the size of the single item.
  </summary>
</histogram>

<histogram name="Storage.BlobItemSize" units="KB">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The size in KB of items (or parts of items) appended to blobs.
  </summary>
</histogram>

<histogram name="Storage.BlobItemSize.BlobSlice" units="KB">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The size in KB of items (or parts of items) appended to blobs that come from
    the slicing of other blobs.  This happens when using Blob.slice, where we
    are using a part of an item in the original blob (not the whole item).
  </summary>
</histogram>

<histogram name="Storage.BlobItemSize.File.Unknown" enum="BooleanUnknown">
  <owner>dmurph@chromium.org</owner>
  <summary>
    True if the file size on blob append is unknown (which means the full file),
    or false if a specific file length was populated. Recorded in
    BlobStorageContext when we are adding a file item to a blob.
  </summary>
</histogram>

<histogram name="Storage.BlobItemSize.FileSystem.Unknown" enum="BooleanUnknown">
  <owner>dmurph@chromium.org</owner>
  <summary>
    True if the file size of a filesystem object on blob append is unknown
    (which means the full file), or false if a specific file length was
    populated. Recorded in BlobStorageContext when we are adding a filesystem
    item to a blob.
  </summary>
</histogram>

<histogram base="true" name="Storage.BytesRead" units="bytes">
  <owner>michaeln@chromium.org</owner>
  <summary>The number of bytes read. Recorded on each read.</summary>
</histogram>

<histogram base="true" name="Storage.BytesWritten" units="bytes">
  <owner>michaeln@chromium.org</owner>
  <summary>The number of bytes written. Recorded on each write.</summary>
</histogram>

<histogram name="Storage.ImportantSites.CBDChosenReason"
    enum="ImportantSitesReason">
  <owner>dmurph@chromium.org</owner>
  <summary>
    When a user chooses to blacklist one or more sites when they clear browsing
    data, this is recorded for every reason each chosen site was marked as
    important. It indicates which signals were used to show the given site to
    the user that the user then chose to exclude from clearing.
  </summary>
</histogram>

<histogram name="Storage.ImportantSites.CBDChosenReasonCount" units="count">
  <owner>dmurph@chromium.org</owner>
  <summary>
    This records the number of reasons each important site had that the user
    chose to blacklist when clearing browsing data.
  </summary>
</histogram>

<histogram name="Storage.ImportantSites.CBDIgnoredReason"
    enum="ImportantSitesReason">
  <owner>dmurph@chromium.org</owner>
  <summary>
    When a user chooses to blacklist one or more sites when they clear browsing
    data, this is recorded for every reason each unchosen site was marked as
    important. It indicates which signals were used to show the given site to
    the user, which the user then ignored and did not select to blacklist from
    clearing data.
  </summary>
</histogram>

<histogram name="Storage.ImportantSites.CBDIgnoredReasonCount" units="count">
  <owner>dmurph@chromium.org</owner>
  <summary>
    This records the number of reasons each important site had that the user
    chose to NOT blacklist when clearing browsing data.
  </summary>
</histogram>

<histogram name="Storage.ImportantSites.GeneratedReason"
    enum="ImportantSitesReason">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Recorded when we generate a list of important sites. This can happen when
    the user opens the Clear Browsing Data dialog on Android, views the Storage
    tab in Site Settings on Android, or launches 'Manage Storage' from Android
    System Settings for Chrome. We record every reason each site was chosen in
    this metric. This means that we can report this metric multiple times for a
    single site.
  </summary>
</histogram>

<histogram name="Storage.ImportantSites.GeneratedReasonCount" units="count">
  <owner>dmurph@chromium.org</owner>
  <summary>
    This records the number of reasons qualifying a site for being 'important'.
    We record this for every site when we generate a list of important sites,
    described in &quot;Storage.ImportantSites.GeneratedReason&quot;.
  </summary>
</histogram>

<histogram name="Storage.IndexedDB.PutBlobSizeKB" units="KB">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Records the size of a blob used in an IndexedDB add/put operation. Recorded
    for every put operation that contains a blob.
  </summary>
</histogram>

<histogram name="Storage.IndexedDB.PutValidBlob" enum="Boolean">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Records if a blob intended to be used in an IndexedDB add/put operation is a
    valid blob. Recorded for every put operation that contains a blob.
  </summary>
</histogram>

<histogram name="Style.AuthorStyleSheet.ParseTime" units="microseconds">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Microseconds spent in StyleSheetContents::parseAuthorStyleSheet.

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

<histogram name="Style.LazyUsage.Percent" enum="LazyCSSParseUsage">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Tracks % of lazy rules that ended up needing to be parsed. A sheet logs
    counts into this histogram as it is parsed (i.e. as properties are parsed
    lazily). Once a certain percent of rules have been parsed, we log a count
    immediately. Note that this implies that a stylesheet which uses all of its
    rules will log counts in every bucket.
  </summary>
</histogram>

<histogram name="Style.TotalLazyRules" units="count">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Tracks the total number of rules that have parsing lazily deferred in an
    author style sheet.
  </summary>
</histogram>

<histogram name="Style.TotalLazyRules.FullUsage" units="count">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Tracks the total number of rules that have parsing lazily deferred in an
    author style sheet, for sheets that ended up needing all their rules.
  </summary>
</histogram>

<histogram name="Style.UpdateTime" units="microseconds">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Microseconds spent in Document::updateStyle.

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

<histogram name="SubresourceFilter.Actions" enum="SubresourceFilterActions">
  <obsolete>
    Deprecated June 2018 in favor of SubresourceFilter.Actions2
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Counts of various UI and user action events related to the
    SubresourceFilter. This will be triggered in response to Content Settings
    changes, as well as when portions of the UI are shown or interacted with.
    Main frame navigations are also tracked for ease of comparison and analysis.
  </summary>
</histogram>

<histogram name="SubresourceFilter.Actions2" enum="SubresourceFilterActions2">
  <owner>csharrison@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Counts of various UI and user action events related to the
    SubresourceFilter. This will be triggered when portions of the UI are shown
    or interacted with.
  </summary>
</histogram>

<histogram name="SubresourceFilter.AdDelay.Delay" units="ms">
  <owner>csharrison@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Logs the delay the ad delay throttle added to a request. Logged for every
    subresource request that was delayed.
  </summary>
</histogram>

<histogram name="SubresourceFilter.AdDelay.Delay.Expected" units="ms">
  <owner>csharrison@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Logs the expected delay the ad delay throttle added to a request. This is
    the delay imposed assuming no task queuing delay. Logged for every
    subresource request that was delayed.
  </summary>
</histogram>

<histogram name="SubresourceFilter.AdDelay.Delay.Queuing" units="ms">
  <owner>csharrison@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Logs the task queuing delay the ad delay throttle added to a request. This
    is the actual delay minus the expected delay. Logged for every subresource
    request that was delayed.
  </summary>
</histogram>

<histogram name="SubresourceFilter.AdDelay.IsolatedInfo" enum="AdIsolatedInfo">
  <obsolete>
    Deprecated July 2018. Replaced with Ads.Features.AdResourceIsIsolated.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    For a given ad request, logs information related to whether it is isolated
    from the top-level context. Logged per ad subresource request.
  </summary>
</histogram>

<histogram name="SubresourceFilter.AdDelay.SecureInfo" enum="AdSecureInfo">
  <obsolete>
    Deprecated July 2018. Replaced with Ads.Features.ResourceIsSecure.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    For a given request, logs information related to whether it is marked as an
    ad, and whether it is secure (e.g. https). Logged per subresource request.
  </summary>
</histogram>

<histogram name="SubresourceFilter.DocumentLoad.Activation.CPUDuration"
    units="microseconds">
  <owner>pkalinnikov@chromium.org</owner>
  <summary>
    Records how much thread CPU time it takes to decide whether subresource
    filtering should be activated for a main frame or subframe.

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

<histogram name="SubresourceFilter.DocumentLoad.Activation.WallDuration"
    units="microseconds">
  <owner>pkalinnikov@chromium.org</owner>
  <summary>
    Records how long it takes to decide whether subresource filtering should be
    activated for a main frame or subframe.

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

<histogram name="SubresourceFilter.DocumentLoad.ActivationComputingDelay"
    units="microseconds">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Records the total time the activation state navigation throttle within a
    document is delayed while calculating activation. Recorded at resume time.

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

<histogram
    name="SubresourceFilter.DocumentLoad.ActivationComputingDelay.MainFrame"
    units="microseconds">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Records the total time the activation state navigation throttle within a
    main frame document is delayed while calculating activation. Recorded at
    resume time.
  </summary>
</histogram>

<histogram name="SubresourceFilter.DocumentLoad.ActivationState"
    enum="SubresourceFilterActivationState">
  <owner>engedy@chromium.org</owner>
  <summary>
    Whenever a document load is committed in a main frame or subframe, records
    whether subresource filtering should be activated for that load.
  </summary>
</histogram>

<histogram name="SubresourceFilter.DocumentLoad.NumSubresourceLoads.Disallowed"
    units="resource loads">
  <owner>engedy@chromium.org</owner>
  <summary>
    Whenever a document load is finished in a main frame or subframe with
    subresource filtering activated, records the total number of subresource
    loads that have been disallowed. This only differs from `MatchedRules` when
    filtering is performed in dry-run mode.
  </summary>
</histogram>

<histogram name="SubresourceFilter.DocumentLoad.NumSubresourceLoads.Evaluated"
    units="resource loads">
  <owner>engedy@chromium.org</owner>
  <summary>
    Whenever a document load is finished in a main frame or subframe with
    subresource filtering activated, records the total number of subresource
    loads that have been evaluated. This only differs from 'Total' when the
    document is subject to a deactivating rule with DOCUMENT activation type.
  </summary>
</histogram>

<histogram
    name="SubresourceFilter.DocumentLoad.NumSubresourceLoads.MatchedRules"
    units="resource loads">
  <owner>engedy@chromium.org</owner>
  <summary>
    Whenever a document load is finished in a main frame or subframe with
    subresource filtering activated, records the total number of subresource
    loads that have matched filtering rules. This only differs from `Disallowed`
    when filtering is performed in dry-run mode.
  </summary>
</histogram>

<histogram name="SubresourceFilter.DocumentLoad.NumSubresourceLoads.Total"
    units="resource loads">
  <owner>engedy@chromium.org</owner>
  <summary>
    Whenever a document load is finished in a main frame or subframe with
    subresource filtering activated, records the total number of subresource
    loads that have gone through the subresource filtering pipeline.
  </summary>
</histogram>

<histogram name="SubresourceFilter.DocumentLoad.RulesetIsAvailable"
    enum="BooleanAvailable">
  <owner>engedy@chromium.org</owner>
  <summary>
    Whenever a document load is committed in a main frame or subframe and
    subresource filtering should be activated, records whether the filtering
    rules are available.
  </summary>
</histogram>

<histogram name="SubresourceFilter.DocumentLoad.SubframeFilteringDelay.Allowed"
    units="microseconds">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Records the total time a subframe navigation was delayed while calculating
    whether it should be disallowed or not. Logged for all navigations that were
    allowed.

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

<histogram
    name="SubresourceFilter.DocumentLoad.SubframeFilteringDelay.Disallowed"
    units="microseconds">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Records the total time a subframe navigation was delayed while calculating
    whether it should be disallowed or not. Logged for all navigations that were
    disallowed.
  </summary>
</histogram>

<histogram
    name="SubresourceFilter.DocumentLoad.SubresourceEvaluation.TotalCPUDuration"
    units="microseconds">
  <owner>pkalinnikov@chromium.org</owner>
  <summary>
    Whenever a document load is finished in a main frame or subframe with
    subresource filtering activated, records the total thread CPU time spent on
    processing subresource requests in allowLoad.

    Note: this histogram is emitted for all clients, both ones which have
    high-resolution timer available and those which don't.
  </summary>
</histogram>

<histogram
    name="SubresourceFilter.DocumentLoad.SubresourceEvaluation.TotalWallDuration"
    units="microseconds">
  <owner>pkalinnikov@chromium.org</owner>
  <summary>
    Whenever a document load is finished in a main frame or subframe with
    subresource filtering activated, records the total real time spent on
    processing subresource requests in allowLoad, including the time spent on
    waiting or being descheduled.

    Note: this histogram is emitted for all clients, both ones which have
    high-resolution timer available and those which don't.
  </summary>
</histogram>

<histogram name="SubresourceFilter.IndexRuleset.CPUDuration" units="ms">
  <owner>pkalinnikov@chromium.org</owner>
  <summary>
    The total CPU time it took to parse and index all rules. Does not include
    time when the indexing thread was not doing actual work, e.g. waiting for
    I/O or being descheduled. Recorded every time the RulesetService kicks off a
    ruleset indexing process.
  </summary>
</histogram>

<histogram name="SubresourceFilter.IndexRuleset.NumUnsupportedRules"
    units="rules">
  <owner>engedy@chromium.org</owner>
  <summary>
    The number of rules that could be not be successfully indexed and therefore
    have been ignored. Recorded every time the RulesetService kicks off a
    ruleset indexing process and it reaches the point where rules are getting
    indexed.
  </summary>
</histogram>

<histogram name="SubresourceFilter.IndexRuleset.Verify.WallDuration"
    units="microseconds">
  <obsolete>
    Deprecated in favor of the Verify2 metric
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The total time it took to verify the indexed ruleset in the browser process.
    Logged every time verification occurs, which usually occurs when the first
    page with activation is navigated to.
  </summary>
</histogram>

<histogram name="SubresourceFilter.IndexRuleset.Verify2.WallDuration"
    units="ms">
  <owner>csharrison@chromium.org</owner>
  <summary>
    The total time it took to verify the indexed ruleset in the browser process.
    Logged every time verification occurs, which usually occurs when the first
    page with activation is navigated to.
  </summary>
</histogram>

<histogram name="SubresourceFilter.IndexRuleset.WallDuration" units="ms">
  <owner>engedy@chromium.org</owner>
  <summary>
    The total time it took to read and index all rules. Includes I/O time for
    reading the unindexed rules, but not for writing the indexed ruleset.
    Recorded every time the RulesetService kicks off a ruleset indexing process.
  </summary>
</histogram>

<histogram name="SubresourceFilter.PageLoad.Activation.CPUDuration"
    units="microseconds" expires_after="2018-08-30">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Records how much thread CPU time it takes to decide whether subresource
    filtering should be activated for a main frame.

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

<histogram name="SubresourceFilter.PageLoad.Activation.RedirectPosition"
    enum="SafeBrowsingActivationPosition">
  <owner>ericrobinson@chromium.org</owner>
  <summary>
    For pages that trigger Safe Browsing activations (not including dry runs),
    records the position in the redirect chain for the page the activation was
    triggered by.  If SubresourceFilterConsiderRedirects is disabled, then
    always returns &quot;Only navigation&quot;.
  </summary>
</histogram>

<histogram name="SubresourceFilter.PageLoad.Activation.WallDuration"
    units="microseconds" expires_after="2018-08-30">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Records how long it takes to decide whether subresource filtering should be
    activated for a main frame.

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

<histogram name="SubresourceFilter.PageLoad.ActivationDecision"
    enum="SubresourceFilterActivationDecision">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Records the policy decision to activate subresource filtering for a page
    load. 'Activated' indicates that subresource filtering was activated. All
    other reasons indicate that subresource filtering was not activated.
  </summary>
</histogram>

<histogram name="SubresourceFilter.PageLoad.ActivationList"
    enum="ActivationList">
  <owner>csharrison@chromium.org</owner>
  <summary>
    The ActivationList or NONE that the main frame navigation matched with.
    Recorded at WillProcessResponse time for a main frame navigation.
  </summary>
</histogram>

<histogram name="SubresourceFilter.PageLoad.ActivationState"
    enum="SubresourceFilterActivationState">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Whenever a document load is committed in a main frame, records whether
    subresource filtering should be activated for that load.
  </summary>
</histogram>

<histogram name="SubresourceFilter.PageLoad.BlockedPopups" units="popups">
  <obsolete>
    Metric is broken and will be replaced by
    ContentSettings.Popups.StringBlocked.NumBlocked. This only logged values for
    sites which are also activated for subresource filtering, when most sites
    will probably only be marked for popup blocking.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Records the number of popups blocked per page load due to subresource filter
    logic. Recorded when a new main frame navigation commits. Note that this
    histogram is recorded for all pages which are activated by the subresource
    filter, including ones which do not trigger the stronger popup blocker.
  </summary>
</histogram>

<histogram name="SubresourceFilter.PageLoad.FinalURLMatch"
    enum="BooleanMatched">
  <obsolete>
    Deprecated in favor of SubresourceFilter.PageLoad.ActivationList.
  </obsolete>
  <owner>melandory@chromium.org</owner>
  <summary>
    Records, for each main frame navigation, whether the last URL in the
    redirect chain matched the Safe Browsing blacklist specified by the
    histogram suffix.
  </summary>
</histogram>

<histogram name="SubresourceFilter.PageLoad.ForcedActivation.DisallowedLoad"
    enum="Boolean">
  <obsolete>
    Deprecated May 2018 in favor of
    SubresourceFilter.PageLoad.ActivationDecision
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Logged when the first resource is disallowed from a page with forced
    activation. For example, if the devtools ad blocking option is set.
  </summary>
</histogram>

<histogram name="SubresourceFilter.PageLoad.NumSubresourceLoads.Disallowed"
    units="resource loads">
  <owner>pkalinnikov@chromium.org</owner>
  <summary>
    Whenever a page load is finished with subresource filtering activated,
    records the total number of subresource loads that have been disallowed.
    This only differs from `MatchedRules` when filtering is performed in dry-run
    mode.
  </summary>
</histogram>

<histogram name="SubresourceFilter.PageLoad.NumSubresourceLoads.Evaluated"
    units="resource loads">
  <owner>pkalinnikov@chromium.org</owner>
  <summary>
    Whenever a page load is finished with subresource filtering activated,
    records the total number of subresource loads that have been evaluated. This
    only differs from 'Total' when some of subdocuments is subject to a
    deactivating rule with DOCUMENT activation type.
  </summary>
</histogram>

<histogram name="SubresourceFilter.PageLoad.NumSubresourceLoads.MatchedRules"
    units="resource loads">
  <owner>pkalinnikov@chromium.org</owner>
  <summary>
    Whenever a page load is finished with subresource filtering activated,
    records the total number of subresource loads that have matched filtering
    rules. This only differs from `Disallowed` when filtering is performed in
    dry-run mode.
  </summary>
</histogram>

<histogram name="SubresourceFilter.PageLoad.NumSubresourceLoads.Total"
    units="resource loads">
  <owner>pkalinnikov@chromium.org</owner>
  <summary>
    Whenever a page load is finished with subresource filtering activated,
    records the total number of subresource loads that have gone through the
    subresource filtering pipeline.
  </summary>
</histogram>

<histogram name="SubresourceFilter.PageLoad.RedirectChainLength" units="urls">
  <obsolete>
    Deprecated May 2018
  </obsolete>
  <owner>melandory@chromium.org</owner>
  <summary>
    Total number of server redirects during the navigation. This histogram is
    recorded in several for every list where subresource fiter is active.
  </summary>
</histogram>

<histogram name="SubresourceFilter.PageLoad.RedirectChainMatchPattern"
    enum="SubresourceFilterMatchPattern">
  <obsolete>
    Obsolete as of April 2017, since the don't have correct data to record
    anymore.
  </obsolete>
  <owner>melandory@chromium.org</owner>
  <summary>
    For each main frame navigation, records a pattern that indicates which URLs
    in the redirect chain matched Safe Browsing blacklists, and which did not.
    For example, for the redirect chain A-B-C-D metric tracks: 1. If initial URL
    (A) was on a Safe Browsing blacklist. 2. If any if middle urls (B, C) were
    on a Safe Browsing blacklist. 3. If committed URL (B) was on a Safe Browsing
    blacklist. This histogram is recorded in several flavours: with prefix
    SubresourceFilterOnly in case the redirect chain contains url from the Safe
    Browsing SubresourceFilter list and without the prefix for all other
    redirect chains.
  </summary>
</histogram>

<histogram name="SubresourceFilter.PageLoad.SafeBrowsingDelay" units="ms">
  <owner>csharrison@chromium.org</owner>
  <summary>
    The navigation delay imposed by the subresource filter on a given navigation
    due to Safe Browsing checks.
  </summary>
</histogram>

<histogram
    name="SubresourceFilter.PageLoad.SafeBrowsingDelay.NoRedirectSpeculation"
    units="ms">
  <obsolete>
    Deprecated in May 2018 (M69). We have enough data to show that the redirect
    speculations we do are necessary, especially for Android.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The navigation delay that would have been imposed by the subresource filter
    on a given navigation due to Safe Browsing checks if redirect speculation
    was removed. Removing this feature would cause more delay if a navigation
    has redirects.
  </summary>
</histogram>

<histogram
    name="SubresourceFilter.PageLoad.SubresourceEvaluation.TotalCPUDuration"
    units="microseconds">
  <owner>pkalinnikov@chromium.org</owner>
  <summary>
    Whenever a page load is finished with subresource filtering activated,
    records the total thread CPU time spent on evaluating subresource requests,
    aggregated across all frames.

    Note: this histogram is emitted for all clients, both ones which have
    high-resolution timer available and those which don't.
  </summary>
</histogram>

<histogram
    name="SubresourceFilter.PageLoad.SubresourceEvaluation.TotalWallDuration"
    units="microseconds">
  <owner>pkalinnikov@chromium.org</owner>
  <summary>
    Whenever a page load is finished with subresource filtering activated,
    records the total real time spent on evaluating subresource requests,
    aggregated across all frames. This includes the time spent on waiting or
    being descheduled.

    Note: this histogram is emitted for all clients, both ones which have
    high-resolution timer available and those which don't.
  </summary>
</histogram>

<histogram name="SubresourceFilter.Prompt.NumReloads" enum="BooleanRequested">
  <obsolete>
    Deprecated in favor of the whitelisted bucket in SubresourceFilter.Actions2
  </obsolete>
  <owner>melandory@chromium.org</owner>
  <summary>
    Number of times the user has requested a reload for the page by clicking on
    the reload button.
  </summary>
</histogram>

<histogram name="SubresourceFilter.Prompt.NumVisibility" enum="BooleanVisible">
  <obsolete>
    Deprecated in favor of SubresourceFilter.Action
  </obsolete>
  <owner>melandory@chromium.org</owner>
  <summary>
    Number of times Safebrowsing Subresource Filter decided to toggle visibility
    of the prompt.
  </summary>
</histogram>

<histogram name="SubresourceFilter.SafeBrowsing.CheckDispatchTime"
    units="microseconds">
  <obsolete>
    Deprecated in May 2018 in favor of the more general
    SB2.RemoteCall.CheckDispatchTime.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The microseconds it took to dispatch the Safe Browsing check. This includes
    IPC descheduling delays to communicate with SafetyNet on Android, and
    synchronous db checks on desktop.

    Note: this histogram is emitted for all clients, both ones which have
    high-resolution timer available and those which don't.
  </summary>
</histogram>

<histogram name="SubresourceFilter.SafeBrowsing.CheckTime" units="ms">
  <owner>csharrison@chromium.org</owner>
  <summary>
    The time an individual Safe Browsing URL check took before finishing. Logged
    when a check is complete or cancelled due to a timeout.
  </summary>
</histogram>

<histogram name="SubresourceFilter.SafeBrowsing.TotalCheckTime" units="ms">
  <owner>csharrison@chromium.org</owner>
  <summary>
    The time an individual Safe Browsing URL check took before finishing,
    including posting tasks to and from the IO thread. Measured on the UI
    thread.
  </summary>
</histogram>

<histogram name="SubresourceFilter.SubresourceLoad.Evaluation.CPUDuration"
    units="microseconds">
  <owner>pkalinnikov@chromium.org</owner>
  <summary>
    Whenever a subresource of a document is evaluated against the ruleset,
    records the thread CPU time spent on calculating whether it should be
    allowed to load.

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

<histogram name="SubresourceFilter.SubresourceLoad.Evaluation.WallDuration"
    units="microseconds">
  <owner>pkalinnikov@chromium.org</owner>
  <summary>
    Whenever a subresource of a document is evaluated against the ruleset,
    records how much time was spent on calculating whether it should be allowed
    to load.

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

<histogram name="SubresourceFilter.WriteRuleset.ReplaceFileError"
    enum="PlatformFileError">
  <owner>engedy@chromium.org</owner>
  <summary>
    Records the exact error whenever writing a ruleset fails at the step where
    the ruleset would be moved from the scratch directory to its final location.
  </summary>
</histogram>

<histogram name="SubresourceFilter.WriteRuleset.Result"
    enum="SubresourceFilterWriteRulesetResult">
  <owner>engedy@chromium.org</owner>
  <summary>
    Whether indexing a version of the ruleset and writing it to disk succeeded,
    or failed at a particular step. Recorded every time the RulesetService kicks
    off a ruleset indexing process.
  </summary>
</histogram>

<histogram name="Suggestions.FailedRequestErrorCode" enum="NetErrorCodes">
  <owner>mathp@chromium.org</owner>
  <summary>
    The counts of network error codes encountered by SuggestionsService when an
    attempt to fetch suggestions from the server fails.
  </summary>
</histogram>

<histogram name="Suggestions.FetchResponseCode">
  <owner>mathp@chromium.org</owner>
  <summary>
    The counts of HTTP response codes encountered by SuggestionsService when
    attempting to fetch suggestions from the server.
  </summary>
</histogram>

<histogram name="Suggestions.FetchSuccessLatency" units="ms">
  <owner>mathp@chromium.org</owner>
  <summary>
    The latency of a SuggestionsService fetch that results in a success
    response.
  </summary>
</histogram>

<histogram name="Suggestions.LocalBlacklistSize" units="URLcount">
  <owner>manzagop@chromium.org</owner>
  <summary>
    Number of URLs present in the Suggestions local blacklist when the
    Suggestions service is created.
  </summary>
</histogram>

<histogram name="Suggestions.ResponseState" enum="SuggestionsResponseState">
  <owner>mathp@chromium.org</owner>
  <summary>
    The counts of response states (such as empty or invalid) encountered by
    SuggestionsService when attempting to fetch suggestions from the server.
  </summary>
</histogram>

<histogram name="SupervisedUserContentProvider.ChromeNotStartedRequestTime"
    units="ms">
  <owner>aberent@chromium.org</owner>
  <summary>
    Time to get the response to requesting whether a URL should be accessible to
    the supervised user, when Chrome was not previously running.
  </summary>
</histogram>

<histogram name="SupervisedUserContentProvider.ChromeStartedRequestTime"
    units="ms">
  <owner>aberent@chromium.org</owner>
  <summary>
    Time to get the response to requesting whether a URL should be accessible to
    the supervised user, when Chrome was already running.
  </summary>
</histogram>

<histogram name="SupervisedUserContentProvider.RequestTimedOut"
    enum="BooleanTimedOut">
  <owner>aberent@chromium.org</owner>
  <summary>
    True if a request to find out whether a URL should be accessible to a
    supervised user timed out.
  </summary>
</histogram>

<histogram name="Sync.AppAssociationTime" units="ms">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time taken during app association (M18 and earlier were mispelled with this
    histogram).
  </summary>
</histogram>

<histogram name="Sync.AppRunFailures">
  <obsolete>
    Deprecated as of m19.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Count of apps run failures, used to compare failure rates between data types
    for a particular profile (see other Sync*RunFailures histograms).
  </summary>
</histogram>

<histogram name="Sync.AppsAssociationTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>Time taken during app association.</summary>
</histogram>

<histogram name="Sync.AppsConfigureFailure" enum="SyncConfigureResult">
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of app configuration failures.</summary>
</histogram>

<histogram name="Sync.AppSettingsAssociationTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>Time taken during app settings association.</summary>
</histogram>

<histogram name="Sync.AppSettingsConfigureFailure" enum="SyncConfigureResult">
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of app settings configuration failures.
  </summary>
</histogram>

<histogram name="Sync.AppSettingsStartFailure" enum="SyncStartResult">
  <obsolete>
    Replaced by AppSettingsConfigureFailure. See crbug.com/478226.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of app settings association failures.</summary>
</histogram>

<histogram name="Sync.AppsStartFailure" enum="SyncStartResult">
  <obsolete>
    Replaced by AppsConfigureFailure. See crbug.com/478226.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of app association failures.</summary>
</histogram>

<histogram name="Sync.AppStartFailures" enum="SyncStartResult">
  <obsolete>
    Deprecated as of m19.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of app association failures (M18 and earlier were
    mispelled with this histogram).
  </summary>
</histogram>

<histogram name="Sync.Attachments.DownloadChecksumResult" enum="BooleanMatched">
  <obsolete>
    Deprecated 2018-04, Sync attachments were never launched.
  </obsolete>
  <owner>maxbogue@chromium.org</owner>
  <summary>Whether attachment checksums match on download or not.</summary>
</histogram>

<histogram name="Sync.Attachments.DownloadResponseCode"
    enum="CombinedHttpResponseAndNetErrorCode">
  <obsolete>
    Deprecated 2018-04, Sync attachments were never launched.
  </obsolete>
  <owner>maxbogue@chromium.org</owner>
  <summary>Response or error codes from downloading sync attachments.</summary>
</histogram>

<histogram name="Sync.Attachments.DownloadTotalTime" units="ms">
  <obsolete>
    Deprecated 2018-04, Sync attachments were never launched.
  </obsolete>
  <owner>maxbogue@chromium.org</owner>
  <summary>
    The total time a download takes including request and server overhead.
  </summary>
</histogram>

<histogram name="Sync.Attachments.StoreInitResult"
    enum="SyncAttachmentStoreResult">
  <obsolete>
    Deprecated 2018-04, Sync attachments were never launched.
  </obsolete>
  <owner>maxbogue@chromium.org</owner>
  <summary>The result of initializing the sync attachment store.</summary>
</histogram>

<histogram name="Sync.Attachments.UploadResponseCode"
    enum="CombinedHttpResponseAndNetErrorCode">
  <obsolete>
    Deprecated 2018-04, Sync attachments were never launched.
  </obsolete>
  <owner>maxbogue@chromium.org</owner>
  <summary>Response or error codes from uploading sync attachments.</summary>
</histogram>

<histogram name="Sync.AttemptNigoriMigration" enum="SyncNigoriMigrationResult">
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of results from attempting to migrate Sync's nigori node and its
    encryption keys to support keystore.
  </summary>
</histogram>

<histogram name="Sync.AuthInvalidationRejectedTokenAgeLong" units="days">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Age of all auth tokens rejected by the invalidation server. Measured from
    the time they were created.
  </summary>
</histogram>

<histogram name="Sync.AuthInvalidationRejectedTokenAgeShort" units="ms">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Age of auth tokens younger than one hour that were rejected by the
    invalidation server. Measured from the time they were created.
  </summary>
</histogram>

<histogram name="Sync.AuthorizationTimeInNetwork" units="ms">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Time taken during initial authorization.</summary>
</histogram>

<histogram name="Sync.AuthServerRejectedTokenAgeLong" units="days">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Age of all auth tokens rejected by the sync server. Measured from the time
    they were created.
  </summary>
</histogram>

<histogram name="Sync.AuthServerRejectedTokenAgeShort" units="ms">
  <obsolete>
    No longer relevant since transition to OAuth.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Age of auth tokens younger than one hour that were rejected by the sync
    server. Measured from the time they were created.
  </summary>
</histogram>

<histogram name="Sync.AutofillAssociationTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>Time taken during autofill association.</summary>
</histogram>

<histogram name="Sync.AutofillConfigureFailure" enum="SyncConfigureResult">
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of autofill configuration failures.</summary>
</histogram>

<histogram name="Sync.AutofillProfileAssociationTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>
    Time taken during autofill profile association (M18 and earlier were
    mispelled with this histogram).
  </summary>
</histogram>

<histogram name="Sync.AutofillProfileRunFailures">
  <obsolete>
    Deprecated as of m19.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Count of autofill profiles run failures, used to compare failure rates
    between data types for a particular profile (see other Sync*RunFailures
    histograms).
  </summary>
</histogram>

<histogram name="Sync.AutofillProfilesAssociationTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>Time taken during autofill profile association.</summary>
</histogram>

<histogram name="Sync.AutofillProfilesConfigureFailure"
    enum="SyncConfigureResult">
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of autofill profile configuration failures.
  </summary>
</histogram>

<histogram name="Sync.AutofillProfilesStartFailure" enum="SyncStartResult">
  <obsolete>
    Replaced by AutofillProfilesConfigureFailure. See crbug.com/478226.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of autofill profile association failures.
  </summary>
</histogram>

<histogram name="Sync.AutofillProfileStartFailures" enum="SyncStartResult">
  <obsolete>
    Deprecated as of m19.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of autofill profile association failures (M18 and
    earlier were mispelled with this histogram).
  </summary>
</histogram>

<histogram name="Sync.AutofillRunFailures">
  <obsolete>
    Deprecated as of m19.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Count of autofill (autocomplete) run failures, used to compare failure rates
    between data types for a particular profile (see other Sync*RunFailures
    histograms).
  </summary>
</histogram>

<histogram name="Sync.AutofillStartFailure" enum="SyncStartResult">
  <obsolete>
    Replaced by AutofillConfigureFailure. See crbug.com/478226.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of autofill association failures.</summary>
</histogram>

<histogram name="Sync.AutoNigoriOverwrites">
  <owner>zea@chromium.org</owner>
  <summary>
    Number of times this client has overwritten the nigori node to update the
    encryption keys without a user action (during this instantiation of Chrome).
  </summary>
</histogram>

<histogram name="Sync.BackendInitializeFirstTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>
    Tracks sync backend initialization time during initial sync setup.
  </summary>
</histogram>

<histogram name="Sync.BackendInitializeFirstTimeSuccess" enum="BooleanSuccess">
  <owner>zea@chromium.org</owner>
  <summary>
    Tracks sync backend initialization success rate during initial sync setup.
  </summary>
</histogram>

<histogram name="Sync.BackendInitializeRestoreState"
    enum="SyncBackendInitializeRestoreState">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Compares sync's has_setup_completed pref against the set of types actually
    restored from the sync DB.  Mismatches should be rare.
  </summary>
</histogram>

<histogram name="Sync.BackendInitializeRestoreSuccess" enum="BooleanSuccess">
  <owner>zea@chromium.org</owner>
  <summary>
    Tracks sync backend initialization success rate in cases where sync was
    previously initialized.
  </summary>
</histogram>

<histogram name="Sync.BackendInitializeRestoreTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>
    Tracks sync backend initialization time in cases where sync was previously
    initialized.
  </summary>
</histogram>

<histogram name="Sync.BadRequestCountOnSignInNeedsUpdateInfoBar">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Number of bad requests since application startup, when the Sync error
    infobar asking the user to update their account details is displayed.
  </summary>
</histogram>

<histogram name="Sync.BookmarkAssociationTime" units="ms">
  <obsolete>
    Deprecated as of m18
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Time taken during bookmark association.</summary>
</histogram>

<histogram name="Sync.BookmarkRunFailures">
  <obsolete>
    Deprecated as of m19.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Count of bookmark run failures, used to compare failure rates between data
    types for a particular profile (see other Sync*RunFailures histograms).
  </summary>
</histogram>

<histogram name="Sync.BookmarksAssociationTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>Time taken during bookmark association.</summary>
</histogram>

<histogram name="Sync.BookmarksConfigureFailure" enum="SyncConfigureResult">
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of bookmark configuration failures.</summary>
</histogram>

<histogram name="Sync.BookmarksDuplicationsAtAssociation">
  <owner>stanisc@chromium.org</owner>
  <summary>
    Estimated number of bookmark duplications after bookmark association.
  </summary>
</histogram>

<histogram name="Sync.BookmarksModelSyncStateAtNewDuplication"
    enum="SyncBookmarkModelSyncState">
  <owner>stanisc@chromium.org</owner>
  <summary>
    Tracks state of local bookmark model version relative to the sync version
    when a new bookmark duplication occurs during bookmark association.
  </summary>
</histogram>

<histogram name="Sync.BookmarksNewDuplicationsAtAssociation">
  <owner>stanisc@chromium.org</owner>
  <summary>
    Estimated number of new bookmark duplications after bookmark association.
  </summary>
</histogram>

<histogram name="Sync.BookmarksStartFailure" enum="SyncStartResult">
  <obsolete>
    Replaced by BookmarksConfigureFailure. See crbug.com/478226.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of bookmark association failures.</summary>
</histogram>

<histogram name="Sync.BookmarkStartFailures" enum="SyncStartResult">
  <obsolete>
    Deprecated as of m19.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of bookmark association failures (M18 and earlier were
    mispelled with this histogram).
  </summary>
</histogram>

<histogram name="Sync.ClearServerDataEvents" enum="ClearServerDataEvents">
  <owner>pavely@chromium.org</owner>
  <summary>
    Records events encountered during sync's ClearServerData flow.
  </summary>
</histogram>

<histogram name="Sync.ConfigureDataTypes" enum="SyncModelTypes">
  <owner>zea@chromium.org</owner>
  <summary>
    Breakdown of sync data types being configured at first time signin, restart,
    or user-initiated reconfiguration. This is different from Sync.CustomTypes
    in that this captures all active devices, not just those that are choosing a
    custom sync configuration.

    Note that not all platforms support all data types. As such, comparing
    across platforms should only look at the common data types.
  </summary>
</histogram>

<histogram name="Sync.ConfigureFailed" enum="SyncModelTypes">
  <owner>zea@chromium.org</owner>
  <summary>Count of model association failures for each type.</summary>
</histogram>

<histogram name="Sync.ConfigureTime.ABORTED" units="ms">
  <obsolete>
    Replaced by Sync.ConfigureTime_Long.ABORTED in m21.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time spent configuring data types in the case where configuration is
    aborted.
  </summary>
</histogram>

<histogram name="Sync.ConfigureTime.OK" units="ms">
  <obsolete>
    Replaced by Sync.ConfigureTime_Long.OK in m21.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time spent configuring data types in the case where configuration succeeds.
  </summary>
</histogram>

<histogram name="Sync.ConfigureTime.PARTIAL_SUCCESS" units="ms">
  <obsolete>
    Replaced by Sync.ConfigureTime_Long.PARTIAL_SUCCESS in m21.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time spent configuring data types in the case where only some data types
    succeed.
  </summary>
</histogram>

<histogram name="Sync.ConfigureTime.UNRECOVERABLE_ERROR" units="ms">
  <obsolete>
    Replaced by Sync.ConfigureTime_Long.UNRECOVERABLE_ERROR in m21.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time spent configuring data types in the case where configuration encounters
    an unrecoverable error.
  </summary>
</histogram>

<histogram name="Sync.ConfigureTime_Long.ABORTED" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>
    Time spent configuring data types in the case where configuration is
    aborted.
  </summary>
</histogram>

<histogram name="Sync.ConfigureTime_Long.OK" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>
    Time spent configuring data types in the case where configuration succeeds.
  </summary>
</histogram>

<histogram name="Sync.ConfigureTime_Long.PARTIAL_SUCCESS" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>
    Time spent configuring data types in the case where only some data types
    succeed.
  </summary>
</histogram>

<histogram name="Sync.ConfigureTime_Long.UNRECOVERABLE_ERROR" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>
    Time spent configuring data types in the case where configuration encounters
    an unrecoverable error.
  </summary>
</histogram>

<histogram name="Sync.ConflictFixCircularity">
  <obsolete>
    Deprecated 12/2011. No longer tracked. See crbug.com/107816.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Number of times we fix a circularity sync conflict. This is not expected to
    be hit anymore.
  </summary>
</histogram>

<histogram name="Sync.ConflictFixRemovedDirectoriesWithContent">
  <obsolete>
    Deprecated 12/2011. No longer tracked. See crbug.com/107816.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Number of times we fix a removed directory with content sync conflict. This
    is not expected to be hit anymore
  </summary>
</histogram>

<histogram name="Sync.CookieJarEmptyOnMismatch" enum="BooleanEmpty">
  <owner>zea@chromium.org</owner>
  <summary>
    Whether the gaia cookie jar was empty. Recorded on every SESSIONS commit
    where the gaia cookie jar does not include the signed in user (
    CookieJarMatchOnNavigation == false).
  </summary>
</histogram>

<histogram name="Sync.CookieJarMatchOnNavigation" enum="BooleanMatched">
  <owner>zea@chromium.org</owner>
  <summary>
    Whether the gaia cookie jar included the signed in user (matched) or not.
    Recorded on every SESSIONS commit.
  </summary>
</histogram>

<histogram name="Sync.CredentialsLost" enum="BooleanCredentialsLost">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Whether or not we detected missing credentials during startup.  This may be
    related to crbug.com/121755.
  </summary>
</histogram>

<histogram name="Sync.CryptographerPendingKeys"
    enum="SyncCryptographerPendingKeysState">
  <owner>zea@chromium.org</owner>
  <summary>
    Breakdown of sync users whose cryptographer has pending keys.
  </summary>
</histogram>

<histogram name="Sync.CryptographerReady" enum="SyncCryptographerReadyState">
  <owner>zea@chromium.org</owner>
  <summary>
    Breakdown of sync users whose cryptographer is fully ready for encryption
    and decryption (initialized and no pending keys).
  </summary>
</histogram>

<histogram name="Sync.CustomEncryption" enum="SyncCustomEncryptionEvent">
  <owner>zea@chromium.org</owner>
  <summary>
    Histogram that keeps track of how users encrypt their sync data. All users
    start off with default encryption during initial setup, while a subset of
    users go on to encrypt their sync data with a custom passphrase.
  </summary>
</histogram>

<histogram name="Sync.CustomPassphrase">
  <obsolete>
    Deprecated as of m26.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Boolean histogram for whether a custom passphrase was entered during sync
    setup. Samples are taken every time sync is (re)configured, and the unique
    userid count shows how many users entered a custom passphrase.
  </summary>
</histogram>

<histogram name="Sync.CustomSync" enum="UserSelectableSyncType">
  <owner>zea@chromium.org</owner>
  <summary>
    Samples are taken every time sync is (re)configured, and the unique userid
    count shows how many users explicitly chose to sync this data type via the
    &quot;Advanced Sync Preferences&quot; dialog.
  </summary>
</histogram>

<histogram name="Sync.DatatypePrefRecovery">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Number of clients that have fixed themselves up from a datatype preference
    loss. Clients are not expected to have this happen more than once. This
    value can be compared to Sync.BackendInitializeRestoreSuccess to determine
    what percentage of users are still recovering.
  </summary>
</histogram>

<histogram name="Sync.DataTypeRunFailures" enum="SyncModelTypes">
  <owner>zea@chromium.org</owner>
  <summary>
    Histogram of the run failures for the different sync datatypes. These are
    failures that occur after startup while the datatype is syncing. Note: Due
    to an enumeration reordering, pre-M23 labels are inaccurate (see
    sync/base/model_type.h).
  </summary>
</histogram>

<histogram name="Sync.DataTypeStartFailures" enum="SyncModelTypes">
  <owner>zea@chromium.org</owner>
  <summary>
    Histogram of the startup failures for the different sync datatypes. These
    are failures due to missing top level sync nodes or model association Note:
    Due to an enumeration reordering, pre-M23 labels are inaccurate (see
    sync/base/model_type.h).
  </summary>
</histogram>

<histogram name="Sync.DeviceCount">
  <owner>skym@chromium.org</owner>
  <summary>
    The largest number of active syncing devices known to any profile. May be 0
    when there are no signed in/syncing profiles open.
  </summary>
</histogram>

<histogram name="Sync.DeviceIdMismatchDetails" enum="DeviceIdMismatch">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>pavely@chromium.org</owner>
  <summary>
    When signin_scoped_device_id from pref doesn't match the one in
    DeviceInfoSpecfics this histogram tells if sync or pref copy was empty. This
    will indicate how often such mismatch happens and what was the state before.
  </summary>
</histogram>

<histogram name="Sync.DictionaryAssociationTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>Time taken during dictionary association.</summary>
</histogram>

<histogram name="Sync.DictionaryConfigureFailure" enum="SyncConfigureResult">
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of dictionary configuration failures.</summary>
</histogram>

<histogram name="Sync.DictionaryStartFailure" enum="SyncStartResult">
  <obsolete>
    Replaced by DictionaryConfigureFailure. See crbug.com/478226.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of dictionary association failures.</summary>
</histogram>

<histogram name="Sync.DirectoryCatastrophicError" enum="BooleanError">
  <owner>maniscalco@chromium.org</owner>
  <summary>
    Whether the Sync Directory encountered a catastrophic error.
  </summary>
</histogram>

<histogram name="Sync.DirectoryOpenFailedMac">
  <obsolete>
    Deprecated 11/2011. No longer tracked.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Number of failures trying to open the sync database on mac.</summary>
</histogram>

<histogram name="Sync.DirectoryOpenFailedNotWinMac">
  <obsolete>
    Deprecated 11/2011. No longer tracked.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Number of failures trying to open the sync database on a non-windows non-mac
    platform.
  </summary>
</histogram>

<histogram name="Sync.DirectoryOpenFailedWin">
  <obsolete>
    Deprecated 11/2011. No longer tracked.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Number of failures trying to open the sync database on windows.
  </summary>
</histogram>

<histogram name="Sync.DirectoryOpenResult" enum="SyncDirectoryOpenResult">
  <owner>zea@chromium.org</owner>
  <summary>Tracks success of failure of sync directory initialization.</summary>
</histogram>

<histogram name="Sync.EncryptAllData">
  <obsolete>
    Deprecated as of m26.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Boolean histogram for whether the &quot;Encrypt all synced data&quot; radio
    button was selected during sync setup. Samples are taken every time sync is
    (re)configured, and the unique userid count shows how many users chose to
    encrypt their sync data.
  </summary>
</histogram>

<histogram name="Sync.EventCodes" enum="SyncEventCode">
  <owner>zea@chromium.org</owner>
  <summary>A UI event occured.</summary>
</histogram>

<histogram name="Sync.ExtensionAssociationTime" units="ms">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time taken during extension association (M18 and earlier were mispelled with
    this histogram).
  </summary>
</histogram>

<histogram name="Sync.ExtensionRunFailures">
  <obsolete>
    Deprecated as of m19.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Count of extension run failures, used to compare failure rates between data
    types for a particular profile (see other Sync*RunFailures histograms).
  </summary>
</histogram>

<histogram name="Sync.ExtensionsAssociationTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>Time taken during extension association.</summary>
</histogram>

<histogram name="Sync.ExtensionsConfigureFailure" enum="SyncConfigureResult">
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of extension configuration failures.</summary>
</histogram>

<histogram name="Sync.ExtensionSettingsAssociationTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>Time taken during extension settings association.</summary>
</histogram>

<histogram name="Sync.ExtensionSettingsConfigureFailure"
    enum="SyncConfigureResult">
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of extension settings configuration failures.
  </summary>
</histogram>

<histogram name="Sync.ExtensionSettingsStartFailure" enum="SyncStartResult">
  <obsolete>
    Replaced by ExtensionSettingsConfigureFailure. See crbug.com/478226.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of extension settings association failures.
  </summary>
</histogram>

<histogram name="Sync.ExtensionsStartFailure" enum="SyncStartResult">
  <obsolete>
    Replaced by ExtensionsConfigureFailure. See crbug.com/478226.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of extension association failures.</summary>
</histogram>

<histogram name="Sync.ExtensionStartFailures" enum="SyncStartResult">
  <obsolete>
    Deprecated as of m19.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of extension association failures (M18 and earlier were
    mispelled with this histogram).
  </summary>
</histogram>

<histogram name="Sync.ExtraSyncDataCount" units="entries">
  <owner>gangwu@chromium.org</owner>
  <summary>
    Counts the total number of extra copies of sync data in memory. This count
    is emitted once, after loading Sync Directory. The count will indicate how
    many Directory entities fail to share client and server specifics.
  </summary>
</histogram>

<histogram name="Sync.FaviconCacheLookupSucceeded" enum="BooleanSuccess">
  <owner>zea@chromium.org</owner>
  <summary>Whether a sync favicon cache lookup succeeded or not.</summary>
</histogram>

<histogram name="Sync.FaviconCount">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Number of synced favicons at initialization time.</summary>
</histogram>

<histogram name="Sync.FaviconImagesAssociationTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>Time taken during favicon images association.</summary>
</histogram>

<histogram name="Sync.FaviconImagesConfigureFailure" enum="SyncConfigureResult">
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of favicon images configuration failures.
  </summary>
</histogram>

<histogram name="Sync.FaviconImagesStartFailure" enum="SyncStartResult">
  <obsolete>
    Replaced by FaviconImagesConfigureFailure. See crbug.com/478226.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of favicon images association failures.
  </summary>
</histogram>

<histogram name="Sync.FaviconsAvailableAtMerge" enum="SyncFaviconsAvailable">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Number of client that have filled their sync favicon cache and must evict
    old favicons vs those whose cache is not full.
  </summary>
</histogram>

<histogram name="Sync.FaviconTrackingAssociationTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>Time taken during favicon tracking association.</summary>
</histogram>

<histogram name="Sync.FaviconTrackingConfigureFailure"
    enum="SyncConfigureResult">
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of favicon tracking configuration failures.
  </summary>
</histogram>

<histogram name="Sync.FaviconTrackingStartFailure" enum="SyncStartResult">
  <obsolete>
    Replaced by FaviconTrackingConfigureFailure. See crbug.com/478226.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of favicon tracking association failures.
  </summary>
</histogram>

<histogram name="Sync.FaviconVisitPeriod" units="hours">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Time between updates to a synced favicon's visit time.</summary>
</histogram>

<histogram name="Sync.FirstBackendInitializeSuccess" enum="BooleanSuccess">
  <obsolete>
    Deprecated 11/2011.  Was counted incorrectly.  Replaced by
    Sync.BackendInitializeFirstTimeSuccess.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Tracks sync backend initialization success rate during initial sync setup.
  </summary>
</histogram>

<histogram name="Sync.FirstSyncDelayByBackup" units="ms">
  <obsolete>
    Backup logic has been removed since 02/2016.
  </obsolete>
  <owner>haitaol@chromium.org</owner>
  <summary>First sync delay casued by backing up user data.</summary>
</histogram>

<histogram name="Sync.FreqApps" units="ms">
  <obsolete>
    Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time between nudges for apps. Used as estimate of datatype commit frequency.
    Logged when a sync cycle is performed for apps.
  </summary>
</histogram>

<histogram name="Sync.FreqAutofill" units="ms">
  <obsolete>
    Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time between nudges for autofill entries. Used as estimate of datatype
    commit frequency. Logged when a sync cycle is performed for autofill
    entries.
  </summary>
</histogram>

<histogram name="Sync.FreqAutofillProfiles" units="ms">
  <obsolete>
    Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time between nudges for autofill profiles. Used as estimate of datatype
    commit frequency. Logged when a sync cycle is performed for autofill
    profiles.
  </summary>
</histogram>

<histogram name="Sync.FreqBookmarks" units="ms">
  <obsolete>
    Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time between nudges for bookmarks. Used as estimate of datatype commit
    frequency. Logged when a sync cycle is performed for boomarks.
  </summary>
</histogram>

<histogram name="Sync.FreqDictionary" units="ms">
  <obsolete>
    Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time between nudges for dictionary. Used as estimate of datatype commit
    frequency. Logged when a sync cycle is performed for dictionary.
  </summary>
</histogram>

<histogram name="Sync.FreqExtensions" units="ms">
  <obsolete>
    Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time between nudges for extensions. Used as estimate of datatype commit
    frequency. Logged when a sync cycle is performed for extensions.
  </summary>
</histogram>

<histogram name="Sync.FreqFaviconImages" units="ms">
  <obsolete>
    Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time between nudges for favicon images. Used as estimate of datatype commit
    frequency. Logged when a sync cycle is performed for favicon images.
  </summary>
</histogram>

<histogram name="Sync.FreqFaviconTracking" units="ms">
  <obsolete>
    Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time between nudges for favicon tracking. Used as estimate of datatype
    commit frequency. Logged when a sync cycle is performed for favicon
    tracking.
  </summary>
</histogram>

<histogram name="Sync.FreqNigori" units="ms">
  <obsolete>
    Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time between nudges for nigori. Used as estimate of datatype commit
    frequency. Logged when a sync cycle is performed for nigori.
  </summary>
</histogram>

<histogram name="Sync.FreqPasswords" units="ms">
  <obsolete>
    Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time between nudges for passwords. Used as estimate of datatype commit
    frequency. Logged when a sync cycle is performed for passwords.
  </summary>
</histogram>

<histogram name="Sync.FreqPreferences" units="ms">
  <obsolete>
    Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time between nudges for preferences. Used as estimate of datatype commit
    frequency. Logged when a sync cycle is performed for preferences.
  </summary>
</histogram>

<histogram name="Sync.FreqSearchEngines" units="ms">
  <obsolete>
    Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time between nudges for search engines. Used as estimate of datatype commit
    frequency. Logged when a sync cycle is performed for search engines.
  </summary>
</histogram>

<histogram name="Sync.FreqSessions" units="ms">
  <obsolete>
    Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time between nudges for sessions. Used as estimate of datatype commit
    frequency. Logged when a sync cycle is performed for sessions.
  </summary>
</histogram>

<histogram name="Sync.FreqSyncedNotifications" units="ms">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time between nudges for synced notifications. Used as estimate of datatype
    commit frequency. Logged when a sync cycle is performed for synced
    notifications.
  </summary>
</histogram>

<histogram name="Sync.FreqThemes" units="ms">
  <obsolete>
    Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time between nudges for themes. Used as estimate of datatype commit
    frequency. Logged when a sync cycle is performed for themes.
  </summary>
</histogram>

<histogram name="Sync.FreqTypedUrls" units="ms">
  <obsolete>
    Deprecated 03/2018 (M67). Replaced by Sync.SyncCycleInterval.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time between nudges for typed urls. Used as estimate of datatype commit
    frequency. Logged when a sync cycle is performed for typed urls.
  </summary>
</histogram>

<histogram name="Sync.FreqWifiCredentials" units="ms">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time between nudges for WiFi credentials. Used as estimate of datatype
    commit frequency. Logged when a sync cycle is performed for WiFi
    credentials.
  </summary>
</histogram>

<histogram name="Sync.GlobalIdConflict" units="SyncGlobalIdConflict">
  <owner>skym@chromium.org</owner>
  <summary>
    Two navigations with different unique_ids shared a global_id/timestmap. This
    means that user events will be ambiguously referencing navigations.
  </summary>
</histogram>

<histogram name="Sync.InitialState" enum="SyncInitialState">
  <owner>maxbogue@chromium.org</owner>
  <summary>
    An approximate state of sync at startup. Logs a few reasons sync definitely
    wouldn't be able to start, or that it probably can start. The user having
    turned off sync on mobile will be logged as &quot;turned off by user&quot;.
    A dashboard stop and clear will fall under &quot;turned off and setup not
    completed&quot;. See the SyncInitialState enum in profile_sync_service.h for
    more information.
  </summary>
</histogram>

<histogram name="Sync.InvalidationSessionsAndroid" enum="BooleanHit">
  <obsolete>
    Deprecated as of 5/2016.
  </obsolete>
  <owner>pkotwicz@chromium.org</owner>
  <summary>
    Count of the number of session sync invalidations. The goal of the metric is
    to track how the number of session sync invalidations changes over time.
  </summary>
</histogram>

<histogram name="Sync.KeystoreDecryptionFailed"
    enum="SyncKeystoreDecryptionFailure">
  <owner>zea@chromium.org</owner>
  <summary>
    The reason for a failure decrypting the keystore decryptor token.
  </summary>
</histogram>

<histogram name="Sync.Local.Enabled" enum="BooleanEnabled">
  <owner>pastarmovj@chromium.org</owner>
  <summary>
    Tracks the number of times the local sync backend was enabled by the user.
  </summary>
</histogram>

<histogram name="Sync.Local.FileSize" units="KB">
  <owner>pastarmovj@chromium.org</owner>
  <summary>Tracks the size of the local sync backend database file.</summary>
</histogram>

<histogram name="Sync.Local.RequestTypeOnError" enum="SyncRequestType">
  <owner>skym@chromium.org</owner>
  <summary>
    Tracks the types of requests that caused errors inside of the local server.
  </summary>
</histogram>

<histogram name="Sync.Local.RoamingProfileUnavailable" enum="BooleanError">
  <owner>pastarmovj@chromium.org</owner>
  <summary>
    Tracks the number of times the Roaming profile cannot be retrieved.
  </summary>
</histogram>

<histogram name="Sync.LocalDataFailedToLoad" enum="SyncModelTypes">
  <owner>vasilii@chromium.org</owner>
  <summary>
    Counts cases when a sync type failed to load the local data during startup.
  </summary>
</histogram>

<histogram name="Sync.LocalModelOutOfSync" enum="SyncModelTypes">
  <owner>zea@chromium.org</owner>
  <summary>
    Counts instances of out of sync local models detected during startup.
  </summary>
</histogram>

<histogram name="Sync.LostNavigationCount" units="navigations">
  <owner>pnoland@chromium.org</owner>
  <summary>
    Counts instances of navigations that are recorded locally but not synced.
    Recorded once per active tab for every inferred sync cycle. Sync cycles are
    inferred by examining the is_synced and is_syncing flags of sync directories
    when recording local changes to tabs or windows. Sync cycles that occur
    without changes to tabs or windows won't cause this metric to be logged.
  </summary>
</histogram>

<histogram name="Sync.MemoryPressureWarningBeforeCleanShutdown" units="count">
  <owner>gangwu@chromium.org</owner>
  <summary>
    Counts the number of times a user's sync service received a
    MEMORY_PRESSURE_LEVEL_CRITICAL warning before the sync service shut down
    cleanly. The sync service emits this number the next time the user's sync
    service is started, which will likely happen the next time the user's
    profile is opened after a Chrome restart.  This count is emitted once per
    user/profile. Things like browser crashes that implicitly bring down all
    users' sync services will cause unclean shutdown tags to appear on all open
    profiles, meaning that there will be multiple emissions to this histogram as
    those profiles are re-opened.
  </summary>
</histogram>

<histogram name="Sync.MemoryPressureWarningBeforeUncleanShutdown" units="count">
  <owner>gangwu@chromium.org</owner>
  <summary>
    Counts the number of times a user's sync service received a
    MEMORY_PRESSURE_LEVEL_CRITICAL warning before the sync service shut down
    uncleanly. The sync service emits this number the next time the user's sync
    service is started, which will likely happen the next time the user's
    profile is opened after a Chrome restart.  This count is emitted once per
    user/profile. Things like browser crashes that implicitly bring down all
    users' sync services will cause unclean shutdown tags to appear on all open
    profiles, meaning that there will be multiple emissions to this histogram as
    those profiles are re-opened.
  </summary>
</histogram>

<histogram name="Sync.ModelTypeCount" units="entries">
  <owner>gangwu@chromium.org</owner>
  <summary>
    Counts the number of entries for each model type in sync DB at startup.
  </summary>
</histogram>

<histogram name="Sync.ModelTypeMemoryKB" units="KB">
  <owner>pavely@chromium.org</owner>
  <summary>
    Estimated memory usage by sync datatype in kilobytes. Recorded after sync
    configuration.
  </summary>
</histogram>

<histogram name="Sync.ModelTypeStoreInitResult"
    enum="SyncModelTypeStoreInitResult">
  <owner>pavely@chromium.org</owner>
  <summary>
    Records the result of ModelTypeStoreBackend initialization. Used to analyze
    frequency and causes of backend initialization failures.
  </summary>
</histogram>

<histogram name="Sync.NigoriMigrationState" enum="SyncNigoriMigrationState">
  <owner>zea@chromium.org</owner>
  <summary>Breakdown of sync's nigori node keystore migration state.</summary>
</histogram>

<histogram name="Sync.PageRevisitBookmarksDuration" units="ms">
  <obsolete>
    Deprecated in M66.
  </obsolete>
  <owner>skym@chromium.org</owner>
  <summary>
    The client side execution time to check for revisits with bookmarks data.
  </summary>
</histogram>

<histogram name="Sync.PageRevisitBookmarksMatchAge" units="minutes">
  <obsolete>
    Deprecated in M66.
  </obsolete>
  <owner>skym@chromium.org</owner>
  <summary>
    Age of bookmark that matches a navigation event, where matching means the
    urls match. If multiple bookmarks match, the most recently created is used.
  </summary>
</histogram>

<histogram name="Sync.PageRevisitBookmarksMatchTransition"
    enum="PageVisitTransitionType">
  <obsolete>
    Deprecated in M66.
  </obsolete>
  <owner>skym@chromium.org</owner>
  <summary>Transition type to a page that matched a bookmark.</summary>
</histogram>

<histogram name="Sync.PageRevisitBookmarksMissTransition"
    enum="PageVisitTransitionType">
  <obsolete>
    Deprecated in M66.
  </obsolete>
  <owner>skym@chromium.org</owner>
  <summary>Transition type to a page that didn't match a bookmark.</summary>
</histogram>

<histogram name="Sync.PageRevisitNavigationMatchAge" units="minutes">
  <obsolete>
    Deprecated in M66.
  </obsolete>
  <owner>skym@chromium.org</owner>
  <summary>
    Difference in time between finding the match and the creation of the most
    recent foreign modification of the parent tab. The parent tab's modification
    will not always be indicative of when the matching navigation occurred.
  </summary>
</histogram>

<histogram name="Sync.PageRevisitNavigationMatchOffset">
  <obsolete>
    Deprecated in M66.
  </obsolete>
  <owner>skym@chromium.org</owner>
  <summary>
    The number of navigations forward or backwards the matching noncurrent
    navigation is from the current navigation in its tab. Negative values
    represent backwards and positive values represent forwards. Zero should not
    occur since it would cease to be noncurrent.
  </summary>
</histogram>

<histogram name="Sync.PageRevisitNavigationMatchTransition"
    enum="PageVisitTransitionType">
  <obsolete>
    Deprecated in M66.
  </obsolete>
  <owner>skym@chromium.org</owner>
  <summary>Transition type that matched a synced navigation.</summary>
</histogram>

<histogram name="Sync.PageRevisitNavigationMissTransition"
    enum="PageVisitTransitionType">
  <obsolete>
    Deprecated in M66.
  </obsolete>
  <owner>skym@chromium.org</owner>
  <summary>Transition type that didn't match a synced navigation.</summary>
</histogram>

<histogram name="Sync.PageRevisitSessionDuration" units="ms">
  <obsolete>
    Deprecated in M66.
  </obsolete>
  <owner>skym@chromium.org</owner>
  <summary>
    The client side execution time to check for revisits with session data.
  </summary>
</histogram>

<histogram name="Sync.PageRevisitTabMatchAge" units="minutes">
  <obsolete>
    Deprecated in M66.
  </obsolete>
  <owner>skym@chromium.org</owner>
  <summary>
    Difference in time between finding the match and the creation of the most
    recent foreign modification of the given tab.
  </summary>
</histogram>

<histogram name="Sync.PageRevisitTabMatchTransition"
    enum="PageVisitTransitionType">
  <obsolete>
    Deprecated in M66.
  </obsolete>
  <owner>skym@chromium.org</owner>
  <summary>Transition type that matched a synced tab.</summary>
</histogram>

<histogram name="Sync.PageRevisitTabMissTransition"
    enum="PageVisitTransitionType">
  <obsolete>
    Deprecated in M66.
  </obsolete>
  <owner>skym@chromium.org</owner>
  <summary>Transition type that didn't match a synced tab.</summary>
</histogram>

<histogram name="Sync.PageRevisitTypedUrlDuration" units="ms">
  <obsolete>
    Deprecated in M66.
  </obsolete>
  <owner>skym@chromium.org</owner>
  <summary>
    The client side execution time to check for revisits with typed URL data.
  </summary>
</histogram>

<histogram name="Sync.PageRevisitTypedUrlMatchAge" units="minutes">
  <obsolete>
    Deprecated in M66.
  </obsolete>
  <owner>skym@chromium.org</owner>
  <summary>
    Difference in time between finding the match and the last time this URL was
    typed on a foreign client.
  </summary>
</histogram>

<histogram name="Sync.PageRevisitTypedUrlMatchTransition"
    enum="PageVisitTransitionType">
  <obsolete>
    Deprecated in M66.
  </obsolete>
  <owner>skym@chromium.org</owner>
  <summary>Transition type that matched a typed URL.</summary>
</histogram>

<histogram name="Sync.PageRevisitTypedUrlMissTransition"
    enum="PageVisitTransitionType">
  <obsolete>
    Deprecated in M66.
  </obsolete>
  <owner>skym@chromium.org</owner>
  <summary>Transition type that didn't match a typed URL.</summary>
</histogram>

<histogram name="Sync.PartiallySyncedTypes">
  <owner>zea@chromium.org</owner>
  <summary>
    Number of partially synced types (those with a progress marker but no
    initial sync ended bit) that exist at sync startup.
  </summary>
</histogram>

<histogram name="Sync.PassphraseDecryptionSucceeded" enum="BooleanSuccess">
  <owner>zea@chromium.org</owner>
  <summary>Whether a passphrase decryption attempt succeeded or not.</summary>
</histogram>

<histogram name="Sync.PassphraseDialogDismissed" enum="SyncPassphraseDismissal">
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of how a user dismissed the passphrase dialog.</summary>
</histogram>

<histogram name="Sync.PassphraseType" enum="SyncPassphraseType">
  <owner>maxbogue@chromium.org</owner>
  <summary>The active sync passphrase type at sync startup.</summary>
</histogram>

<histogram name="Sync.PasswordAssociationTime" units="ms">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time taken during password association (M18 and earlier were mispelled with
    this histogram).
  </summary>
</histogram>

<histogram name="Sync.PasswordRunFailures">
  <obsolete>
    Deprecated as of m19.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Count of passwords run failures, used to compare failure rates between data
    types for a particular profile (see other Sync*RunFailures histograms).
  </summary>
</histogram>

<histogram name="Sync.PasswordsAssociationTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>Time taken during password association.</summary>
</histogram>

<histogram name="Sync.PasswordsConfigureFailure" enum="SyncConfigureResult">
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of password configuration failures.</summary>
</histogram>

<histogram name="Sync.PasswordsStartFailure" enum="SyncStartResult">
  <obsolete>
    Replaced by PasswordsConfigureFailure. See crbug.com/478226.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of password association failures.</summary>
</histogram>

<histogram name="Sync.PasswordStartFailures" enum="SyncStartResult">
  <obsolete>
    Deprecated as of m19.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of password association failures (M18 and earlier were
    mispelled with this histogram).
  </summary>
</histogram>

<histogram name="Sync.PreferenceAssociationTime" units="ms">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time taken during preference association (M18 and earlier were mispelled
    with this histogram).
  </summary>
</histogram>

<histogram name="Sync.PreferenceRunFailures">
  <obsolete>
    Deprecated as of m19.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Count of preferences run failures, used to compare failure rates between
    data types for a particular profile (see other Sync*RunFailures histograms).
  </summary>
</histogram>

<histogram name="Sync.Preferences.ClearedLocalPrefOnTypeMismatch"
    units="BooleanHit">
  <owner>tschumann@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <summary>
    Counts the number of times a syncable pref got registered using a type that
    mismatched the type present in the pref store. In these events, the
    persisted value gets removed from the pref store.
  </summary>
</histogram>

<histogram name="Sync.Preferences.RemotePrefTypeMismatch" units="BooleanHit">
  <owner>tschumann@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <summary>
    Counts the number of times a client received a remote pref update with a
    value type different from the registered pref type. The client will ignore
    those remote updates.
  </summary>
</histogram>

<histogram name="Sync.Preferences.SyncingUnknownPrefs" units="prefs">
  <owner>tschumann@chromium.org</owner>
  <owner>treib@chromium.org</owner>
  <summary>
    The number of unknown prefs being synced. This number is computed after the
    sync model has been associated. Preferences which get handled by sync even
    before being registered are considered &quot;unknown&quot;. This might be
    limited to a whitelist of preferences.
  </summary>
</histogram>

<histogram name="Sync.PreferencesAssociationTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>Time taken during preference association.</summary>
</histogram>

<histogram name="Sync.PreferencesConfigureFailure" enum="SyncConfigureResult">
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of preference configuration failures.</summary>
</histogram>

<histogram name="Sync.PreferencesStartFailure" enum="SyncStartResult">
  <obsolete>
    Replaced by PreferencesConfigureFailure. See crbug.com/478226.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of preference association failures.</summary>
</histogram>

<histogram name="Sync.PreferenceStartFailures" enum="SyncStartResult">
  <obsolete>
    Deprecated as of m19.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of preference association failures (M18 and earlier
    were mispelled with this histogram).
  </summary>
</histogram>

<histogram name="Sync.ReauthorizationTime" units="ms">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Time taken from startup for the user to reauthorize.</summary>
</histogram>

<histogram name="Sync.RefreshTokenAvailable" enum="BooleanSuccess">
  <obsolete>
    Deprecated 04/2016 as not useful since it always logged true.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Whether OAuth2 refresh token was available at the time when
    ProfileSyncService was starting backend.
  </summary>
</histogram>

<histogram name="Sync.RequestContentLength.Compressed" units="bytes">
  <owner>gangwu@chromium.org</owner>
  <summary>
    The request content size for a single HTTP/HTTPS call from sync client to
    server. The content is compressed by gzip.
  </summary>
</histogram>

<histogram name="Sync.RequestContentLength.Original" units="bytes">
  <owner>gangwu@chromium.org</owner>
  <summary>
    The original request content size for a single HTTP/HTTPS call from sync
    client to server. It is the size before content got compressed.
  </summary>
</histogram>

<histogram name="Sync.ResolveConflict" enum="SyncConflictResolutions">
  <owner>maxbogue@chromium.org</owner>
  <summary>
    Enumeration of types of conflict resolutions. Recorded every time a conflict
    is resolved for a data type that has been converted to USS.
  </summary>
</histogram>

<histogram name="Sync.ResolveSimpleConflict"
    enum="SyncSimpleConflictResolutions">
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of simple conflict resolutions.</summary>
</histogram>

<histogram name="Sync.ResponseContentLength.Compressed" units="bytes">
  <owner>gangwu@chromium.org</owner>
  <summary>
    The response content size for a single HTTP/HTTPS call from sync server to
    client. The content is compressed by gzip.
  </summary>
</histogram>

<histogram name="Sync.ResponseContentLength.Original" units="bytes">
  <owner>gangwu@chromium.org</owner>
  <summary>
    The original response content size for a single HTTP/HTTPS call from sync
    server and client. It is the size after content got uncompressed.
  </summary>
</histogram>

<histogram name="Sync.RestoreBackendInitializeSucess" enum="BooleanSuccess">
  <obsolete>
    Deprecated 11/2011.  Was counted incorrectly.  Replaced by
    Sync.BackendInitializeRestoreSuccess.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Tracks sync backend initialization success rate in cases where sync was
    previously initialized.
  </summary>
</histogram>

<histogram name="Sync.SearchEngineAssociationTime" units="ms">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time taken during search engine association (M18 and earlier were mispelled
    with this histogram).
  </summary>
</histogram>

<histogram name="Sync.SearchEngineRunFailures">
  <obsolete>
    Deprecated as of m19.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Count of search engine run failures, used to compare failure rates between
    data types for a particular profile (see other Sync*RunFailures histograms).
  </summary>
</histogram>

<histogram name="Sync.SearchEnginesAssociationTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>Time taken during search engine association.</summary>
</histogram>

<histogram name="Sync.SearchEnginesConfigureFailure" enum="SyncConfigureResult">
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of search engine configuration failures.
  </summary>
</histogram>

<histogram name="Sync.SearchEnginesStartFailure" enum="SyncStartResult">
  <obsolete>
    Replaced by SearchEnginesConfigureFailure. See crbug.com/478226.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of search engine association failures.</summary>
</histogram>

<histogram name="Sync.SearchEngineStartFailures" enum="SyncStartResult">
  <obsolete>
    Deprecated as of m19.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of search engine association failures (M18 and earlier
    were mispelled with this histogram).
  </summary>
</histogram>

<histogram name="Sync.ServiceInitialConfigureTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>
    Time spent on first-time configure.  May include time spent on retries.
  </summary>
</histogram>

<histogram name="Sync.ServiceSubsequentConfigureTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>
    Time spent on non-first-time configure.  May include time spent on retries.
  </summary>
</histogram>

<histogram name="Sync.SessionAssociationTime" units="ms">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time taken during session association (M18 and earlier were mispelled with
    this histogram).
  </summary>
</histogram>

<histogram name="Sync.SessionRunFailures">
  <obsolete>
    Deprecated as of m19.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Count of sessions run failures, used to compare failure rates between data
    types for a particular profile (see other Sync*RunFailures histograms).
  </summary>
</histogram>

<histogram name="Sync.SessionsAssociationTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>Time taken during session association.</summary>
</histogram>

<histogram name="Sync.SessionsBadForeignHashOnMergeCount"
    units="Sessions Entries">
  <owner>skym@chromium.org</owner>
  <summary>
    Number of foreign sessions entries detected with bad client tag hash value
    during MergeDataAndStartSyncing. These will be immediately deleted. The
    overwhelming majority of clients should report a value of 0 upon startup.
  </summary>
</histogram>

<histogram name="Sync.SessionsConfigureFailure" enum="SyncConfigureResult">
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of session configuration failures.</summary>
</histogram>

<histogram name="Sync.SessionsRefreshDelay" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>
    Delay from the time chrome://history is loaded until the other devices'
    sessions data became available.
  </summary>
</histogram>

<histogram name="Sync.SessionsStartFailure" enum="SyncStartResult">
  <obsolete>
    Replaced by SessionsConfigureFailure. See crbug.com/478226.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of session association failures.</summary>
</histogram>

<histogram name="Sync.SessionStartFailures" enum="SyncStartResult">
  <obsolete>
    Deprecated as of m19.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of session association failures (M18 and earlier were
    mispelled with this histogram).
  </summary>
</histogram>

<histogram name="Sync.SessionTabs" units="tabs">
  <owner>zea@chromium.org</owner>
  <summary>
    For each Chrome window, records the number of tabs present at the time Sync
    associates the SESSIONS datatype.
  </summary>
</histogram>

<histogram name="Sync.SessionWindows" units="windows">
  <owner>zea@chromium.org</owner>
  <summary>
    The number of windows present within Chrome at the time Sync associates the
    SESSIONS datatype.
  </summary>
</histogram>

<histogram name="Sync.SesssionsDuplicateSyncId" units="count">
  <obsolete>
    Deprecated in M69.
  </obsolete>
  <owner>mastiz@chromium.org</owner>
  <summary>
    https://crbug.com/639009, count of duplicate sync ids (tab node id) when any
    are encountered. Likely caused from a persistence race between native tab
    storage and sync db on Android. Should be trending to zero.
  </summary>
</histogram>

<histogram name="Sync.Shutdown.BackendDestroyedTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>
    Time taken from the start of sync shutdown (in ProfileSyncService) until the
    backend (SyncEngine) is fully destroyed.
  </summary>
</histogram>

<histogram name="Sync.Shutdown.StopRegistrarTime" units="ms">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Amount of time the UI thread waits (at shutdown) to stop the
    SyncBackendRegistrar.
  </summary>
</histogram>

<histogram name="Sync.Shutdown.StopSyncThreadTime" units="ms">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Amount of time the UI thread waits (at shutdown) to stop the sync thread.
  </summary>
</histogram>

<histogram name="Sync.Startup.DeferredInitTrigger"
    enum="SyncDeferredInitTrigger">
  <owner>zea@chromium.org</owner>
  <summary>The type of event that triggered sync initialization.</summary>
</histogram>

<histogram name="Sync.Startup.TimeDeferred" units="ms">
  <obsolete>
    Deprecated, see TimeDeferred2.
  </obsolete>
  <owner>jeremy@chromium.org</owner>
  <owner>zea@google.com</owner>
  <summary>
    Time spent after ProfileSyncService *creation* but before SyncEngine
    initialization.
  </summary>
</histogram>

<histogram name="Sync.Startup.TimeDeferred2" units="ms">
  <owner>zea@google.com</owner>
  <summary>
    Time spent after ProfileSyncService *creation* but before SyncEngine
    initialization.
  </summary>
</histogram>

<histogram name="Sync.Startup.TypeTriggeringInit" enum="SyncModelTypes">
  <owner>zea@chromium.org</owner>
  <summary>Data type that first requests sync initialization.</summary>
</histogram>

<histogram name="Sync.StopSource" enum="SyncStopSource">
  <owner>maxbogue@chromium.org</owner>
  <summary>
    Tracks how sync was turned off. Logged every time sync is told to stop
    permanently by the user (e.g. it won't come back on by itself).
  </summary>
</histogram>

<histogram name="Sync.SyncAuthError" enum="SyncAuthError">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Counts the number of times sync clients have encountered an auth error and
    number of times auth errors are fixed.
  </summary>
</histogram>

<histogram name="Sync.SyncCycleInterval" units="ms">
  <owner>treib@chromium.org</owner>
  <summary>
    The interval between successive sync cycles. Recorded whenever a sync cycle
    starts, except for the very first one after Chrome startup.
  </summary>
</histogram>

<histogram name="Sync.SyncedNotificationsAssociationTime" units="ms">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Time taken during synced notifications association.</summary>
</histogram>

<histogram name="Sync.SyncedNotificationsConfigureFailure"
    enum="SyncConfigureResult">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of synced notifications configuration failures.
  </summary>
</histogram>

<histogram name="Sync.SyncedNotificationsStartFailure" enum="SyncStartResult">
  <obsolete>
    Deprecated in M53. Replaced by SyncedNotificationsConfigureFailure. See
    crbug.com/478226.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of synced notifications association failures.
  </summary>
</histogram>

<histogram name="Sync.SyncerConflictStuck">
  <obsolete>
    Deprecated 12/2011. No longer tracked. See crbug.com/107816.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Number of times the sync conflict resolver gets stuck. This is not expected
    to be hit anymore.
  </summary>
</histogram>

<histogram name="Sync.SyncErrorInfobarDisplayed" enum="SyncErrorInfobarTypes">
  <owner>droger@chromium.org</owner>
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of error conditions that displays an infobar to the user.
  </summary>
</histogram>

<histogram name="Sync.SyncEverything">
  <owner>zea@chromium.org</owner>
  <summary>
    Boolean histogram for whether the &quot;Sync Everything&quot; option was
    selected during sync setup. Samples are taken every time sync is
    (re)configured, and the unique userid count shows how many users chose to
    sync all available data types.
  </summary>
</histogram>

<histogram name="Sync.ThemeAssociationTime" units="ms">
  <obsolete>
    Deprecated as of m19
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time taken during theme association (M18 and earlier were mispelled with
    this histogram).
  </summary>
</histogram>

<histogram name="Sync.ThemeRunFailures">
  <obsolete>
    Deprecated as of m19.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Count of theme run failures, used to compare failure rates between data
    types for a particular profile (see other Sync*RunFailures histograms).
  </summary>
</histogram>

<histogram name="Sync.ThemesAssociationTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>Time taken during theme association.</summary>
</histogram>

<histogram name="Sync.ThemesConfigureFailure" enum="SyncConfigureResult">
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of theme configuration failures.</summary>
</histogram>

<histogram name="Sync.ThemesStartFailure" enum="SyncStartResult">
  <obsolete>
    Replaced by ThemesConfigureFailure. See crbug.com/478226.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of theme association failures.</summary>
</histogram>

<histogram name="Sync.ThemeStartFailures" enum="SyncStartResult">
  <obsolete>
    Deprecated as of m19.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of theme association failures (M18 and earlier were
    mispelled with this histogram).
  </summary>
</histogram>

<histogram name="Sync.TypedUrlAssociationTime" units="ms">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Time taken during typed url association (M18 and earlier were mispelled with
    this histogram).
  </summary>
</histogram>

<histogram name="Sync.TypedUrlChangeProcessorErrors" units="%">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    The percentage of history DB operations initiated by the typed URL change
    processor that return an error. The cumulative count for the current sync
    session is logged after every typed URL change.
  </summary>
</histogram>

<histogram name="Sync.TypedUrlMergeAndStartSyncingErrors" units="%">
  <owner>zea@chromium.org</owner>
  <summary>
    The percentage of history DB operations during merge data that return an
    error. This is logged at the end of typed URL merge data, which happens once
    each time sync starts up.
  </summary>
</histogram>

<histogram name="Sync.TypedUrlModelAssociationErrors" units="%">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    The percentage of history DB operations during model association that return
    an error. This is logged at the end of typed URL model association, which
    happens once each time sync starts up.
  </summary>
</histogram>

<histogram name="Sync.TypedUrlRunFailures">
  <obsolete>
    Deprecated as of m19.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Count of typed url run failures, used to compare failure rates between data
    types for a particular profile (see other Sync*RunFailures histograms).
  </summary>
</histogram>

<histogram name="Sync.TypedUrlsAssociationTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>Time taken during typed url association.</summary>
</histogram>

<histogram name="Sync.TypedUrlsConfigureFailure" enum="SyncConfigureResult">
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of typed url configuration failures.</summary>
</histogram>

<histogram name="Sync.TypedUrlsStartFailure" enum="SyncStartResult">
  <obsolete>
    Replaced by TypedUrlsConfigureFailure. See crbug.com/478226.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Enumeration of types of typed url association failures.</summary>
</histogram>

<histogram name="Sync.TypedUrlStartFailures" enum="SyncStartResult">
  <obsolete>
    Deprecated as of m19.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of typed url association failures (M18 and earlier were
    mispelled with this histogram).
  </summary>
</histogram>

<histogram name="Sync.UnrecoverableErrors" enum="SyncUnrecoverableErrorReason">
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of the different reasons for unrecoverable errors and how often
    they have occurred.
  </summary>
</histogram>

<histogram name="Sync.URLFetchResponse"
    enum="CombinedHttpResponseAndNetErrorCode">
  <owner>zea@chromium.org</owner>
  <summary>
    Counts of responses (both http code and net error code) for Sync URL
    fetches.
  </summary>
</histogram>

<histogram name="Sync.URLFetchTime" units="ms">
  <owner>zea@chromium.org</owner>
  <summary>
    Time spent waiting for a sync cycle to complete the url fetch.
  </summary>
</histogram>

<histogram name="Sync.URLFetchTimedOut" enum="BooleanTimedOut">
  <owner>zea@chromium.org</owner>
  <summary>
    Whether a url fetch timed out or not. Timing out implies the fetch was
    stalled for an unknown reason.
  </summary>
</histogram>

<histogram name="Sync.UserPerceivedAuthorizationTime" units="ms">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Time the user spends looking at the authorization dialog.</summary>
</histogram>

<histogram name="Sync.UserPerceivedBookmarkAssociation">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Time taken during bookmark association.</summary>
</histogram>

<histogram name="Sync.USSLoadModelsTime" units="ms">
  <owner>pavely@chromium.org</owner>
  <summary>Time it took sync to load models for USS datatypes.</summary>
</histogram>

<histogram name="Sync.USSMigrationFailure" enum="SyncModelTypes">
  <owner>maxbogue@chromium.org</owner>
  <summary>Counts directory to USS migration failures per model type.</summary>
</histogram>

<histogram name="Sync.USSMigrationSuccess" enum="SyncModelTypes">
  <owner>maxbogue@chromium.org</owner>
  <summary>Counts directory to USS migration successes per model type.</summary>
</histogram>

<histogram name="Sync.WifiCredentialsAssociationTime" units="ms">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>Time taken during WiFi credentials association.</summary>
</histogram>

<histogram name="Sync.WifiCredentialsConfigureFailure"
    enum="SyncConfigureResult">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of WiFi credentials configuration failures.
  </summary>
</histogram>

<histogram name="Sync.WifiCredentialsStartFailure" enum="SyncStartResult">
  <obsolete>
    Replaced by WifiCredentialsConfigureFailure. See crbug.com/478226.
  </obsolete>
  <owner>zea@chromium.org</owner>
  <summary>
    Enumeration of types of WiFi credentials association failures.
  </summary>
</histogram>

<histogram name="Sync.WorkerApplyHasEncryptedUpdates" enum="Boolean">
  <obsolete>
    Deprecated in M67. After more than a year, almost all clients are reporting
    FALSE.
  </obsolete>
  <owner>skym@chromium.org</owner>
  <summary>
    Whether there are still encrypted updates that the cryptographer cannot
    decrypt during ApplyUpdates in the ModelTypeWorker (USS Only). Emitting true
    is an invalid state that hopefully never happens, as it is a potential data
    loss scenario.
  </summary>
</histogram>

<histogram name="Sync.YoungestForeignTabAgeOnNTP" units="seconds">
  <obsolete>
    Deprecated in M66.
  </obsolete>
  <owner>skym@chromium.org</owner>
  <summary>Upon NTP load, the age of the youngest synced foreign tab.</summary>
</histogram>

<histogram name="SyncedNotifications.Actions"
    enum="SyncedNotificationActionType">
  <obsolete>
    Deprecated in M53.
  </obsolete>
  <owner>petewil@chromium.org</owner>
  <owner>zea@chromium.org</owner>
  <summary>
    The actions taken on synced notifications, recorded every time they happen.
    This histogram will record every single event that happens separately.
  </summary>
</histogram>

<histogram name="SyncFileSystem.ConflictResolutionPolicy"
    enum="SyncFSConflictResolutionPolicy">
  <owner>tzik@chromium.org</owner>
  <summary>
    Overridden conflict resolution policy of Sync FileSystem API. Recorded for
    each API call to override the policy.
  </summary>
</histogram>

<histogram name="SyncFileSystem.Database.Open" enum="LevelDBStatus">
  <owner>tzik@chromium.org</owner>
  <summary>The result of opening the Sync FileSystem backend database.</summary>
</histogram>

<histogram name="SyncFileSystem.MetadataNumber">
  <owner>tzik@chromium.org</owner>
  <summary>
    The number of cached backing remote file metadata in the Sync FileSystem
    database. Recorded at the initialization phase of Sync FileSystem.
  </summary>
</histogram>

<histogram name="SyncFileSystem.RegisteredAppNumber">
  <owner>tzik@chromium.org</owner>
  <summary>
    The number of Chrome Apps that uses Sync FileSystem with V2 backend.
    Recorded at the initialization phase of Sync FileSystem.
  </summary>
</histogram>

<histogram name="SyncFileSystem.RegisterOriginResult"
    enum="SyncFSRemoteServiceState" expires_after="2018-08-30">
  <owner>tzik@chromium.org</owner>
  <summary>
    The result of the registration of Chrome App to Sync FileSystem.
  </summary>
</histogram>

<histogram name="SyncFileSystem.RegisterOriginTime" units="ms">
  <owner>peria@chromium.org</owner>
  <owner>tzik@chromium.org</owner>
  <summary>
    Time elapsed to register a Chrome App to SyncFilesystem. Recorded for each
    registration request by apps.
  </summary>
</histogram>

<histogram name="SyncFileSystem.TrackerDB.Open" enum="LevelDBStatus"
    expires_after="2018-08-30">
  <owner>tzik@chromium.org</owner>
  <summary>The result of opening the Sync FileSystem tracker database.</summary>
</histogram>

<histogram name="SyncFileSystem.TrackerNumber">
  <owner>tzik@chromium.org</owner>
  <summary>
    The number of the directory tree node that maps backing files to local files
    in the Sync FileSystem database. Recorded at the initialization phase of
    SyncFileSystem.
  </summary>
</histogram>

<histogram name="SyncPromo.NTPPromo" enum="SyncPromoAction">
  <owner>dbeam@chromium.org</owner>
  <summary>
    Shows actions taken on the &quot;Not signed in? You're misssing out&quot;
    link on the top right of chrome://apps. Logged once per visit of
    chrome://apps as well as on each click of the sync promo.
  </summary>
</histogram>

<histogram name="Syzyasan.DeferredFreeWasEnabled" enum="BooleanEnabled">
  <owner>georgesak@chromium.org</owner>
  <summary>
    Record whether the deferred free mechanism was successfully enabled or not.
    This is only recorded in syzyasan builds with the feature enabled.
  </summary>
</histogram>

<histogram name="Tab.AgeUponRestoreFromColdStart" units="minutes">
  <owner>lliabraa@chromium.org</owner>
  <summary>
    Age (time since the last display in previous sessions) of a tab being
    restored due to the first tab switch after the browser cold start, recorded
    upon such restore. When the browser is started from cold, this metric is not
    recorded for the foreground, automatically restored tab, so that the metric
    tracks only the restores triggered by direct user decision to switch tabs.
  </summary>
</histogram>

<histogram name="Tab.AndroidCrashUpload" enum="BooleanSuccess">
  <owner>hzl@google.com</owner>
  <summary>Count of upload success/failures by crash type.</summary>
</histogram>

<histogram name="Tab.BackgroundLoadStatus" enum="TabBackgroundLoadStatus">
  <owner>ppi@chromium.org</owner>
  <summary>
    Mobile-specific metric: when a tab that was opened in background (via
    &quot;Open link in new tab&quot;) is switched to, we record whether the
    eagerly loaded tab was still memory resident, or we lost the loaded page due
    to memory pressure.
  </summary>
</histogram>

<histogram name="Tab.BackgroundTabShown" enum="BooleanShown">
  <owner>pkotwicz@chromium.org</owner>
  <summary>
    Whether a tab which was opened in the background (e.g. via &quot;Open link
    in new tab&quot;) is foregrounded prior to being closed.
  </summary>
</histogram>

<histogram name="Tab.BackgroundTabsOpenedViaContextMenuCount">
  <owner>pkotwicz@chromium.org</owner>
  <summary>
    Counts the number of background tabs opened via the context menu per page
    URL. The count is reset on each navigation of the parent tab. Zero counts
    are not recorded.
  </summary>
</histogram>

<histogram name="Tab.Close" units="ms">
  <summary>
    Time in milliseconds from trying to close the tab to actually closing it.
    Includes time that's spent in JS OnUnload handlers.
  </summary>
</histogram>

<histogram name="Tab.Close.UnloadTime" units="ms" expires_after="2018-08-30">
  <summary>
    Time in milliseconds from when JS OnUnload handlers have finished to
    actually closing tab. Doesn't include time that's spent in JS OnUnload
    handlers. If there are no UnLoad handlers, should be idential to Tab.Close.
  </summary>
</histogram>

<histogram name="Tab.Deactivation.Bookmarked" enum="Boolean">
  <obsolete>
    Deprecated 11/2016. No longer useful after finding out that it has no effect
    on tab reactivation rates.
  </obsolete>
  <owner>pmonette@chromium.org</owner>
  <summary>
    A tab was deactivated. Closing tabs are not included. This histogram also
    records if the tab's URL was bookmarked.
  </summary>
</histogram>

<histogram name="Tab.Deactivation.HadFormInteraction" enum="Boolean">
  <owner>pmonette@chromium.org</owner>
  <summary>
    A tab was deactivated. Closing tabs are not included. This histogram also
    records if the tab had any form interaction.
  </summary>
</histogram>

<histogram name="Tab.Deactivation.Pinned" enum="Boolean">
  <owner>pmonette@chromium.org</owner>
  <summary>
    A tab was deactivated. Closing tabs are not included. This histogram also
    records if the tab was pinned to the tab strip or not.
  </summary>
</histogram>

<histogram name="Tab.Discarding" enum="TabDiscardingEvents">
  <obsolete>
    Deprecated 10/2015, not needed anymore.
  </obsolete>
  <owner>georgesak@chromium.org</owner>
  <summary>
    Metric to track counts of actions related to tab discarding. Namely, we get
    an event for every tab switch, split into two groups, whether it was a
    discarded tab not. We also get an event whenever a tab gets discarded as
    well as when a tab that's playing audio gets discarded.
  </summary>
</histogram>

<histogram name="Tab.Discarding.DiscardCount" units="Discards">
  <obsolete>
    Deprecated 10/2015, and replaced by TabManager.Discarding.DiscardCount.
  </obsolete>
  <owner>georgesak@chromium.org</owner>
  <summary>
    Metric to track the number of discards tabs have gone through. Each time a
    tab is discarded, this histogram is recorded. Therefore, this metric is
    cumulative, ie. as a tab gets discarded over and over, it gets a hit in each
    bin (1, 2, 3...).
  </summary>
</histogram>

<histogram name="Tab.EvictedTabWasActive" enum="Boolean">
  <obsolete>
    Deprecated as of 10/2016.
  </obsolete>
  <owner>lliabraa@chromium.org</owner>
  <summary>
    [iOS] When switching to an evicted tab, this histogram records whether or
    not the tab had ever been active. For example, the tab was opened via
    &quot;Open in new tab&quot; but evicted before being viewed for the first
    time.
  </summary>
</histogram>

<histogram name="Tab.ExternalApplicationOpened" enum="ExternalLauncherOption">
  <owner>mrefaat@chromium.org</owner>
  <summary>
    Used on External App launcher Prompt to determine if the user clicked open
    or cancel.
  </summary>
</histogram>

<histogram name="Tab.FormActivityCountEvictedHistogram">
  <obsolete>
    Deprecated as of 10/2016.
  </obsolete>
  <owner>lliabraa@chromium.org</owner>
  <summary>
    A count of form activity (e.g. fields selected, characters typed) in a tab.
    Recorded only for tabs that are evicted due to memory pressure and then
    selected again.
  </summary>
</histogram>

<histogram name="Tab.HorizontalSizeClassUsed" enum="iOSSizeClassForReporting">
  <owner>lpromero@chromium.org</owner>
  <summary>
    Used on iOS 9+ iPad to report the usage of Compact or Regular horizontal
    size class. This is logged at startup and on each size class change.
  </summary>
</histogram>

<histogram name="Tab.LostTabAgeWhenSwitchedToForeground" units="ms">
  <owner>pkotwicz@chromium.org</owner>
  <summary>
    [Android] When a tab that was opened in the background (e.g. via &quot;Open
    link in new tab&quot;) is evicted prior to the first time that it is shown,
    we record the tab's age at the time that the tab is shown.
  </summary>
</histogram>

<histogram name="Tab.NewTab" enum="NewTabType">
  <owner>lliabraa@chromium.org</owner>
  <owner>beaudoin@chromium.org</owner>
  <summary>
    Tracks the different ways users are opening new tabs. Does not apply to
    opening existing links or searches in a new tab, only to brand new empty
    tabs. Note: Currently the &quot;Regular menu option&quot; includes some
    programmatic actions in addition to user actions.
  </summary>
</histogram>

<histogram name="Tab.NewTabDOMContentLoaded" units="ms">
  <owner>lliabraa@chromium.org</owner>
  <owner>beaudoin@chromium.org</owner>
  <summary>
    The time for the new tab page to fire the &quot;DOMContentLoaded&quot;
    event.
  </summary>
</histogram>

<histogram name="Tab.NewTabOnload" units="ms">
  <owner>treib@chromium.org</owner>
  <summary>
    The time for the new tab page to fire the &quot;load&quot; event. Note: This
    is usually recorded with a suffix (.Local/Google/Other). The base version is
    recorded only on Android. Recorded only once per tab, i.e. excluding
    back/forward navigations.
  </summary>
</histogram>

<histogram name="Tab.NewTabScriptStart" units="ms">
  <owner>lliabraa@chromium.org</owner>
  <owner>beaudoin@chromium.org</owner>
  <summary>
    The time for the new tab page to start executing JavaScript.
  </summary>
</histogram>

<histogram name="Tab.OpenedPopup.PopupToCrossOriginRedirectTime" units="ms">
  <obsolete>
    Deprecated in favor of Tab.TabUnder.PopupToTabUnderTime.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time from when a tab opens a popup to when it navigates itself
    cross-origin in the background.
  </summary>
</histogram>

<histogram name="Tab.OpenedPopup.VisibleTimeAfterCrossOriginRedirect"
    units="ms">
  <obsolete>
    Deprecated in favor of Tab.TabUnder.VisibleTime.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the total time a tab is visible after it navigates itself
    cross-origin in the background. Measured at WebContents destruction. The tab
    must have opened a popup (as classified by the popup blocker) before the
    navigation.
  </summary>
</histogram>

<histogram name="Tab.PageLoadInHorizontalSizeClass"
    enum="iOSSizeClassForReporting">
  <owner>lpromero@chromium.org</owner>
  <summary>
    Used on iOS 9+ iPad to report the usage of Compact or Regular horizontal
    size class. Recorded on page load.
  </summary>
</histogram>

<histogram name="Tab.PageLoadInPortrait" enum="DeviceOrientation">
  <owner>jif@chromium.org</owner>
  <summary>The orientation of the device. Recorded on page load.</summary>
</histogram>

<histogram name="Tab.PageLoadsSinceLastSwitchToEvictedTab">
  <owner>lliabraa@chromium.org</owner>
  <summary>
    The number of page loads since the last switch to an evicted tab on Android.
    This was sampled each time an evicted tab was reloaded.
  </summary>
</histogram>

<histogram name="Tab.PerceivedRestoreTime" units="ms">
  <owner>lliabraa@chromium.org</owner>
  <summary>
    User-perceived load time for a successful tab restore, measured from the
    first time the user sees the tab being restored until the load completes.
  </summary>
</histogram>

<histogram name="Tab.PullDownGesture" enum="PullDownGestureAction">
  <owner>jbbegue@google.com</owner>
  <summary>
    Record the action executed when the user performs a pull down gesture. This
    feature is currently iOS only.
  </summary>
  <details>
    A pull down gesture is an action completed when the user scrolls past the
    edge of the web page and continues scrolling in the same direction revealing
    a specific UI on the header with multiple actions icons. The user can then
    choose an action by scrolling left or right and lift the finger or cancel by
    scrolling back up. This is currently an iOS specific feature.
  </details>
</histogram>

<histogram name="Tab.Reactivation.Bookmarked" enum="Boolean">
  <obsolete>
    Deprecated 11/2016. No longer useful after finding out that it has no effect
    on tab reactivation rates.
  </obsolete>
  <owner>pmonette@chromium.org</owner>
  <summary>
    A tab was reactivated after being hidden. This histogram also records if the
    tab's URL was bookmarked.
  </summary>
</histogram>

<histogram name="Tab.Reactivation.HadFormInteraction" enum="Boolean">
  <owner>pmonette@chromium.org</owner>
  <summary>
    A tab was reactivated after being hidden. This histogram also records if the
    tab had any form interaction.
  </summary>
</histogram>

<histogram name="Tab.Reactivation.Pinned" enum="Boolean">
  <owner>pmonette@chromium.org</owner>
  <summary>
    A tab was reactivated after being hidden. This histogram also records if the
    tab was pinned to the tab strip.
  </summary>
</histogram>

<histogram name="Tab.RendererCrashStatus" enum="TabRendererCrashStatus">
  <owner>jaekyun@chromium.org</owner>
  <summary>
    The status of a tab and an application when a renderer crashes. This is
    recorded only for Android when a renderer crashes.
  </summary>
</histogram>

<histogram name="Tab.RendererDetailedExitStatus"
    enum="ProcessDetailedExitStatus">
  <owner>wnwen@chromium.org</owner>
  <summary>
    Breakdown of renderer exit status for renderers that have strong bindings.
    An extension of the counts in Tab.RendererExitStatus. Only recorded on
    Android.
  </summary>
</histogram>

<histogram name="Tab.RendererDetailedExitStatusUnbound"
    enum="ProcessDetailedExitStatus">
  <owner>wnwen@chromium.org</owner>
  <summary>
    Breakdown of renderer exit status for renderers that do not have strong
    bindings. An extension of the counts in Tab.RendererExitStatus. Only
    recorded on Android.
  </summary>
</histogram>

<histogram name="Tab.RendererExitStatus" enum="TabRendererExitStatus">
  <owner>wnwen@chromium.org</owner>
  <summary>
    The status of a renderer when the browser notices that the process has
    exited. Only recorded on Android.
  </summary>
</histogram>

<histogram name="Tab.RendererTermination.AliveRenderersCount" units="renderers">
  <owner>gchatz@chromium.org</owner>
  <summary>
    [iOS] A count of the number of alive renderers when a renderer termination
    occurs.
  </summary>
</histogram>

<histogram name="Tab.RendererTermination.RecentlyAliveRenderersCount"
    units="renderers">
  <owner>gchatz@chromium.org</owner>
  <summary>
    [iOS] The number of renderers which are either currently alive or recently
    terminated at the time of a renderer termination.
  </summary>
</histogram>

<histogram name="Tab.RendererTermination.RecentlyReceivedMemoryWarning"
    enum="BooleanWarningReceived">
  <owner>gchatz@chromium.org</owner>
  <summary>
    [iOS] Records whether a memory warning had recently been received before a
    renderer termination.
  </summary>
</histogram>

<histogram name="Tab.RestoreResult" enum="TabRestoreResult">
  <owner>lliabraa@chromium.org</owner>
  <summary>
    When the browser restores a tab, whether the load was successful. Loads can
    fail for instance when there is no connectivity.
  </summary>
</histogram>

<histogram name="Tab.RestoreTime" units="ms">
  <owner>lliabraa@chromium.org</owner>
  <summary>Load time for a successful tab restore.</summary>
</histogram>

<histogram name="Tab.RestoreUserPersistence" enum="TabRestoreUserAction">
  <owner>lliabraa@chromium.org</owner>
  <summary>
    When the browser restores a tab, whether the user waits for completion of
    the load or if the user gives up by switching to another tab or leaving
    Chrome.
  </summary>
</histogram>

<histogram name="Tab.StateAtRendererTermination" enum="TabForegroundState">
  <owner>stuartmorgan@chromium.org</owner>
  <summary>
    The state (foreground/background) of a tab when its renderer is terminated.
  </summary>
</histogram>

<histogram name="Tab.StatusWhenDisplayed" enum="TabStatus">
  <owner>lliabraa@chromium.org</owner>
  <summary>
    The status of a tab collected each time the tab is displayed on Android,
    including user switching to the tab and displays of newly created tabs, such
    as NTP or tabs opened to handle intents.
  </summary>
</histogram>

<histogram name="Tab.StatusWhenSwitchedBackToForeground" enum="TabStatus">
  <owner>lliabraa@chromium.org</owner>
  <summary>
    The status of a tab collected each time the user switches to it on mobile.
    That does not include tabs being created at the time the user switches to
    them, such as NTP or tabs opened to handle intents.
  </summary>
</histogram>

<histogram name="Tab.StatusWhenSwitchedBackToForegroundDataProxyEnabled"
    enum="TabStatus">
  <owner>lliabraa@chromium.org</owner>
  <owner>marq@chromium.org</owner>
  <summary>
    The status of a tab collected each time the user switches to it on mobile
    with the data reduction proxy enabled. This is populated identically, and in
    addition to Tab.StatusWhenSwitchedBackToForeground for any given tab
    switching event if the proxy is enabled.
  </summary>
</histogram>

<histogram name="Tab.SwitchedToForegroundAge" units="ms">
  <owner>lliabraa@chromium.org</owner>
  <summary>Age (in ms) when the tab was switched to foreground.</summary>
</histogram>

<histogram name="Tab.SwitchedToForegroundLaunchedWithURL"
    enum="TabSwitchedToForegroundLaunchedWithURL">
  <obsolete>
    Deprecated as of 04/2014.
  </obsolete>
  <owner>lliabraa@chromium.org</owner>
  <summary>
    Each time a tab is brought to the foreground, this histogram indicates if
    chrome was launched without an URL (i.e., from the launcher), or with an URL
    (i.e., from another app).
  </summary>
</histogram>

<histogram name="Tab.SwitchedToForegroundMRURank">
  <obsolete>
    Deprecated as of 04/2014.
  </obsolete>
  <owner>lliabraa@chromium.org</owner>
  <summary>
    Rank in MRU order (0 being first) when the tab was switched to foreground.
  </summary>
</histogram>

<histogram name="Tab.SwitchedToForegroundNumTabs">
  <owner>lliabraa@chromium.org</owner>
  <summary>Count of all tabs when a tab is switched.</summary>
</histogram>

<histogram name="Tab.SwitchedToForegroundRevisit"
    enum="TabSwitchedToForegroundRevisit">
  <obsolete>
    Deprecated as of 04/2014.
  </obsolete>
  <owner>lliabraa@chromium.org</owner>
  <summary>
    Each time a tab is brought to the foreground, this histogram indicates if
    this is the first viewing of the tab since Chrome was put into foreground,
    or if it was a return to a tab that has already been shown in this session.
  </summary>
</histogram>

<histogram name="Tab.TabUnder.ClickThroughPosition" enum="ListItemPosition">
  <owner>csharrison@chromium.org</owner>
  <summary>
    The position of the URL in the framebust UI list (desktop only) when it is
    clicked. Note that this UI surface is shared with the framebusting
    intervention, so elements in the list could come from either features. This
    metric will only be logged when a URL from the tab under intervention is
    clicked.
  </summary>
</histogram>

<histogram name="Tab.TabUnder.EngagementScore" units="engagement score">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the engagement score associated with the URL that is detected as
    the target of a tab-under navigation.
  </summary>
</histogram>

<histogram name="Tab.TabUnder.PopupToTabUnderTime" units="ms">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the time from when a tab opens a popup to when it performs a
    tab-under (i.e. navigates cross origin, in the background without a user
    gesture).
  </summary>
</histogram>

<histogram name="Tab.TabUnder.VisibleTime" units="ms">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the total time a tab is visible after it navigates itself
    cross-origin in the background, without a user gesture. The tab must have
    opened a popup since the last user gesture in the tab. Measured at
    WebContents destruction. The total visible time for the tab is the sum of
    this metric and Tab.TabUnder.VisibleTimeBefore.
  </summary>
</histogram>

<histogram name="Tab.TabUnder.VisibleTimeBefore" units="ms">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the total time a tab is visible before it navigates itself
    cross-origin in the background, without a user gesture. The tab must have
    opened a popup since the last user gesture in the tab. Measured at
    WebContents destruction. The total visible time for the tab is the sum of
    this metric and Tab.TabUnder.VisibleTime.
  </summary>
</histogram>

<histogram name="Tab.TabUnderAction" enum="TabUnderAction">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Various actions related to the tab under intervention, logged during main
    frame navigation.
  </summary>
</histogram>

<histogram name="Tab.TimeSinceActive" units="ms">
  <obsolete>
    Deprecated as of 10/2016.
  </obsolete>
  <owner>lliabraa@chromium.org</owner>
  <summary>
    [iOS] When an existing tab becomes active, this histogram records the time
    since it was made inactive.
  </summary>
</histogram>

<histogram name="Tab.TimeSinceActiveEvicted" units="ms">
  <obsolete>
    Deprecated as of 10/2016.
  </obsolete>
  <owner>lliabraa@chromium.org</owner>
  <summary>
    [iOS] When an evicted tab becomes active, this histogram records the time
    since it was made inactive.
  </summary>
</histogram>

<histogram name="Tab.TimeSinceFormActivityEvictedHistogram" units="ms">
  <obsolete>
    Deprecated as of 10/2016.
  </obsolete>
  <owner>lliabraa@chromium.org</owner>
  <summary>
    Time elapsed since there was form activity (e.g. fields selected, characters
    typed) in a tab. Recorded only for tabs that are evicted due to memory
    pressure and then selected again.
  </summary>
</histogram>

<histogram name="Tab.TimeToReactivation.Important" units="ms">
  <owner>pmonette@chromium.org</owner>
  <summary>
    The time elapsed from the moment a tab was deactivated until it was
    reactivated. Only recorded for tabs that are pinned or had form interaction.
  </summary>
</histogram>

<histogram name="Tab.TimeToReactivation.Normal" units="ms">
  <owner>pmonette@chromium.org</owner>
  <summary>
    The time elapsed from the moment a tab was deactivated until it was
    reactivated. Only recorded for tabs that are not pinned nor had form
    interaction.
  </summary>
</histogram>

<histogram name="Tab.TotalTabCount.BeforeLeavingApp" units="tabs">
  <owner>jaekyun@chromium.org</owner>
  <summary>
    The total count of tabs which were kept while Chrome process is in the
    foreground. This is recorded only for Android right before Chrome process
    goes into the background.
  </summary>
</histogram>

<histogram name="Tab.Visibility" units="ms">
  <owner>fdoray@chromium.org</owner>
  <summary>
    Time spent by a tab in a given visibility state. Recorded when the
    visibility changes and when the tab is closed.
  </summary>
</histogram>

<histogram name="Tab.VisibleTime" units="ms">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the total time a tab is visible. Measured at the WebContents layer
    so this metric does not attempt to account for things like session restore.
    Logged at WebContents destruction.
  </summary>
</histogram>

<histogram name="Tab.VisibleTimeAfterCrossOriginRedirect" units="ms">
  <obsolete>
    This metric was deprecated in favor of just using Tab.TabUnder.VisibleTime
    directly. Consider bringing it back if we care about visible time after a
    suspicious redirect without an associated popup.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    Measures the total time a tab is visible after it navigates itself
    cross-origin in the background. Measured at WebContents destruction.
  </summary>
</histogram>

<histogram
    name="TabManager.BackgroundTabOpening.ForegroundTab.ExpectedTaskQueueingDuration"
    units="ms">
  <owner>fmeawad@chromium.org</owner>
  <summary>
    The expected queueing duration of tasks in a foreground tab during a
    background tab opening session (the duration of time from when the browser
    starts to open background tabs until the time the browser has finished
    loading those tabs or otherwise decided to stop loading them). The metric
    reflects the responsiveness of a tab. A lower value means the tab will
    respond to inputs faster. This metric is equivalent to
    RendererScheduler.ExpectedTaskQueueingDuration. It is emitted once for all
    tasks in each 1000-ms window. The metric is not recorded when the session
    overlaps with session restore.
  </summary>
</histogram>

<histogram name="TabManager.BackgroundTabOpening.SwitchToTab"
    enum="TabLoadingState">
  <owner>zhenw@chromium.org</owner>
  <summary>
    The loading state of a tab at the time the user switches to it during a
    background tab opening session (the duration of time from when the browser
    starts to open background tabs until the time the browser has finished
    loading those tabs or otherwise decided to stop loading them). The metric is
    only recorded when a tab is switched to from another tab within the same
    tabstrip. As a result, the case when switching between different windows is
    not included, either between two tabs in different browser windows, or when
    switching to a different application and switching back to the browser. The
    metric is not recorded when the session overlaps with session restore.
  </summary>
</histogram>

<histogram name="TabManager.BackgroundTabOpening.TabCount" units="tabs">
  <owner>zhenw@chromium.org</owner>
  <summary>
    The max number of background tabs pending or loading when opening background
    tabs. This is recorded at the end of the background tab opening session (the
    duration of time from when the browser starts to open background tabs until
    the time the browser has finished loading those tabs or otherwise decided to
    stop loading them). The metric is not recorded when the session overlaps
    with session restore.
  </summary>
</histogram>

<histogram name="TabManager.BackgroundTabOpening.TabLoadAutoStartedCount"
    units="tabs">
  <owner>zhenw@chromium.org</owner>
  <summary>
    The number of background tabs whose loading was triggered by TabManager
    automatically when opening background tabs. This is recorded at the end of
    the background tab opening session (the duration of time from when the
    browser starts to open background tabs until the time the browser has
    finished loading those tabs or otherwise decided to stop loading them). The
    metric is not recorded when the session overlaps with session restore.
  </summary>
</histogram>

<histogram name="TabManager.BackgroundTabOpening.TabLoadTimeout"
    enum="BooleanTimedOut">
  <owner>zhenw@chromium.org</owner>
  <summary>
    Whether the tab load is timed out during background tab opening session (the
    duration of time from when the browser starts to open background tabs until
    the time the browser has finished loading those tabs or otherwise decided to
    stop loading them). The metric is not recorded when the session overlaps
    with session restore.
  </summary>
</histogram>

<histogram name="TabManager.BackgroundTabOpening.TabLoadUserInitiatedCount"
    units="tabs">
  <owner>zhenw@chromium.org</owner>
  <summary>
    The number of background tabs whose loading was triggered by user action
    when opening background tabs. For example, when the user selects a
    background tab and brings it to foreground, that tab will start to load
    immediately if not already loading. This is recorded at the end of the
    background tab opening session (the duration of time from when the browser
    starts to open background tabs until the time the browser has finished
    loading those tabs or otherwise decided to stop loading them). The metric is
    not recorded when the session overlaps with session restore.
  </summary>
</histogram>

<histogram name="TabManager.BackgroundTabOpening.TabPausedCount" units="tabs">
  <owner>zhenw@chromium.org</owner>
  <summary>
    The max number of background tabs paused to load due to memory pressure when
    opening background tabs. This is recorded at the end of the background tab
    opening session during a background tab opening session (the duration of
    time from when the browser starts to open background tabs until the time the
    browser has finished loading those tabs or otherwise decided to stop loading
    them). The metric is not recorded when the session overlaps with session
    restore.
  </summary>
</histogram>

<histogram name="TabManager.Discarding.DiscardCount" units="Discards">
  <owner>georgesak@chromium.org</owner>
  <summary>
    Cumulative number of tabs discarded due to low memory conditions, recorded
    once per tab discard event.  For example, a user who had 3 tabs discarded
    records a count in the 1 bin, 2 bin and 3 bin.  Thus each bin N is the
    number of sessions where users experienced N or more tab discard events.
  </summary>
</histogram>

<histogram name="TabManager.Discarding.DiscardedEngagementScore">
  <obsolete>
    Deprecated 11/2017. Analysis showed that MRU was as good as engagement score
    to choose which tabs to discard. The new plan is to build a machine learning
    model to choose which tabs to discard.
  </obsolete>
  <owner>georgesak@chromium.org</owner>
  <summary>
    Site engagement score of a discarded tab. Recorded for each discard if the
    score is available.
  </summary>
</histogram>

<histogram name="TabManager.Discarding.DiscardedTabCouldFastShutdown"
    enum="BooleanTabDiscardFastShutdown">
  <owner>oysteine@chromium.org</owner>
  <summary>
    Recorded for each discarding, indicates whether the discarded tab succeeded
    in doing a render process fast shutdown or not.
  </summary>
</histogram>

<histogram name="TabManager.Discarding.DiscardedTabCouldUnsafeFastShutdown"
    enum="BooleanTabDiscardFastShutdown">
  <owner>oysteine@chromium.org</owner>
  <summary>
    Recorded for each discarding, allowing us to know whether the discarded tab
    succeeded an unsafe process shutdown (not invoking unload handlers).
  </summary>
</histogram>

<histogram name="TabManager.Discarding.DiscardedTabHasBeforeUnloadHandler"
    enum="Boolean">
  <owner>georgesak@chromium.org</owner>
  <summary>
    Recorded for each discarding, allowing us to know whether the discarded tab
    had a before unload handler or not.
  </summary>
</histogram>

<histogram name="TabManager.Discarding.DiscardToReloadTime" units="ms">
  <owner>georgesak@chromium.org</owner>
  <summary>
    Elapsed time between a tab getting discarded to eventually being reloaded by
    the user.
  </summary>
</histogram>

<histogram name="TabManager.Discarding.InactiveToReloadTime" units="ms">
  <owner>georgesak@chromium.org</owner>
  <summary>
    Elapsed time between the time a tab switched from being active to inactive
    (that eventually gets discarded) until it gets reloaded.
  </summary>
</histogram>

<histogram name="TabManager.Discarding.LocalDatabase.DatabaseInit"
    enum="LocalSiteCharacteristicsDBInitStatus">
  <obsolete>
    Deprecated 07/2018, and replaced by
    ResourceCoordinator.LocalDB.DatabaseInit.
  </obsolete>
  <owner>sebmarchand@chromium.org</owner>
  <summary>
    The result of opening the Local Site Characteristics database.
  </summary>
</histogram>

<histogram name="TabManager.Discarding.LocalDatabase.DatabaseInitAfterDelete"
    enum="LocalSiteCharacteristicsDBInitStatus">
  <obsolete>
    Deprecated 07/2018, and replaced by
    ResourceCoordinator.LocalDB.DatabaseInitAfterDelete.
  </obsolete>
  <owner>sebmarchand@chromium.org</owner>
  <summary>
    The result of opening the Local Site Characteristics database after deleting
    it after a failed repair attempt.
  </summary>
</histogram>

<histogram name="TabManager.Discarding.LocalDatabase.DatabaseInitAfterRepair"
    enum="LocalSiteCharacteristicsDBInitStatus">
  <obsolete>
    Deprecated 07/2018, and replaced by
    ResourceCoordinator.LocalDB.DatabaseInitAfterRepair.
  </obsolete>
  <owner>sebmarchand@chromium.org</owner>
  <summary>
    The result of opening the Local Site Characteristics database after a repair
    attempt.
  </summary>
</histogram>

<histogram name="TabManager.Discarding.LocalDatabase.DatabaseRepair"
    enum="BooleanSuccess">
  <obsolete>
    Deprecated 07/2018, and replaced by
    ResourceCoordinator.LocalDB.DatabaseRepair.
  </obsolete>
  <owner>sebmarchand@chromium.org</owner>
  <summary>
    The result of trying to repair the Local Site Characteristics database after
    a failed open.
  </summary>
</histogram>

<histogram name="TabManager.Discarding.LogMemoryTime" units="ms">
  <owner>cywang@chromium.org</owner>
  <owner>georgesak@chromium.org</owner>
  <summary>
    Elapsed time to collect memory usage of each tab triggered by a LogMemory()
    call().
  </summary>
</histogram>

<histogram name="TabManager.Discarding.ReloadCount" units="Reloads">
  <owner>georgesak@chromium.org</owner>
  <summary>
    Cumulative number of discarded tabs that have been reloaded by the user,
    recorded once per tab discard event. For example, a user who had 3 tabs
    reloaded records a count in the 1 bin, 2 bin and 3 bin. Thus each bin N is
    the number of sessions where users experienced N or more tab reload events.
  </summary>
</histogram>

<histogram name="TabManager.Discarding.ReloadedEngagementScore">
  <obsolete>
    Deprecated 11/2017. Analysis showed that MRU was as good as engagement score
    to choose which tabs to discard. The new plan is to build a machine learning
    model to choose which tabs to discard.
  </obsolete>
  <owner>georgesak@chromium.org</owner>
  <summary>
    Site engagement score of a reloaded tab. Recorded for each reload if the
    score is available. Note that this will be the same score the tab had when
    discarded (which could have changed by the time it gets reloaded).
  </summary>
</histogram>

<histogram name="TabManager.Discarding.ReloadToCloseTime" units="ms">
  <owner>georgesak@chromium.org</owner>
  <summary>
    Elapsed time between the last time a discarded tab was reloaded and the time
    it gets closed.
  </summary>
</histogram>

<histogram
    name="TabManager.Experimental.BackgroundTabOpening.CompressedPagesPerSecond"
    units="pages/s">
  <owner>fmeawad@chromium.org</owner>
  <summary>
    The number of pages compressed per second when opening background tabs. This
    is recorded at the end of the background tab opening session as an average
    over the entire period (the duration of time from when the browser starts to
    open background tabs until the time the browser has finished loading those
    tabs or otherwise decided to stop loading them). The metric is not recorded
    when the session overlaps with session restore. Only recorded on macOS.
    Warning: This metric is a ratio and the session interval differs for each
    session. It is hard to tell if it is average rate for each second in the
    interval or it has a huge spike.
  </summary>
</histogram>

<histogram
    name="TabManager.Experimental.BackgroundTabOpening.DecompressedPagesPerSecond"
    units="pages/s">
  <owner>fmeawad@chromium.org</owner>
  <summary>
    The number of pages decompressed per second when opening background tabs.
    This is recorded at the end of the background tab opening session as an
    average over the entire period (the duration of time from when the browser
    starts to open background tabs until the time the browser has finished
    loading those tabs or otherwise decided to stop loading them). The metric is
    not recorded when the session overlaps with session restore. Only recorded
    on macOS. Warning: This metric is a ratio and the session interval differs
    for each session. It is hard to tell if it is average rate for each second
    in the interval or it has a huge spike.
  </summary>
</histogram>

<histogram name="TabManager.Experimental.BackgroundTabOpening.SwapInPerSecond"
    units="swaps/s">
  <owner>fmeawad@chromium.org</owner>
  <summary>
    The number of swap-ins per second when opening background tabs. This is
    recorded at the end of the background tab opening session as an average over
    the entire period (the duration of time from when the browser starts to open
    background tabs until the time the browser has finished loading those tabs
    or otherwise decided to stop loading them). The metric is not recorded when
    the session overlaps with session restore. Warning: This metric is a ratio
    and the session interval differs for each session. It is hard to tell if it
    is average rate for each second in the interval or it has a huge spike.
  </summary>
</histogram>

<histogram name="TabManager.Experimental.BackgroundTabOpening.SwapOutPerSecond"
    units="swaps/s">
  <owner>fmeawad@chromium.org</owner>
  <summary>
    The number of swap-outs per second when opening background tabs. This is
    recorded at the end of the background tab opening session as an average over
    the entire period (the duration of time from when the browser starts to open
    background tabs until the time the browser has finished loading those tabs
    or otherwise decided to stop loading them). The metric is not recorded when
    the session overlaps with session restore. Warning: This metric is a ratio
    and the session interval differs for each session. It is hard to tell if it
    is average rate for each second in the interval or it has a huge spike.
  </summary>
</histogram>

<histogram
    name="TabManager.Experimental.BackgroundTabOpening.TabSwitchLoadTime"
    units="ms">
  <obsolete>
    Deprecated 08/2017, and replaced by
    TabManager.Experimental.BackgroundTabOpening.TabSwitchLoadTime.UntilTabIsLoaded.
  </obsolete>
  <owner>zhenw@chromium.org</owner>
  <summary>
    The tab load time of a tab that is switched to during a background tab
    opening session (the duration of time from when the browser starts to open
    background tabs until the time the browser has finished loading those tabs
    or otherwise decided to stop loading them). Tab load time is defined as the
    time between when the user switches to a backround 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 load time is measured from that
    point in time. The metric is only recorded when a tab is switched to from
    another tab within the same tabstrip. As a result, the initial forground tab
    is not included in this metric since it was not switched to from another
    tab. The metric is not recorded when the session overlaps with session
    restore.
  </summary>
</histogram>

<histogram
    name="TabManager.Experimental.BackgroundTabOpening.TabSwitchLoadTime.UntilTabIsLoaded"
    units="ms">
  <owner>zhenw@chromium.org</owner>
  <summary>
    The tab load time of a tab that is switched to during a background tab
    opening session (the duration of time from when the browser starts to open
    background tabs until the time the browser has finished loading those tabs
    or otherwise decided to stop loading them). Tab load time is defined as the
    time between when the user switches to a backround 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 load time is measured from that
    point in time. The metric is only recorded when a tab is switched to from
    another tab within the same tabstrip. As a result, the initial forground tab
    is not included in this metric since it was not switched to from another
    tab. The metric is not recorded when the session overlaps with session
    restore.
  </summary>
</histogram>

<histogram
    name="TabManager.Experimental.SessionRestore.CompressedPagesPerSecond"
    units="pages/s">
  <owner>fmeawad@chromium.org</owner>
  <summary>
    The number of pages compressed per second during session restore. Recorded
    at the end of session restore as an average over the entire period, defined
    as the period of time when session restore is actively loading tabs, which
    ends when either all tabs have been loaded and their pages rendered, or tab
    loading needs to be deferred in cases where the system is under memory
    pressure. The metric is not recorded when the session overlaps with
    background tab opening session. Only recorded on macOS. Warning: This metric
    is a ratio and the session interval differs for each session. It is hard to
    tell if it is average rate for each second in the interval or it has a huge
    spike.
  </summary>
</histogram>

<histogram
    name="TabManager.Experimental.SessionRestore.DecompressedPagesPerSecond"
    units="pages/s">
  <owner>fmeawad@chromium.org</owner>
  <summary>
    The number of pages decompressed per second during session restore. Recorded
    at the end of session restore as an average over the entire period, defined
    as the period of time when session restore is actively loading tabs, which
    ends when either all tabs have been loaded and their pages rendered, or tab
    loading needs to be deferred in cases where the system is under memory
    pressure. The metric is not recorded when the session overlaps with
    background tab opening session. Only recorded on macOS. Warning: This metric
    is a ratio and the session interval differs for each session. It is hard to
    tell if it is average rate for each second in the interval or it has a huge
    spike.
  </summary>
</histogram>

<histogram
    name="TabManager.Experimental.SessionRestore.ForegroundTab.FirstContentfulPaint"
    units="ms">
  <owner>fmeawad@chromium.org</owner>
  <summary>
    Elapsed time between the start of the loading and the first contentful paint
    of foreground tabs when the browser loads tabs in session restore.
  </summary>
</histogram>

<histogram
    name="TabManager.Experimental.SessionRestore.ForegroundTab.FirstMeaningfulPaint"
    units="ms">
  <owner>fmeawad@chromium.org</owner>
  <summary>
    Elapsed time between the start of the loading and the first meaningful paint
    of foreground tabs when the browser loads tabs in session restore.
  </summary>
</histogram>

<histogram
    name="TabManager.Experimental.SessionRestore.ForegroundTab.FirstPaint"
    units="ms">
  <owner>fmeawad@chromium.org</owner>
  <summary>
    Elapsed time between the start of the loading and the first paint of
    foreground tabs when the browser loads tabs in session restore.
  </summary>
</histogram>

<histogram name="TabManager.Experimental.SessionRestore.SwapInPerSecond"
    units="swaps/s">
  <owner>fmeawad@chromium.org</owner>
  <summary>
    The number of swap-ins per second during session restore. Recorded at the
    end of session restore as an average over the entire period, defined as the
    period of time when session restore is actively loading tabs, which ends
    when either all tabs have been loaded and their pages rendered, or tab
    loading needs to be deferred in cases where the system is under memory
    pressure. The metric is not recorded when the session overlaps with
    background tab opening session. Warning: This metric is a ratio and the
    session interval differs for each session. It is hard to tell if it is
    average rate for each second in the interval or it has a huge spike.
  </summary>
</histogram>

<histogram name="TabManager.Experimental.SessionRestore.SwapOutPerSecond"
    units="swaps/s">
  <owner>fmeawad@chromium.org</owner>
  <summary>
    The number of swap-outs per second during session restore. Recorded at the
    end of session restore as an average over the entire period, defined as the
    period of time when session restore is actively loading tabs, which ends
    when either all tabs have been loaded and their pages rendered, or tab
    loading needs to be deferred in cases where the system is under memory
    pressure. The metric is not recorded when the session overlaps with
    background tab opening session. Warning: This metric is a ratio and the
    session interval differs for each session. It is hard to tell if it is
    average rate for each second in the interval or it has a huge spike.
  </summary>
</histogram>

<histogram name="TabManager.Experimental.SessionRestore.TabSwitchLoadTime"
    units="ms">
  <obsolete>
    Deprecated 08/2017, and replaced by
    TabManager.Experimental.SessionRestore.TabSwitchLoadTime.UntilTabIsLoaded.
  </obsolete>
  <owner>fmeawad@chromium.org</owner>
  <summary>
    The tab load time of a tab that is switched to during a session restore. Tab
    load time is defined as the time between when the user switches to a
    backround 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 load time is measured from that point in time. The metric is only
    recorded when a tab is switched to from another tab within the same
    tabstrip. As a result, the initial forground tab is not included in this
    metric since it was not switched to from another tab. The metric is only
    recorded when session restore is actively loading tabs, which ends when
    either all tabs have been loaded and their pages rendered, or tab loading
    needs to be deferred in cases where the system is under memory pressure. The
    metric is not recorded when the session overlaps with background tab opening
    session.
  </summary>
</histogram>

<histogram
    name="TabManager.Experimental.SessionRestore.TabSwitchLoadTime.UntilTabIsLoaded"
    units="ms">
  <owner>fmeawad@chromium.org</owner>
  <summary>
    The tab load time of a tab that is switched to during a session restore. Tab
    load time is defined as the time between when the user switches to a
    backround 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 load time is measured from that point in time. The metric is only
    recorded when a tab is switched to from another tab within the same
    tabstrip. As a result, the initial forground tab is not included in this
    metric since it was not switched to from another tab. The metric is only
    recorded when session restore is actively loading tabs, which ends when
    either all tabs have been loaded and their pages rendered, or tab loading
    needs to be deferred in cases where the system is under memory pressure. The
    metric is not recorded when the session overlaps with background tab opening
    session.
  </summary>
</histogram>

<histogram name="TabManager.Heuristics.FromBackgroundedToFirstAlertFired"
    units="ms">
  <owner>chrisha@chromium.org</owner>
  <owner>lpy@chromium.org</owner>
  <summary>
    Measures the time duration from when the tab is backgrounded to when a
    JavaScript alert is updated. Only recorded when the tab is in the
    background.
  </summary>
</histogram>

<histogram name="TabManager.Heuristics.FromBackgroundedToFirstAudioStarts"
    units="ms">
  <owner>chrisha@chromium.org</owner>
  <owner>lpy@chromium.org</owner>
  <summary>
    Measures the time duration from when the tab is backgrounded to when audio
    starts to play. Only recorded when the tab is in the background.
  </summary>
</histogram>

<histogram name="TabManager.Heuristics.FromBackgroundedToFirstFaviconUpdated"
    units="ms">
  <owner>chrisha@chromium.org</owner>
  <owner>lpy@chromium.org</owner>
  <summary>
    Measures the time duration from when the tab is backgrounded to when its
    favicon is updated. The first-time set of favicon will be ignored; this
    metric will only be recorded after 5 minutes from main frame navigation
    committed and when the tab is in the background.
  </summary>
</histogram>

<histogram
    name="TabManager.Heuristics.FromBackgroundedToFirstNonPersistentNotificationCreated"
    units="ms">
  <owner>chrisha@chromium.org</owner>
  <owner>lpy@chromium.org</owner>
  <summary>
    Measures the time duration from when the tab is backgrounded to when a
    non-persistent notification is created. Only recorded when the tab is in the
    background.
  </summary>
</histogram>

<histogram name="TabManager.Heuristics.FromBackgroundedToFirstTitleUpdated"
    units="ms">
  <owner>chrisha@chromium.org</owner>
  <owner>lpy@chromium.org</owner>
  <summary>
    Measures the time duration from when the tab is backgrounded to when its
    title is updated. The first-time set of title will be ignored; this metric
    will only be recorded after 5 minutes from main frame navigation committed
    and when the tab is in the background.
  </summary>
</histogram>

<histogram name="TabManager.SessionOverlap.BackgroundTabOpening"
    units="BooleanOverlap">
  <owner>zhenw@chromium.org</owner>
  <summary>
    Whether background tab opening session is overlapped with other types of
    session, e.g., session restore. Background tab opening session is the
    duration of time from when the browser starts to open background tabs until
    the time the browser has finished loading those tabs or otherwise decided to
    stop loading them. This metric helps to understand how often background tab
    opening has overlap with other sessions.
  </summary>
</histogram>

<histogram name="TabManager.SessionOverlap.SessionRestore"
    units="BooleanOverlap">
  <owner>zhenw@chromium.org</owner>
  <summary>
    Whether session restore is overlapped with other types of session, e.g.,
    background tab opening. Session restore is the duration from the time when
    the browser starts to restore tabs until the time when the browser has
    finished loading those tabs or when the browser stops loading tabs due to
    memory pressure. This metric helps to understand how often session restore
    has overlap with other sessions.
  </summary>
</histogram>

<histogram name="TabManager.SessionRestore.CompressedPagesPerSecond"
    units="pages/s">
  <obsolete>
    Deprecated 08/2017, and replaced by
    TabManager.Experimental.SessionRestore.CompressedPagesPerSecond.
  </obsolete>
  <owner>fmeawad@chromium.org</owner>
  <summary>
    The number of pages compressed per second during session restore. Recorded
    at the end of session restore as an average over the entire period, defined
    as the period of time when session restore is actively loading tabs, which
    ends when either all tabs have been loaded and their pages rendered, or tab
    loading needs to be deferred in cases where the system is under memory
    pressure. Only recorded on macOS.
  </summary>
</histogram>

<histogram name="TabManager.SessionRestore.DecompressedPagesPerSecond"
    units="pages/s">
  <obsolete>
    Deprecated 08/2017, and replaced by
    TabManager.Experimental.SessionRestore.DecompressedPagesPerSecond.
  </obsolete>
  <owner>fmeawad@chromium.org</owner>
  <summary>
    The number of pages decompressed per second during session restore. Recorded
    at the end of session restore as an average over the entire period, defined
    as the period of time when session restore is actively loading tabs, which
    ends when either all tabs have been loaded and their pages rendered, or tab
    loading needs to be deferred in cases where the system is under memory
    pressure. Only recorded on macOS.
  </summary>
</histogram>

<histogram
    name="TabManager.SessionRestore.ForegroundTab.ExpectedTaskQueueingDuration"
    units="ms">
  <owner>fmeawad@chromium.org</owner>
  <summary>
    The expected queueing duration of tasks in a foreground tab during session
    restore. This 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. The metric is not recorded when the session
    overlaps with background tab opening session.
  </summary>
</histogram>

<histogram name="TabManager.SessionRestore.SwapInPerSecond" units="swaps/s">
  <obsolete>
    Deprecated 08/2017, and replaced by
    TabManager.Experimental.SessionRestore.SwapInPerSecond.
  </obsolete>
  <owner>fmeawad@chromium.org</owner>
  <summary>
    The number of swap-ins per second during session restore. Recorded at the
    end of session restore as an average over the entire period, defined as the
    period of time when session restore is actively loading tabs, which ends
    when either all tabs have been loaded and their pages rendered, or tab
    loading needs to be deferred in cases where the system is under memory
    pressure.
  </summary>
</histogram>

<histogram name="TabManager.SessionRestore.SwapOutPerSecond" units="swaps/s">
  <obsolete>
    Deprecated 08/2017, and replaced by
    TabManager.Experimental.SessionRestore.SwapOutPerSecond.
  </obsolete>
  <owner>fmeawad@chromium.org</owner>
  <summary>
    The number of swap-outs per second during session restore. Recorded at the
    end of session restore as an average over the entire period, defined as the
    period of time when session restore is actively loading tabs, which ends
    when either all tabs have been loaded and their pages rendered, or tab
    loading needs to be deferred in cases where the system is under memory
    pressure.
  </summary>
</histogram>

<histogram name="TabManager.SessionRestore.SwitchToTab" enum="TabLoadingState">
  <owner>fmeawad@chromium.org</owner>
  <summary>
    The loading state of a tab at the time the user switched to it during a
    session restore. The metric is only recorded when a tab is switched to from
    another tab within the same tabstrip. As a result, there are two cases where
    tabs are not included. The first case is when the initial forground tab is
    shown, since it was not switched to from another tab. The second case is
    when switching between different windows, either between two tabs in
    different browser windows, or when switching to a different application and
    switching back to the browser. The metric is only recorded when session
    restore is actively loading tabs, which ends when either all tabs have been
    loaded and their pages rendered, or tab loading needs to be deferred in
    cases where the system is under memory pressure. The metric is not recorded
    when the session overlaps with background tab opening session.
  </summary>
</histogram>

<histogram name="TabManager.TabRanker.Result" enum="TabManagerTabRankerResult">
  <owner>michaelpg@chromium.org</owner>
  <owner>charleszhao@chromium.org</owner>
  <summary>
    Logged when calculating a tab reactivation score for a background tab. Any
    value other than &quot;none&quot; may indicate a bug in the inference code,
    a problem with the preprocessor configuration shipped with the model, or a
    bug in the code that populates the RankerExample for a tab.
  </summary>
</histogram>

<histogram name="TabRestore.error_move_session_at_path_to_backup"
    enum="FoundationFileSystemError">
  <owner>sky@chromium.org</owner>
  <summary>
    Error code returned by [moveItemAtPath:toPath:error:] when moving previous
    session file to backup file before restoring. 0 in case of success.
  </summary>
</histogram>

<histogram name="TabRestore.error_remove_backup_at_path"
    enum="FoundationFileSystemError">
  <owner>sky@chromium.org</owner>
  <summary>
    Error code returned by [removeItemAtPath:error:] when removing previous
    session backup file. 0 in case of success.
  </summary>
</histogram>

<histogram name="TabRestore.error_remove_session_at_path"
    enum="FoundationFileSystemError">
  <owner>sky@chromium.org</owner>
  <summary>
    Error code returned by [removeItemAtPath:error:] when removing previous
    session file. 0 in case of success.
  </summary>
</histogram>

<histogram name="Tabs.CountAtResume" units="tabs">
  <owner>lliabraa@chromium.org</owner>
  <summary>
    The number of tabs open when the app comes out of the background.
  </summary>
</histogram>

<histogram name="Tabs.CountAtStartup" units="tabs">
  <owner>lliabraa@chromium.org</owner>
  <summary>The number of tabs open at cold launch.</summary>
</histogram>

<histogram name="Tabs.Discard.DiscardCount">
  <obsolete>
    Deprecated 10/2015, and replaced by TabManager.Discarding.DiscardCount.
  </obsolete>
  <owner>jamescook@chromium.org</owner>
  <summary>
    Cumulative number of tabs discarded due to low memory conditions, recorded
    once per tab discard event.  For example, a user who had 3 tabs discarded
    records a count in the 1 bin, 2 bin and 3 bin.  Thus each bin N is the
    number of sessions where users experienced N or more tab discard events.
  </summary>
</histogram>

<histogram name="Tabs.Discard.DiscardInLastMinute" enum="BooleanTabDiscard">
  <obsolete>
    Deprecated 11/2017. Average number of minutes between discard events is
    available in Tabs.Discard.InitialTime2 and Tabs.Discard.IntervalTime2.
  </obsolete>
  <owner>jamescook@chromium.org</owner>
  <summary>
    Whether or not a tab was discarded in the last minute of usage. Total count
    is number of minutes of device usage. 100 / discard percentage gives the
    average number of minutes between discard events.
  </summary>
</histogram>

<histogram name="Tabs.Discard.InitialTime" units="seconds">
  <obsolete>
    Deprecated May 4, 2012.  Replaced by Tabs.Discard.InitialTime2 because this
    stat had too low of a range maximum.  No longer tracked.
  </obsolete>
  <owner>jamescook@chromium.org</owner>
  <summary>
    Time in seconds between system startup and when the first tab is discarded
    due to low memory conditions.  Higher is better.
  </summary>
</histogram>

<histogram name="Tabs.Discard.InitialTime2" units="seconds">
  <obsolete>
    Deprecated 11/2017. Replaced with Discarding.Urgent.TimeSinceStartup which
    is recorded when Chrome has to discard tabs or apps urgently (instead of
    before an individual tab is urgently or proactively discarded).
  </obsolete>
  <owner>jamescook@chromium.org</owner>
  <summary>
    Time in seconds between system startup and when the first tab is discarded
    due to low memory conditions.  Higher is better.  Range maximum is
    approximately one day.
  </summary>
</histogram>

<histogram name="Tabs.Discard.IntervalTime" units="seconds">
  <obsolete>
    Deprecated May 4, 2012.  Replaced by Tabs.Discard.IntervalTime2 because this
    stat had too low of a range maximum.  No longer tracked.
  </obsolete>
  <owner>jamescook@chromium.org</owner>
  <summary>
    Time in seconds between tab discard events after the first one, recorded
    once per discard event.  Higher is better.
  </summary>
</histogram>

<histogram name="Tabs.Discard.IntervalTime2" units="ms">
  <obsolete>
    Deprecated 11/2017. Replaced with Discarding.Urgent.TimeSinceLastUrgent
    which is recorded before a set of tabs/apps are urgently discarded (instead
    of before an individual tab is urgently or proactively discarded).
  </obsolete>
  <owner>jamescook@chromium.org</owner>
  <summary>
    Time in milliseconds between tab discard events after the first one,
    recorded once per discard event.  Should occur no faster than once every 750
    ms.  Higher is better.
  </summary>
</histogram>

<histogram name="Tabs.Discard.MemAllocatedMB" units="MB">
  <owner>jamescook@chromium.org</owner>
  <summary>
    System-wide memory allocation at the time a tab was discarded, roughly
    equivalent to the sum of memory allocated with malloc() in userspace plus
    graphics driver memory.
  </summary>
</histogram>

<histogram name="Tabs.Discard.MemAnonymousMB" units="MB">
  <obsolete>
    Deprecated December 7, 2012.  Replaced by Tabs.Discard.MemAllocatedMB
    because this stat has insufficient precision in the 2-4 GB range and does
    not properly account for graphics memory on ARM.
  </obsolete>
  <owner>jamescook@chromium.org</owner>
  <summary>
    System-wide anonymous memory allocation at the time a tab was discarded,
    roughly equivalent to memory allocated with malloc().
  </summary>
</histogram>

<histogram name="Tabs.Discard.MemAvailableMB" units="MB">
  <owner>jamescook@chromium.org</owner>
  <summary>
    System-wide file-backed memory plus free memory, roughly equivalent to what
    the kernel uses to trigger low-memory notifications for tab discards. If
    lower than the kernel's threshold then we are not effectively freeing memory
    in response to the initial notification and are repeatedly being notified.
  </summary>
</histogram>

<histogram name="Tabs.Discard.MemGraphicsMB" units="MB">
  <owner>jamescook@chromium.org</owner>
  <summary>
    Graphics driver (GEM object) memory at the time of a tab discard.
  </summary>
</histogram>

<histogram name="Tabs.Discard.MemShmemMB" units="MB">
  <owner>jamescook@chromium.org</owner>
  <summary>
    System-wide shared memory at the time of a tab discard. Used primarily for
    shared buffers in the graphics system. Tracked because it's a historical
    source of leaks on Chrome OS.
  </summary>
</histogram>

<histogram name="Tabs.Discard.ReloadCount">
  <obsolete>
    Deprecated 10/2015, and replaced by TabManager.Discarding.ReloadCount.
  </obsolete>
  <owner>jamescook@chromium.org</owner>
  <summary>
    Cumulative number of times a tab was reloaded because it was discarded and
    the user clicked on it later, recorded once per reload event.  For example,
    a user who clicks on 3 discarded tabs will record a count in the 1 bin, 2
    bin, and 3 bin.  Thus each bin N is the number of sessions where users
    experienced N or more reload events.  Compare to Tabs.Discard.DiscardCount.
  </summary>
</histogram>

<histogram name="Tabs.Discard.TabCount" units="tabs">
  <obsolete>
    Deprecated 11/2017. Replaced with Discarding.Urgent.NumAliveTabs which
    records the number of tabs that are not pending load or discarded when an
    urgent discard request is received (vs. this that records the total number
    of tabs every time a tab is discarded, no matter the reason).
  </obsolete>
  <owner>jamescook@chromium.org</owner>
  <summary>
    The number of tabs open across all browser windows when a tab was discarded
    due to low memory conditions.
  </summary>
</histogram>

<histogram name="Tabs.FineTiming.TimeBetweenTabClosedAndNextTabCreated"
    units="ms">
  <owner>joenotcharles@chromium.org</owner>
  <summary>
    Fine-grained (in msec) time between closing a tab and opening another, to
    track very frequent tabs.
  </summary>
</histogram>

<histogram name="Tabs.FineTiming.TimeBetweenTabCreatedAndNextTabCreated"
    units="ms">
  <owner>joenotcharles@chromium.org</owner>
  <summary>
    Fine-grained (in msec) time between opening a tab and opening another, to
    track very frequent tabs.
  </summary>
</histogram>

<histogram name="Tabs.FineTiming.TimeBetweenTabCreatedAndSameTabClosed"
    units="ms">
  <owner>joenotcharles@chromium.org</owner>
  <summary>
    Fine-grained (in msec) time between opening a tab and closing it, to track
    very short-lived tabs.
  </summary>
</histogram>

<histogram name="Tabs.FirstSwitchedToForegroundCreationRank">
  <owner>pkotwicz@chromium.org</owner>
  <summary>
    Records the &quot;Tab Creation Rank&quot; for the first background tab which
    was switched to the foreground. The &quot;Tab Creation Rank&quot; is
    relative to other background tabs which were opened from the same URL via
    the context menu. The oldest background tab has a rank of zero.
  </summary>
</histogram>

<histogram name="Tabs.FirstSwitchedToForegroundCreationReverseRank">
  <owner>pkotwicz@chromium.org</owner>
  <summary>
    Records the &quot;Reverse Tab Creation Rank&quot; for the first background
    background tab which was switched to the foreground. The &quot;Reverse Tab
    Creation Rank&quot; is relative to other background tabs which were opened
    from the same URL via the context menu. The newest background tab has a
    &quot;Reverse Tab Creation Rank&quot; of zero.
  </summary>
</histogram>

<histogram name="Tabs.ForegroundTabAgeAtStartup" units="minutes">
  <owner>lliabraa@chromium.org</owner>
  <summary>
    Age (time since the last display in previous sessions) of the foreground tab
    being restored on the browser cold start.
  </summary>
</histogram>

<histogram name="Tabs.iOS_PostRedirectPLT" units="ms">
  <owner>pauljensen@chromium.org</owner>
  <summary>
    Page load time (PLT) for iOS that does not include time spent following
    redirects. On other platforms this is calculated from Navigation Timings but
    on iOS Navigation Timings are not available so we're recreating a
    calculation similar to PLT.PT_RequestToFinish but not including time spent
    following redirects. This metric represents the time between when navigation
    is initiated (prior to DNS, TCP connect, etc but after following redirects)
    until loading ends (i.e. JS onload event). On non-iOS Chrome this is
    (performance.timing.loadEventEnd - performance.timing.redirectEnd). On
    Chrome for iOS we're calculating the time between the creation of the
    top-level URLRequest and when webDidFinishWithURL is called.
  </summary>
</histogram>

<histogram name="Tabs.MaxTabsInADay" units="tabs">
  <owner>sebmarchand@chromium.org</owner>
  <summary>
    The maximum number of tabs that Chrome displays at the same time over the
    course of a day.
  </summary>
</histogram>

<histogram name="Tabs.MaxTabsPerWindowInADay" units="tabs">
  <owner>sebmarchand@chromium.org</owner>
  <summary>
    The maximum number of tabs per window that Chrome displays over the course
    of a day.
  </summary>
</histogram>

<histogram name="Tabs.MaxWindowsInADay" units="tabs">
  <owner>sebmarchand@chromium.org</owner>
  <summary>
    The maximum number of windows existing at the same time over the course of a
    day.
  </summary>
</histogram>

<histogram name="Tabs.NumberOfTabsOnResume" units="tabs">
  <owner>sebmarchand@chromium.org</owner>
  <summary>
    The number of tabs total at resume from sleep/hibernate. This is being
    logged on all desktop platforms.
  </summary>
</histogram>

<histogram name="Tabs.SadTab.CrashCreated" units="tabs">
  <owner>jamescook@chromium.org</owner>
  <summary>
    Cumulative number of times a tab crashed with &quot;Aw, Snap!&quot;,
    recorded once per tab crash event.  For example, a user who crashed 3 tabs
    will record a count in the 1 bin, 2 bin, and 3 bin.  Thus each bin N is the
    number of sessions where users experienced N or more crash events.  The user
    may not have actually seen the sad tab page, as it might have been an
    inactive tab. Compare to Tabs.SadTab.CrashDisplayed.
  </summary>
</histogram>

<histogram name="Tabs.SadTab.CrashDisplayed" units="tabs">
  <owner>jamescook@chromium.org</owner>
  <summary>
    Cumulative number of times a tab crashed with &quot;Aw, Snap!&quot; and the
    user saw the page, recorded once per tab crash event.  For example, a user
    who crashed 3 tabs will record a count in the 1 bin, 2 bin, and 3 bin.  Thus
    each bin N is the number of sessions where users experienced N or more crash
    events.  Compare to Tabs.SadTab.CrashCreated.
  </summary>
</histogram>

<histogram name="Tabs.SadTab.Feedback.Event" enum="SadTabEvent">
  <owner>sdy@chromium.org</owner>
  <summary>
    Counts of events from the style of sad tab which has a feedback button as
    its primary action. Currently, events include being displayed (actually
    visible in a window), and the actions a user can take on the page.
  </summary>
</histogram>

<histogram name="Tabs.SadTab.KillCreated" units="tabs">
  <owner>jamescook@chromium.org</owner>
  <summary>
    Cumulative number of times a tab was killed with a &quot;He's dead,
    Jim!&quot; page, which is usually due to the renderer being killed, recorded
    once per tab kill event.  For example, a user who loses 3 tabs will record a
    count in the 1 bin, 2 bin, and 3 bin.  Thus each bin N is the number of
    sessions where users experienced N or more kill events.  The user may not
    have actually seen the sad tab page, as it might have been an inactive tab.
    Compare to Tabs.SadTab.KillDisplayed. This can happen due to out of memory,
    malformed IPC messages, or a SIGINT/TERM/KILL signal sent by a user.
  </summary>
</histogram>

<histogram name="Tabs.SadTab.KillCreated.OOM" units="tabs">
  <owner>oshima@chromium.org</owner>
  <summary>
    Cumulative number of times a tab was killed with a &quot;He's dead,
    Jim!&quot; page due to the kernel out-of-memory killer, recorded once per
    tab kill event.  For example, a user who loses 3 tabs will record a count in
    the 1 bin, 2 bin, and 3 bin.  Thus each bin N is the number of sessions
    where users experienced N or more kill events.  The user may not have
    actually seen the sad tab page, as it might have been an inactive tab.
    Compare to Tabs.SadTab.KillDisplayed.
  </summary>
</histogram>

<histogram name="Tabs.SadTab.KillDisplayed" units="tabs">
  <owner>jamescook@chromium.org</owner>
  <summary>
    Cumulative number of times a tab was killed with a &quot;He's dead,
    Jim!&quot; page and the user saw the page, recorded once per tab kill event.
    For example, a user who loses 3 tabs will record a count in the 1 bin, 2
    bin, and 3 bin. Thus each bin N is the number of sessions where users
    experienced N or more kill events.  Compare to Tabs.SadTab.CrashCreated.
  </summary>
</histogram>

<histogram name="Tabs.SadTab.KillDisplayed.OOM" units="tabs">
  <owner>oshima@chromium.org</owner>
  <summary>
    Cumulative number of times a tab was killed with a &quot;He's dead,
    Jim!&quot; page due to the kernel out-of-memory killer and the user saw the
    page, recorded once per tab kill event.  For example, a user who loses 3
    tabs will record a count in the 1 bin, 2 bin, and 3 bin. Thus each bin N is
    the number of sessions where users experienced N or more kill events.
    Compare to Tabs.SadTab.CrashCreated.
  </summary>
</histogram>

<histogram name="Tabs.SadTab.OomCreated" units="tabs">
  <owner>wfh@chromium.org</owner>
  <summary>
    Cumulative number of times a tab crashed with &quot;Aw, Snap!&quot;,
    recorded once per tab oom event.  For example, a user who ran out of memory
    in 3 tabs will record a count in the 1 bin, 2 bin, and 3 bin.  Thus each bin
    N is the number of sessions where users experienced N or more oom events.
    The user may not have actually seen the sad tab page, as it might have been
    an inactive tab. Compare to Tabs.SadTab.OomDisplayed.
  </summary>
</histogram>

<histogram name="Tabs.SadTab.OomDisplayed" units="tabs">
  <owner>wfh@chromium.org</owner>
  <summary>
    Cumulative number of times a tab ran out of memory with &quot;Aw,
    Snap!&quot; and the user saw the page, recorded once per tab oom event.  For
    example, a user who ran out of memory in 3 tabs will record a count in the 1
    bin, 2 bin, and 3 bin.  Thus each bin N is the number of sessions where
    users experienced N or more oom events.  Compare to Tabs.SadTab.OomCreated.
  </summary>
</histogram>

<histogram name="Tabs.SadTab.Reload.Event" enum="SadTabEvent">
  <owner>sdy@chromium.org</owner>
  <summary>
    Counts of events from the style of sad tab which has a reload button as its
    primary action. Compare to Tabs.SadTab.Feedback.Event.
  </summary>
</histogram>

<histogram name="Tabs.SadTab.ReloadCount" units="tabs">
  <owner>jamescook@chromium.org</owner>
  <summary>
    The number of times a tab was reloaded because it was killed (usually by the
    kernel OOM killer) and the user clicked on it later, recorded once per
    reload event.  For example, a user who clicks on 3 discarded tabs will
    record a count in the 1 bin, 2 bin, and 3 bin.  Thus each bin N is the
    number of sessions where users experienced N or more reload events.  Compare
    to Tabs.Discard.DiscardCount.
  </summary>
</histogram>

<histogram name="Tabs.ScrubDistance" units="tabs" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The distance a user 3 finger scrubbed to change tabs. Always positive
    (ignores left / right).
  </summary>
</histogram>

<histogram name="Tabs.SpeculativeRestoreApplicability"
    enum="SpeculativeRestoreApplicability">
  <owner>lliabraa@chromium.org</owner>
  <summary>
    Applicability of speculative tab restore, recorded every time a tab is
    switched. This allows to estimate the fraction of tab restores experienced
    on mobile that can be mitigated using speculative restore. Options higher in
    the enum take precedence over the lower ones (i.e. low-memory tablet will be
    accounted as tablet).
  </summary>
</histogram>

<histogram name="Tabs.SpeculativeRestorePredictionAccuracy.SideSwipe"
    enum="SpeculativeRestorePredictionAccuracy">
  <owner>lliabraa@chromium.org</owner>
  <summary>
    Accuracy of the tab switch predictions made when the user begins the side
    swipe gesture.
  </summary>
</histogram>

<histogram name="Tabs.SpeculativeRestorePredictionAccuracy.TabSwitcher"
    enum="SpeculativeRestorePredictionAccuracy">
  <owner>lliabraa@chromium.org</owner>
  <summary>
    Accuracy of the tab switch predictions made when the user enters the tab
    switcher.
  </summary>
</histogram>

<histogram name="Tabs.SpeculativeRestoreTargetStatus"
    enum="SpeculativeRestoreTabStatus">
  <owner>lliabraa@chromium.org</owner>
  <summary>
    Status of a tab recorded when the tab is targeted with speculative restore.
  </summary>
</histogram>

<histogram name="Tabs.SpeculativeRestoreTimeAhead.SideSwipe" units="ms">
  <owner>lliabraa@chromium.org</owner>
  <summary>
    Time between starting the speculative load and actual tab switch for correct
    speculative load predictions made when the user begins the side swipe
    gesture.
  </summary>
</histogram>

<histogram name="Tabs.SpeculativeRestoreTimeAhead.TabSwitcher" units="ms">
  <owner>lliabraa@chromium.org</owner>
  <summary>
    Time between starting the speculative load and actual tab switch for correct
    speculative load predictions made when the user enters the tab switcher.
  </summary>
</histogram>

<histogram name="Tabs.StateTransfer.NumberOfOtherTabsActivatedBeforeMadeActive"
    units="tabs">
  <owner>kouhei@chromium.org</owner>
  <owner>tzik@chromium.org</owner>
  <summary>
    Recorded once per tab activation. The number of tabs that were activated
    while the tab was inactive.
  </summary>
  <details>
    This metric is to be removed after M46 hits stable. We don't expect this
    metric to change over release, so we will remove this once we have the
    numbers from stable.
  </details>
</histogram>

<histogram name="Tabs.StateTransfer.TabDistanceInactiveToActive" units="tabs">
  <owner>kouhei@chromium.org</owner>
  <owner>tzik@chromium.org</owner>
  <summary>
    Number of tabs between the previously active tab and the new active tab.
  </summary>
  <details>
    This metric is to be removed after M46 hits stable. We don't expect this
    metric to change over release, so we will remove this once we have the
    numbers from stable.
  </details>
</histogram>

<histogram name="Tabs.StateTransfer.Target" enum="TabStripState">
  <owner>kouhei@chromium.org</owner>
  <owner>tzik@chromium.org</owner>
  <summary>
    The state to which a tab transitioned. Recorded when a tab transitions from
    the state in the histogram name to a new state.
  </summary>
  <details>
    kouhei@ and tzik@ will remove some variation of these once M46 hits stable.
  </details>
</histogram>

<histogram name="Tabs.StateTransfer.Time" units="ms">
  <obsolete>
    Deprecated as of 4/2017.
  </obsolete>
  <owner>kouhei@chromium.org</owner>
  <owner>tzik@chromium.org</owner>
  <summary>
    Tabs.StateTransfer.TimeA_B measures the time a tab was in state A before it
    transferred to state B.
  </summary>
</histogram>

<histogram name="Tabs.SwitchFromCloseLatency" units="ms">
  <owner>simonb@chromium.org</owner>
  <summary>
    Time between the event that closes a tab and the start of rendering.
  </summary>
</histogram>

<histogram name="Tabs.SwitchFromExitLatency" units="ms">
  <owner>simonb@chromium.org</owner>
  <summary>
    Time between the event that exits an app and the start of rendering.
  </summary>
</histogram>

<histogram name="Tabs.SwitchFromNewLatency" units="ms">
  <owner>simonb@chromium.org</owner>
  <summary>
    Time between the event that creates a tab and the start of rendering.
  </summary>
</histogram>

<histogram name="Tabs.SwitchFromUserLatency" units="ms">
  <owner>simonb@chromium.org</owner>
  <summary>
    Time between the event that selects a tab and the start of rendering.
  </summary>
</histogram>

<histogram name="Tabs.TabCountActiveWindow" units="tabs">
  <owner>bruthig@chromium.org</owner>
  <owner>tdanderson@chromium.org</owner>
  <summary>
    The number of tabs open in the active window when a load completes.
  </summary>
</histogram>

<histogram name="Tabs.TabCountPerLoad" units="tabs">
  <owner>bruthig@chromium.org</owner>
  <owner>tdanderson@chromium.org</owner>
  <summary>
    The number of tabs open in all browsers (counting app-mode windows) when a
    load completes.
  </summary>
  <details>
    This is basically the average number of tabs over time.

    See also MPArch.RPHCountPerLoad for the number of processes used by these
    tabs.
  </details>
</histogram>

<histogram name="Tabs.TabCountPerWindow" units="tabs">
  <owner>bruthig@chromium.org</owner>
  <owner>tdanderson@chromium.org</owner>
  <summary>
    The number of tabs open per window (counting app-mode windows) when a load
    completes.
  </summary>
  <details>
    This value will be recorded multiple times per load if more than one window
    is open.
  </details>
</histogram>

<histogram name="Tabs.TabOffsetOfSwitch">
  <owner>rlanday@chromium.org</owner>
  <summary>
    How many tabs a user moved forward or backward in the Android tab switcher.
  </summary>
  <details>
    Logged by the Android tab switcher when a user switches tabs (other than by
    opening a new tab). If the user switches to an earlier tab in the stack, we
    log a positive offset value indicating how many tabs back they moved. If the
    user switches to a later tab, we log a negative offset value. If the user
    stays on the same tab, we log 0. If the user switches to a tab in a
    different stack (i.e. they switch from normal to incognito or vice-versa),
    we don't log a value.
  </details>
</histogram>

<histogram name="Tabs.TabsStatsDailyEventInterval"
    enum="DailyEventIntervalType">
  <owner>sebmarchand@chromium.org</owner>
  <summary>
    Counts how often tab stats daily interval events were fired.
  </summary>
</histogram>

<histogram name="Tabs.Tasks.AverageTabGroupSize" units="tabs">
  <owner>yusufo@chromium.org</owner>
  <owner>wychen@chromium.org</owner>
  <summary>
    The average tab group size, average number of tabs in a group, on a cold
    start after all tabs are restored.
  </summary>
</histogram>

<histogram name="Tabs.Tasks.HubAndSpokeNavigationUsage" units="spokes"
    expires_after="2019-01-01">
<!-- Name completed by histogram_suffixes name="HubAndSpokeNavigationUsageType" -->

  <owner>yusufo@chromium.org</owner>
  <owner>wychen@chromium.org</owner>
  <summary>
    The cumulative number of &quot;spokes&quot; from any &quot;hub&quot; page in
    every tab. A &quot;hub&quot; is any page that the user navigates away from,
    and a &quot;spoke&quot; is a page that's navigated to. The
    &quot;spokes&quot; count is incremented and recorded each time the user
    navigates back to a &quot;hub&quot; page via navigation back button and then
    navigates to a new &quot;spoke&quot;.
  </summary>
</histogram>

<histogram name="Tabs.Tasks.TabGroupCount" units="groups">
  <owner>yusufo@chromium.org</owner>
  <owner>wychen@chromium.org</owner>
  <summary>
    The number of tab groups on a cold start after all tabs are restored.
  </summary>
</histogram>

<histogram name="Tabs.Tasks.TabGroupDensity" units="%">
  <owner>yusufo@chromium.org</owner>
  <owner>wychen@chromium.org</owner>
  <summary>
    The tab group density, the ratio of the number of tab groups to the total
    number of tabs, on a cold start after all tabs are restored.
  </summary>
</histogram>

<histogram name="Tabs.Tasks.TabsInGroupCount" units="tabs">
  <owner>yusufo@chromium.org</owner>
  <owner>wychen@chromium.org</owner>
  <summary>
    The number of tabs is belonging to a tab group on a cold start after all
    tabs are restored.
  </summary>
</histogram>

<histogram name="Tabs.Tasks.TabsInGroupRatio" units="%">
  <owner>yusufo@chromium.org</owner>
  <owner>wychen@chromium.org</owner>
  <summary>
    The ratio of all tabs in tab groups to the total number of tabs on a cold
    start after all tabs are restored.
  </summary>
</histogram>

<histogram name="Tabs.TimeSinceLastInteraction" units="ms">
  <owner>alexmos@chromium.org</owner>
  <owner>dcheng@chromium.org</owner>
  <summary>
    Reports the delta between the last user interaction time with a WebContents
    and the time browser code wants to verify a recent user interaction with
    that WebContents. Used to tune the threshhold for timing out a user
    interaction.
  </summary>
</histogram>

<histogram base="true" name="Tabs.UnusedAndClosedInInterval.Count" units="tabs">
  <owner>sebmarchand@chromium.org</owner>
  <summary>
    The number of tabs that haven't been interacted with, visible or audible
    over a given interval time, but which no longer exist at all at the end of
    this interval.
  </summary>
</histogram>

<histogram base="true" name="Tabs.UnusedInInterval.Count" units="tabs">
  <owner>sebmarchand@chromium.org</owner>
  <summary>
    The number of tabs that haven't been interacted with, visible or audible or
    visible during a given interval of time and still exist at the end of this
    interval.
  </summary>
</histogram>

<histogram base="true" name="Tabs.UsedAndClosedInInterval.Count" units="tabs">
  <owner>sebmarchand@chromium.org</owner>
  <summary>
    The number of tabs that have been interacted with, visible or audible over a
    given interval of time, but which no longer exist at all at the end of this
    interval.
  </summary>
</histogram>

<histogram base="true" name="Tabs.UsedInInterval.Count" units="tabs">
  <owner>sebmarchand@chromium.org</owner>
  <summary>
    The number of tabs that have been interacted with, visible or audible during
    a given interval of time, includes tabs that don't exist at the end of this
    interval.
  </summary>
</histogram>

<histogram name="TabsApi.RequestedWindowState" enum="RequestedWindowState">
  <owner>afakhry@chromium.org</owner>
  <summary>
    The requested window creation state from the tabs extensions API when it's
    used to create a new window or update the state of an existing one.
  </summary>
</histogram>

<histogram name="TaskQueueManager.ActiveQueuesCount">
  <owner>altimin@chromium.org</owner>
  <owner>farahcharab@chromium.org</owner>
  <summary>
    Used to track the number of active task queues in the task queue manager.
    Reported every time a task is selected for execution.
  </summary>
</histogram>

<histogram name="TaskQueueSelector.TaskServicedPerSelectorLogic"
    enum="TaskQueueSelectorLogic">
  <owner>altimin@chromium.org</owner>
  <owner>farahcharab@chromium.org</owner>
  <summary>
    Used to track the number of tasks serviced due to starvation versus the
    number of tasks serviced due to priroity. Incremented whenever a task queue
    is selected to service.
  </summary>
</histogram>

<histogram name="TaskScheduler.BlockShutdownTasksPostedDuringShutdown"
    units="tasks">
  <owner>fdoray@chromium.org</owner>
  <summary>
    Number of BLOCK_SHUTDOWN tasks that were posted to a base::TaskScheduler
    after its Shutdown() method was called but before it returned.
  </summary>
</histogram>

<histogram base="true" name="TaskScheduler.DetachDuration" units="ms">
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Time elapsed between when the thread managed by a SchedulerWorker is
    detached and when the main function of a new thread managed by the same
    SchedulerWorker is entered (following a wake up). Recorded each time that a
    thread is recreated for a given SchedulerWorker.
  </summary>
</histogram>

<histogram base="true" name="TaskScheduler.HeartbeatLatencyMicroseconds"
    units="microseconds">
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Latency of dummy &quot;heartbeat&quot; tasks posted with specific traits
    (see suffix). The heartbeat recording avoids dependencies between this
    report and other work in the system. See
    TaskScheduler.TaskLatencyMicroseconds.* for a metric that is closer to the
    real workload.

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

<histogram base="true" name="TaskScheduler.NumTasksBeforeDetach" units="tasks">
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Number of tasks executed by a SchedulerWorker before it detached. Recorded
    when a SchedulerWorker detaches.
  </summary>
</histogram>

<histogram base="true" name="TaskScheduler.NumTasksBetweenWaits" units="tasks">
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Number of tasks executed by a SchedulerWorker between two waits on its
    WaitableEvent. This should be maximized without affecting perceived browser
    performance.
  </summary>
</histogram>

<histogram base="true" name="TaskScheduler.TaskLatency" units="ms">
  <obsolete>
    Deprecated 4/2017. Units changed from milliseconds to microseconds.
  </obsolete>
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Time elapsed between when a task is posted and when it starts to run.
    Recorded for each task that runs inside the TaskScheduler. This metric is
    useful to determine true latency of the average task in the average runtime
    scenario. Its total count can also be used as a proxy for the number of
    tasks posted to a given category. On the other hand, a fallout of this
    metric is that timing every task means each report is dependent on the many
    things that can cause an individual task to be delayed (e.g. tasks on a
    single bogged down sequence will be reported with high latency even if not
    stalling the scheduler itself). See
    TaskScheduler.HeartbeatLatencyMicroseconds.* for a metric that is
    independent of such factors.
  </summary>
</histogram>

<histogram base="true" name="TaskScheduler.TaskLatencyMicroseconds"
    units="microseconds">
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <owner>robliao@chromium.org</owner>
  <summary>
    Time elapsed between when a task is posted and when it starts to run.
    Recorded for each task that runs inside the TaskScheduler.
  </summary>
</histogram>

<histogram name="TextToSpeech.Event" enum="TextToSpeechEvent">
  <owner>dmazzoni@chromium.org</owner>
  <summary>
    Events fired by the text-to-speech engine when speaking an utterance.
  </summary>
</histogram>

<histogram name="TextToSpeech.Settings.DefaultVoicePicked"
    enum="TextToSpeechVoiceIdHashes">
  <owner>katie@chromium.org</owner>
  <owner>dtseng@chromium.org</owner>
  <owner>dmazzoni@chromium.org</owner>
  <summary>
    The user picked a default voice of the specified voice ID, which is hashed
    from a JSON string of the voice name and extension ID.
  </summary>
</histogram>

<histogram name="TextToSpeech.Settings.PreviewVoiceClicked"
    enum="TextToSpeechVoiceIdHashes">
  <owner>katie@chromium.org</owner>
  <owner>dtseng@chromium.org</owner>
  <owner>dmazzoni@chromium.org</owner>
  <summary>
    When the user requests a preview of a text-to-speech voice, records which
    voice was previewed.
  </summary>
</histogram>

<histogram name="TextToSpeech.Utterance.FromExtensionAPI"
    enum="TextToSpeechFromExtensionAPI">
  <owner>dmazzoni@chromium.org</owner>
  <summary>
    Indicates if an utterance spoken via synthesized text-to-speech was
    triggered by the Chrome TTS extension API or the web speech API.
  </summary>
</histogram>

<histogram name="TextToSpeech.Utterance.HasGender" enum="TextToSpeechHasGender">
  <owner>dmazzoni@chromium.org</owner>
  <summary>
    True if an utterance spoken via synthesized text-to-speech requested a
    specific gender.
  </summary>
</histogram>

<histogram name="TextToSpeech.Utterance.HasLang" enum="TextToSpeechHasLang">
  <owner>dmazzoni@chromium.org</owner>
  <summary>
    True if an utterance spoken via synthesized text-to-speech specified a
    language code.
  </summary>
</histogram>

<histogram name="TextToSpeech.Utterance.HasPitch" enum="TextToSpeechHasPitch">
  <owner>dmazzoni@chromium.org</owner>
  <summary>
    True if an utterance spoken via synthesized text-to-speech requested a
    specific pitch other than the default.
  </summary>
</histogram>

<histogram name="TextToSpeech.Utterance.HasRate" enum="TextToSpeechHasRate">
  <owner>dmazzoni@chromium.org</owner>
  <summary>
    True if an utterance spoken via synthesized text-to-speech requested a
    specific speech rate other than the default.
  </summary>
</histogram>

<histogram name="TextToSpeech.Utterance.HasVoiceName"
    enum="TextToSpeechHasVoiceName">
  <owner>dmazzoni@chromium.org</owner>
  <summary>
    True if an utterance spoken via synthesized text-to-speech requested a
    specific voice by name.
  </summary>
</histogram>

<histogram name="TextToSpeech.Utterance.HasVolume" enum="TextToSpeechHasVolume">
  <owner>dmazzoni@chromium.org</owner>
  <summary>
    True if an utterance spoken via synthesized text-to-speech requested a
    specific volume other than the default.
  </summary>
</histogram>

<histogram name="TextToSpeech.Utterance.Native" enum="TextToSpeechNative">
  <owner>dmazzoni@chromium.org</owner>
  <summary>
    True if an utterance is spoken with native speech provided by the operating
    system, otherwise it's spoken via a Chrome extension that implements
    text-to-speech support.
  </summary>
</histogram>

<histogram name="TextToSpeech.Utterance.TextLength" units="bytes">
  <owner>dmazzoni@chromium.org</owner>
  <summary>
    The length of an utterance to be spoken via synthesized text-to-speech.
  </summary>
</histogram>

<histogram name="TextToSpeechEngine.ParseVoice.HasGender"
    enum="TextToSpeechHasGender" expires_after="M70">
  <owner>katie@chromium.org</owner>
  <owner>dtseng@chromium.org</owner>
  <owner>dmazzoni@chromium.org</owner>
  <summary>
    True if a voice parsed from a ttsEngine extension manifest has a specific
    gender. This is recorded each time a TTS extension is parsed, which may
    occur multiple times per extension, in tts_engine_manifest_handler:
    TtsVoices::Parse.
  </summary>
</histogram>

<histogram name="TextToSpeechEngine.UpdateVoice.HasGender"
    enum="TextToSpeechHasGender" expires_after="M70">
  <owner>katie@chromium.org</owner>
  <owner>dtseng@chromium.org</owner>
  <owner>dmazzoni@chromium.org</owner>
  <summary>
    True if a voice specified in chrome.ttsEngine.updateVoices by a ttsEngine
    extension has a specific gender.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.Certificates.Microsoft" units="certificates">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The total number of certificates for modules loaded (or potentially loaded)
    into the browser process that are signed by Microsoft. A catalog counts as a
    single certificate, and may refer to many modules. Measured shortly after
    startup. Windows only.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.Certificates.Total" units="certificates">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The total number of certificates for modules loaded (or potentially loaded)
    into the browser process. A catalog counts as a single certificate, and may
    refer to many modules. Measured shortly after startup. Windows only.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.GetDriveLetterPathFound" enum="BooleanFound">
  <owner>pmonette@chromium.org</owner>
  <summary>
    Records whether an equivalent driver letter path was found for a device
    path.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.InputMethodEditorsCount" units="counts">
  <owner>pmonette@chromium.org</owner>
  <summary>
    The number of registered input method editors found on the user's machine.
    This is emitted shortly after startup when the IME enumeration takes place.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.InstalledApplications.GetDataTime"
    units="ms">
  <owner>pmonette@chromium.org</owner>
  <summary>
    Records the time it took to gather the list of installed third-party
    programs and their install location or components.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.InstalledApplications.GotUserSidString"
    enum="BooleanSuccess">
  <owner>pmonette@chromium.org</owner>
  <summary>
    Records whether retrieving the current user SID was successful.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.InstalledPrograms.DataSize" units="KB">
  <obsolete>
    Deprecated 12/2017.
  </obsolete>
  <owner>pmonette@chromium.org</owner>
  <summary>
    Records the size of the in-memory representation of the installed
    third-party programs on the user's machine.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.InstalledPrograms.GetDataTime" units="ms">
  <obsolete>
    Deprecated 07/2018.
  </obsolete>
  <owner>pmonette@chromium.org</owner>
  <summary>
    Records the time it took to gather the list of installed third-party
    programs and their install location or components.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.Modules.Loaded" units="modules">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The total number of third-party modules (neither Microsoft nor Google) that
    are loaded in the browser process. Measured shortly after startup. Windows
    only.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.Modules.NotLoaded" units="modules">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The total number of third-party modules (neither Microsoft nor Google) that
    are not yet loaded in the browser process, but may potentially be (shell
    extensions, for example). Measured shortly after startup. Windows only.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.Modules.Signed" units="modules">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The total number of signed modules loaded (or potentially loaded) into the
    browser process. Measured shortly after startup. Windows only.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.Modules.Signed.Catalog" units="modules">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The total number of modules loaded (or potentially loaded) into the browser
    process that are signed via a catalog. Measured shortly after startup.
    Windows only.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.Modules.Signed.Microsoft" units="modules">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The total number of modules loaded (or potentially loaded) into the browser
    process that are signed by Microsoft. Measured shortly after startup.
    Windows only.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.Modules.Total" units="modules">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The total number of modules loaded (or potentially loaded) into the browser
    process. Measured shortly after startup. Windows only.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.ShellExtensionsCount" units="counts">
  <owner>pmonette@chromium.org</owner>
  <summary>
    The number of registered shell extensions found on the user's machine. This
    is emitted shortly after startup when the shell extensions enumeration takes
    place.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.TimeDateStampObtained" enum="BooleanSuccess">
  <owner>pmonette@chromium.org</owner>
  <summary>
    Indicates whether the TimeDateStamp for a loaded module was successfully
    obtained.
  </summary>
</histogram>

<histogram name="ThirdPartyModules.Uninstallable" enum="BooleanUninstallable">
  <owner>pmonette@chromium.org</owner>
  <summary>
    Records whether or not a loaded third party module could be uninstalled
    using the Windows Apps &amp; Features page.
  </summary>
</histogram>

<histogram name="ThreadWatcher.ResponseTime" units="ms">
  <owner>rch@chromium.org</owner>
  <summary>
    The time it takes indicated thread to respond with a pong message for a ping
    message from WatchDog thread.
  </summary>
</histogram>

<histogram name="ThreadWatcher.ResponsiveThreads">
  <owner>rch@chromium.org</owner>
  <summary>
    This is the total number of watched threads that are responding when we got
    no response from the watched thread.
  </summary>
</histogram>

<histogram name="ThreadWatcher.Unresponsive" units="ms">
  <owner>rch@chromium.org</owner>
  <summary>
    This is the total unresponsive time since last pong message for the
    indicated thread when we got no response from the watched thread.
  </summary>
</histogram>

<histogram name="ThreadWatcher.UnresponsiveThreads">
  <owner>rch@chromium.org</owner>
  <summary>
    This is the total number of watched threads that are not responding when we
    got no response from the watched thread.
  </summary>
</histogram>

<histogram name="Thumbnails.AddedToTopSites" enum="ThumbnailTopSitesEvent">
  <owner>treib@chromium.org</owner>
  <summary>
    A page thumbnail (for use on the New Tab page) was added to TopSites.
  </summary>
</histogram>

<histogram name="Thumbnails.CaptureOutcome" enum="ThumbnailCaptureOutcome">
  <owner>treib@chromium.org</owner>
  <summary>
    The result of trying to capture a thumbnail of the current page.
  </summary>
</histogram>

<histogram name="Thumbnails.CopyFromSurfaceTime" units="ms">
  <owner>treib@chromium.org</owner>
  <summary>
    While taking a screenshot of the current tab for use as a thumbnail on the
    New Tab page, the time it took to copy the tab's contents into a bitmap.
  </summary>
</histogram>

<histogram name="Thumbnails.Gradient.ImageDetectionTime" units="ms">
  <owner>peconn@chromium.org</owner>
  <summary>
    The time it takes to detect whether a thumbnail requires a gradient overlay.
    This is run when thumbnails are downloaded for content suggestions, as they
    load and the result is cached for future use. It is Android specific.
  </summary>
</histogram>

<histogram name="Thumbnails.Gradient.ImageRequiresGradient" enum="Boolean">
  <owner>peconn@chromium.org</owner>
  <summary>
    Whether a thumbnail used for a suggestions image requires a gradient to be
    overlaid to not fade into the background. It applies to the thumbnails used
    for content suggestions and is Android specific.
  </summary>
</histogram>

<histogram name="Thumbnails.ProcessBitmapTime" units="ms">
  <owner>treib@chromium.org</owner>
  <summary>
    While taking a screenshot of the current tab for use as a thumbnail on the
    New Tab page, the time it took to post-process the captured bitmap.
  </summary>
</histogram>

<histogram name="TileManager.ExceededMemoryBudget" enum="TileMemoryBudget">
  <owner>reveman@chromium.org</owner>
  <owner>vmpstr@chromium.org</owner>
  <summary>
    Measures whether the tile manager exceeded the hard GPU memory budget
    (OOMed). Recorded each time the tile manager assigns GPU memory to tiles.
  </summary>
</histogram>

<histogram name="TileManager.TilesGPUMemoryUsage" units="KB">
  <owner>xidachen@chromium.org</owner>
  <owner>ericrk@chromium.org</owner>
  <summary>
    The amount of GPU memory, in kilobytes. Recorded on devices with less than
    or equal to 512MB of memory and when tile manager had sufficient memory to
    schedule all visible tiles.
  </summary>
</histogram>

<histogram name="TimeZone.TimeZoneRequest.Event" enum="TimeZoneRequestEvent"
    expires_after="2018-08-30">
  <summary>Events in TimeZoneRequest.</summary>
</histogram>

<histogram name="TimeZone.TimeZoneRequest.ResponseCode" enum="HttpResponseCode"
    expires_after="2018-08-30">
  <summary>Http response codes in TimeZoneRequest.</summary>
</histogram>

<histogram name="TimeZone.TimeZoneRequest.ResponseFailureTime" units="ms"
    expires_after="2018-08-30">
  <summary>
    The time elapsed between the sending of the first API request and the time
    the final (failed) response was recorded. Includes all retries.
  </summary>
</histogram>

<histogram name="TimeZone.TimeZoneRequest.ResponseSuccessTime" units="ms"
    expires_after="2018-08-30">
  <summary>
    The time elapsed between the sending of the first API request and the time
    the final (successfull) response was recorded. Includes all retries.
  </summary>
</histogram>

<histogram name="TimeZone.TimeZoneRequest.Result" enum="TimeZoneRequestResult"
    expires_after="2018-08-30">
  <summary>Result of TimeZoneRequest.</summary>
</histogram>

<histogram name="TimeZone.TimeZoneRequest.Retries" expires_after="2018-08-30">
  <summary>Number of retries until the final response was recorded.</summary>
</histogram>

<histogram name="Toolbar.ActionsModel.ComponentActionsCount">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of component action icons the Browser Actions Container knows
    about (visible or in the overflow bucket). Does not count icons that have
    been permanently hidden by the user. Measured once per startup per
    (non-incognito) profile.
  </summary>
</histogram>

<histogram name="Toolbar.ActionsModel.OverallActionsCount">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The total number of action icons the Browser Actions Container knows about
    (visible or in the overflow bucket). Does not count icons that have been
    permanently hidden by the user. Measured once per startup per
    (non-incognito) profile.
  </summary>
</histogram>

<histogram name="Toolbar.ActionsModel.ToolbarActionsVisible">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of visible toolbar icons in the Browser Actions Container
    (visible as in number of icons not in the overflow bucket). 0 means all
    icons are in the overflow bucket. MAX_INT means the toolbar is always
    showing all icons. Measured once per startup per (non-incognito) profile but
    only for those profiles that have one or more browser actions showing in the
    toolbar.
  </summary>
</histogram>

<histogram name="Toolbar.AppMenuTimeToAction" units="ms">
  <owner>rdevlin.cronin@chromium.org</owner>
  <summary>
    The number of millseconds between when the user opens the app menu and when
    the app menu is closed. Logged once per app menu run when the menu closes.
    Not recorded for menu runs that are initiated by a drag-and-drop sequence.
    Note that the code paths for Views-platforms vs Mac are different, so cross-
    platform comparison may not always be reasonable.
  </summary>
</histogram>

<histogram name="Toolbar.Menu.NewIncognitoTabPresentationDuration" units="ms">
  <owner>peterlaurens@chromium.org</owner>
  <summary>
    The number of millseconds between the user requesting a new incognito tab,
    e.g. by tapping the New Incognito Tab entry in the main tools menu, and it
    completing its animation on screen.
  </summary>
</histogram>

<histogram name="Toolbar.Menu.NewTabPresentationDuration" units="ms">
  <owner>peterlaurens@chromium.org</owner>
  <summary>
    The number of millseconds between the user requesting a new tab, e.g. by
    tapping the New Tab entry in the main tools menu, and it completing its
    animation on screen.
  </summary>
</histogram>

<histogram name="Toolbar.ShowToolsMenuResponsiveness" units="ms">
  <owner>peterlaurens@chromium.org</owner>
  <summary>
    Number of milliseconds passed between the event that triggers the
    presentation of the tools menu (the main menu of actions accessed from the
    toolbar), and the actual appearance of the menu on screen. Includes the
    animation duration.
  </summary>
</histogram>

<histogram name="Toolbar.TabSwitcher.NewIncognitoTabPresentationDuration"
    units="ms">
  <owner>peterlaurens@chromium.org</owner>
  <summary>
    The number of millseconds between the user requesting a new incognito tab,
    from within the tab switcher, e.g. by tapping the New Tab button from the
    tab switcher UI, and it completing its animation on screen.
  </summary>
</histogram>

<histogram name="Toolbar.TabSwitcher.NewTabPresentationDuration" units="ms">
  <owner>peterlaurens@chromium.org</owner>
  <summary>
    The number of millseconds between the user requesting a new tab, from within
    the tab switcher UI, e.g. by tapping the New Tab button from the tab
    switcher UI, and it completing its animation on screen.
  </summary>
</histogram>

<histogram name="TopSites.NumberOfApplyBlacklist" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>The number of times TopSitesImpl::ApplyBlacklist is called.</summary>
</histogram>

<histogram name="TopSites.NumberOfBlacklistedItems" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of items in the user Most Visited blacklist every time
    TopSitesImpl::ApplyBlacklist is called.
  </summary>
</histogram>

<histogram name="TouchAction.EffectiveTouchAction" enum="TouchActions">
  <owner>hayleyferr@chromium.org</owner>
  <owner>xidachen@chromium.org</owner>
  <summary>
    Tracks how often each touch action is allowed (AKA the frequency of each
    effective touch action) at the end of each touch sequence.
  </summary>
</histogram>

<histogram name="TouchAction.EquivalentEffectiveAndWhiteListed"
    enum="EquivalentEffectiveAndWhiteListed">
  <owner>hayleyferr@chromium.org</owner>
  <owner>xidachen@chromium.org</owner>
  <summary>
    Tracks how often the effective touch action computed by blink is or is not
    equivalent to the whitelisted touch action computed by the compositor at the
    end of each touch sequence.
  </summary>
</histogram>

<histogram name="TouchAction.GestureEventFiltered"
    enum="TouchGestureEventFiltered">
  <owner>hayleyferr@chromium.org</owner>
  <owner>xidachen@chromium.org</owner>
  <summary>
    Tracks how often a gesture event is or is not dropped due to the current
    allowed touch action state not matching the gesture event.
  </summary>
</histogram>

<histogram name="TouchBar.Default.Metrics" enum="DefaultTouchBarActions">
  <owner>spqchan@chromium.org</owner>
  <summary>Tracks the usage of the default touch bar buttons.</summary>
</histogram>

<histogram name="Touchpad.Device" enum="TouchpadDeviceState">
  <owner>pthammaiah@google.com</owner>
  <summary>Tracks touchpad device state.</summary>
</histogram>

<histogram name="Touchpad.Metrics" enum="TouchpadProblemType">
  <obsolete>
    Deprecated 8/2017.
  </obsolete>
  <owner>pthammaiah@google.com</owner>
  <summary>
    Tracks unusual CrOS touchpad operational states (e.g. running into the noisy
    ground issue). This is sampled at every touchpad event.
  </summary>
</histogram>

<histogram name="Touchpad.NaturalScroll.Changed" enum="BooleanEnabled">
  <owner>pthammaiah@google.com</owner>
  <summary>Tracks touchpad natural scroll setting changes by the user.</summary>
</histogram>

<histogram name="Touchpad.NaturalScroll.Started" enum="BooleanEnabled">
  <owner>pthammaiah@google.com</owner>
  <summary>Tracks touchpad natural scroll setting on startup.</summary>
</histogram>

<histogram name="Touchpad.PointerSensitivity.Changed" enum="PointerSensitivity">
  <owner>pthammaiah@google.com</owner>
  <summary>
    Tracks touchpad sensitivity setting changes by the user. This replaces the
    old Touchpad.Sensitivity.Changed metric.
  </summary>
</histogram>

<histogram name="Touchpad.PointerSensitivity.Started" enum="PointerSensitivity">
  <owner>pthammaiah@google.com</owner>
  <summary>
    Tracks touchpad sensitivity setting on startup. This replaces the old
    Touchpad.Sensitivity.Started metric.
  </summary>
</histogram>

<histogram name="Touchpad.Sensitivity.Changed" enum="PointerSensitivity">
  <obsolete>
    Deprecated as of 6/2013, replaced by Touchpad.PointerSensitivity.Changed.
  </obsolete>
  <owner>pthammaiah@google.com</owner>
  <summary>Tracks touchpad sensitivity setting changes by the user.</summary>
</histogram>

<histogram name="Touchpad.Sensitivity.Started" enum="PointerSensitivity">
  <obsolete>
    Deprecated as of 6/2013, replaced by Touchpad.PointerSensitivity.Started.
  </obsolete>
  <owner>pthammaiah@google.com</owner>
  <summary>Tracks touchpad sensitivity setting on startup.</summary>
</histogram>

<histogram name="Touchpad.TapDragging.Changed" enum="BooleanEnabled">
  <owner>pthammaiah@google.com</owner>
  <summary>Tracks touchpad TapDragging setting changes by the user.</summary>
</histogram>

<histogram name="Touchpad.TapDragging.Started" enum="BooleanEnabled">
  <owner>pthammaiah@google.com</owner>
  <summary>Tracks touchpad TapDragging setting on startup.</summary>
</histogram>

<histogram name="Touchpad.TapToClick.Changed" enum="BooleanEnabled">
  <owner>pthammaiah@google.com</owner>
  <summary>Tracks touchpad TapToClick setting changes by the user.</summary>
</histogram>

<histogram name="Touchpad.TapToClick.Started" enum="BooleanEnabled">
  <owner>pthammaiah@google.com</owner>
  <summary>Tracks touchpad TapToClick setting on startup.</summary>
</histogram>

<histogram name="Touchpad.ThreeFingerSwipe.Changed" enum="BooleanEnabled">
  <obsolete>
    Deprecated as of 7/2013.
  </obsolete>
  <owner>pthammaiah@google.com</owner>
</histogram>

<histogram name="Touchpad.ThreeFingerSwipe.Started" enum="BooleanEnabled">
  <obsolete>
    Deprecated as of 7/2013.
  </obsolete>
  <owner>pthammaiah@google.com</owner>
</histogram>

<histogram name="TouchScreen.MissedTOUCHEVENTF_UP" enum="BooleanHit">
  <owner>input-dev@chromium.org</owner>
  <summary>
    The touch device driver failed to send a TOUCHEVENTF_UP, and chromium
    generated a simulated event to maintain consistency/correctness.

    This workaround will be removed once usage drops off. See
    https://crbug.com/811273 for details.
  </summary>
</histogram>

<histogram name="Touchscreen.TapDisambiguation" enum="TapDisambiguation">
  <owner>aelias@chromium.org</owner>
  <summary>
    How the user interacted with the tap disambiguation feature on Android.
  </summary>
</histogram>

<histogram name="Touchscreen.TouchEventsEnabled"
    enum="TouchEventFeatureDetectionState">
  <owner>tdresser@chromium.org</owner>
  <summary>
    Tracks whether Touch Event Feature Detection is enabled. This is based on
    the touch events enabled flag and the presence of a touchscreen.

    Team: input-dev@chromium.org.
  </summary>
  <details>
    NOTE: This metric was incorrectly recorded on Chrome OS for versions 42
    through 45, see http://crbug.com/499476 for more details. As of
    http://crbug.com/644318, we changed the internal name to
    TouchEventFeatureDetection, but we still keep the old histogram name here to
    keep consistensy.
  </details>
</histogram>

<histogram name="TPM.EarlyResetDuringCommand" units="count">
  <owner>semenzato@google.com</owner>
  <summary>
    Reported at boot if the previous boot session was interrupted in the middle
    of a TPM command during the first 30 seconds of uptime.
  </summary>
</histogram>

<histogram name="Tracing.Background.FinalizingTraceSizeInKB" units="KB">
  <owner>oysteine@chromium.org</owner>
  <summary>
    The size, in kilobytes, of a finalized trace ready to be uploaded.
  </summary>
</histogram>

<histogram name="Tracing.Background.ScenarioState"
    enum="BackgroundTracingState">
  <owner>oysteine@chromium.org</owner>
  <summary>
    Records state of the Background Tracing system, from when scenarios are
    attempted to be activated until they're completed (successfully or failed)
  </summary>
</histogram>

<histogram name="TrackedObjects.GetRetiredOrCreateThreadData" units="ms">
  <obsolete>
    Deprecated as of 09/2017. Code measured by this histogram no longer exists.
  </obsolete>
  <owner>fdoray@chromium.org</owner>
  <summary>
    Time spent in base::ThreadData::GetRetiredOrCreateThreadData(). This method
    is called at most once per thread, when its name is set, when it posts a
    task or when it runs a task (whichever comes first).
  </summary>
</histogram>

<histogram name="TrafficStatsAmortizer.AmortizationDelay" units="ms">
  <obsolete>
    Deprecated 2018/07.
  </obsolete>
  <owner>sclittle@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The amount of time spent waiting to perform an amortization run. This is
    logged at the end of each amortization run, before passing any DataUse
    objects to their respective callbacks.
  </summary>
</histogram>

<histogram name="TrafficStatsAmortizer.BufferSizeOnFlush" units="count">
  <obsolete>
    Deprecated 2018/07.
  </obsolete>
  <owner>sclittle@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The number of DataUse objects processed in an amortization run.
  </summary>
</histogram>

<histogram name="TrafficStatsAmortizer.ConcurrentTabs" units="count">
  <obsolete>
    Deprecated 2018/07.
  </obsolete>
  <owner>sclittle@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The number of unique tabs seen across all DataUse objects buffered for a
    single amortization run by the TrafficStatsAmortizer. This is recorded even
    if TrafficStats byte counts are unavailable, but not recorded if no DataUse
    objects have been buffered.
  </summary>
</histogram>

<histogram name="TrafficStatsAmortizer.PostAmortizationRunDataUseBytes"
    units="bytes">
  <obsolete>
    Deprecated 2018/07.
  </obsolete>
  <owner>sclittle@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The total bytes after performing amortization across all DataUse objects
    buffered for a single amortization run by the TrafficStatsAmortizer. This is
    recorded even if TrafficStats byte counts are unavailable, but not recorded
    if no DataUse objects have been buffered.
  </summary>
</histogram>

<histogram name="TrafficStatsAmortizer.PreAmortizationRunDataUseBytes"
    units="bytes">
  <obsolete>
    Deprecated 2018/07.
  </obsolete>
  <owner>sclittle@chromium.org</owner>
  <owner>bengr@chromium.org</owner>
  <summary>
    The total bytes before performing amortization across all DataUse objects
    buffered for a single amortization run by the TrafficStatsAmortizer. This is
    recorded even if TrafficStats byte counts are unavailable, but not recorded
    if no DataUse objects have been buffered.
  </summary>
</histogram>

<histogram name="Translate.AcceptLanguages.CanBeAcceptDuration" units="ms">
  <owner>googleo@chromium.org</owner>
  <summary>
    Time taken for the TranslateAcceptLanguages to decide if a given language is
    available as Accept-Languages.
  </summary>
</histogram>

<histogram name="Translate.AlwaysTranslateLang">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    The number of times the always translate option was selected in the
    translate infobar.
  </summary>
</histogram>

<histogram name="Translate.BubbleUiEvent" enum="TranslateBubbleUiEvent">
  <owner>groby@google.com</owner>
  <summary>Tracks UI events related to the translate bubble.</summary>
</histogram>

<histogram name="Translate.CaptureText" units="ms">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    The time spent capturing plain text from the DOM. This is reported by
    ChromeRenderViewObserver when a page is loaded completely.
  </summary>
</histogram>

<histogram name="Translate.CLD2.LanguageAccuracy" units="%">
  <obsolete>
    Deprecated as of 11/2017, since cld2 is deprecated.
  </obsolete>
  <owner>rkaplow@google.com</owner>
  <summary>
    Accuracy of the language detected by CLD2. Only recorded if the detection
    returned a &quot;known&quot; result.
  </summary>
</histogram>

<histogram name="Translate.CLD2.LanguageDetected" enum="CLD2LanguageCode">
  <obsolete>
    Deprecated as of 11/2017, since cld2 is deprecated.
  </obsolete>
  <owner>rkaplow@google.com</owner>
  <summary>Language of page detected by CLD2.</summary>
</histogram>

<histogram name="Translate.CLD3.LanguageDetected" enum="CLD3LanguageCode">
  <owner>abakalov@chromium.org</owner>
  <summary>
    Language of the input page detected by CLD3. This information is logged on
    every page load.
  </summary>
</histogram>

<histogram name="Translate.CLD3.LanguagePercentage" units="%">
  <owner>abakalov@chromium.org</owner>
  <summary>
    Percentage of the bytes that are associated with the most popular language
    on the input page. Only recorded if the detection returned a
    &quot;known&quot; result.
  </summary>
</histogram>

<histogram name="Translate.CompactInfobar.Event" enum="TranslateCompactUIEvent">
  <owner>ramyasharma@google.com</owner>
  <summary>Various user actions performed in the translate infobar.</summary>
</histogram>

<histogram name="Translate.CompactInfobar.Language.AlwaysTranslate"
    enum="CLD3LanguageCode">
  <owner>ramyasharma@google.com</owner>
  <summary>
    Records the hashcode of the source language when always translate this
    language option is clicked in the menu.
  </summary>
</histogram>

<histogram name="Translate.CompactInfobar.Language.MoreLanguages"
    enum="CLD3LanguageCode">
  <owner>ramyasharma@google.com</owner>
  <summary>
    Records the hashcode of the language clicked on the more languages menu.
  </summary>
</histogram>

<histogram name="Translate.CompactInfobar.Language.NeverTranslate"
    enum="CLD3LanguageCode">
  <owner>ramyasharma@google.com</owner>
  <summary>
    Records the hashcode of the source language when never translate this
    language option is clicked in the menu.
  </summary>
</histogram>

<histogram name="Translate.CompactInfobar.Language.PageNotIn"
    enum="CLD3LanguageCode">
  <owner>ramyasharma@google.com</owner>
  <summary>
    Records the hashcode of the language clicked on the menu to indicate the
    page is not in the selected language.
  </summary>
</histogram>

<histogram name="Translate.CompactInfobar.Language.Translate"
    enum="CLD3LanguageCode">
  <owner>ramyasharma@google.com</owner>
  <summary>
    Records the hashcode of the language clicked on the infobar.
  </summary>
</histogram>

<histogram name="Translate.CompactInfobar.TranslationsPerPage"
    units="translations">
  <owner>ramyasharma@google.com</owner>
  <summary>
    Records the number of times a page is translated, every time the page is
    translated. For instance on a page a) translation from A to B, we record
    &quot;1&quot; b) from A to B - we record &quot;1&quot; and revert from B to
    A - we record &quot;2&quot; c) from A to B - we record &quot;1&quot;, then
    translation to C - we record &quot;2&quot;. d) from A to B - we record
    &quot;1&quot;, then translation to C - we record &quot;2&quot; and then
    revert to A - we record &quot;3&quot;. We increment the translation count:
    a) every time the target language is changed. b) every time we revert to the
    original language (user can only revert to original language and not
    intermediate target languages). This essentially means 1 denotes &gt;= 1
    translations, 2 is &gt;=2 translations per page and so on. This will give us
    a sense of how often people try out several translates on a page, or flip
    back and forth.
  </summary>
</histogram>

<histogram name="Translate.ContentLanguage" enum="TranslateLanguage">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    A page may provide a Content-Language HTTP header or a META tag. For each
    page load, measures whether the Content-Language header exists and is valid.
  </summary>
</histogram>

<histogram name="Translate.DeclineTranslate">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    The number of times the &quot;Nope&quot; (don't translate) or the infobar's
    X button was clicked in the translate infobar.
  </summary>
</histogram>

<histogram name="Translate.DeclineTranslateCloseInfobar">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    The number of times the translate infobar was closed by clicking the X
    button without the user translating the page.
  </summary>
</histogram>

<histogram name="Translate.DeclineTranslateDismissUI">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    The number of times the translate UI was closed without translating in the
    way that the user doesn't deny translating explicityly, like pressing 'Nope'
    button. This is counted on both the infobar and the bubble UI. We are
    comparing this on infobar to that on bubble by A/B testing and expecting
    that the user will click 'Nope' button on bubble less times than infobar. We
    won't delete this histogram after the experiment.
  </summary>
</histogram>

<histogram name="Translate.HtmlLang" enum="TranslateLanguage">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    A page may provide a lang attribute in html tag. For each page load,
    measures whether the lang attribute exists and is valid.
  </summary>
</histogram>

<histogram name="Translate.InfobarShown" enum="BooleanHit">
  <owner>ramyasharma@google.com</owner>
  <summary>
    The number of times the translate infobar was shown in the old translate UI
    on Android. Only true is recorded.
  </summary>
</histogram>

<histogram name="Translate.InitiationStatus" enum="TranslateInitiationStatus">
  <obsolete>
    Deprecated as of 11/2013, and replaced by Translate.InitiationStatus.v2.
  </obsolete>
  <owner>kenjibaheux@google.com</owner>
  <summary>
    The reason why Chrome decided to perform the next action (e.g., to show
    infobar, to translate a page without any prompting, and so on) when Chrome
    Translate is ready to translate a page.
  </summary>
</histogram>

<histogram name="Translate.InitiationStatus.v2"
    enum="TranslateInitiationStatus">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    The reason why Chrome decided to perform the next action (e.g., to show
    infobar, to translate a page without any prompting, and so on) when Chrome
    Translate is ready to translate a page.
  </summary>
</histogram>

<histogram name="Translate.LanguageDetectionConflict"
    enum="EnCrossCLD3LanguageCode">
  <owner>yyushkina@chromium.org</owner>
  <summary>
    This metric logs CLD3-detected languages for pages that specify a
    conflicting English language in their markup. In these cases, we must decide
    on a language source to favor.

    Bucket names are of the form &quot;x,y&quot;, where x is the common English
    language code specified in the page markup (or &quot;other&quot; if the
    English language code is uncommon), and y is the CLD3-detected language.

    This histogram only logs detection conflicts. Hence, &quot;matching&quot;
    buckets (e.g. &quot;en,en&quot;, &quot;en-AU,en&quot;) will never be
    populated.
  </summary>
</histogram>

<histogram name="Translate.LanguageDetectionTiming"
    enum="TranslateLanguageDetectionTiming">
  <owner>andrewhayden@chromium.org</owner>
  <summary>
    For each page load, records whether language detection occurs on time or
    gets deferred. If deferred language detection later completes, this is also
    recorded. This allows measuring the UX impact of using a non-static CLD data
    source.
  </summary>
</histogram>

<histogram name="Translate.LanguageSettingsIsShown" enum="BooleanShown">
  <owner>renjieliu@chromium.org</owner>
  <summary>
    Log everytime the language settings page is shown. This can be either user
    visits chrome://settings/languages or user visits the advanced languages
    card in chrome://settings. With this stat, we will be able to understand how
    well the language model is doing by looking into how the number changes over
    time. In additiona to that, we are also interested in how many users ever
    visit the languages settings card.
  </summary>
</histogram>

<histogram name="Translate.LanguageVerification"
    enum="TranslateLanguageVerification">
  <owner>yyushkina@chromium.org</owner>
  <summary>
    For each page load, measures whether the provided HTML language (i.e. the
    page lang attribute if it exists, otherwise the header Content-Language
    value) matches the language determined by CLD. Beyond directly matching or
    mismatching the HTML language, CLD can complement the HTML language. For
    example, suppose the HTML language is 'zh' (general Chinese), a language
    code that the Translate server does not support.  In this case, CLD can
    detect a subcode like '-TW' or '-CN', resulting in language codes 'zh-TW'
    and 'zh-CN', which the Translate server supports. This is referred to as
    &quot;complementing a language subcode&quot;.
  </summary>
</histogram>

<histogram name="Translate.LocalesOnDisabledByPrefs" enum="LanguageCode">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    Logs the user locale when the Translate feature is disabled by the user.
    This is recorded each time a webpage is loaded and prefs for translation is
    checked. This allows us to investigate the correlation between the user
    locale and the usage rates of the Translate.
  </summary>
</histogram>

<histogram name="Translate.ModifyOriginalLang">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    The number of times the original language in the translate infobar has been
    changed.
  </summary>
</histogram>

<histogram name="Translate.ModifyTargetLang">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    The number of times the target language in the translate infobar has been
    changed.
  </summary>
</histogram>

<histogram name="Translate.NeverTranslateLang">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    The number of times the never translate option was selected in the translate
    infobar.
  </summary>
</histogram>

<histogram name="Translate.NeverTranslateSite">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    The number of times the never translate site was selected in the translate
    infobar.
  </summary>
</histogram>

<histogram name="Translate.PageCaptured" units="ms">
  <obsolete>
    Deprecated 2/2018
  </obsolete>
  <owner>joelhockey@chromium.org</owner>
  <summary>
    The time spent capturing plain text from the DOM. This is reported by
    ChromeRenderViewObserver when a page is loaded completely.
  </summary>
</histogram>

<histogram name="Translate.PageScheme" enum="TranslateScheme">
  <owner>kenjibaheux@google.com</owner>
  <summary>Counts translation target page schemes.</summary>
</histogram>

<histogram name="Translate.Ranker.Model.Status" enum="RankerModelStatus">
  <owner>rogerm@google.com</owner>
  <summary>
    Tracks the outcome of attempts to download a Translate Ranker Model.
  </summary>
</histogram>

<histogram name="Translate.Ranker.Model.Version" units="date stamp">
  <owner>rogerm@google.com</owner>
  <summary>
    The date tamp (e.g., 20160916 -&gt; 15 Sept 2016) which denotes the
    TranslateRankerModel's version.
  </summary>
</histogram>

<histogram name="Translate.Ranker.QueryResult" enum="BooleanAccepted">
  <owner>rogerm@google.com</owner>
  <summary>
    Whether the TranslateRanker accepts or denies to show the translation
    prompt.
  </summary>
</histogram>

<histogram name="Translate.Ranker.Timer.CalculateScore" units="ms">
  <owner>rogerm@google.com</owner>
  <summary>
    Time taken for the TranslateRanker to use the translate ranker model to
    calculate a score for the translation, in ms.
  </summary>
</histogram>

<histogram name="Translate.Ranker.Timer.DownloadModel" units="ms">
  <owner>rogerm@google.com</owner>
  <summary>
    Time taken for the Translate Ranker Model Loader to download its model from
    the configured URL, in ms.
  </summary>
</histogram>

<histogram name="Translate.Ranker.Timer.ParseModel" units="ms">
  <owner>rogerm@google.com</owner>
  <summary>
    Time taken for the Translate Ranker Model Loader to parse its model, in ms.
  </summary>
</histogram>

<histogram name="Translate.Ranker.Timer.ReadModel" units="ms">
  <owner>rogerm@google.com</owner>
  <summary>
    Time taken for the Translate Ranker Model Loader to read its model from
    local storage (cache), in ms.
  </summary>
</histogram>

<histogram name="Translate.Ranker.Timer.ShouldOfferTranslation" units="ms">
  <owner>rogerm@google.com</owner>
  <summary>
    Time taken for the TranslateRanker to decide if a given translation should
    be offered or not, in ms. This includes the time taken to extract the
    relevant features upon which to base the decision, as well as the time taken
    to calculate the result.
  </summary>
</histogram>

<histogram name="Translate.Ranker.Timer.WriteModel" units="ms">
  <owner>rogerm@google.com</owner>
  <summary>
    Time taken for the Translate Ranker Model Loader to write its model to local
    storage, in ms.
  </summary>
</histogram>

<histogram name="Translate.ReportLanguageDetectionError">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    The number of times the &quot;report this error&quot; of options menu is
    selected in the translate infobar.
  </summary>
</histogram>

<histogram name="Translate.RevertTranslation">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    The number of times the show original button was clicked in the translate
    infobar.
  </summary>
</histogram>

<histogram name="Translate.ServerReportedUnsupportedLanguage">
  <obsolete>
    Deprecated 5/2013 by Translate.UndisplayableLanguage
  </obsolete>
  <owner>kenjibaheux@google.com</owner>
  <summary>
    The number of times the detected language is not supported by Translate
    Element.
  </summary>
</histogram>

<histogram name="Translate.ShowBeforeTranslateInfobar">
  <obsolete>
    Deprecated 7/2010. No longer tracked.
  </obsolete>
  <owner>kenjibaheux@google.com</owner>
  <summary>
    The number of times an infobar proposing to translate a page has been shown.
  </summary>
</histogram>

<histogram name="Translate.ShowErrorInfobar" enum="TranslateError">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    Chrome Translate shows an error infobar when an error happens on translation
    and the infobar message depends on what kind of error happens. This metric
    counts how often each error message is shown.
  </summary>
</histogram>

<histogram name="Translate.ShowErrorUI" enum="TranslateError">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    Chrome Translate shows an error UI (infobar or bubble) when an error happens
    on translation and the UI message depends on what kind of error happens.
    This metric counts how often each error message is shown.
  </summary>
</histogram>

<histogram name="Translate.SimilarLanguageMatch" enum="BooleanMatched">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    This metrics is logged whenever a page is loaded. The logged value is
    &quot;Mathced&quot; when the CLD-detected language differs from the page
    language code , and the two languages are such similar languages. In that
    case, Chrome ignore the CLD-determined language and instead uses the page
    language code. The page language code is decided by Content-Language and
    HTML lang attribute.
  </summary>
</histogram>

<histogram name="Translate.SourceLanguage" enum="CLD3LanguageCode">
  <owner>yyushkina@google.com</owner>
  <summary>
    The number of requests sent to the Translate server, grouped by source
    language.
  </summary>
</histogram>

<histogram name="Translate.TargetLanguage" enum="CLD3LanguageCode">
  <owner>yyushkina@google.com</owner>
  <summary>
    The number of requests sent to the Translate server, grouped by target
    language.
  </summary>
</histogram>

<histogram name="Translate.TimeToBeReady" units="ms">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    The time from injecting scripts for Chrome Translate to being ready to
    perform translation.
  </summary>
</histogram>

<histogram name="Translate.TimeToLoad" units="ms">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    The time from injecting scripts for Chrome Translate to the finishing loads
    of all depending libraries.
  </summary>
</histogram>

<histogram name="Translate.TimeToTranslate" units="ms">
  <owner>kenjibaheux@google.com</owner>
  <summary>The time from starting translation to the completion.</summary>
</histogram>

<histogram name="Translate.Translate" enum="BooleanTranslate">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    The number of times the translate button was clicked in the translate
    infobar.
  </summary>
</histogram>

<histogram name="Translate.UndisplayableLanguage" enum="LanguageCode">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    Logs an undisplayable language included in the language list sent by the
    Translate server. The Translate server sends the list each time the user
    runs Chrome. This metrics tells us that there is a language which UI should
    support but doesn't.
  </summary>
</histogram>

<histogram name="Translate.UnsupportedLanguageAtInitiation" enum="LanguageCode">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    Logs an unsupported source language detected during initiation of the
    Translate feature.  This is reported when the language detector successfully
    detects the language of the webpage, but the language is not supported by
    the translation server because it is too minor.  This metric allows us to
    assess how important the unsupported language is for Google translate.
  </summary>
</histogram>

<histogram name="Translate.UserActionDuration" units="ms">
  <owner>kenjibaheux@google.com</owner>
  <summary>
    The time from a page content language being determined to user requesting
    Chrome Translate.
  </summary>
</histogram>

<histogram name="TryScroll.SlowScroll" enum="ScrollThread">
  <obsolete>
    Deprecated 02/2016 in Issue 1741103002, and replaced by
    Renderer4.CompositorWheelScrollUpdateThread and
    Renderer4.CompositorTouchScrollUpdateThread.
  </obsolete>
  <owner>tdresser@chromium.org</owner>
  <summary>Whether a scroll is executed on main thread.</summary>
</histogram>

<histogram name="UI.CompositorResizeLock.Duration" units="ms">
  <owner>fsamuel@chromium.org</owner>
  <summary>
    The amount of time the CompositorResizeLock was held in milliseconds. This
    is a measure of jank as UI will not generate new frames as long as the lock
    is held.
  </summary>
</histogram>

<histogram name="UI.CompositorResizeLock.TimedOut" units="Boolean">
  <owner>fsamuel@chromium.org</owner>
  <summary>
    Tracks whether the CompositorResizeLock is being released due to timing out
    or not.
  </summary>
</histogram>

<histogram name="UI.DeviceScale" units="%">
  <owner>bsep@chromium.org</owner>
  <summary>
    The device scales available on the system at startup. A system may report
    more than one if it has multiple displays with varying device scales. Only
    logged on Windows.
  </summary>
</histogram>

<histogram name="UI.WindowTreeHost.SurfaceSynchronizationDuration" units="ms">
  <owner>fsamuel@chromium.org</owner>
  <summary>
    The amount of time it took for UI's CompositorFrame to activate due to a
    surface synchronization event. This a measure of jank as UI will not
    generate new frames as long synchronization is in progress. This metric is
    similar to UI.CompositorResizeLock.Duration but measures the new
    synchronization code path.
  </summary>
</histogram>

<histogram name="UKM.ActualLogUploadInterval" units="minutes">
  <owner>holte@chromium.org</owner>
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The actual interval between log upload start and previous log upload
    finished within the same process.
  </summary>
</histogram>

<histogram name="UKM.Entries.Dropped" enum="UkmDataDroppedReason">
  <owner>holte@chromium.org</owner>
  <owner>rkaplow@chromium.org</owner>
  <summary>
    Number of UKM entries that are dropped. Categorized by the cause of it being
    dropped.
  </summary>
</histogram>

<histogram name="UKM.Entries.SerializedCount">
  <obsolete>
    Deprecated 2/2018 by UKM.Entries.SerializedCount2.
  </obsolete>
  <owner>holte@chromium.org</owner>
  <owner>rkaplow@chromium.org</owner>
  <summary>Number of serialized UKM entries when storing a UKM log.</summary>
</histogram>

<histogram name="UKM.Entries.SerializedCount2">
  <owner>holte@chromium.org</owner>
  <owner>rkaplow@chromium.org</owner>
  <summary>Number of serialized UKM entries when storing a UKM log.</summary>
</histogram>

<histogram name="UKM.InitSequence" enum="UmaInitSequence">
  <owner>holte@chromium.org</owner>
  <owner>rkaplow@chromium.org</owner>
  <summary>
    Logged during UkmService initialization whether the init task or the initial
    log timer completed first. The expectation is the vast majority of the time,
    the init task should complete first. If metrics show otherwise, then it may
    indicate there's a bug in the UkmService init sequence and that it should be
    investigated.
  </summary>
</histogram>

<histogram name="UKM.LogSize.OnSuccess" units="KB">
  <owner>holte@chromium.org</owner>
  <owner>rkaplow@chromium.org</owner>
  <summary>
    Size in kilobytes (after compression) of an uploaded UKM log. Recorded after
    a successful UKM upload.
  </summary>
</histogram>

<histogram name="UKM.LogUpload.Canceled.CellularConstraint"
    enum="BooleanCanceled">
  <owner>holte@chromium.org</owner>
  <owner>rkaplow@chromium.org</owner>
  <summary>
    Logs whether a log was not uploaded due to cellular log throttling logic.
    Android only.
  </summary>
</histogram>

<histogram name="UKM.LogUpload.ResponseOrErrorCode"
    enum="CombinedHttpResponseAndNetErrorCode">
  <owner>holte@chromium.org</owner>
  <owner>rkaplow@chromium.org</owner>
  <summary>
    HTTP response codes and network errors encountered by UKM when attempting to
    upload logs to the server.
  </summary>
</histogram>

<histogram name="UKM.PersistentLogRecall.Status"
    enum="PersistedLogsLogReadStatus">
  <owner>holte@chromium.org</owner>
  <owner>rkaplow@chromium.org</owner>
  <summary>The status when loading UKM PersistedLogs from Prefs.</summary>
</histogram>

<histogram name="UKM.Sources.Dropped" enum="UkmDataDroppedReason">
  <owner>holte@chromium.org</owner>
  <owner>rkaplow@chromium.org</owner>
  <summary>
    Number of UKM sources that are dropped. Categorized by the cause of it being
    dropped.
  </summary>
</histogram>

<histogram name="UKM.Sources.KeptSourcesCount" units="sources">
  <owner>asvitkine@chromium.org</owner>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    Number of unsent UKM sources that were kept in-memory to be potentially
    transmitted in the next log.
  </summary>
</histogram>

<histogram name="UKM.Sources.SerializedCount" units="sources">
  <owner>holte@chromium.org</owner>
  <owner>rkaplow@chromium.org</owner>
  <summary>Number of serialized UKM sources when storing a UKM log.</summary>
</histogram>

<histogram name="UKM.Sources.UnsentSourcesCount" units="sources">
  <owner>asvitkine@chromium.org</owner>
  <owner>bmcquade@chromium.org</owner>
  <summary>
    Number of UKM sources that were not sent because they had no associated
    entries.
  </summary>
</histogram>

<histogram name="UKM.SyncDisable.Info" enum="UkmSyncDisableInfo">
  <owner>bcwhite@chromium.org</owner>
  <owner>rkaplow@chromium.org</owner>
  <summary>
    Information about the determination by the SyncDisableObserver on why it
    enabled or disabled UKM based on Sync status. This is recorded every time a
    change is detected in Sync (which may be several just at startup).
  </summary>
</histogram>

<histogram name="UKM.UnsentLogs.DroppedSize" units="bytes">
  <owner>holte@chromium.org</owner>
  <owner>rkaplow@chromium.org</owner>
  <summary>
    Number of bytes in an excessively large log that was discarded while
    persisting UKM logs to disk to retry during next chrome run.
  </summary>
</histogram>

<histogram name="UKM.UnsentLogs.NumDropped">
  <owner>holte@chromium.org</owner>
  <owner>rkaplow@chromium.org</owner>
  <summary>
    Counter for number of UKM unsent logs removed from persistent storage.
  </summary>
</histogram>

<histogram name="UKM.Upload.ResponseCode" enum="HttpResponseCode">
  <obsolete>
    Replaced by UKM.LogUpload.ResponseOrErrorCode
  </obsolete>
  <owner>holte@chromium.org</owner>
  <owner>rkaplow@chromium.org</owner>
  <summary>
    For each upload to the UKM server, log the response received from the
    server.
  </summary>
</histogram>

<histogram name="UMA.ActualLogUploadInterval" units="minutes">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The actual interval between log upload start and previous log upload
    finished within the same process.
  </summary>
</histogram>

<histogram name="UMA.AntiVirusMetricsProvider.Result"
    enum="AntiVirusMetricsProviderResult">
  <owner>wfh@chromium.org</owner>
  <summary>
    Records the result of the attempt to enumerate the installed AntiVirus on
    the machine. This is recorded once during metrics initialization.
  </summary>
</histogram>

<histogram name="UMA.CleanExitBeaconConsistency" enum="UmaCleanExitConsistency">
  <owner>siggi@chromium.org</owner>
  <summary>
    Reports the combined state of distinct clean exit beacons stored in Local
    State and the Windows registry. They are normally expected to be identical.
  </summary>
</histogram>

<histogram name="UMA.ClientIdBackupRecoveredWithAge" units="hours">
  <owner>gab@chromium.org</owner>
  <summary>
    Recorded when we are somehow missing the client ID stored in Local State yet
    are able to recover it from a backup location along with the backed up
    installation date. This report carries the age in hours of the recovered
    client id.
  </summary>
</histogram>

<histogram name="UMA.ClientIdMigrated" enum="BooleanMigrated">
  <obsolete>
    Removed in M45.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Recorded when the one-time UMA client id reset was performed (and the client
    id of this user was migrated).
  </summary>
</histogram>

<histogram name="UMA.CollectExternalEventsTime" units="ms">
  <obsolete>
    Deprecated as of August 2015. The histogram showed no unexpected slowness,
    and a profiler is a better tool for identifying any future issues.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The time to run the external metrics collection task (Chrome OS).
  </summary>
</histogram>

<histogram name="UMA.ComputeCurrentSigninStatus"
    enum="ComputeCurrentSigninStatus">
  <obsolete>
    Deprecated as of Jun 2016. The histogram was added for debugging purpose and
    is not needed anymore.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <owner>yiyaoliu@chromium.org</owner>
  <summary>
    Records attempts to compute the current the signin status and error
    encountered when computing.
  </summary>
</histogram>

<histogram name="UMA.CreatePersistentHistogram.Result"
    enum="CreatePersistentHistogramResult">
  <obsolete>
    Removed April, 2018 as the information has never shown any problems.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    Records attempts to create histograms in presistent space and any errors
    encountered when doing so.
  </summary>
</histogram>

<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUpAsyncTaskDuration"
    units="ms">
  <owner>wnwen@chromium.org</owner>
  <summary>
    Measures how much time it took to complete all async deferred startup tasks
    on the background thread. Only logged on Android.
  </summary>
</histogram>

<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUpCompleteTime"
    units="ms">
  <owner>wnwen@chromium.org</owner>
  <summary>
    Measures how much time since application was first in foreground till all
    deferred tasks are done. Only logged on Android.
  </summary>
</histogram>

<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUpDuration"
    units="ms">
  <obsolete>
    Deprecated 01/2017 for
    UMA.Debug.EnableCrashUploadDeferredStartupAsyncTaskDuration.
  </obsolete>
  <owner>wnwen@chromium.org</owner>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Measures how much time it took to complete deferred startup tasks on the UI
    thread. Only logged on Android.
  </summary>
</histogram>

<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUpDurationAsync"
    units="ms">
  <owner>wnwen@chromium.org</owner>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Measures how much time it took to complete async deferred startup tasks on
    the background thread. Only logged on Android.
  </summary>
</histogram>

<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUpMaxTaskDuration"
    units="ms">
  <owner>wnwen@chromium.org</owner>
  <summary>
    Measures the maximum amount of time a single deferred startup task took.
  </summary>
</histogram>

<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUptime" units="ms">
  <obsolete>
    Replaced by UMA.Debug.EnableCrashUpload.DeferredStartUptime2
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Measures how much time since start up it took for onDeferredStartup() to be
    called, which schedules enablePotentialCrashUploading() to be executed on an
    async task. Only logged on Android.
  </summary>
</histogram>

<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUptime2" units="ms">
  <obsolete>
    Deprecated 2017. No longer tracked.
  </obsolete>
  <owner>wnwen@chromium.org</owner>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Measures how much time since application was first in foreground till
    deferred tasks are initialized and queued on the idle handler. Only logged
    on Android.
  </summary>
</histogram>

<histogram name="UMA.Debug.EnableCrashUpload.PostDeferredStartUptime"
    units="ms">
  <obsolete>
    Replaced by UMA.Debug.EnableCrashUpload.PostDeferredStartUptime2
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Measures how much time since start up it took before ChromeActivity's
    postDeferredStartupIfNeeded() was called. Only logged on Android.
  </summary>
</histogram>

<histogram name="UMA.Debug.EnableCrashUpload.PostDeferredStartUptime2"
    units="ms">
  <obsolete>
    Deprecated 2017. No longer tracked.
  </obsolete>
  <owner>wnwen@chromium.org</owner>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Measures how much time since application was first in foreground till
    ChromeActivity's postDeferredStartupIfNeeded() was called exactly once. Only
    logged on Android.
  </summary>
</histogram>

<histogram name="UMA.Debug.EnableCrashUpload.Uptime" units="ms">
  <obsolete>
    Replaced by UMA.Debug.EnableCrashUpload.Uptime2
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Measures how much time since start up it took before crash reporting was
    enabled via enablePotentialCrashUploading() as part of deferred start up.
    Only logged on Android.
  </summary>
</histogram>

<histogram name="UMA.Debug.EnableCrashUpload.Uptime2" units="ms">
  <obsolete>
    Replaced by UMA.Debug.EnableCrashUpload.Uptime3
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Measures how much time since start up it took before crash reporting was
    enabled via enablePotentialCrashUploading() as part of deferred start up.
    Only logged on Android.
  </summary>
</histogram>

<histogram name="UMA.Debug.EnableCrashUpload.Uptime3" units="ms">
  <obsolete>
    Deprecated 2017. No longer tracked.
  </obsolete>
  <owner>wnwen@chromium.org</owner>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Measures how much time since application was first in foreground till crash
    reporting was enabled as part of deferred start up. Only logged on Android.
  </summary>
</histogram>

<histogram name="UMA.Discarded Log Events">
  <obsolete>
    Replaced by UMA.Truncate* metrics.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The number of events that would be discarded at log transmission time
    because the event count was already too large. Note that this doesn't
    measure actual discards - in case the UMAThrottleEvents feature is disabled,
    the discards won't occur.
  </summary>
</histogram>

<histogram name="UMA.EnrollmentStatus" enum="EnrollmentStatus">
  <owner>asvitkine@chromium.org</owner>
  <owner>kaznacheev@chromium.org</owner>
  <summary>
    Logs the device enrollment status for Chrome OS device. Logged with every
    UMA upload.
  </summary>
</histogram>

<histogram name="UMA.EntropySourceType" enum="UmaEntropySourceType"
    expires_after="2018-08-30">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Logs the entropy source type that was used for field trial randomization.
    Logged once at each start up.
  </summary>
</histogram>

<histogram name="UMA.ExpiredHistogram.BugReportTest" expires_after="2018-07-20">
  <owner>gayane@chromium.org</owner>
  <summary>Not logged. Used for testing histogram expiry checker.</summary>
</histogram>

<histogram name="UMA.ExpiredHistogram.Milestone.BugReportTest"
    expires_after="M68">
  <owner>gayane@chromium.org</owner>
  <summary>Not logged. Used for testing histogram expiry checker.</summary>
</histogram>

<histogram name="UMA.ExpiredHistogram.Milestone.Soon.BugReportTest"
    expires_after="M69">
  <owner>gayane@chromium.org</owner>
  <summary>Not logged. Used for testing histogram expiry checker.</summary>
</histogram>

<histogram name="UMA.ExpiredHistogram.Soon.BugReportTest"
    expires_after="2018-08-01">
  <owner>gayane@chromium.org</owner>
  <summary>Not logged. Used for testing histogram expiry checker.</summary>
</histogram>

<histogram name="UMA.ExternalExperiment.GroupCount" units="groups"
    expires_after="2018-08-30">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Logged on Android whenever an external experiment is registered. The logged
    value is the number of groups in the experiment. This will not be logged at
    all if there are no external experiments, but will be logged on group
    transitions (e.g. when going from 1 to 0 groups).
  </summary>
</histogram>

<histogram name="UMA.FieldTrialAllocator.Size" units="bytes">
  <obsolete>
    Deprecated 11/2016 for UMA.FieldTrialAllocator.Used
  </obsolete>
  <owner>lawrencewu@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Size, before padding, of objects allocated from persistent memory in the
    browser process for field trials. Updated on each subprocess launch.
  </summary>
</histogram>

<histogram name="UMA.FieldTrialsEnabledBenchmarking" enum="BooleanUsage">
  <obsolete>
    Deprecated 2012. No longer tracked.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Log whether the --enable-benchmarking flag was set, which causes field
    trials to only use the default group.
  </summary>
</histogram>

<histogram name="UMA.FileMetricsProvider.AccessResult"
    enum="FileMetricsProviderAccessResult">
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    Records attempts to access a file for the purpose of extracting metrics.
  </summary>
</histogram>

<histogram name="UMA.FileMetricsProvider.DeletedFiles">
  <obsolete>
    Removed April, 2018 as the information it provides is no longer useful.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    The number of old metrics files for which a delete was attempted. This is
    logged once with each upload operation. Values greater than 1 indicate that
    the files are not deletable by the browser and must be cleaned up by
    whatever process is creating them.
  </summary>
</histogram>

<histogram name="UMA.FileMetricsProvider.DirectoryFiles">
  <obsolete>
    Removed April, 2018 as no problems were ever indicated.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    The number of metrics files in a directory that need to be uploaded. This is
    logged once with each upload operation.
  </summary>
</histogram>

<histogram name="UMA.FileMetricsProvider.EmbeddedProfile.DroppedFileAge"
    units="minutes">
  <obsolete>
    Deprecated 07/2017. Was only for short-term analysis. About 95% of dropped
    files were less than 1 day old.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    Records the last-modified age of a file that was dropped for lack of an
    embedded profile.
  </summary>
</histogram>

<histogram name="UMA.FileMetricsProvider.EmbeddedProfile.DroppedHistogramCount">
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    Records the number of histograms present in a file that was dropped for lack
    of an embedded profile.
  </summary>
</histogram>

<histogram name="UMA.FileMetricsProvider.EmbeddedProfileResult"
    enum="FileMetricsProviderEmbeddedProfileResult">
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    Records attempts to upload metrics from files with embedded system profiles.
  </summary>
</histogram>

<histogram name="UMA.FileMetricsProvider.Happening"
    enum="FileMetricsProviderHappening">
  <obsolete>
    This metrics was to provide information for crbug/760317 which has been
    resolved. Removed February, 2018.
  </obsolete>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    Records various happenings within the FileMetricsProvider for debugging
    purposes.
  </summary>
</histogram>

<histogram name="UMA.FileMetricsProvider.InitialAccessResult"
    enum="FileMetricsProviderAccessResult">
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    Records attempts to access a file for the purpose of extracting initial
    stability metrics.
  </summary>
</histogram>

<histogram name="UMA.FileMetricsProvider.InitialCheckTime.File" units="ms">
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    Records how much wall time was spent checking and mapping an initial metrics
    file on disk.
  </summary>
</histogram>

<histogram name="UMA.FileMetricsProvider.InitialCheckTime.Total" units="ms">
  <obsolete>
    Removed April, 2018 as the information it provides is no longer useful.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    Records how much wall time was spent checking and mapping initial metrics
    from all files on disk.
  </summary>
</histogram>

<histogram name="UMA.FileMetricsProvider.InitialSnapshotTime.File" units="ms">
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    Records how much wall time was spent collecting initial stability metrics
    from a file on disk.
  </summary>
</histogram>

<histogram name="UMA.FileMetricsProvider.InitialSnapshotTime.Total" units="ms">
  <obsolete>
    Removed April, 2018 as the information it provides is no longer useful.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    Records how much wall time was spent collecting initial stability metrics
    from all files on disk.
  </summary>
</histogram>

<histogram name="UMA.FileMetricsProvider.SnapshotTime.File" units="ms">
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    Records how much wall time was spent collecting metrics from a file on disk.
  </summary>
</histogram>

<histogram name="UMA.FileMetricsProvider.SnapshotTime.Total" units="ms">
  <obsolete>
    Removed April, 2018 as the information it provides is no longer useful.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    Records how much wall time was spent collecting metrics from all files on
    disk.
  </summary>
</histogram>

<histogram name="UMA.GeneratedLowEntropySource" enum="Boolean">
  <obsolete>
    Deprecated as of August 2015. No longer tracked.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    For each attempt to generate the low entropy source, log whether or not the
    load required generating a new low entropy source.
  </summary>
</histogram>

<histogram name="UMA.Histograms.Activity" enum="HistogramActivityReport">
  <obsolete>
    Deprecated as of October 2017. No longer tracked.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    Type and flags of every histogram created plus other activities. Counts are
    not mutually-exclusive except for the different types.
  </summary>
</histogram>

<histogram name="UMA.InitSequence" enum="UmaInitSequence">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Logged during MetricsService initialization whether the init task or the
    initial log timer completed first. The expectation is the vast majority of
    the time, the init task should complete first. If metrics show otherwise,
    then it may indicate there's a bug in the MetricsService init sequence and
    that it should be investigated.
  </summary>
</histogram>

<histogram name="UMA.IsClonedInstall" enum="BooleanCloned">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    This is logged with a value of true in every log when the UMA client code
    has detected that this is a potentially cloned install and has set the pref
    to reset its UMA client id on the next startup.
  </summary>
</histogram>

<histogram name="UMA.Large Accumulated Log Not Persisted" units="bytes"
    expires_after="2018-08-30">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Number of bytes in an excessively large log that was discarded at shutdown
    instead of being saved to disk to retry during next chrome run.
  </summary>
</histogram>

<histogram name="UMA.Large Rejected Log was Discarded" units="bytes"
    expires_after="2018-08-30">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Number of bytes in a log was was rejected by server, and then discarded.
  </summary>
</histogram>

<histogram name="UMA.LoadLogsTime" units="ms">
  <obsolete>
    Deprecated as of August 2015. The histograms showed no unexpected slowness,
    and a profiler is a better tool for identifying any future issues.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The time spent to load (de-serialize) unsent logs from local state, recorded
    during the MetricsService startup sequence.
  </summary>
</histogram>

<histogram name="UMA.LocalPersistentMemoryAllocator.Failures.Posix"
    enum="PopularOSErrno">
  <owner>bcwhite@chromium.org</owner>
  <summary>
    Failures, as reported in errno, encountered while allocating local
    persistent memory under Posix.
  </summary>
</histogram>

<histogram name="UMA.LocalPersistentMemoryAllocator.Failures.Win"
    enum="WinGetLastError">
  <owner>bcwhite@chromium.org</owner>
  <summary>
    Failures, as reported by GetLastError(), encountered while allocating local
    persistent memory under Windows.
  </summary>
</histogram>

<histogram name="UMA.LogLoadComplete called">
  <obsolete>
    No longer tracked.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Simple counter of the number of times LogLoadComplete was called (bug
    demonstration, as we're called more often than once per page load :-/ )
  </summary>
</histogram>

<histogram name="UMA.LogSize.OnSuccess" units="KB">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Size in kilobytes (after compression) of an uploaded UMA log. Recorded after
    a successful UMA upload.
  </summary>
</histogram>

<histogram name="UMA.LogUpload.Canceled.CellularConstraint"
    enum="BooleanCanceled">
  <owner>asvitkine@chromium.org</owner>
  <owner>gayane@chromium.org</owner>
  <summary>
    Logs whether a log was not uploaded due to cellular log throttling logic.
    Android only.
  </summary>
</histogram>

<histogram name="UMA.LogUpload.ConnetionType" enum="NetworkConnectionType">
  <obsolete>
    Used for analyzing UMA log uploads on cellular connection, but necessary
    after the analysis is finished.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <owner>gayane@chromium.org</owner>
  <summary>
    The network connection type for each successful metrics log upload.
  </summary>
</histogram>

<histogram name="UMA.LogUpload.ResponseOrErrorCode"
    enum="CombinedHttpResponseAndNetErrorCode">
  <owner>holte@chromium.org</owner>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    HTTP response codes and network errors encountered by UMA when attempting to
    upload logs to the server through an HTTPS connection.
  </summary>
</histogram>

<histogram name="UMA.LogUpload.ResponseOrErrorCode.HTTP"
    enum="CombinedHttpResponseAndNetErrorCode">
  <owner>holte@chromium.org</owner>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    HTTP response codes and network errors encountered by UMA when attempting to
    upload logs to the server through an HTTP connection.
  </summary>
</histogram>

<histogram name="UMA.LowEntropySourceValue" expires_after="2018-08-30">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Distribution of the low entropy source value used for field trial
    randomization, recorded on startup.
  </summary>
</histogram>

<histogram name="UMA.MachineIdState" enum="UmaMachineIdState">
  <owner>jwd@chromium.org</owner>
  <summary>
    Tracks if the machine ID is generated successfully and if it changes from
    one run to the next. The machine ID is a 24-bit hash of machine
    characteristics. It is expected to change if an install of Chrome is copied
    to multiple machines. This check happens once per browser startup.
  </summary>
</histogram>

<histogram name="UMA.MetricsIDsReset" enum="BooleanHit">
  <owner>jwd@chromium.org</owner>
  <summary>
    A count of the number of times the metrics ids (client id and low entropy
    source) have been reset due to a cloned install being detected.
  </summary>
</histogram>

<histogram name="UMA.MetricsReporting.Toggle" enum="MetricsReportingChange">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Logged when user successfully enables/disables MetricsReporting or when an
    error occurs.
  </summary>
</histogram>

<histogram name="UMA.MetricsService.DeletedDirectorySize.Failure" units="KB">
  <obsolete>
    This metrics was to provide information for crbug/760317 which has been
    resolved. Removed February, 2018.
  </obsolete>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    Records the size of the metrics directory size, after failing to be deleted.
    This is a temporary metric that will be removed in M63 or M64.
  </summary>
</histogram>

<histogram name="UMA.MetricsService.DeletedDirectorySize.Success" units="KB">
  <obsolete>
    This metrics was to provide information for crbug/760317 which has been
    resolved. Removed February, 2018.
  </obsolete>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    Records the size of the metrics directory size, after being successfully
    deleted. This should always be zero unless there is a bug in the return
    code. This is a temporary metric that will be removed in M63 or M64.
  </summary>
</histogram>

<histogram name="UMA.MetricsService.RecordCurrentHistograms.Time" units="ms">
  <obsolete>
    Removed February, 2018 because persistent metrics are fully launched with no
    observable change in operation time.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    Records how much wall time was spent merging, taking snapshots, and
    recording histograms for reporting to UMA.
  </summary>
</histogram>

<histogram name="UMA.NegativeSamples.Histogram" enum="HistogramNameHash">
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    The lower 32 bits of the ID of the histogram that went negative.
  </summary>
</histogram>

<histogram name="UMA.NegativeSamples.Increment" units="increment">
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    The amount of increment that caused a sample count to become negative.
  </summary>
</histogram>

<histogram name="UMA.NegativeSamples.Reason" enum="NegativeSampleReason">
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    Reasons why a negative sample count would have been created. Currently, only
    negative samples from persistent sparse histograms are being checked.
  </summary>
</histogram>

<histogram name="UMA.Perf.GetData" enum="GetPerfDataOutcome">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    A count of successes and various failure modes related to collecting and
    processing performance data obtained through &quot;perf&quot; on Chrome OS.
  </summary>
</histogram>

<histogram base="true" name="UMA.PersistentAllocator.Allocs" units="bytes">
  <obsolete>
    Deprecated 2/2017 for Issue 689315 which indicated they weren't being used.
  </obsolete>
  <owner>bcwhite@chromium.org</owner>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Size, before padding, of objects allocated from persistent memory. This is
    updated with every allocation.
  </summary>
</histogram>

<histogram base="true" name="UMA.PersistentAllocator.Errors"
    enum="PersistentAllocatorErrors">
  <owner>bcwhite@chromium.org</owner>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Errors detected by the persistent memory allocator. These are set when they
    occur.
  </summary>
</histogram>

<histogram base="true" name="UMA.PersistentAllocator.UsedPct" units="%">
  <owner>bcwhite@chromium.org</owner>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Percentage of persistent memory segment that has been allocated. This is
    updated only once per reporting cycle.
  </summary>
</histogram>

<histogram name="UMA.PersistentHistograms.InitResult"
    enum="PersistentHistogramsInitResult">
  <owner>bcwhite@chromium.org</owner>
  <summary>
    A count of successes and failures for the creation of various forms of
    persistent memory used to store histograms.
  </summary>
</histogram>

<histogram name="UMA.ProfilesCount.AfterErase">
  <obsolete>
    Deprecated as of Jun 2016. The histogram was added for debugging purpose and
    is not needed anymore.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <owner>yiyaoliu@chromium.org</owner>
  <summary>
    Record the number of loaded profiles when a profile is erased from the
    profiles map kept by profile manager.
  </summary>
</histogram>

<histogram name="UMA.ProfileSignInStatus" enum="ProfileSigninStatus">
  <owner>asvitkine@chromium.org</owner>
  <owner>yiyaoliu@chromium.org</owner>
  <summary>
    An enum representing the signin status of all opened profiles during one UMA
    session.
  </summary>
</histogram>

<histogram name="UMA.ProtoCompressionRatio" units="%">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Compression ratio of the serialized protobuf that will be uploaded to the
    UMA server. This serialized protobuf is compressed using gzip.
  </summary>
</histogram>

<histogram name="UMA.ProtoGzipped" enum="Boolean">
  <obsolete>
    Deprecated as of Sep, 2013. Gzipping protobufs is now the default.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>Was the UMA protobuf uploaded earlier compressed or not.</summary>
</histogram>

<histogram name="UMA.ProtoGzippedKBSaved" units="KB">
  <obsolete>
    Deprecated as of August 2015. See UMA.ProtoCompressionRatio instead.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Kilobytes saved from gzipping the protobufs before uploading them.
  </summary>
</histogram>

<histogram name="UMA.SamplingRatePerMille" units="samples permille">
  <owner>jwd@chromium.org</owner>
  <summary>
    Sample rate applied to this client, expressed as number of clients per 1000
    that are in the sample. Recorded on every log upload.
  </summary>
</histogram>

<histogram name="UMA.StoreLogsTime" units="ms">
  <obsolete>
    Deprecated as of August 2015. The histograms showed no unexpected slowness,
    and a profiler is a better tool for identifying any future issues.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The time spent to store unsent logs to local state, which is done
    periodically and also during start up if there was an initial stability log.
  </summary>
</histogram>

<histogram name="UMA.SubprocessMetricsProvider.SubprocessCount"
    units="subprocesses">
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    The number of subprocesses from which persistent metrics were collected,
    logged once with every reporting cycle.
  </summary>
</histogram>

<histogram name="UMA.SubprocessMetricsProvider.UntrackedProcesses"
    enum="SubprocessType">
  <owner>asvitkine@chromium.org</owner>
  <owner>bcwhite@chromium.org</owner>
  <summary>
    The number of subprocesses, by type, from which persistent metrics are NOT
    collected because there is no information about this (likely new) process
    type. Process numbers 1000 or greater are &quot;custom&quot; processes used
    by embedders.
  </summary>
</histogram>

<histogram name="UMA.SyntheticTrials.Count">
  <obsolete>
    Deprecated as of August 2015.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The number of synthetic field trials added to the UMA log when the system
    profile is recorded. Since this is done prior to capturing the histograms
    from the current process, this will generally be logged once per UMA log.
  </summary>
</histogram>

<histogram name="UMA.TruncatedEvents.Omnibox" units="events">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The number of omnibox events that existed in the metrics log before we
    truncated them to save bandwidth.
  </summary>
</histogram>

<histogram name="UMA.TruncatedEvents.UserAction" units="events">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The number of user actions events that existed in the metrics log before we
    truncated them to save bandwidth.
  </summary>
</histogram>

<histogram name="UMA.Unacceptable_Log_Discarded">
  <obsolete>
    Deprecated as of May, 2012 (i.e. Chrome 21+).  Replaced by the
    UMA.UploadResponseStatus.XML and UMA.UploadResponseStatus.Protobuf
    histograms.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>The server returned a 400 code, and we discarded a log.</summary>
  <details>
    This tends to indicate that a syntax error is present in a log, such as
    would appear when a bogus XML tag is included, or the XML is not balanced
    and well structured.
  </details>
</histogram>

<histogram name="UMA.UnsentLogs.Dropped">
  <owner>asvitkine@chromium.org</owner>
  <owner>gayane@chromium.org</owner>
  <summary>
    Counter for number of UMA unsent logs removed from persistent storage.
  </summary>
</histogram>

<histogram name="UMA.UploadCreation" enum="BooleanSuccess">
  <obsolete>
    Deprecated as of August 2015.  This failure case no longer exists.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    For each attempted UMA upload, log whether the upload was successfully
    constructed.  An upload might fail to be constructed, for example, if we try
    to upload before the system is fully initialized; or if serialization of the
    data fails.
  </summary>
</histogram>

<histogram name="UMA.UploadResponseStatus.Protobuf"
    enum="UmaUploadResponseStatus">
  <obsolete>
    Replaced by UMA.LogUpload.ResponseOrErrorCode
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    For each upload to the protocol buffer (v2) UMA server, log whether the
    upload was successful, or whether there was an error.
  </summary>
</histogram>

<histogram name="UMA.UploadResponseStatus.XML" enum="UmaUploadResponseStatus">
  <obsolete>
    Deprecated 2013. No longer tracked.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    For each upload to the XML (v1) UMA server, log whether the upload was
    successful, or whether there was an error.
  </summary>
</histogram>

<histogram name="UMA.UsedResetVariationsFlag" enum="BooleanUsage">
  <obsolete>
    No longer tracked.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Log whether the --reset-variation-state flag was set before the low entropy
    source was requested.
  </summary>
</histogram>

<histogram name="UMA.XMLNodeDumpTime" units="ms">
  <obsolete>
    Deprecated 2013. No longer tracked.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The time spent in converting the XML tree into a character buffer when
    closing a metrics log (Chrome OS).
  </summary>
</histogram>

<histogram name="UMA.XMLWriterDestructionTime" units="ms">
  <obsolete>
    Deprecated 2013. No longer tracked.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The time spent in freeing the XML writer and tree when closing a metrics log
    (Chrome OS).
  </summary>
</histogram>

<histogram name="UnifiedConsent.ConsentBump.Action"
    enum="UnifiedConsentBumpAction" expires_after="2019-08-01">
  <owner>tangltom@chromium.org</owner>
  <owner>msarda@chromium.org</owner>
  <summary>
    The action the user takes when the unified consent bump is shown.
  </summary>
</histogram>

<histogram name="UnifiedConsent.ConsentBump.SuppressReason"
    enum="UnifiedConsentBumpSuppressReason" expires_after="2019-08-01">
  <owner>tangltom@chromium.org</owner>
  <owner>msarda@chromium.org</owner>
  <summary>
    The reason the consent bump isn't shown to the user. This is recorded at
    startup during the migration to Unified Consent.
  </summary>
</histogram>

<histogram name="UnifiedConsent.SyncAndGoogleServicesSettings"
    enum="UnifiedConsentSyncAndGoogleServicesSettings"
    expires_after="2019-08-21">
  <owner>tangltom@chromium.org</owner>
  <owner>droger@chromium.org</owner>
  <summary>
    State of the user settings for Sync and Google services, recorded at
    startup. Multiple samples may be recorded at once, except for 'None' which
    is recorded when no other bucket is used.
  </summary>
</histogram>

<histogram name="UpdateClient.BackgroundDownloaderJobs" units="jobs">
  <owner>sorin@chromium.org</owner>
  <summary>
    The number of download jobs found in the Windows BITS queue. This value is
    expected to be zero in most cases, or a small number otherwise. Large values
    indicate a problem with the job creation or clean up code. The metric is
    recorded before a new BITS job is created and inserted into BITS queue.
  </summary>
</histogram>

<histogram name="UpdateClient.BackgroundDownloaderNewJob" enum="Boolean">
  <owner>sorin@chromium.org</owner>
  <summary>
    True if a new BITS job was created to download the url, or false, if an
    existing job was found in the BITS queue. The metric is recorded when the
    component updater background downloader is asked to download a CRX.
  </summary>
</histogram>

<histogram name="UpdateEngine.Attempt.ConnectionType"
    enum="UpdateEngineConnectionType">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The network connection type when the attempt begins. Possible values include
    &quot;Unknown&quot;, &quot;Ethernet&quot;, &quot;Wifi&quot;,
    &quot;Wimax&quot;, &quot;Bluetooth&quot;, &quot;Cellular&quot;,
    &quot;Tethered Ethernet&quot;, &quot;Tethered Wifi&quot;.

    This is reported when an update attempt ends.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.Attempt.DownloadErrorCode"
    enum="UpdateEngineDownloadErrorCode">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    A more detailed description of the last Payload transfer error when
    downloading the payload.

    This is reported when an attempt ends with the &quot;Payload Download
    Error&quot; result.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.Attempt.DownloadSource"
    enum="UpdateEngineDownloadSource">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The download source used, possible values include &quot;HTTPS Server&quot;,
    &quot;HTTP Server&quot; and &quot;HTTP Peer&quot;.

    This is reported when an update attempt ends.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.Attempt.DurationMinutes" units="minutes">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The number of minutes the update attempt took including the time the device
    spent sleeping.

    This is reported when an update attempt ends.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.Attempt.DurationUptimeMinutes" units="minutes">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The number of minutes the update attempt took excluding the time the device
    spent sleeping.

    This is reported when an update attempt ends.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.Attempt.InternalErrorCode"
    enum="UpdateEngineErrorCode">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    A more detailed description of the last internal error. The possible values
    correspond to the ErrorCode enumeration in the update_engine source code.

    This is reported when an attempt ends with the InternalError result.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.Attempt.Number" units="count">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The attempt number which starts at 0 for the initial attempt and keeps
    increasing for subsequent attempts.

    This is reported when an update attempt ends.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.Attempt.PayloadBytesDownloadedMiB" units="MiB">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The number of payload mebibytes (1048576 bytes) actually download.

    This is reported when an update attempt ends.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.Attempt.PayloadDownloadSpeedKBps" units="KBps">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The payload download speed, in kilobytes per second (1000 bytes/second).
    This is calculated as the number of bytes downloaded divided by the duration
    of the attempt (excluding time spent sleeping).

    This is reported when an update attempt ends.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.Attempt.PayloadSizeMiB" units="MiB">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The payload size, in mebibytes (1048576 bytes).

    This is reported when an update attempt ends.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.Attempt.PayloadType"
    enum="UpdateEnginePayloadFormat">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The payload type, possible values include &quot;Delta&quot; (if Omaha
    specified to download a delta payload); and &quot;Full&quot; (if Omaha
    specified to download a full payload); and &quot;ForcedFull&quot; (if the
    client specified that it would only accept a full payload).

    This is reported when an update attempt ends.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.Attempt.Result" enum="UpdateEngineAttemptResult">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The result of the update attempt.

    This is reported when an update attempt ends.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.Attempt.TimeSinceLastAttemptMinutes"
    units="minutes">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The number of minutes since the last attempt including the time the device
    spent sleeping.

    This is reported when an update attempt ends but only if there was a
    previous attempt for the same update.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.Attempt.TimeSinceLastAttemptUptimeMinutes"
    units="minutes">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The number of minutes since the last attempt excluding the time the device
    spent sleeping.

    This is reported when an update attempt ends but only if there was a
    previous attempt for the same update.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.CertificateCheck.Download"
    enum="UpdateEngineCertificateCheckStatus">
  <owner>deymo@chromium.org</owner>
  <summary>
    The status of the certificate check done when downloading a payload over
    HTTPS. Note that most downloads are done over HTTP.

    This is reported on every HTTPS connection to the payload download server.
    Connection drops on the same payload may report different values.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.CertificateCheck.UpdateCheck"
    enum="UpdateEngineCertificateCheckStatus">
  <owner>deymo@chromium.org</owner>
  <summary>
    The status of the certificate check done when querying Omaha for a new
    version.

    This is reported on every update check.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.Check.DownloadErrorCode"
    enum="UpdateEngineDownloadErrorCode">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    If unable to download a response from Omaha, a more detailed error code is
    reported in this metric.

    This is reported on every update check resulting in &quot;Download
    error&quot;.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.Check.Reaction" enum="UpdateEngineCheckReaction">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    If there is an update available, this metric will track what the device does
    with the information. Possible values include &quot;Applying update&quot;,
    &quot;Deferring update&quot;, &quot;Ignoring update&quot;, and &quot;Backing
    off&quot;.

    This is reported on update checks resulting in &quot;Update available&quot;.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.Check.Result" enum="UpdateEngineCheckResult">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The response from Omaha. Possible values include &quot;No update
    available&quot;, &quot;Update available&quot;, &quot;Download error&quot;,
    &quot;Response parsing error&quot;, and &quot;Reboot pending&quot;.

    This is reported on every update check.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.Check.RollbackTargetVersion"
    enum="UpdateEngineChromeOsVersionPrefix">
  <owner>hunyadym@chromium.org</owner>
  <summary>
    First section of the Chrome OS target version set by device policy and sent
    to Omaha if rollback is also allowed. This is a sparse histogram, since the
    possible valid values are stable Chrome OS version prefixes (usually one per
    milestone).

    Example value: 10323 (meaning M65 stable).

    This is reported on every update check if the TargetVersionPrefix device
    policy is set and the value of the RollbackToTargetVersion device policy is
    one of the values allowing rollback.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.Check.TargetVersion"
    enum="UpdateEngineChromeOsVersionPrefix">
  <owner>hunyadym@chromium.org</owner>
  <summary>
    First section of the Chrome OS target version set by device policy and sent
    to Omaha. This is a sparse histogram, since the possible valid values are
    stable Chrome OS version prefixes (usually one per milestone).

    Example value: 10323 (meaning M65 stable).

    This is reported on every update check if the TargetVersionPrefix device
    policy is set.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.Check.TimeSinceLastCheckMinutes" units="minutes">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The number of minutes since the last check including the time the device
    spent sleeping.

    This is reported on every update check except for the first one.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.Check.TimeSinceLastCheckUptimeMinutes"
    units="minutes">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The number of minutes since the last check excluding the time the device
    spent sleeping.

    This is reported on every update check except for the first one.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.Daily.OSAgeDays" units="days">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The age of the OS in days, defined as the age of the /etc/lsb-release file.

    This is reported on every update check but at most once a day.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.EnterpriseRollback.Failure"
    enum="UpdateEngineChromeOsVersionPrefix">
  <owner>hunyadym@chromium.org</owner>
  <summary>
    First section of the Chrome OS version to which an enterprise rollback
    (rollback initiated by the admin of the device) has failed. This is a sparse
    histogram, since the possible valid values are stable Chrome OS version
    prefixes (usually one per milestone).

    Example value: 10323 (meaning M65 stable).

    This is reported after a rollback image has failed installing.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.EnterpriseRollback.Success"
    enum="UpdateEngineChromeOsVersionPrefix">
  <owner>hunyadym@chromium.org</owner>
  <summary>
    First section of the Chrome OS version to which an enterprise rollback
    (rollback initiated by the admin of the device) has succeeded. This is a
    sparse histogram, since the possible valid values are stable Chrome OS
    version prefixes (usually one per milestone).

    Example value: 10323 (meaning M65 stable).

    This is reported after a rollback image has been successfully installed.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.FailedUpdateCount" units="count">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The number of consecutive times a device has failed to boot an update that
    successfully applied.

    This is reported every time the firmware fails to boot the slot with the
    update and fell back to the slot it originally updated from.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.InstallDateProvisioningSource"
    enum="UpdateEngineInstallDateProvisioningSource">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The source used to provision the install-date-days value sent to Omaha with
    every request.

    This is reported when OOBE (Out Of Box Experience) completes (M34 or later)
    or when upgrading to a version with install-date-days support.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.KernelKey.MaxRollforwardSetSuccess"
    enum="BooleanSuccess">
  <owner>hunyadym@chromium.org</owner>
  <summary>
    Whether setting the MaxKernelKeyRollforward value in the TPM succeeded.

    This is reported every time an update check happens. This is a bool value.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.KernelKey.MaxRollforwardVersion">
  <owner>hunyadym@chromium.org</owner>
  <summary>
    Maximum value the device can roll forward the minimum kernel key version
    value in the TPM during the next boot.

    This value is set to infinity (0xfffffffe) for devices which doesn't allow
    rollback.

    Otherwise, the value is the kernel key version of the earliest image to
    which the device is allowed to roll back.

    This is reported every time an update check happens. This is a sparse value.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.KernelKey.MinVersion">
  <owner>hunyadym@chromium.org</owner>
  <summary>
    Minimum kernel key version already set in the TPM. This value specifies
    which images can be booted up with verified boot.

    This is reported every time an update check happens. This is a sparse value.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.Rollback.Result" enum="BooleanSuccess">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    Whether rollback worked.

    This is reported every time there's a rollback request.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.SuccessfulUpdate.AttemptCount" units="count">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The total number of update attempts required to update the device.

    This is reported on every successful update.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.SuccessfulUpdate.BytesDownloadedMiB" units="MiB">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The total number of bytes downloaded in mebibytes (1048576 bytes) using all
    available sources (e.g. HTTP, HTTPS, HTTP Peer).

    This is reported on every successful update.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.SuccessfulUpdate.BytesDownloadedMiBHttpPeer"
    units="MiB">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The total number of bytes downloaded in mebibytes (1048576 bytes) using HTTP
    from a local peer.

    This is reported on every successful update.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.SuccessfulUpdate.BytesDownloadedMiBHttpServer"
    units="MiB">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The total number of bytes downloaded in mebibytes (1048576 bytes) using
    HTTP.

    This is reported on every successful update.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.SuccessfulUpdate.BytesDownloadedMiBHttpsServer"
    units="MiB">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The total number of bytes downloaded in mebibytes (1048576 bytes) using
    HTTPS.

    This is reported on every successful update.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.SuccessfulUpdate.DownloadOverheadPercentage"
    units="%">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The ratio between bytes downloaded and payload size minus 100.

    This is reported on every successful update.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.SuccessfulUpdate.DownloadSourcesUsed"
    enum="UpdateEngineDownloadSources">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The various download sources used - this is a combination of the values
    &quot;HTTPS Server&quot;, &quot;HTTP Server&quot; and &quot;HTTP Peer&quot;.

    This is reported on every successful update.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.SuccessfulUpdate.PayloadSizeMiB" units="MiB">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The size of the payload, in mebibytes (1048576 bytes).

    This is reported on every successful update.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.SuccessfulUpdate.PayloadType"
    enum="UpdateEnginePayloadFormat">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The payload type (&quot;Delta&quot;, &quot;Full&quot;,
    &quot;ForcedFull&quot;) used.

    This is reported on every successful update.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.SuccessfulUpdate.RebootCount" units="count">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The total number of reboots during the update.

    This is reported on every successful update.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.SuccessfulUpdate.TotalDurationMinutes"
    units="minutes">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The total number of minutes from when an update was detected until an update
    (possibly another update) was applied. This includes the time waiting for
    update checks and time the device spent sleeping.

    This is reported on every successful update.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.SuccessfulUpdate.TotalDurationUptimeMinutes"
    units="minutes">
  <owner>senj@chromium.org</owner>
  <summary>
    The total number of minutes from when an update was detected until an update
    (possibly another update) was applied. This does not include the time
    waiting for update checks and time the device spent sleeping.

    This is reported on every successful update.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.SuccessfulUpdate.UpdatesAbandonedCount"
    units="count">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The total number of updates that were abandoned since the last successful
    update.

    This is reported on every successful update.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.SuccessfulUpdate.UrlSwitchCount" units="count">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The total number of times the URL was switched (from e.g. HTTPS to HTTP)
    because of failures.

    This is reported on every successful update.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpdateEngine.TimeToRebootMinutes" units="minutes">
  <owner>zeuthen@chromium.org</owner>
  <summary>
    The duration between when an update has successfully completed and the user
    is presented with the &quot;reboot arrow&quot; and when the system has
    booted into the new update.

    This is reported every time the device is rebooted after an update has been
    applied.

    This metric is specific to Chrome OS.
  </summary>
</histogram>

<histogram name="UpgradeDetector.NotificationStage"
    enum="UpgradeNotificationStage">
  <owner>spqchan@chromium.org</owner>
  <summary>
    Tracks the upgrade notification stage. This is recorded with every UMA log.
  </summary>
</histogram>

<histogram name="Uptime.ChromeExecToLoginPromptVisibleAfterLogout" units="ms">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Measures the time elapsed on Chrome OS between when Chrome is started, and
    when the login prompt is again visible after a logout.  This statistic is
    only collected when preceeded by a logout.
  </summary>
</histogram>

<histogram name="Uptime.DBusCrash" units="ms">
  <owner>derat@chromium.org</owner>
  <summary>
    The system uptime on Chrome OS when the dbus-daemon process crashes,
    resulting in a reboot.
  </summary>
</histogram>

<histogram name="Uptime.LoginPromptSetupTimeAfterLogout" units="ms">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Measures the time elapsed on Chrome OS for setting up for a login after a
    logout. More specifically, it is the time between when the Cryptohome is
    unmounted (the last step in the logout process) and when the login prompt is
    again visible after a logout.
  </summary>
</histogram>

<histogram name="Uptime.Logout" units="ms">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Measures the time elapsed on Chrome OS when performing a logout. More
    specifically, it is the time between when a logout is initiated and when the
    Cryptohome is unmounted, signaling the last step in the logout process. This
    statistic is not collected when the logout is part of a restart or shutdown.
  </summary>
</histogram>

<histogram name="Uptime.LogoutToLoginPromptVisible" units="ms">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Measures the time elapsed on Chrome OS between initiating a logout and the
    next time the login prompt is visible again.  This statistic is not
    collected if the machine is shutdown between the logout initiation and the
    prompt becoming visible.
  </summary>
</histogram>

<histogram name="Uptime.LogoutToUIStopAfterLogout" units="ms">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Measures the time elapsed on Chrome OS between when a logout is initiated
    and the UI has stopped (and Chrome has exited) during the logout process.
    This statistic is not collected if the logout is part of a restart or
    shutdown.
  </summary>
</histogram>

<histogram name="Uptime.OtherProcessesTerminatedToChromeExecAfterLogout"
    units="ms">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Measures the time elapsed on Chrome OS between when all user-associated
    processes have been terminated during the logout process and when Chrome is
    started again to show the login screen.  Since at least ChromeOS M62,
    equivalent to Uptime.XTerminatedToChromeExecAfterLogout.
  </summary>
</histogram>

<histogram name="Uptime.ProcessesTerminatedToXTerminatedAfterLogout" units="ms">
  <obsolete>
    Deprecated 05/2018 in Issue 721891 with removal of X11.  Replaced by
    Uptime.OtherProcessesTerminatedToChromeExecAfterLogout in ChromeOS M69.
    Equal to 0 since at least ChromeOS M62.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Measures the time elapsed on Chrome OS between when all user-associated
    processes (including the X server) have been terminated during the logout
    process.  This statistic is not collected if the logout is part of a restart
    or shutdown.
  </summary>
</histogram>

<histogram name="Uptime.UIStopToProcessesTerminatedAfterLogout" units="ms">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Measures the time elapsed on Chrome OS between when the UI has stopped
    (Chrome has exited), and when all other associated processes have been
    terminated during the logout process. This statistic is not collected if the
    logout is part of a restart or shutdown.
  </summary>
</histogram>

<histogram name="Uptime.XTerminatedToChromeExecAfterLogout" units="ms">
  <obsolete>
    Replaced by Uptime.OtherProcessesTerminatedToChromeExecAfterLogout in
    ChromeOS M69.  Equivalent to the new name since at least ChromeOS M62.
  </obsolete>
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Measures the time elapsed on Chrome OS between when the X server has been
    terminated from a previous logout and when Chrome is started again to show
    the login screen.
  </summary>
</histogram>

<histogram name="URLBlacklistManager.ConstructorBuildTime" units="ms">
  <owner>grt@chromium.org</owner>
  <summary>
    The time it took to build and set the URL blacklist on the main thread
    within URLBlacklistManager's constructor.
  </summary>
</histogram>

<histogram name="UrlFetcher.StringResponseSize" units="KB">
  <obsolete>
    Removed 10/2017.
  </obsolete>
  <owner>mmenke@chromium.org</owner>
  <summary>
    Size (in kilobytes) of response bodies retrieved as strings from URLFetcher.
  </summary>
</histogram>

<histogram name="UserCert.ContentDisposition" enum="UserCertContentDisposition">
  <obsolete>
    Removed in M57.
  </obsolete>
  <owner>rsleevi@chromium.org</owner>
  <owner>svaldez@chromium.org</owner>
  <summary>
    Distribution of Content-Disposition headers sent with x-x509-user-cert
    content types.
  </summary>
</histogram>

<histogram name="UserImage.ChangeChoice" enum="ChromeOSUserImageId">
  <owner>achuith@chromium.org</owner>
  <summary>
    Distribution of the default images that users choose in Change Picture
    dialog (Chrome OS). One sample is taken each time the user changes picture.
  </summary>
</histogram>

<histogram name="UserImage.FirstTimeChoice" enum="ChromeOSUserImageId">
  <owner>achuith@chromium.org</owner>
  <summary>
    Distribution of the default images chosen on user image screen during
    out-of-the-box experience (Chrome OS). One sample is taken each time the
    user confirms the choice by clicking OK button.
  </summary>
</histogram>

<histogram name="UserImage.LoggedIn" enum="ChromeOSUserImageId">
  <owner>achuith@chromium.org</owner>
  <summary>
    Distribution of the default images that existing users login with (Chrome
    OS). One sample is taken each time the user logs in.
  </summary>
</histogram>

<histogram name="UserImage.ProfileDownloadResult"
    enum="ProfileImageDownloadResult">
  <owner>achuith@chromium.org</owner>
  <summary>
    Profile image download result for UserManager (either on behalf of the
    Change Picture prefs page, OOBE or scheduled refresh after user login).
  </summary>
</histogram>

<histogram name="UserImage.ProfileDownloadTime" units="ms">
  <owner>achuith@chromium.org</owner>
  <summary>The time it took to download user's profile picture.</summary>
</histogram>

<histogram name="UserImage.ScreenIsShownTime" units="ms">
  <owner>achuith@chromium.org</owner>
  <summary>
    Time histogram of the &quot;Choose Picture&quot; OOBE screen display delay.
  </summary>
</histogram>

<histogram name="UserManager.LoginUserType" enum="UserType">
  <owner>achuith@chromium.org</owner>
  <summary>
    The number of users of different types that log in to the system (Chrome
    OS).
  </summary>
</histogram>

<histogram name="UserManager.LogoutToLoginDelay" units="seconds">
  <owner>alemate@chromium.org</owner>
  <owner>omrilio@chromium.org</owner>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The time between one regular user logging out and a different regular user
    logging in (Chrome OS). Delays above thirty minutes or which span system
    reboots or non-regular-user logins are not reported.
  </summary>
</histogram>

<histogram name="UserManager.ProfileEverInitializedMigrationCompleted"
    enum="BooleanCompleted">
  <owner>atwilson@chromium.org</owner>
  <summary>
    Whether the profile_ever_initialized() user attribute migration has
    completed for the current user.
  </summary>
</histogram>

<histogram name="UserManager.UserTypeChanged" enum="UserTypeChanged">
  <owner>alemate@chromium.org</owner>
  <summary>
    This is logged when new user type reported by Gaia is different from the old
    one (for existing user).
  </summary>
</histogram>

<histogram name="UserSessionManager.RestoreOnCrash.AccountIdValid"
    enum="BooleanValid">
  <owner>msarda@chromium.org</owner>
  <summary>
    The result of restoring account id on Chrome restart after crash.
  </summary>
</histogram>

<histogram name="UserSessionManager.UserPodsDisplay" enum="UserPodsDisplay">
  <owner>achuith@chromium.org</owner>
  <summary>
    Whether the user pods were enabled during login, and what could disable
    them.
  </summary>
</histogram>

<histogram name="V8.ArrayBufferBigAllocations" units="MB">
  <obsolete>
    Deprecated 5/2017 in Issue 704922. Replaced by
    V8.ArrayBufferLargeAllocations.
  </obsolete>
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <owner>kschimpf@chromium.org</owner>
  <summary>Number of bytes requested in an array buffer allocation.</summary>
</histogram>

<histogram name="V8.ArrayBufferLargeAllocations" units="MB">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <owner>kschimpf@chromium.org</owner>
  <summary>
    Number of bytes requested in array buffer allocations greater than one
    megabyte.
  </summary>
</histogram>

<histogram name="V8.ArrayBufferNewSizeFailures" units="MB">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <owner>kschimpf@chromium.org</owner>
  <summary>Array buffer sizes for which V8 failed to allocate memory.</summary>
</histogram>

<histogram name="V8.AsmModuleSizeBytes" units="bytes">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <owner>aseemgarg@chromium.org</owner>
  <summary>Size of asm.js module (in asm.js format).</summary>
</histogram>

<histogram name="V8.AsmWasmTranslationMicroSeconds" units="microseconds">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <owner>aseemgarg@chromium.org</owner>
  <summary>
    Time to convert asm.js code to WebAssembly.

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

<histogram name="V8.AsmWasmTranslationThroughput" units="MB/s">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <owner>aseemgarg@chromium.org</owner>
  <summary>
    Throughput of translation of asm.js code to WebAssembly in MB/s.
  </summary>
</histogram>

<histogram name="V8.ASTOptimization">
  <obsolete>
    This histogram is no longer present in V8.
  </obsolete>
  <owner>hablich@chromium.org</owner>
  <summary>TBD</summary>
</histogram>

<histogram name="V8.CodeCacheRejectReason" enum="V8CodeCacheRejectReason">
  <owner>yangguo@chromium.org</owner>
  <summary>
    Reason code data has been rejected when attempting to deserialize.
  </summary>
</histogram>

<histogram name="V8.CodeCacheSizeRatio" units="%">
  <owner>yangguo@chromium.org</owner>
  <summary>Cache size to source size ratio when caching compiled code.</summary>
</histogram>

<histogram name="V8.CodeCreation">
  <obsolete>
    This histogram is no longer present in V8.
  </obsolete>
  <owner>hablich@chromium.org</owner>
  <summary>TBD</summary>
</histogram>

<histogram name="V8.CodeGeneration">
  <obsolete>
    This histogram is no longer present in V8.
  </obsolete>
  <owner>hablich@chromium.org</owner>
  <summary>Time spent generating native code for functions.</summary>
</histogram>

<histogram name="V8.CodegenFractionCrankshaft" units="%">
  <obsolete>
    This histogram is no longer present in V8.
  </obsolete>
  <owner>hablich@chromium.org</owner>
  <owner>rmcilroy@chromium.org</owner>
  <summary>
    Fraction of the total generated code which was generated using the
    Crankshaft optimizing compiler, after each GC in percent.
  </summary>
</histogram>

<histogram name="V8.Compile" units="ms">
  <obsolete>
    This histogram has been replaced by V8.CompileMicroSeconds.
  </obsolete>
  <owner>hablich@chromium.org</owner>
  <owner>yangguo@chromium.org</owner>
  <summary>Time spent in V8 compiler (full codegen).</summary>
</histogram>

<histogram name="V8.CompileCacheableMicroSeconds" units="microseconds">
  <owner>yangguo@chromium.org</owner>
  <summary>
    Time spent compiling a script that may be subject to caching.

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

<histogram name="V8.CompileDeserialize" units="ms">
  <obsolete>
    This histogram has been replaced by V8.CompileDeserializeMicroSeconds.
  </obsolete>
  <owner>vogelheim@chromium.org</owner>
  <summary>Time spent deseriailzing code, used by V8 code caching.</summary>
</histogram>

<histogram name="V8.CompileDeserializeMicroSeconds" units="microseconds">
  <owner>vogelheim@chromium.org</owner>
  <summary>
    Time spent deseriailzing code, used by V8 code caching.

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

<histogram name="V8.CompileEval" units="ms">
  <obsolete>
    This histogram has been replaced by V8.CompileEvalMicroSeconds.
  </obsolete>
  <owner>yangguo@chromium.org</owner>
  <summary>Time spent in V8 compiler (full codegen) for eval.</summary>
</histogram>

<histogram name="V8.CompileEvalMicroSeconds" units="microseconds">
  <owner>yangguo@chromium.org</owner>
  <summary>
    Time spent in V8 compiler (full codegen) for eval.

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

<histogram name="V8.CompileHeuristicsDecision" enum="CompileHeuristicsDecision">
  <obsolete>
    This histogram has been replaced by V8.CompileTime.CacheBehaviour.
  </obsolete>
  <owner>kouhei@chromium.org</owner>
  <summary>
    V8 script compile function variant which was picked. This contains
    information such as {if,why} v8 {code,parser} was
    {produced,consumed,bypassed}.
  </summary>
</histogram>

<histogram name="V8.CompileInlineScriptMicroSeconds" units="microseconds">
  <obsolete>
    This histogram has been replaced by
    V8.CompileTimeMicroSeconds.NoCache.InlineScript.
  </obsolete>
  <owner>yangguo@chromium.org</owner>
  <summary>Time spent compiling an inline script.</summary>
</histogram>

<histogram name="V8.CompileLazy" units="ms">
  <obsolete>
    This histogram has been replaced by V8.CompileLazyMicroSeconds.
  </obsolete>
  <owner>hablich@chromium.org</owner>
  <summary>Time spent compiling functions lazily on first run.</summary>
</histogram>

<histogram name="V8.CompileLazyMicroSeconds" units="microseconds">
  <owner>hablich@chromium.org</owner>
  <summary>
    Aggregated time spent compiling functions lazily during a single script
    execution.

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

<histogram name="V8.CompileMicroSeconds" units="microseconds">
  <owner>yangguo@chromium.org</owner>
  <summary>
    Time spent in V8 compiler (full codegen) excluding parser.

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

<histogram name="V8.CompileNoncacheableMicroSeconds" units="microseconds">
  <obsolete>
    This histogram has been replaced by the subcategories of
    V8.CompileTimeMicroSeconds.NoCache
  </obsolete>
  <owner>yangguo@chromium.org</owner>
  <summary>
    Time spent compiling a script that cannot be subject to caching.
  </summary>
</histogram>

<histogram name="V8.CompileScript" units="ms">
  <obsolete>
    This histogram has been replaced by V8.CompileScriptMicroSeconds.
  </obsolete>
  <owner>yangguo@chromium.org</owner>
  <summary>
    Total time spent in compiling a script (incl. parsing/caching).

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

<histogram name="V8.CompileScript.CacheBehaviour" enum="V8CacheBehaviour">
  <owner>leszeks@chromium.org</owner>
  <summary>
    The cache behaviour of compiling a V8 script, including whether we produced
    or consumed a code cache, whether we hit V8's isolate's cache, and if we
    didn't use the code cache, the reason why not.
  </summary>
</histogram>

<histogram name="V8.CompileScriptMicroSeconds" units="microseconds">
  <owner>yangguo@chromium.org</owner>
  <summary>
    Total time spent in compiling a script (incl. parsing/caching).

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

<histogram name="V8.CompileScriptMicroSeconds.BackgroundThread"
    units="microseconds">
  <owner>rmcilroy@chromium.org</owner>
  <summary>
    Total time spent in compiling a script (incl. parsing) on a background
    thread.

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

<histogram name="V8.CompileScriptMicroSeconds.ConsumeCache"
    units="microseconds">
  <owner>leszeks@chromium.org</owner>
  <summary>
    Total time spent in compiling a script when the 'compilation' is
    deserializing it from the code cache.

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

<histogram name="V8.CompileScriptMicroSeconds.ConsumeCache.Failed"
    units="microseconds">
  <owner>leszeks@chromium.org</owner>
  <summary>
    Total time spent in compiling a script  (incl. parsing/caching) when the
    compilation tried to deserialize it from the code cache, but failed.

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

<histogram name="V8.CompileScriptMicroSeconds.IsolateCacheHit"
    units="microseconds">
  <owner>leszeks@chromium.org</owner>
  <summary>
    Total time spent in compiling a script (incl. parsing/caching) in the case
    where the V8 isolate's compilation cache is hit.

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

<histogram name="V8.CompileScriptMicroSeconds.NoCache.CacheTooCold"
    units="microseconds">
  <owner>leszeks@chromium.org</owner>
  <summary>
    Total time spent in compiling a script (incl. parsing) when the cache is too
    cold to use.

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

<histogram name="V8.CompileScriptMicroSeconds.NoCache.InlineScript"
    units="microseconds">
  <owner>leszeks@chromium.org</owner>
  <summary>
    Total time spent in compiling a script (incl. parsing) when the script is an
    inline script.

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

<histogram name="V8.CompileScriptMicroSeconds.NoCache.Other"
    units="microseconds">
  <owner>leszeks@chromium.org</owner>
  <summary>
    Total time spent in compiling a script (incl. parsing) when we do not want
    to cache it.

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

<histogram name="V8.CompileScriptMicroSeconds.NoCache.ScriptTooSmall"
    units="microseconds">
  <owner>leszeks@chromium.org</owner>
  <summary>
    Total time spent in compiling a script (incl. parsing) when the script is
    too small to be cached.

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

<histogram name="V8.CompileScriptMicroSeconds.ProduceCache"
    units="microseconds">
  <owner>leszeks@chromium.org</owner>
  <summary>
    Total time spent in compiling a script (incl. parsing) and serializing it
    for the code cache.

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

<histogram name="V8.CompileSerialize" units="ms">
  <obsolete>
    This histogram has been replaced by V8.CompileSerializeMicroSeconds.
  </obsolete>
  <owner>vogelheim@chromium.org</owner>
  <summary>Time spent serializing code, used by V8 code caching.</summary>
</histogram>

<histogram name="V8.CompileSerializeMicroSeconds" units="microseconds">
  <owner>vogelheim@chromium.org</owner>
  <summary>
    Time spent serializing code, used by V8 code caching.

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

<histogram name="V8.DebugFeatureUsage" enum="V8DebugFeature">
  <owner>yangguo@chromium.org</owner>
  <summary>
    Debugger feature used at least once per isolate, recorded on first use.
  </summary>
</histogram>

<histogram name="V8.DeferredCodeGeneration">
  <obsolete>
    This histogram is no longer present in V8
  </obsolete>
  <owner>hablich@chromium.org</owner>
  <summary>Time spent generating deferred code stubs.</summary>
</histogram>

<histogram name="V8.DetachedContextAgeInGC">
  <owner>ulan@chromium.org</owner>
  <summary>
    Number of garbage collections that a detached global context survives,
    recorded after each major garbage collection. Values greater than 7 indicate
    a memory leak.
  </summary>
</histogram>

<histogram name="V8.ErrorsThrownPerContext" units="errors">
  <owner>hablich@chromium.org</owner>
  <summary>
    The amount of JavaScript errors thrown by V8 per context. It does not count
    custom errors and ignores catched errors thrown by V8. This is collected
    after the context is detached.
  </summary>
</histogram>

<histogram name="V8.ExecutableMemoryMax" units="bytes">
  <obsolete>
    This histogram is no longer present in V8
  </obsolete>
  <owner>hablich@chromium.org</owner>
  <summary>
    The maximum memory used to store V8 compiled code on a given process.
  </summary>
</histogram>

<histogram name="V8.Execute" units="ms">
  <owner>rmcilroy@chromium.org</owner>
  <summary>
    Time spent in JavaScript Execution, including runtime calls, callbacks, and
    lazy compilation.
  </summary>
</histogram>

<histogram name="V8.GC.ParallelTaskLatencyMicroSeconds" units="microseconds">
  <owner>gab@chromium.org</owner>
  <summary>
    Latency (post-to-schedule) of each parallel task posted during V8 garbage
    collection.

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

<histogram name="V8.GCBackgroundMarking" units="ms">
  <owner>ulan@chromium.org</owner>
  <summary>
    Time spent in background tasks doing marking in one GC cycle. It is recorded
    after each GC.
  </summary>
</histogram>

<histogram name="V8.GCBackgroundScavenger" units="ms">
  <owner>ulan@chromium.org</owner>
  <summary>
    Time spent in background tasks doing scavenging in one GC cycle. It is
    recorded after each GC.
  </summary>
</histogram>

<histogram name="V8.GCBackgroundSweeping" units="ms">
  <owner>ulan@chromium.org</owner>
  <summary>
    Time spent in background tasks doing sweeping in one GC cycle. It is
    recorded after each GC.
  </summary>
</histogram>

<histogram name="V8.GCCompactor" units="ms">
  <owner>hpayer@chromium.org</owner>
  <summary>Time spent in mark-sweep phase of GC.</summary>
</histogram>

<histogram name="V8.GCCompactorBackground" units="ms">
  <owner>hpayer@chromium.org</owner>
  <summary>
    Time spent in mark-sweep phase of GC in a background isolate.
  </summary>
</histogram>

<histogram name="V8.GCCompactorForeground" units="ms">
  <owner>hpayer@chromium.org</owner>
  <summary>
    Time spent in mark-sweep phase of GC in a foreground isolate.
  </summary>
</histogram>

<histogram name="V8.GCContext" units="ms">
  <owner>hpayer@chromium.org</owner>
  <summary>Time spent doing a full GC during an IdleNotification.</summary>
</histogram>

<histogram name="V8.GCFinalizeMC" units="ms">
  <owner>ulan@chromium.org</owner>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Time spent in the final atomic pause of incremental latency-optimized
    Mark-Compact GC.
  </summary>
</histogram>

<histogram name="V8.GCFinalizeMC.Clear" units="ms">
  <owner>ulan@chromium.org</owner>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Time spent in the clearing phase of incremental latency-optimized
    Mark-Compact GC.
  </summary>
</histogram>

<histogram name="V8.GCFinalizeMC.Epilogue" units="ms">
  <owner>ulan@chromium.org</owner>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Time spent in the epilogue of incremental latency-optimized Mark-Compact GC.
  </summary>
</histogram>

<histogram name="V8.GCFinalizeMC.Evacuate" units="ms">
  <owner>ulan@chromium.org</owner>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Time spent in the evacuation phase of incremental latency-optimized
    Mark-Compact GC.
  </summary>
</histogram>

<histogram name="V8.GCFinalizeMC.Finish" units="ms">
  <owner>ulan@chromium.org</owner>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Time spent in the finish phase of incremental latency-optimized Mark-Compact
    GC.
  </summary>
</histogram>

<histogram name="V8.GCFinalizeMC.Mark" units="ms">
  <owner>ulan@chromium.org</owner>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Time spent in the marking phase of incremental latency-optimized
    Mark-Compact GC.
  </summary>
</histogram>

<histogram name="V8.GCFinalizeMC.Prologue" units="ms">
  <owner>ulan@chromium.org</owner>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Time spent in the prologue of incremental latency-optimized Mark-Compact GC.
  </summary>
</histogram>

<histogram name="V8.GCFinalizeMC.Sweep" units="ms">
  <owner>ulan@chromium.org</owner>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Time spent in the sweeping phase of incremental latency-optimized
    Mark-Compact GC.
  </summary>
</histogram>

<histogram name="V8.GCFinalizeMCBackground" units="ms">
  <owner>ulan@chromium.org</owner>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Time spent in the final atomic pause of incremental latency-optimized
    Mark-Compact GC in a background isolate.
  </summary>
</histogram>

<histogram name="V8.GCFinalizeMCForeground" units="ms">
  <owner>ulan@chromium.org</owner>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Time spent in the final atomic pause of incremental latency-optimized
    Mark-Compact GC in a foreground isolate.
  </summary>
</histogram>

<histogram name="V8.GCFinalizeMCReduceMemory" units="ms">
  <owner>ulan@chromium.org</owner>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Time spent in the final atomic pause of incremental memory-optimized
    Mark-Compact GC.
  </summary>
</histogram>

<histogram name="V8.GCFinalizeMCReduceMemoryBackground" units="ms">
  <owner>ulan@chromium.org</owner>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Time spent in the final atomic pause of incremental memory-optimized
    Mark-Compact GC in a background isolate.
  </summary>
</histogram>

<histogram name="V8.GCFinalizeMCReduceMemoryForeground" units="ms">
  <owner>ulan@chromium.org</owner>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Time spent in the final atomic pause of incremental memory-optimized
    Mark-Compact GC in a foreground isolate.
  </summary>
</histogram>

<histogram name="V8.GCIdleNotification" units="ms">
  <owner>hpayer@chromium.org</owner>
  <summary>Time spent in IdleNotifications.</summary>
</histogram>

<histogram name="V8.GCIdleTimeAllottedInMS" units="ms">
  <obsolete>
    Deprecated in August 2017. No longer tracked.
  </obsolete>
  <owner>hpayer@chromium.org</owner>
  <summary>Idle time passed to V8 via IdleNotifications.</summary>
</histogram>

<histogram name="V8.GCIdleTimeLimit.Overshot" units="ms">
  <obsolete>
    Deprecated in August 2017. No longer tracked.
  </obsolete>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Milliseconds the idle time limit was overshot by the IdleNotification.
  </summary>
</histogram>

<histogram name="V8.GCIdleTimeLimit.Undershot" units="ms">
  <obsolete>
    Deprecated in August 2017. No longer tracked.
  </obsolete>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Milliseconds the idle time limit was undershot by the IdleNotification.
  </summary>
</histogram>

<histogram name="V8.GCIncrementalMarking" units="ms">
  <owner>hpayer@chromium.org</owner>
  <summary>Time spent doing incremental marking steps during GC.</summary>
</histogram>

<histogram name="V8.GCIncrementalMarkingFinalize" units="ms">
  <owner>hpayer@chromium.org</owner>
  <summary>Time spent in finalizing incremental marking.</summary>
</histogram>

<histogram name="V8.GCIncrementalMarkingReason" enum="GarbageCollectionReason">
  <owner>ulan@chromium.org</owner>
  <summary>Reason an incremental marking was started in V8.</summary>
</histogram>

<histogram name="V8.GCIncrementalMarkingStart" units="ms">
  <owner>hpayer@chromium.org</owner>
  <summary>Time spent in starting incremental marking.</summary>
</histogram>

<histogram name="V8.GCIncrementalMarkingSum" units="ms">
  <owner>ulan@chromium.org</owner>
  <summary>
    The total time spent in incremental marking steps in one GC cycle. It is
    only recorded if the time is non-zero.
  </summary>
</histogram>

<histogram name="V8.GCLowMemoryNotification" units="ms">
  <owner>hpayer@chromium.org</owner>
  <summary>Time spent in LowMemoryNotifications.</summary>
</histogram>

<histogram name="V8.GCMarkCompactReason" enum="GarbageCollectionReason">
  <owner>ulan@chromium.org</owner>
  <summary>Reason a mark-compact garbage collection was started in V8.</summary>
</histogram>

<histogram name="V8.GCScavenger" units="ms">
  <owner>hpayer@chromium.org</owner>
  <summary>Time spent in scavenging phase of GC.</summary>
</histogram>

<histogram name="V8.GCScavengerBackground" units="ms">
  <owner>hpayer@chromium.org</owner>
  <summary>
    Time spent in scavenging phase of GC in a background isolate.
  </summary>
</histogram>

<histogram name="V8.GCScavengeReason" enum="GarbageCollectionReason">
  <owner>ulan@chromium.org</owner>
  <summary>Reason a scavenge garbage collection was started in V8.</summary>
</histogram>

<histogram name="V8.GCScavengerForeground" units="ms">
  <owner>hpayer@chromium.org</owner>
  <summary>
    Time spent in scavenging phase of GC in a foreground isolate.
  </summary>
</histogram>

<histogram name="V8.GCYoungGenerationHandling" enum="YoungGenerationHandling">
  <owner>mlippautz@chromium.org</owner>
  <summary>
    Type of garbage collection strategy used to collect the young generation.
  </summary>
</histogram>

<histogram name="V8.Initializer.LoadV8Snapshot.Result"
    enum="V8InitializerLoadV8SnapshotResult">
  <owner>oth@chromium.org</owner>
  <summary>Results from snapshot loading.</summary>
</histogram>

<histogram name="V8.Initializer.OpenV8File.Result"
    enum="V8InitializerOpenV8FileResult">
  <owner>oth@chromium.org</owner>
  <summary>Results from opening V8 snapshot files.</summary>
</histogram>

<histogram name="V8.MemoryExternalFragmentationCellSpace" units="%">
  <obsolete>
    This histogram has been replaced by V8.MemoryExternalFragmentationOldSpace.
  </obsolete>
  <owner>hpayer@chromium.org</owner>
  <summary>
    External memory fragmentation in the cell space after each GC in percent.
  </summary>
</histogram>

<histogram name="V8.MemoryExternalFragmentationCodeSpace" units="%">
  <owner>hpayer@chromium.org</owner>
  <summary>
    External memory fragmentation in the code space after each GC in percent.
  </summary>
</histogram>

<histogram name="V8.MemoryExternalFragmentationLoSpace" units="%">
  <owner>hpayer@chromium.org</owner>
  <summary>
    External memory fragmentation in the large object space after each GC in
    percent.
  </summary>
</histogram>

<histogram name="V8.MemoryExternalFragmentationMapSpace" units="%">
  <owner>hpayer@chromium.org</owner>
  <summary>
    External memory fragmentation in the map space after each GC in percent.
  </summary>
</histogram>

<histogram name="V8.MemoryExternalFragmentationOldDataSpace" units="%">
  <obsolete>
    This histogram has been replaced by V8.MemoryExternalFragmentationOldSpace.
  </obsolete>
  <owner>hpayer@chromium.org</owner>
  <summary>
    External memory fragmentation in the old data space after each GC in
    percent.
  </summary>
</histogram>

<histogram name="V8.MemoryExternalFragmentationOldPointerSpace" units="%">
  <obsolete>
    This histogram has been replaced by V8.MemoryExternalFragmentationOldSpace.
  </obsolete>
  <owner>hpayer@chromium.org</owner>
  <summary>
    External memory fragmentation in the old pointer space after each GC in
    percent.
  </summary>
</histogram>

<histogram name="V8.MemoryExternalFragmentationOldSpace" units="%">
  <owner>hpayer@chromium.org</owner>
  <summary>
    External memory fragmentation in the old space after each GC in percent.
  </summary>
</histogram>

<histogram name="V8.MemoryExternalFragmentationTotal" units="%">
  <owner>hpayer@chromium.org</owner>
  <summary>
    Total external memory fragmentation after each GC in percent.
  </summary>
</histogram>

<histogram name="V8.MemoryHeapCommitted" units="KB">
  <obsolete>
    This histogram has been replaced by Memory.Experimental.Renderer2.V8.
  </obsolete>
  <owner>ulan@chromium.org</owner>
  <summary>
    The committed memory used by V8 in KB averaged over time, logged before each
    GC.
  </summary>
</histogram>

<histogram name="V8.MemoryHeapFractionCellSpace" units="%">
  <obsolete>
    Deprecated as of 09/2017.
  </obsolete>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Fraction of the total heap used by the cell space after each GC in percent.
  </summary>
</histogram>

<histogram name="V8.MemoryHeapFractionCodeSpace" units="%">
  <obsolete>
    Deprecated as of 09/2017.
  </obsolete>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Fraction of the total heap used by the code space after each GC in percent.
  </summary>
</histogram>

<histogram name="V8.MemoryHeapFractionLoSpace" units="%">
  <obsolete>
    Deprecated as of 09/2017.
  </obsolete>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Fraction of the total heap used by the lo space after each GC in percent.
  </summary>
</histogram>

<histogram name="V8.MemoryHeapFractionMapSpace" units="%">
  <obsolete>
    Deprecated as of 09/2017.
  </obsolete>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Fraction of the total heap used by the map space after each GC in percent.
  </summary>
</histogram>

<histogram name="V8.MemoryHeapFractionNewSpace" units="%">
  <obsolete>
    Deprecated as of 09/2017.
  </obsolete>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Fraction of the total heap used by the new space after each GC in percent.
  </summary>
</histogram>

<histogram name="V8.MemoryHeapFractionOldDataSpace" units="%">
  <obsolete>
    Deprecated as of 09/2017.
  </obsolete>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Fraction of the total heap used by the old data space after each GC in
    percent.
  </summary>
</histogram>

<histogram name="V8.MemoryHeapFractionOldPointerSpace" units="%">
  <obsolete>
    Deprecated as of 09/2017.
  </obsolete>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Fraction of the total heap used by the old pointer space after each GC in
    percent.
  </summary>
</histogram>

<histogram name="V8.MemoryHeapFractionOldSpace" units="%">
  <obsolete>
    Deprecated as of 09/2017.
  </obsolete>
  <owner>hpayer@chromium.org</owner>
  <summary>
    Fraction of the total heap used by the old space after each GC in percent.
  </summary>
</histogram>

<histogram name="V8.MemoryHeapSampleCellSpaceCommitted" units="KB">
  <obsolete>
    Deprecated as of 09/2017.
  </obsolete>
  <owner>hpayer@chromium.org</owner>
  <summary>
    The size of committed memory in the cell space after each GC in KB.
  </summary>
</histogram>

<histogram name="V8.MemoryHeapSampleCodeSpaceCommitted" units="KB">
  <owner>hpayer@chromium.org</owner>
  <summary>
    The size of committed memory in the code space after each GC in KB.
  </summary>
</histogram>

<histogram name="V8.MemoryHeapSampleMapSpaceCommitted" units="KB">
  <owner>hpayer@chromium.org</owner>
  <summary>
    The size of committed memory in the map space after each GC in KB.
  </summary>
</histogram>

<histogram name="V8.MemoryHeapSampleMaximumCommitted" units="KB">
  <owner>hpayer@chromium.org</owner>
  <summary>
    The maximum size of committed memory used by V8 after each GC in KB.
  </summary>
</histogram>

<histogram name="V8.MemoryHeapSampleTotalCommitted" units="KB">
  <owner>hpayer@chromium.org</owner>
  <summary>
    The total size of committed memory used by V8 after each GC in KB.
  </summary>
</histogram>

<histogram name="V8.MemoryHeapSampleTotalUsed" units="KB">
  <owner>hpayer@chromium.org</owner>
  <summary>
    The total size of live memory used by V8 after each GC in KB.
  </summary>
</histogram>

<histogram name="V8.MemoryHeapUsed" units="KB">
  <obsolete>
    This histogram has been replaced by
    Memory.Experimental.Renderer2.V8.AllocatedObjects.
  </obsolete>
  <owner>ulan@chromium.org</owner>
  <summary>
    The live memory used by V8 in KB averaged over time, logged before each GC.
  </summary>
</histogram>

<histogram name="V8.Parse" units="ms">
  <obsolete>
    This histogram has been replaced by V8.ParseMicroSeconds.
  </obsolete>
  <owner>marja@chromium.org</owner>
  <summary>Time spent in V8 parser.</summary>
</histogram>

<histogram name="V8.ParseLazy" units="ms">
  <obsolete>
    This histogram has been replaced by V8.ParseLazyMicroSeconds.
  </obsolete>
  <owner>marja@chromium.org</owner>
  <summary>
    Time spent parsing functions when they are lazily compiled on first run.
  </summary>
</histogram>

<histogram name="V8.ParseLazyMicroSeconds" units="microseconds">
  <obsolete>
    Deprecated.
  </obsolete>
  <owner>marja@chromium.org</owner>
  <summary>
    Time spent parsing functions when they are lazily compiled on first run.
  </summary>
</histogram>

<histogram name="V8.ParseMicroSeconds" units="microseconds">
  <obsolete>
    Deprecated.
  </obsolete>
  <owner>marja@chromium.org</owner>
  <summary>Time spent in V8 parser.</summary>
</histogram>

<histogram name="V8.PreParse" units="ms">
  <obsolete>
    This histogram has been replaced by V8.PreParseMicroSeconds.
  </obsolete>
  <owner>marja@chromium.org</owner>
  <summary>Time spent preparsing source code.</summary>
</histogram>

<histogram name="V8.PreParseMicroSeconds" units="microseconds">
  <obsolete>
    Deprecated.
  </obsolete>
  <owner>marja@chromium.org</owner>
  <summary>Time spent preparsing source code.</summary>
</histogram>

<histogram name="V8.Rewriting">
  <obsolete>
    This histogram is no longer present in V8.
  </obsolete>
  <owner>hablich@chromium.org</owner>
  <summary>Time spent on rewriting ASTs before compilation.</summary>
</histogram>

<histogram name="V8.RSetLO">
  <obsolete>
    This histogram is no longer present in V8.
  </obsolete>
  <owner>hablich@chromium.org</owner>
  <summary>TBD</summary>
</histogram>

<histogram name="V8.RSetPaged">
  <obsolete>
    This histogram is no longer present in V8.
  </obsolete>
  <owner>hablich@chromium.org</owner>
  <summary>TBD</summary>
</histogram>

<histogram name="V8.ScriptCache">
  <obsolete>
    This histogram is no longer present in V8.
  </obsolete>
  <owner>yangguo@chromium.org</owner>
  <summary>
    The generation a compiled script was found in the compilation cache.
  </summary>
</histogram>

<histogram name="V8.SharedArrayAllocationSizes" units="MB">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <owner>kschimpf@chromium.org</owner>
  <summary>
    Number of megabytes requested in shared array buffer allocations.
  </summary>
</histogram>

<histogram name="V8.UsageAnalysis">
  <obsolete>
    This histogram is no longer present in V8.
  </obsolete>
  <owner>hablich@chromium.org</owner>
  <summary>Time spent analysing the usage of variables.</summary>
</histogram>

<histogram name="V8.VariableAllocation">
  <obsolete>
    This histogram is no longer present in V8.
  </obsolete>
  <owner>hablich@chromium.org</owner>
  <summary>TBD</summary>
</histogram>

<histogram name="V8.WasmAddressSpaceUsageMiB" units="MB">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <owner>eholk@chromium.org</owner>
  <summary>
    The amount of address space reserved by WebAssembly.Memory backing stores in
    MiB.
  </summary>
</histogram>

<histogram name="V8.WasmCompileFunctionMicroSeconds" units="microseconds">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <summary>
    Time to compile a WebAssembly function.

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

<histogram name="V8.WasmCompileFunctionPeakMemoryBytes" units="bytes">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <summary>Peak memory used to compile a WebAssembly function.</summary>
</histogram>

<histogram name="V8.WasmCompileModuleMicroSeconds" units="microseconds">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <summary>
    Time to compile a WebAssembly module.

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

<histogram name="V8.WasmDecodeFunctionMicroSeconds" units="microseconds">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <summary>
    Time to decode a WebAssembly function.

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

<histogram name="V8.WasmDecodeModuleMicroSeconds" units="microseconds">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <summary>
    Time to decode a WebAssembly module.

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

<histogram name="V8.WasmDecodeModulePeakMemoryBytes" units="bytes">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <summary>Peak memory used to decode a WebAssembly module.</summary>
</histogram>

<histogram name="V8.WasmExecutionTimeMicroSeconds" units="microseconds">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <owner>eholk@chromium.org</owner>
  <owner>kschimpf@chromium.org</owner>
  <summary>
    Time spent executing WebAssembly.

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

<histogram name="V8.WasmFunctionSizeBytes" units="bytes">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <summary>Size of a WebAssembly function.</summary>
</histogram>

<histogram name="V8.WasmFunctionsPerModule" units="functions">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <summary>Function count in each WebAssembly module.</summary>
</histogram>

<histogram name="V8.WasmInstantiateModuleMicroSeconds" units="microseconds">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <summary>
    Time to instantiate a WebAssembly module.

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

<histogram name="V8.WasmLazyCompilationMicroSeconds" units="microseconds">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <owner>aseemgarg@chromium.org</owner>
  <summary>
    Time for lazy compilation of WebAssembly functions. This is recorded per
    function for the functions that are lazily compiled.

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

<histogram name="V8.WasmLazyCompilationThroughput" units="KB/s">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <owner>aseemgarg@chromium.org</owner>
  <summary>
    Throughput of compilation of lazily compiled WebAssembly functions in KB/s
    (size of function in wasm format divided by time to compile it). This is
    recorded per function for functions that are lazily compiled.
  </summary>
</histogram>

<histogram name="V8.WasmMaxMemPagesCount" units="pages">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <summary>
    Number of 64KiB pages a WebAssembly module declares as its maximum
    requirement.
  </summary>
</histogram>

<histogram name="V8.WasmMemoryAllocationResult" enum="WasmAllocationResult">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <owner>eholk@chromium.org</owner>
  <summary>
    The result of attempts to allocate WebAssembly.Memory buffers.
  </summary>
</histogram>

<histogram name="V8.WasmMinMemPagesCount" units="pages">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <summary>
    Number of 64KiB pages a WebAssembly module declares as its minimum
    requirement.
  </summary>
</histogram>

<histogram name="V8.WasmModuleCodeSizeMiB" units="MB">
  <owner>titzer@chromium.org</owner>
  <owner>clemensh@chromium.org</owner>
  <summary>
    The amount of code space in MiB used by individual WebAssembly modules.
    Recorded for each module on finalization, i.e. when it is garbage-collected.
  </summary>
</histogram>

<histogram name="V8.WasmModuleSizeBytes" units="bytes">
  <owner>bradnelson@chromium.org</owner>
  <owner>titzer@chromium.org</owner>
  <summary>Size of a WebAssembly module.</summary>
</histogram>

<histogram name="Variations.CreateTrials.SeedExpiry"
    enum="VariationsSeedExpiry">
  <owner>asvitkine@chromium.org</owner>
  <owner>fdoray@chromium.org</owner>
  <summary>
    The result of verifying if the variations seed is expired, recorded before
    trials are created from the seed. Expired seeds are treated as not existing.
  </summary>
</histogram>

<histogram name="Variations.DisabledNoEntropyProvider" enum="BooleanHit">
  <obsolete>
    Deprecated 1/2013. No longer tracked.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    A count of the number of times we hit the code where a field trial is
    disabled because no entropy provider was provided.
  </summary>
</histogram>

<histogram name="Variations.FailedRequestErrorCode" enum="NetErrorCodes">
  <obsolete>
    Deprecated 10/2016. Replaced by Variations.SeedFetchResponseOrErrorCode.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The counts of network error codes encountered by VariationsService when an
    attempt to fetch a variations seed from the server fails.
  </summary>
</histogram>

<histogram name="Variations.FetchNotModifiedLatency" units="ms">
  <obsolete>
    Deprecated 2/2014. No longer tracked.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The latency of a VariationsService seed fetch that results in a not modified
    response.
  </summary>
</histogram>

<histogram name="Variations.FetchOtherLatency" units="ms">
  <obsolete>
    Deprecated 2/2014. No longer tracked.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The latency of a VariationsService seed fetch that results in neither a
    success nor not modified response.
  </summary>
</histogram>

<histogram name="Variations.FetchSuccessLatency" units="ms">
  <obsolete>
    Deprecated 2/2014. No longer tracked.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The latency of a VariationsService seed fetch that results in a success
    response.
  </summary>
</histogram>

<histogram name="Variations.FirstRun.SeedConnectTime" units="ms">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The latency of connection to the variations server when fetching an initial
    variations seed during Android Chrome first run. This is included in the
    Variations.FirstRun.SeedFetchTime measurement. Only considers cases where an
    HTTP 200 result was received.
  </summary>
</histogram>

<histogram name="Variations.FirstRun.SeedFetchResult"
    enum="VariationsFirstRunSeedFetchResult">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The result of attempting to fetch an initial variations seed during Android
    Chrome first run. Records both the HTTP code and various error values in one
    enumeration.
  </summary>
</histogram>

<histogram name="Variations.FirstRun.SeedFetchTime" units="ms">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The latency of fetching an initial variations seed during Android Chrome
    first run. Only considers cases where an HTTP 200 result was received.
  </summary>
</histogram>

<histogram name="Variations.FirstRunResult" enum="VariationsFirstRunResult">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The result of attempting to import an initial variations seed during Android
    Chrome first run. Logged from VariationsSeedStore::LoadSeed when seed prefs
    do not exist.
  </summary>
</histogram>

<histogram name="Variations.GoogleUpdateRegistryLabelsNeedClearing"
    enum="BooleanNeedsClearing">
  <owner>jwd@chromium.org</owner>
  <summary>
    If the registry value for Google Update experiment labels contains
    Variations experiments, and therefore needs to have them cleared. This will
    be recorderd once per sessions, right before attempting to clear the value.
  </summary>
</histogram>

<histogram name="Variations.HeaderConstructionTime" units="microseconds">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    How long it took to create the X-Client-Data header.

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

<histogram name="Variations.Headers.ExperimentCount">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Records number of experiment ids in the X-Client-Data header at the time the
    header is constructed.
  </summary>
</histogram>

<histogram name="Variations.Headers.URLValidationResult"
    enum="VariationsHeadersURLValidationResult">
  <owner>jwd@chromium.org</owner>
  <summary>
    The result of the check of whether to append Variations headers to a url.
  </summary>
</histogram>

<histogram name="Variations.LoadPermanentConsistencyCountryResult"
    enum="VariationsPermanentConsistencyCountryResult">
  <owner>sclittle@chromium.org</owner>
  <summary>
    Records how the country code saved in prefs used for filtering permanent
    consistency studies compares to the country code in the variations seed.
    This is recorded each time the saved country code is loaded from the pref.
  </summary>
</histogram>

<histogram name="Variations.LoadSeedSignature" enum="VariationSeedSignature"
    expires_after="2018-08-30">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The result of verifying the latest variations seed's signature, recorded
    when the seed is loaded from Local State. Not recorded when running in safe
    mode.
  </summary>
</histogram>

<histogram name="Variations.NetworkAvailability" enum="BooleanSuccess">
  <obsolete>
    Deprecated 9/2012. No longer tracked.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Whether or not the network was available when requested by the
    VariationsService.
  </summary>
</histogram>

<histogram name="Variations.RequestCount" expires_after="2018-08-30">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Number of previous requests to the variations server in the same session,
    logged each time a new request is attempted to the variations server. For
    example, the value of the 0th bucket indicates the number of initial
    requests to the server that took place.
  </summary>
</histogram>

<histogram name="Variations.ResourceRequestsAllowed"
    enum="VariationsResourceRequestsAllowedState">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Counts the number of times the VariationsService is allowed or not allowed
    to make a request due to the ResourceRequestAllowedNotifier.
  </summary>
</histogram>

<histogram name="Variations.SafeMode.FellBackToSafeMode" enum="BooleanSafeMode">
  <obsolete>
    Deprecated as of M66 / Jan 2018. Replaced by
    Variations.SafeMode.FellBackToSafeMode2.
  </obsolete>
  <owner>isherman@chromium.org</owner>
  <summary>
    Whether or not the VariationsService /would/ fall back to Safe Mode, due to
    either too many crashes or too many failures to fetch a new seed, given some
    initial/unrefined heuristics. Recorded during Chrome startup, when the
    VariationsService is created.

    This metric was only reported before Safe Mode was actually implemented, as
    a sanity-check for the forthcoming implementation.
  </summary>
</histogram>

<histogram name="Variations.SafeMode.FellBackToSafeMode2"
    enum="BooleanSafeMode">
  <owner>isherman@chromium.org</owner>
  <summary>
    Whether or not the VariationsService fell back to Safe Mode, due to either
    too many crashes or too many failures to fetch a new seed. Recorded during
    Chrome startup, immediately before field trials are created. Only recorded
    if either a recent or a safe seed was loaded successfully.
  </summary>
</histogram>

<histogram name="Variations.SafeMode.LoadSafeSeed.Result"
    enum="VariationsSeedLoadResult">
  <owner>isherman@chromium.org</owner>
  <summary>
    Records whether the safe variations seed was successfully read from local
    state on startup. Records a detailed reason on read failure. Only recorded
    when attempting to run in safe mode.
  </summary>
</histogram>

<histogram name="Variations.SafeMode.LoadSafeSeed.SignatureValidity"
    enum="VariationSeedSignature">
  <owner>isherman@chromium.org</owner>
  <summary>
    The result of verifying the safe variations seed's signature, recorded when
    the seed is loaded from Local State. Only recorded when attempting to run in
    safe mode.
  </summary>
</histogram>

<histogram name="Variations.SafeMode.StoreSafeSeed.Result"
    enum="VariationsSeedStoreResult">
  <owner>isherman@chromium.org</owner>
  <summary>
    Records the result of storing a safe variations seed (and all associated
    metadata) to the seed store.
  </summary>
</histogram>

<histogram name="Variations.SafeMode.StoreSafeSeed.SignatureValidity"
    enum="VariationSeedSignature">
  <owner>isherman@chromium.org</owner>
  <summary>
    The result of verifying the safe variations seed's signature, recorded when
    the safe seed is stored to Local State.
  </summary>
</histogram>

<histogram name="Variations.SafeMode.Streak.Crashes" units="crashes">
  <owner>isherman@chromium.org</owner>
  <summary>
    The number of consecutive crashes observed by the VariationsService, without
    a single intervening successful seed fetch. Recorded during Chrome startup,
    when the VariationsService is created.
  </summary>
</histogram>

<histogram name="Variations.SafeMode.Streak.FetchFailures" units="failures">
  <owner>isherman@chromium.org</owner>
  <summary>
    The number of consecutive failed attempts to fetch a new seed by the
    VariationsService. Recorded during Chrome startup, when the
    VariationsService is created.
  </summary>
</histogram>

<histogram name="Variations.SeedDateChange" enum="VariationsSeedDateChange">
  <owner>jwd@chromium.org</owner>
  <summary>
    Counts if a response from the variations server is the first response of the
    day or not. This is counted when a new valid seed or a 304 is received. The
    date line is computed in UTC and the times being compared are the server
    time from the server response and the stored server time from the last
    successful request.
  </summary>
</histogram>

<histogram name="Variations.SeedDateSkew.BuildTimeAheadBy" units="days">
  <obsolete>
    Deprecated as of 9/2015.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Logged on startup when creating field trials from the variations seed if the
    build time is ahead of or within 24 hours of the kVariationsSeedDate. Used
    as an experiment to see whether the build time could be used to discard very
    old seeds.
  </summary>
</histogram>

<histogram name="Variations.SeedDateSkew.BuildTimeBehindBy" units="days">
  <obsolete>
    Deprecated as of 9/2015.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Logged on startup when creating field trials from the variations seed if the
    build time is behind the kVariationsSeedDate by a day or more. Used as an
    experiment to see whether the build time could be used to discard very old
    seeds.
  </summary>
</histogram>

<histogram name="Variations.SeedDateSkew.SystemClockAheadBy" units="days">
  <obsolete>
    Deprecated as of 9/2015.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Logged on startup when creating field trials from the variations seed if the
    system clock is ahead of or within 24 hours of the kVariationsSeedDate. Used
    as an experiment to see whether the system clock could be used to discard
    very old seeds.
  </summary>
</histogram>

<histogram name="Variations.SeedDateSkew.SystemClockBehindBy" units="days">
  <obsolete>
    Deprecated as of 9/2015.
  </obsolete>
  <owner>gab@chromium.org</owner>
  <summary>
    Logged on startup when creating field trials from the variations seed if the
    system clock is behind the kVariationsSeedDate by a day or more. Used as an
    experiment to see whether the system clock could be used to discard very old
    seeds.
  </summary>
</histogram>

<histogram name="Variations.SeedEmpty" enum="VariationsSeedLoadResult">
  <obsolete>
    Deprecated in M61, and replaced by Variations.SeedLoadResult. This histogram
    incorrectly conflated failures from loading the seed with failures while
    attempting to store seeds with delta compression.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Records whether the variations seed was successfully read from local state
    on startup. Records a detailed reason on read failure.
  </summary>
</histogram>

<histogram name="Variations.SeedFetchResponseCode" enum="HttpResponseCode">
  <obsolete>
    Deprecated 10/2016. Replaced by Variations.SeedFetchResponseOrErrorCode.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The counts of HTTP response codes encountered by VariationsService when
    attempting to fetch a variations seed from the server.
  </summary>
</histogram>

<histogram name="Variations.SeedFetchResponseOrErrorCode"
    enum="CombinedHttpResponseAndNetErrorCode">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    HTTP response codes and network error encountered by VariationsService when
    attempting to fetch a variations seed from the server over an HTTPS
    connection.
  </summary>
</histogram>

<histogram name="Variations.SeedFetchResponseOrErrorCode.HTTP"
    enum="CombinedHttpResponseAndNetErrorCode">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    HTTP response codes and network error encountered by VariationsService when
    attempting to fetch a variations seed from the server over an HTTP
    connection.
  </summary>
</histogram>

<histogram name="Variations.SeedFreshness" units="minutes">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The time interval between when the variations seed was downloaded and when
    it was loaded for use. Not recorded for expired seeds, nor when the download
    time is unknown (typically, for seeds imported via first run).
  </summary>
</histogram>

<histogram name="Variations.SeedLoadBlockingTime" units="ms">
  <owner>paulmiller@chromium.org</owner>
  <summary>
    Records the time spent blocking WebView startup to wait for the variatinos
    seed. This is less than the entire time needed to load the seed, since
    startup is only blocked if loading is not complete by the time the seed is
    needed. This is logged once per WebView startup, whether or not the load was
    successful.
  </summary>
</histogram>

<histogram name="Variations.SeedLoadResult" enum="VariationsSeedLoadResult">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Records whether the latest variations seed was successfully read from local
    state on startup. Records a detailed reason on read failure. Not recorded
    when running in safe mode.
  </summary>
</histogram>

<histogram name="Variations.SeedProcessingTime" units="ms">
  <owner>gayane@chromium.org</owner>
  <summary>
    Records how long it takes to load and process variations seed. This metric
    is recorded only when loading and processing of the seed is successful.
  </summary>
</histogram>

<histogram name="Variations.SeedStoreResult" enum="VariationsSeedStoreResult">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Records the result of storing the variations seed that was received from the
    server.
  </summary>
</histogram>

<histogram name="Variations.ServerStudyExpiredUniformity1Percent"
    enum="BooleanExpired">
  <obsolete>
    Deprecated 11/2012. No longer tracked.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Whether or not the 1-Percent uniformity trial from the Variations server was
    expired when loaded.
  </summary>
</histogram>

<histogram name="Variations.SimulateSeed.Duration" units="ms"
    expires_after="2018-08-30">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Records the time taken to perform variations seed simulation.

    Recorded on every variation seed simulation, which follows a fetch.
  </summary>
</histogram>

<histogram name="Variations.SimulateSeed.KillBestEffortChanges"
    expires_after="2018-08-30">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Records the result of variations seed simulation. Logs the number of
    experiment groups in the &quot;kill best effort&quot; category that are
    expected to change on a restart of the browser with the received seed.

    Recorded on every variation seed simulation, which follows a fetch.
  </summary>
</histogram>

<histogram name="Variations.SimulateSeed.KillCriticalChanges"
    expires_after="2018-08-30">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Records the result of variations seed simulation. Logs the number of
    experiment groups in the &quot;kill critical&quot; category that are
    expected to change on a restart of the browser with the received seed.

    Recorded on every variation seed simulation, which follows a fetch.
  </summary>
</histogram>

<histogram name="Variations.SimulateSeed.NormalChanges"
    expires_after="2018-08-30">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Records the result of variations seed simulation. Logs the number of
    experiment groups in the &quot;normal&quot; category that are expected to
    change on a restart of the browser with the received seed.

    Recorded on every variation seed simulation, which follows a fetch.
  </summary>
</histogram>

<histogram name="Variations.StoreSeed.DeltaSize" units="KiB">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    On successful save of a delta-compressed variations seed, records the size
    of the delta in KiB.
  </summary>
</histogram>

<histogram name="Variations.StoreSeed.DeltaSize.ReductionPercent" units="%">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    On successful save of a delta-compressed variations seed, records the size
    of the delta as a percentage of the decoded seed size.
  </summary>
</histogram>

<histogram name="Variations.StoreSeed.GzipSize" units="KiB">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Records the size of the gzip-compressed variations seed in KiB.
  </summary>
</histogram>

<histogram name="Variations.StoreSeed.GzipSize.ReductionPercent" units="%">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Records the size of the gzip-compressed variations seed as a percentage of
    the decoded seed size. Note that variations seed could be first
    delta-compressed and then gzip-compressed. In this case we record
    gzip-compressed seed size as a percentage of the delta-compressed seed size.
  </summary>
</histogram>

<histogram name="Variations.StoreSeed.HasCountry" enum="Boolean">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Records whether a country code was present when storing the variations seed.
  </summary>
</histogram>

<histogram name="Variations.StoreSeed.Size" units="KiB">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    On successful save of a non-delta-compressed variations seed, records the
    size of the received seed in KiB.
  </summary>
</histogram>

<histogram name="Variations.StoreSeedSignature" enum="VariationSeedSignature">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The result of verifying the variations seed signature, recorded when the
    variations seed is stored to Local State after being retrieved from the
    server.
  </summary>
</histogram>

<histogram name="Variations.StringsOverridden" units="strings"
    expires_after="2018-08-30">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Records the number of UI strings overriden for each study that overrides
    strings. Recorded at start up when each study is evaluated.
  </summary>
</histogram>

<histogram name="Variations.TimeSinceLastFetchAttempt" units="minutes">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    The time since the previous attempt to fetch the variations seed within the
    same session, with 0 indicating that this is the first attempt. Recorded
    when a variations seed fetch is attempted by the VariationsService.
  </summary>
</histogram>

<histogram name="Variations.UniformityTrialExpired" enum="BooleanHit">
  <obsolete>
    Deprecated 1/2013. No longer tracked.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    A count of the number of times we hit the code where the
    UMA-Uniformity-Trial-1-Percent field trial is disabled as a result of the
    expiration check.
  </summary>
</histogram>

<histogram name="Variations.UniformityTrialGroupNotActive"
    enum="UniformityTrialGroupNotActive">
  <obsolete>
    Deprecated 1/2013. No longer tracked.
  </obsolete>
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Tracks whether the UMA-Uniformity-Trial-1-Percent field trial was not active
    and which factors contributed to it.
  </summary>
</histogram>

<histogram name="Variations.UserChannel" enum="UserChannels">
  <owner>asvitkine@chromium.org</owner>
  <summary>
    Log the user channel assigned at browser startup used for evaluating the
    variations seeds.
  </summary>
</histogram>

<histogram name="Vibration.Context" enum="NavigatorVibrationType">
  <owner>binlu@google.com</owner>
  <summary>
    Records instances of navigator.vibrate. Includes whether or not it comes
    with a user gesture, same-origin subframe or cross-origin subframe.
  </summary>
</histogram>

<histogram name="VideoPlayer.CastAPIExtensionStatus"
    enum="VideoPlayerCastAPIExtensionStatus">
  <owner>yoshiki@chromium.org</owner>
  <summary>
    Chrome OS Video Player: the results of the cast API extension load. This is
    recorded after the initialization of the extension is finished.
  </summary>
</histogram>

<histogram name="VideoPlayer.CastedVideoLength" units="seconds">
  <owner>yoshiki@chromium.org</owner>
  <summary>
    Chrome OS Video Player: the length of casted video (in seconds).
  </summary>
</histogram>

<histogram name="VideoPlayer.NumberOfCastDevices">
  <owner>yoshiki@chromium.org</owner>
  <summary>
    Chrome OS Video Player: the number of cast devices. This is recorded when
    the cast extension finishes the discovery.
  </summary>
</histogram>

<histogram name="VideoPlayer.NumberOfOpenedFiles">
  <owner>yoshiki@chromium.org</owner>
  <summary>
    Chrome OS Video Player: the number of files being opened on launch.
  </summary>
</histogram>

<histogram name="VideoPlayer.PlayType" enum="VideoPlayerPlayType">
  <owner>yoshiki@chromium.org</owner>
  <summary>
    Chrome OS Video Player: type of playback (eg. local play, cast). This is
    recorded when a video starts playing.
  </summary>
</histogram>

<histogram name="Viewport.DidScalePage" enum="BooleanDidScalePage">
  <owner>bokan@chromium.org</owner>
  <summary>
    Tracks the proportion of non-mobile optimized (i.e. zoom disabled or layout
    width matches viewport) page views that had a user-initiated page scale
    (e.g. pinch-zoom, double-tap). Recorded on navigation to a new page - on
    Android only.
  </summary>
</histogram>

<histogram name="Viewport.MaxPageScale" enum="PageScaleFactorRange">
  <owner>bokan@chromium.org</owner>
  <summary>
    Tracks the maximum scale factor that a user has scaled to over the lifetime
    of the page. The scale is counted at pinch end (e.g. zooming to 300% and
    back out to 150% in one gesture would count as 150%). Reported only on
    non-mobile optimized pages (i.e. zoom disabled or layout width matches
    viewport) which have had a page scale changing gesture. Recorded on
    navigation to a new page - on Android only.
  </summary>
</histogram>

<histogram name="Viewport.MetaTagType" enum="MetaTagTypeEnum">
  <owner>bokan@chromium.org</owner>
  <summary>
    The viewport meta tag type seen on each page load. Only recorded on Android.
  </summary>
</histogram>

<histogram name="Viewport.OverviewZoom" units="%">
  <owner>bokan@chromium.org</owner>
  <summary>
    The screen width as a percentage of viewport width (i.e. zoom at which we
    can see the whole page). Only recorded on Android and for viewport meta tags
    with constant width.
  </summary>
</histogram>

<histogram name="VirtualKeyboard.ControllerStateTransition"
    enum="VirtualKeyboardControllerStateTransition">
  <owner>oka@chromium.org</owner>
  <summary>
    An integer representing a state transition from x to y in the form of x *
    1000 + y. If the transition is not expected, the value is negated. For
    example an expected transition from SHOWING (= 2) to SHOWN (= 1) is denoted
    as 2001, and an unexpected transition from SHOWING to SHOWING is denoted as
    -2002. See KeyboardControllerState for the correspondence between the number
    and the enum.
  </summary>
</histogram>

<histogram name="VirtualKeyboard.ControllerStateTransitionIsValid"
    enum="BooleanValid">
  <owner>oka@chromium.org</owner>
  <summary>
    Validity of a state transtion. This is equivalent to the positiveness of
    VirtualKeyboard.ControllerStateTransition.
  </summary>
</histogram>

<histogram name="VirtualKeyboard.InitLatency.FirstLoad" units="ms">
  <owner>oka@chromium.org</owner>
  <summary>Latency of the keyboard being loaded for the first time.</summary>
</histogram>

<histogram name="VirtualKeyboard.KeyboardControlEvent"
    enum="KeyboardControlEvent">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    A count of various control events that can occur on the virtual keyboard,
    such as showing and hiding.
  </summary>
</histogram>

<histogram name="VirtualKeyboard.KeystrokesBetweenBackspace">
  <obsolete>
    Deprecated 04/2016 as doesn't have data nor owner.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Counts the number of keys typed by the virtual keyboard between each
    backspace. This metric provides a rough approximation of an error rate for
    the virtual keyboard.
  </summary>
</histogram>

<histogram name="VirtualKeyboard.LingeringIntermediateState"
    enum="VirtualKeyboardControllerState">
  <owner>oka@chromium.org</owner>
  <summary>
    Records whenever an intermediate keyboard state has been active for longer
    than a fixed timeout.
  </summary>
</histogram>

<histogram name="Viz.DisplayCompositor.OverlayStrategy"
    enum="OverlayStrategies">
  <owner>dcastagna@chromium.org</owner>
  <owner>hoegsberg@chromium.org</owner>
  <summary>
    Overlay strategies used to promote Hardware Overlays, per frame. Recorded
    every time a frame is rendered by the display compositor.
  </summary>
</histogram>

<histogram name="VoiceInteraction.DismissedEventSource"
    enum="VoiceInteractionEventSource">
  <owner>thildebr@chromium.org</owner>
  <summary>
    Android: The source of a dismissed voice search, such as omnibox or NTP.
  </summary>
</histogram>

<histogram name="VoiceInteraction.FailureEventSource"
    enum="VoiceInteractionEventSource">
  <owner>thildebr@chromium.org</owner>
  <summary>
    Android: The source of a failed voice search, such as omnibox or NTP.
  </summary>
</histogram>

<histogram name="VoiceInteraction.FinishEventSource"
    enum="VoiceInteractionEventSource">
  <owner>thildebr@chromium.org</owner>
  <summary>
    Android: The source of a successful voice search, such as omnibox or NTP.
  </summary>
</histogram>

<histogram name="VoiceInteraction.IllegalContextRequest" enum="BooleanHit">
  <owner>muyuanli@chromium.org</owner>
  <summary>
    Counts the number of requests to retrieve voice interaction context when no
    user interaction is initiated.
  </summary>
</histogram>

<histogram name="VoiceInteraction.OpenDuration" units="ms">
  <owner>xiaohuic@chromium.org</owner>
  <summary>
    Records the time between a voice interaction session start and end.
  </summary>
</histogram>

<histogram name="VoiceInteraction.StartEventSource"
    enum="VoiceInteractionEventSource">
  <owner>thildebr@chromium.org</owner>
  <summary>
    Android: The source of a voice search start event, such as omnibox or NTP.
  </summary>
</histogram>

<histogram name="VoiceInteraction.UserInteractionToRequestArrival" units="ms">
  <owner>muyuanli@chromium.org</owner>
  <summary>
    Records the time between user interaction and the actual request arrival.
  </summary>
</histogram>

<histogram name="VoiceInteraction.VoiceResultConfidenceValue" units="%">
  <owner>thildebr@chromium.org</owner>
  <summary>
    Android: Records the confidence value of a successful voice search as a
    percentage.
  </summary>
</histogram>

<histogram name="VoiceInteraction.VoiceSearchResult" enum="BooleanSuccess">
  <owner>thildebr@chromium.org</owner>
  <summary>Android: Records whether the voice search produced results.</summary>
</histogram>

<histogram name="VR.Component.Assets.DurationUntilReady.OnChromeStart"
    units="ms">
  <obsolete>
    Deprecated 02/2018 in issue 799074.
    VR.Component.Assets.DurationUntilReady.OnRegisterComponent measures the
    intended metric more accurately.
  </obsolete>
  <owner>tiborg@chromium.org</owner>
  <summary>
    Duration from starting Chrome until VR assets component is ready to use.
  </summary>
</histogram>

<histogram base="true" name="VR.Component.Assets.DurationUntilReady.OnEnter"
    units="ms">
  <owner>tiborg@chromium.org</owner>
  <summary>
    Duration from entering a VR mode until the VR assets component is ready to
    use.
  </summary>
</histogram>

<histogram name="VR.Component.Assets.DurationUntilReady.OnRegisterComponent"
    units="ms">
  <owner>tiborg@chromium.org</owner>
  <summary>
    Duration from registering VR assets component until it is ready to use.
  </summary>
</histogram>

<histogram base="true" name="VR.Component.Assets.Status.OnEnter"
    enum="VRComponentStatus">
  <owner>tiborg@chromium.org</owner>
  <summary>Status of the VR assets component when entering a VR mode.</summary>
</histogram>

<histogram name="VR.Component.Assets.VersionAndStatus.OnLoad"
    enum="VRAssetsLoadStatus">
  <owner>tiborg@chromium.org</owner>
  <summary>
    The component version and status of loading the VR assets. The value is
    encoded as (XXX)(YYY)(SSS) where XXX is the major component version, YYY the
    minor component version and SSS the status. See
    //chrome/browser/vr/assets_load_status.h for possible status values.
  </summary>
</histogram>

<histogram name="VR.Component.Assets.VersionAndStatus.OnUpdate"
    enum="VRAssetsComponentUpdateStatus">
  <owner>tiborg@chromium.org</owner>
  <summary>
    The version and update status of the VR assets component. The value is
    encoded as (XXX)(YYY)(SSS) where XXX is the major version, YYY the minor
    version and SSS the status. See
    //chrome/browser/vr/assets_component_update_status.h for possible status
    values.
  </summary>
</histogram>

<histogram base="true" name="VR.NetworkConnectionType.OnEnter"
    enum="NetworkConnectionType">
  <owner>tiborg@chromium.org</owner>
  <summary>Network connection type when entering a VR mode.</summary>
</histogram>

<histogram name="VR.NetworkConnectionType.OnRegisterComponent"
    enum="NetworkConnectionType">
  <owner>tiborg@chromium.org</owner>
  <summary>
    Network connection type when registering the VR component(s).
  </summary>
</histogram>

<histogram name="VR.Session.VoiceSearch.StartedCount" units="searches">
  <owner>bshe@chromium.org</owner>
  <summary>
    Number of times voice search is started in a single VR session. Recorded
    when a new disjoint session has begun or when the session has ended in a
    non-continuable way.
  </summary>
</histogram>

<histogram name="VR.Shell.EncounteredSuppressedUI" enum="VRSuppressedElement">
  <owner>asimjour@chromium.org</owner>
  <summary>
    We must suppress monocularly rendered ui elements in VR. This records which
    ui element suppressions are encountered in practice.
  </summary>
</histogram>

<histogram name="VR.Shell.EncounteredUnsupportedMode" enum="VRUnsupportedMode">
  <owner>vollick@chromium.org</owner>
  <summary>
    We must exit VR mode when browsing in certain situations. This records which
    situations are encountered in practice.
  </summary>
</histogram>

<histogram name="VR.VoiceSearch.EndState" enum="VRVoiceSearchEndState">
  <owner>bshe@chromium.org</owner>
  <summary>The end state of a voice search request in VR.</summary>
</histogram>

<histogram name="VR.VoiceSearch.RecordAudioOsPermissionPromptChoice"
    enum="BooleanContinueChoice">
  <owner>bshe@chromium.org</owner>
  <summary>
    Chrome shows a prompt when the OS's record audio permission is needed for
    voice search. The prompt gives user two choices: CANCEL or CONTINUE. This
    records the user's selection.
  </summary>
</histogram>

<histogram name="VRAutopresentedWebVR" enum="Boolean">
  <owner>ymalik@chromium.org</owner>
  <summary>
    Whether we're auto-presenting the first time we enter WebVR mode.
  </summary>
</histogram>

<histogram name="VRDisplayPresentResult" enum="VRPresentationResult">
  <owner>billorr@chromium.org</owner>
  <summary>
    The result of calls to VRDisplay::requestPresent().  Reported twice per
    requestPresent() call, once to record the call, and once to record the
    result.
  </summary>
</histogram>

<histogram name="VRFreNotComplete" enum="BooleanHit">
  <owner>ymalik@chromium.org</owner>
  <summary>
    Whether the user had been through the FRE when Chrome is launched in VR
    mode.
  </summary>
</histogram>

<histogram name="VRRuntimeVersion" units="normalized version">
  <owner>tiborg@chromium.org</owner>
  <summary>The version of the runtime being used for VR.</summary>
</histogram>

<histogram name="VRSessionNavigationCount">
  <owner>billorr@chromium.org</owner>
  <summary>
    Count of navigations while in a VR session.  Logged when a new disjoint
    session has begun, or when the session has ended in a non-continuable way.
  </summary>
</histogram>

<histogram name="VRSessionTime" units="ms">
  <owner>billorr@chromium.org</owner>
  <summary>
    The duration of the VR session.  Logged when a new disjoint session has
    begun, or when the session has ended in a non-continuable way.
  </summary>
</histogram>

<histogram name="VRSessionTimeFromDLA" units="ms">
  <owner>ymalik@chromium.org</owner>
  <summary>
    The duration of a single VR session initiated via a deep-linked WebVR app.
    Logged when a new disjoint session has begun, or when the session has ended
    in a non-continuable way.
  </summary>
</histogram>

<histogram name="VRSessionVideoCount">
  <owner>billorr@chromium.org</owner>
  <summary>
    Number of videos watched in a VR session.  Logged when a new disjoint
    session has begun, or when the session has ended in a non-continuable way.
  </summary>
</histogram>

<histogram name="VRSessionVideoTime" units="ms">
  <owner>billorr@chromium.org</owner>
  <summary>
    The duration of a single session spent watching video in VR.  Logged when a
    new disjoint session has begun, or when the session has ended in a
    non-continuable way.
  </summary>
</histogram>

<histogram name="VRViewerType" enum="VRViewerType">
  <owner>billorr@chromium.org</owner>
  <summary>The type of headset being used for VR.</summary>
</histogram>

<histogram name="Wallet.ApiCallDuration.AcceptLegalDocuments" units="ms">
  <owner>estade@chromium.org</owner>
  <summary>
    Measures the time taken by Google Online Wallet server's accept legal
    document API call.
  </summary>
</histogram>

<histogram name="Wallet.ApiCallDuration.AuthenticateInstrument" units="ms">
  <owner>estade@chromium.org</owner>
  <summary>
    Measures the time taken by Google Online Wallet server's authenticate
    instrument API call.
  </summary>
</histogram>

<histogram name="Wallet.ApiCallDuration.GetFullWallet" units="ms">
  <owner>estade@chromium.org</owner>
  <summary>
    Measures the time taken by Google Online Wallet server's get full wallet API
    call.
  </summary>
</histogram>

<histogram name="Wallet.ApiCallDuration.GetWalletItems" units="ms">
  <owner>estade@chromium.org</owner>
  <summary>
    Measures the time taken by Google Online Wallet server's get wallet items
    API call.
  </summary>
</histogram>

<histogram name="Wallet.ApiCallDuration.SaveAddress" units="ms">
  <obsolete>
    Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet.
  </obsolete>
  <owner>estade@chromium.org</owner>
  <summary>
    Measures the time taken by Google Online Wallet server's save address API
    call.
  </summary>
</histogram>

<histogram name="Wallet.ApiCallDuration.SaveInstrument" units="ms">
  <obsolete>
    Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet.
  </obsolete>
  <owner>estade@chromium.org</owner>
  <summary>
    Measures the time taken by Google Online Wallet server's save instrument API
    call.
  </summary>
</histogram>

<histogram name="Wallet.ApiCallDuration.SaveInstrumentAndAddress" units="ms">
  <obsolete>
    Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet.
  </obsolete>
  <owner>estade@chromium.org</owner>
  <summary>
    Measures the time taken by Google Online Wallet server's save instument and
    address API call.
  </summary>
</histogram>

<histogram name="Wallet.ApiCallDuration.SaveToWallet" units="ms">
  <owner>estade@chromium.org</owner>
  <summary>
    Measures the time taken by Google Online Wallet server's save to wallet API
    call.
  </summary>
</histogram>

<histogram name="Wallet.ApiCallDuration.SendStatus" units="ms">
  <owner>estade@chromium.org</owner>
  <summary>
    Measures the time taken by Google Online Wallet server's send status API
    call.
  </summary>
</histogram>

<histogram name="Wallet.ApiCallDuration.UnknownApiCall" units="ms">
  <owner>estade@chromium.org</owner>
  <summary>
    Measures the time taken by Google Online Wallet server's unknown API calls.
  </summary>
</histogram>

<histogram name="Wallet.ApiCallDuration.UpdateAddress" units="ms">
  <obsolete>
    Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet.
  </obsolete>
  <owner>estade@chromium.org</owner>
  <summary>
    Measures the time taken by Google Online Wallet server's update address API
    call.
  </summary>
</histogram>

<histogram name="Wallet.ApiCallDuration.UpdateInstrument" units="ms">
  <obsolete>
    Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet.
  </obsolete>
  <owner>estade@chromium.org</owner>
  <summary>
    Measures the time taken by Google Online Wallet server's update instument
    API call.
  </summary>
</histogram>

<histogram name="Wallet.MalformedResponse" enum="WalletApiCall">
  <owner>estade@chromium.org</owner>
  <summary>
    Counts the number of times each Wallet API failed due to being unable to
    parse the response.
  </summary>
</histogram>

<histogram name="Wallet.ResponseCode" enum="HttpResponseCode">
  <owner>estade@chromium.org</owner>
  <summary>HTTP response codes seen by Wallet client.</summary>
</histogram>

<histogram name="Web.CertVerifyAgreement" enum="WebCertVerifyAgreement">
  <obsolete>
    Deprecated 08/2016 because CertVerifier is not used for web view cert
    verification.
  </obsolete>
  <owner>eugenebut@chromium.org</owner>
  <summary>
    [iOS] Reports certificate verification mismatch between SecTrust API and
    CertVerifier. SecTrust API is used for making load/no-load decision and
    CertVerifier is used for getting the reason of verification failure. It is
    expected that mismatches will happen for those 2 approaches (e.g. SecTrust
    API considers cert as good, but CertVerifier considers same cert as bad).
    This metric helps to understand how common mismatches are.
  </summary>
</histogram>

<histogram name="Web.CurrentOriginEqualsLastCommittedOrigin"
    enum="BooleanEqual">
  <owner>eugenebut@chromium.org</owner>
  <summary>
    [iOS] Reports URL matches between the return value from the WebState's
    GetLastCommittedURL and GetCurrentURL methods. It is expected the origins
    will be equal to confirm that GetCurrentURL can now be replaced with
    GetLastCommittedURL. This will be called each time WebStateImpl::
    GetCurrentURL(URLVerificationTrustLevel* trust_level) is called, which is an
    old method of obtaining the url and trust level. The trust level was only
    relevant with UIWebView, so this method is only called from code which has
    not yet been updated since UIWebView was removed.
  </summary>
</histogram>

<histogram name="Web.CurrentURLEqualsLastCommittedURL" enum="BooleanEqual">
  <obsolete>
    Deprecated as of 9/2013, replaced by
    Web.CurrentOriginEqualsLastCommittedOrigin.
  </obsolete>
  <owner>michaeldo@chromium.org</owner>
  <summary>
    [iOS] Reports URL matches between the return value from the WebState's
    GetLastCommittedURL and GetCurrentURL methods. It is expected the values
    will be equal to confirm that GetCurrentURL can now be replaced with
    GetLastCommittedURL. This will be called each time WebStateImpl::
    GetCurrentURL(URLVerificationTrustLevel* trust_level) is called, which is an
    old method of obtaining the url and trust level. The trust level was only
    relevant with UIWebView, so this method is only called from code which has
    not yet been updated since UIWebView was removed.
  </summary>
</histogram>

<histogram name="WebApk.Install.AvailableSpace.Fail" units="MB">
  <owner>hanxi@chromium.org</owner>
  <owner>ranj@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the available space that can be used when installing a WebAPK from
    Google Play fails. The space recorded is the available space beyond the
    system's minimum free space threshold, with a range between -1000 and 1000
    MB. Negative values mean that there is less free space available than the
    system's minimum, by the given amount.
  </summary>
</histogram>

<histogram name="WebApk.Install.AvailableSpace.Success" units="MB">
  <obsolete>
    Deprecated 2017-09. As of M64, this is no longer recorded.
  </obsolete>
  <owner>hanxi@chromium.org</owner>
  <owner>ranj@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the available space that can be used when installing a WebAPK from
    Google Play succeeds. The space recorded is the available space beyond the
    system's minimum free space threshold, with a range between -1000 and 1000
    MB. Negative values mean that there is less free space available than the
    system's minimum, by the given amount.
  </summary>
</histogram>

<histogram name="WebApk.Install.AvailableSpaceAfterFreeUpAll.Fail" units="MB">
  <obsolete>
    Deprecated in Chrome M69.
  </obsolete>
  <owner>hanxi@chromium.org</owner>
  <owner>ranj@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the available space that can be used when installing a WebAPK from
    Google Play fails after freeing up cache and unimportant storage. The space
    recorded is the available space beyond the system's minimum free space
    threshold, with a range between -1000 and 1000 MB. Negative values mean that
    there is less free space available than the system's minimum, by the given
    amount.
  </summary>
</histogram>

<histogram name="WebApk.Install.AvailableSpaceAfterFreeUpCache.Fail" units="MB">
  <owner>hanxi@chromium.org</owner>
  <owner>ranj@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the available space that can be used when installing a WebAPK from
    Google Play fails after freeing up cache. The space recorded is the
    available space beyond the system's minimum free space threshold, with a
    range between -1000 and 1000 MB. Negative values mean that there is less
    free space available than the system's minimum, by the given amount.
  </summary>
</histogram>

<histogram
    name="WebApk.Install.AvailableSpaceAfterFreeUpUnimportantStorage.Fail"
    units="MB">
  <obsolete>
    Deprecated in Chrome M69.
  </obsolete>
  <owner>hanxi@chromium.org</owner>
  <owner>ranj@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the available space that can be used when installing a WebAPK from
    Google Play fails after freeing up unimportant storage. The space recorded
    is the available space beyond the system's minimum free space threshold,
    with a range between -1000 and 1000 MB. Negative values mean that there is
    less free space available than the system's minimum, by the given amount.
  </summary>
</histogram>

<histogram name="WebApk.Install.ChromeCacheSize.Fail" units="MB">
  <owner>hanxi@chromium.org</owner>
  <owner>ranj@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the Chrome cache size when installing a WebAPK from Google Play
    fails, with a range between 0 and 1000, rounded to the nearest 10MB.
  </summary>
</histogram>

<histogram name="WebApk.Install.ChromeUnimportantStorage.Fail" units="MB">
  <obsolete>
    Deprecated in Chrome M69.
  </obsolete>
  <owner>hanxi@chromium.org</owner>
  <owner>ranj@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the Chrome unimportant storage size when installing a WebAPK from
    Google Play fails, with a range between 0 and 1000, rounded to the nearest
    10MB.
  </summary>
</histogram>

<histogram name="WebApk.Install.GooglePlayBindDuration" units="ms">
  <obsolete>
    Deprecated in Chrome M69.
  </obsolete>
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the amount of time that it takes to bind to the play install service
    for WebAPK installs.
  </summary>
</histogram>

<histogram name="WebApk.Install.GooglePlayErrorCode"
    enum="WebApkInstallGooglePlayErrorCode">
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the error code when installing a WebAPK from Google Play fails. See
    go/webapk-install-googleplayerrorcode.
  </summary>
</histogram>

<histogram name="WebApk.Install.GooglePlayInstallResult"
    enum="WebApkGooglePlayInstallResult">
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records whether installing a WebAPK from Google Play succeeded. If not,
    records the reason that the install failed.
  </summary>
</histogram>

<histogram name="WebApk.Install.GooglePlayInstallState"
    enum="WebApkGooglePlayInstallState">
  <obsolete>
    Deleted in M61.
  </obsolete>
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    On web app and WebAPK installation, records whether a WebAPK could be
    installed via the Google Play flow. If not, records why the WebAPK could not
    be installed via the Google Play flow (and a web app was added to the
    homescreen instead). Warning: This metric is recorded whenever a site is
    added to the homescreeen as a web app, not just for sites with a WebAPK
    compatible Web Manifest.
  </summary>
</histogram>

<histogram name="WebApk.Install.InfoBarShown" enum="WebApkInstallInfoBarShown">
  <obsolete>
    Deprecated 2017-08. As of M62, this is no longer recorded.
  </obsolete>
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    WebAPKs are PWAs wrapped in an Android apk, installed from an app banner or
    the add to homescreen menu item. This stat tracks whether the installation
    is triggered by an app banner or by the add to homescreen menu.
  </summary>
</histogram>

<histogram name="WebApk.Install.InstallDuration" units="ms">
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    How long it takes to install a WebAPK. The time is measured from the time
    that the user initiates the install to the time that the Open button is
    shown in the infobar. This metric is only recorded when install succeeds.
  </summary>
</histogram>

<histogram name="WebApk.Install.InstallEvent" enum="WebApkInstallEvent">
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    WebAPKs are PWAs wrapped in an Android apk, installed from an app banner or
    the add to homescreen menu item. This stat tracks the WebAPKs installation
    events, including whether the infobar is ignored, whether the infobar is
    dismissed by the user before or during the installation, as well as whether
    the installation was successful.
  </summary>
</histogram>

<histogram name="WebApk.Install.InstallSource" enum="WebApkInstallSource">
  <obsolete>
    No longer recorded as of M65.
  </obsolete>
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    WebAPKs are PWAs wrapped in an Android apk, installed from an app banner or
    the add to homescreen menu item. If the installation is via an app banner,
    user could either accept to install or dismiss the infobar; while via the
    add to homescreen menu, the installation will start automatically. This stat
    tracks the ways that user accepts to install a WebAPK.
  </summary>
</histogram>

<histogram name="WebApk.Install.RequestTokenDuration" units="ms">
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the amount of time which has elapsed from the &quot;install infobar
    showing&quot; to the &quot;install request being sent to Google Play&quot;.
    This time includes the time that it takes to request the WebAPK token and
    the time that it takes to compute the hashes for the launcher icon and the
    badge icon.
  </summary>
</histogram>

<histogram name="WebApk.Install.SpaceStatus" enum="WebApkInstallSpaceStatus">
  <owner>hanxi@chromium.org</owner>
  <owner>ranj@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Whether there is enough space to install a WebAPK. Recorded on each attempt
    to install a WebAPK.
  </summary>
</histogram>

<histogram name="WebApk.Install.UserAction" enum="WebApkUserAction">
  <obsolete>
    Deprecated 2017-08. As of M62, this is no longer recorded.
  </obsolete>
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    WebAPKs are PWAs wrapped in an Android apk, installed from an app banner or
    the add to homescreen menu item. If the user clicks the add to homescreen
    menu, and a WebAPK has been installed before, an infobar with an open button
    will show. The open button will also show on the infobar after a successful
    installation. This stat tracks whether user clicks the open button on the
    infobar or dismiss it.
  </summary>
</histogram>

<histogram name="WebApk.Launch.NetworkError" enum="NetErrorCodes">
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the error codes when a WebAPK is launched with network failures.
  </summary>
</histogram>

<histogram name="WebApk.LaunchInterval" units="ms">
  <obsolete>
    Deprecated 2018-01. Replaced by WebApk.LaunchInterval2
  </obsolete>
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the amount of time since the user last launched the WebAPK from the
    homescreen. Not recorded on first launch.
  </summary>
</histogram>

<histogram name="WebApk.LaunchInterval2" units="minutes">
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the amount of time since the user last launched the WebAPK from the
    homescreen. Not recorded on first launch.
  </summary>
</histogram>

<histogram name="WebApk.Notification.Permission.Status"
    enum="BooleanWebApkNotificationPermission">
  <owner>hanxi@chromium.org</owner>
  <owner>ranj@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    When a WebAPK receives a notification, log whether it has permission to
    display that notification.
  </summary>
</histogram>

<histogram name="WebApk.OpenFromMenu" enum="WebApkOpenResult">
  <obsolete>
    Deprecated in Chrome M69.
  </obsolete>
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <summary>
    When a user visits a PWA for which they have a WebAPK installed, the menu
    item changes from 'Add to homescreen' to 'Open WebAPK'. This stat tracks
    whether the opening of the WebAPK is successful when this menu item is
    clicked.
  </summary>
</histogram>

<histogram name="WebApk.Permission.ChromePermissionDenied"
    enum="WebApkPermissionType">
  <obsolete>
    Deprecated 2017-11. This UMA logs extra requests. Replaced by
    ChromePermissionDenied2.
  </obsolete>
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>ranj@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    The number of Android runtime permission requests that are denied for the
    WebAPK because Chrome does not have access to that permission.
  </summary>
</histogram>

<histogram name="WebApk.Permission.ChromePermissionDenied2"
    enum="WebApkPermissionType">
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>ranj@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    The number of Android runtime permission requests that are denied for the
    WebAPK because Chrome does not have access to that permission.
  </summary>
</histogram>

<histogram name="WebApk.Permission.ChromeWithoutPermission"
    enum="WebApkPermissionType">
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the amount of requests of Android runtime permissions which haven't
    been granted to Chrome when Chrome is running in WebAPK runtime.
  </summary>
</histogram>

<histogram name="WebApk.Session.TotalDuration" units="ms">
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    The length of a WebAPK session (launch/foregrounding to backgrounding) in
    milliseconds.
  </summary>
</histogram>

<histogram base="true" name="WebApk.ShellApkVersion">
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records WebAPK &quot;Shell APK version&quot; when the WebAPK is launched.
    The &quot;Shell APK version&quot; is documented in shell_apk_version.gni
  </summary>
</histogram>

<histogram name="WebApk.Startup.Cold.ShellLaunchToSplashscreenHidden"
    units="ms">
  <owner>mheikal@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Tracks the time to splashscreen hidden starting from the launch of the
    WebAPK shell (rather than from the launch of Chrome). The splashscreen is
    hidden after the first visually non-empty paint.

    This is recorded iff: - This is a cold startup of Chrome. - Chrome has not
    been sent to the background since launch. - There was no recents entry for
    Chrome (android replays intents if a recents entry exists), which otherwise
    adds noise/long-tail to this histogram.
  </summary>
</histogram>

<histogram name="WebApk.Startup.Cold.ShellLaunchToSplashscreenVisible"
    units="ms">
  <owner>mheikal@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Tracks the time to splashscreen visible starting from the launch of the
    WebAPK shell (rather than from the launch of Chrome). The splashscreen is
    shown during postInflationStartup.

    This is recorded iff: - This is a cold startup of Chrome. - Chrome has not
    been sent to the background since launch. - There was no recents entry for
    Chrome (android replays intents if a recents entry exists), which otherwise
    adds noise/long-tail to this histogram.
  </summary>
</histogram>

<histogram name="WebApk.Update.GooglePlayUpdateResult"
    enum="WebApkGooglePlayInstallResult">
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records whether updating a WebAPK from Google Play succeeded. If not,
    records the reason that the update failed.
  </summary>
</histogram>

<histogram name="WebApk.Update.NumStaleUpdateRequestFiles" units="files">
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the number of zombie &quot;WebAPK update request&quot; files that
    the update process failed to cleanup. Recorded for all WebAPKs whenever a
    WebAPK or webapp is launched.
  </summary>
</histogram>

<histogram name="WebApk.Update.RequestQueued" enum="WebApkUpdateRequestQueued">
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the number of times that a WebAPK update request was queued (i.e.
    waiting for the WebAPK to be backgrounded) before being sent to the server.
  </summary>
</histogram>

<histogram name="WebApk.Update.RequestSent" enum="WebApkUpdateRequestSent">
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records the time point when a request to update a WebAPK is sent to the
    WebAPK Server.
  </summary>
</histogram>

<histogram name="WebApk.WebApkService.BindSuccess" enum="BooleanSuccess">
  <owner>hanxi@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records whether Chrome can bind to a WebAPK's &quot;WebAPK service&quot;.
    Recorded each time that Chrome attempts to bind to a WebAPK service.
  </summary>
</histogram>

<histogram name="Webapp.AddToHomescreenDialog.Timeout" units="ms">
  <owner>dominickn@chromium.org</owner>
  <summary>
    Records the number of milliseconds that the add to homescreen dialog
    required to check installability eligibility.
  </summary>
</histogram>

<histogram name="Webapp.Engagement.EngagementType"
    enum="SiteEngagementServiceEngagementType">
  <owner>calamity@chromium.org</owner>
  <owner>mgiuca@chromium.org</owner>
  <summary>
    The type of engagement (navigation, user input, etc.) which led to an
    accumulation in site engagement within a PWA app window. Should be collected
    for a subset of SiteEngagementService.EngagementType, which is triggered for
    all browsing contexts. Recorded at the time of engagement accumulation
    (e.g., when mouse is clicked).
  </summary>
</histogram>

<histogram name="Webapp.Install.DisplayMode" enum="WebAppDisplayMode">
  <owner>piotrs@chromium.org</owner>
  <summary>
    Records the display mode (as defined in the Web App Manifest spec) at the
    install time of a WebApp (including WebApks).
  </summary>
</histogram>

<histogram name="Webapp.Install.InstallEvent" enum="WebappInstallSource">
  <owner>dominickn@chromium.org</owner>
  <owner>mcgreevy@chromium.org</owner>
  <summary>
    Records the mechanism and source from which a web app installation was
    triggered, regardless of whether the installation was successful.
  </summary>
</histogram>

<histogram name="Webapp.Install.InstallSource" enum="WebAppInstallSource">
  <obsolete>
    Deprecated 2018-01 in favour of Webapp.Install.InstallEvent.
  </obsolete>
  <owner>mcgreevy@chromium.org</owner>
  <summary>
    Records the mechanism by which a web app installation was triggered,
    regardless of whether the installation was successful.
  </summary>
</histogram>

<histogram name="Webapp.InstallabilityCheckStatus.AddToHomescreenTimeout"
    enum="AddToHomescreenTimeoutStatus">
  <owner>dominickn@chromium.org</owner>
  <summary>
    Records whether or not the check that a site is or isn't a Progressive Web
    App (PWA) completes before the add to homescreen dialog on Android forcibly
    times out and falls back to generating an icon.
  </summary>
</histogram>

<histogram name="Webapp.InstallabilityCheckStatus.MenuItemAddToHomescreen"
    enum="InstallabilityCheckStatus">
  <owner>dominickn@chromium.org</owner>
  <summary>
    Records whether or not the check that a site is or isn't a Progressive Web
    App (PWA) has completed when the user taps the add to homescreen menu item
    on Android.
  </summary>
</histogram>

<histogram name="Webapp.InstallabilityCheckStatus.MenuOpen"
    enum="InstallabilityCheckStatus">
  <owner>dominickn@chromium.org</owner>
  <summary>
    Records whether or not the check that a site is or isn't a Progressive Web
    App (PWA) has completed when the user opens the menu on Android.
  </summary>
</histogram>

<histogram name="Webapp.NavigationStatus" enum="BooleanSuccess">
  <owner>piotrs@chromium.org</owner>
  <summary>
    Records whether the top-level navigations in standalone Web Apps result in
    presenting the web content or showing the error page.
  </summary>
</histogram>

<histogram name="Webapp.Splashscreen.BackgroundColor"
    enum="SplashscreenColorStatus">
  <owner>mlamouri@chromium.org</owner>
  <summary>
    Records the status of the splashscreen's background color (default or
    custom).
  </summary>
</histogram>

<histogram name="Webapp.Splashscreen.Duration" units="ms">
  <owner>mlamouri@chromium.org</owner>
  <summary>Records the time during which the splashscreen was visible.</summary>
</histogram>

<histogram name="Webapp.Splashscreen.Hides" enum="SplashscreenHidesReason">
  <owner>mlamouri@chromium.org</owner>
  <summary>Records the signal that was used to hide the splashscreen.</summary>
</histogram>

<histogram name="Webapp.Splashscreen.Icon.Size" units="dp">
  <owner>mlamouri@chromium.org</owner>
  <summary>
    Records the size of the icon used to construct the splashscreen in device
    pixels (ie. real size divided by device pixel density). This is only
    recording one dimension, the icon being square.
  </summary>
</histogram>

<histogram name="Webapp.Splashscreen.Icon.Type" enum="SplashscreenIconType">
  <owner>mlamouri@chromium.org</owner>
  <summary>
    Records the origin of the icon used to construct the splashscreen.
  </summary>
</histogram>

<histogram name="Webapp.Splashscreen.ThemeColor" enum="SplashscreenColorStatus">
  <owner>mlamouri@chromium.org</owner>
  <summary>
    Records the status of the splashscreen's theme color (default or custom).
  </summary>
</histogram>

<histogram name="WebAudio.AudioBuffer.Length" units="frames">
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The length (in frames) requested by createBuffer(). Recorded for every call
    to createBuffer(). Probably many (tens or hundreds) per page.
  </summary>
</histogram>

<histogram name="WebAudio.AudioBuffer.NumberOfChannels">
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The number of channels requested by createBuffer(). Recorded for every call
    to createBuffer(). Probably many (tens or hundreds) per page.
  </summary>
</histogram>

<histogram name="WebAudio.AudioBuffer.SampleRate" units="Hz">
  <obsolete>
    Replaced by SampleRate384kHz in Issue 644683 on 2016/10 due to higher
    supported sample rates.
  </obsolete>
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The sample rate (in Hz) requested by createBuffer(). Recorded for every call
    to createBuffer(). Probably many (tens or hundreds) per page.
  </summary>
</histogram>

<histogram name="WebAudio.AudioBuffer.SampleRate384kHz" units="Hz">
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The sample rate (in Hz) requested by createBuffer(). Recorded for every call
    to createBuffer(). Probably many (tens or hundreds) per page.
  </summary>
</histogram>

<histogram name="WebAudio.AudioBuffer.SampleRateRatio">
  <obsolete>
    Replaced by SampleRateRatio384kHz in Issue 644683 on 2016/10 due to higher
    supported sample rates.
  </obsolete>
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The ratio of the buffer sample rate from createBuffer() to the context
    sample rate. This indicates if the buffer needs to be resampled.  Recorded
    for every call to createBuffer().  Probably many (tens or hundreds) per
    page.
  </summary>
</histogram>

<histogram name="WebAudio.AudioBuffer.SampleRateRatio384kHz">
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The ratio of the buffer sample rate from createBuffer() to the context
    sample rate. This indicates if the buffer needs to be resampled.  Recorded
    for every call to createBuffer().  Probably many (tens or hundreds) per
    page.
  </summary>
</histogram>

<histogram name="WebAudio.AudioContext.HardwareSampleRate" units="Hz">
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The hardware sample rate (in Hz) used by an AudioContext. Recorded for every
    WebAudio AudioContext that is created; probably only one or two per page.
  </summary>
</histogram>

<histogram name="WebAudio.AudioContext.MaxChannelsAvailable">
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The maximum number of (hardware) channels available in an AudioContext.
    Recorded for every WebAudio AudioContext that is created; probably only one
    or two per page.
  </summary>
</histogram>

<histogram name="WebAudio.AudioDestination.CallbackBufferSize">
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The callback buffer size (in audio frames) for WebAudio rendering between
    the WebAudio graph and the audio device thread.  This can differ from the
    value recommended by the audio hardware due to internal constraints in
    WebAudio. Recorded for every WebAudio AudioContext that is created.
  </summary>
</histogram>

<histogram name="WebAudio.AudioDestination.HardwareBufferSize">
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The buffer size (in audio frames) for WebAudio rendering recommended by the
    audio hardware.  Recorded for every WebAudio AudioContext that is created.
  </summary>
</histogram>

<histogram name="WebAudio.AudioParam.ValueSetterConflictCount">
  <obsolete>
    Removed 02/2018 in Issue 764396.  Information no longer needed or recorded.
  </obsolete>
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The number of times the AudioParam value setter was called that also
    conflicts with an ongoing AudioParam automation.  Updated when the realtime
    AudioContext is closed.
  </summary>
</histogram>

<histogram name="WebAudio.AudioParam.ValueSetterConflictPercentage">
  <obsolete>
    Removed 02/2018 in Issue 764396.  Information no longer needed or recorded.
  </obsolete>
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The percentage of number of calls to an AudioParam value setter that
    conflicts with an ongoing AudioParam automation to the total number of calls
    to the value setter.  Updated once when an AudioContext is closed.
  </summary>
</histogram>

<histogram name="WebAudio.AudioParam.ValueSetterCount">
  <obsolete>
    Removed 02/2018 in Issue 764396.  Information no longer needed or recorded.
  </obsolete>
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The number of times the AudioParam value setter was called per tab. Updated
    when the realtime AudioContext is closed.
  </summary>
</histogram>

<histogram name="WebAudio.Autoplay" enum="WebAudioAutoplayStatus"
    expires_after="2019-06-30">
  <owner>mlamouri@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The autoplay status of an AudioContext when destroyed. This include all
    types of frames. In order to know the value only for main frames, the
    .CrossOrigin values can be substracted.
  </summary>
</histogram>

<histogram name="WebAudio.Autoplay.CrossOrigin" enum="WebAudioAutoplayStatus"
    expires_after="2019-06-30">
  <owner>mlamouri@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The autoplay status of an AudioContext when destroyed in a cross-origin
    frame.
  </summary>
</histogram>

<histogram name="WebAudio.Autoplay.UnlockType"
    enum="WebAudioAutoplayUnlockType" expires_after="2019-06-30">
  <owner>mlamouri@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    Records how an AudioContext was unlocked (if it was). This is recorded when
    the AudioContext is destroyed.
  </summary>
</histogram>

<histogram name="WebAudio.BiquadFilter.Q.Highpass">
  <obsolete>
    Removed in Issue 774526 on 2017/10; statistics aren't needed anymore.
  </obsolete>
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The Q value (in 0.25 dB steps) used for a highpass BiquadFilter. Recorded
    each time the value is set for a highpass filter via the .value setter or
    the automation methods linearRampToValueAtTime, exponentialValueAtTime, and
    setValueAtTime.
  </summary>
</histogram>

<histogram name="WebAudio.BiquadFilter.Q.Lowpass">
  <obsolete>
    Removed in Issue 774526 on 2017/10; statistics aren't needed anymore.
  </obsolete>
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The Q value (in 0.25 dB steps) used for a lowpass BiquadFilter. Recorded
    each time the value is set for a lowpass filter via the .value setter or the
    automation methods linearRampToValueAtTime, exponentialValueAtTime, and
    setValueAtTime.
  </summary>
</histogram>

<histogram name="WebAudio.BiquadFilter.Type" enum="BiquadFilterType">
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The type of the BiquadFilterNode. Recorded each time the type is set. This
    recorded once (to lowpass) when a biquad filter is created and also recorded
    whenever the filter type changes due to user action or programatically. It
    is unlikely the type will change more than once.
  </summary>
</histogram>

<histogram name="WebAudio.IIRFilterNode.Order">
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The order of the WebAudio IIRFilterNode.  The order is one less than the
    number of feedback coefficients used in the denominator of the IIRFilter
    transfer function.  Recorded each time an IIRFilter is constructed.
  </summary>
</histogram>

<histogram name="WebAudio.OfflineAudioContext.ChannelCount">
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The number of channels specified for the offline audio context. Recorded for
    every offline context created. Probably only a few per page, but could be
    potentially much more (thousands).
  </summary>
</histogram>

<histogram name="WebAudio.OfflineAudioContext.Length" units="frames">
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The length (in frames) specified for the offline audio context. Recorded for
    every offline context created. Probably only a few per page, but could be
    potentially much more (thousands).
  </summary>
</histogram>

<histogram name="WebAudio.OfflineAudioContext.SampleRate" units="Hz">
  <obsolete>
    Replaced by SampleRate384kHz in Issue 644683 on 2016/10 due to higher
    supported sample rates.
  </obsolete>
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The sample rate (in Hz) specified for the offline audio context. Recorded
    for every offline context created.  Probably only a few per page, but could
    be potentially much more (thousands).
  </summary>
</histogram>

<histogram name="WebAudio.OfflineAudioContext.SampleRate384kHz" units="Hz">
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The sample rate (in Hz) specified for the offline audio context. Recorded
    for every offline context created.  Probably only a few per page, but could
    be potentially much more (thousands).
  </summary>
</histogram>

<histogram name="WebAudio.PannerNode.PanningModel" enum="PanningModelType">
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    The panning model for the PannerNode. Recorded once with the default value
    at creation and once again whenver it is changed.  Once changed, it is
    unlikely to be changed again. If there are any PannerNodes created at all,
    then there is probably one for each source (AudioBufferSourceNode,
    OscillatorNode, or other source).
  </summary>
</histogram>

<histogram name="WebAudio.PushPullFIFO.UnderflowGlitches" enum="Boolean">
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    Captures if WebAudio caused glitches or not due to the FIFO underflow. It is
    recorded when PushPullFIFO is destroyed. (e.g. navigating away from the
    page.)
  </summary>
</histogram>

<histogram name="WebAudio.PushPullFIFO.UnderflowPercentage" units="%">
  <owner>rtoy@chromium.org</owner>
  <owner>hongchan@chromium.org</owner>
  <summary>
    Percentage of FIFO underflow happened due to the the missed deadline of
    WebAudio rendering engine. It is recorded when PushPullFIFO is destroyed.
    (e.g. navigating away from the page.)
  </summary>
</histogram>

<histogram name="WebAudio.UserGesture" enum="UserGestureRequirement">
  <obsolete>
    Deprecated 2016-09. As of M55, this is no longer recorded.
  </obsolete>
  <owner>mlamouri@chromium.org</owner>
  <summary>
    Records whether WebAudio had a user gesture requirement and whether it was
    fulfilled.
  </summary>
</histogram>

<histogram name="WebController.CertVerificationErrorsCacheHit"
    enum="BooleanCacheHit">
  <owner>eugenebut@chromium.org</owner>
  <summary>
    [iOS] Report cache hit/miss for WKWebView cert verification. WKWebView Web
    Controller has a cache of pending cert verification results to avoid extra
    verifications when presenting SSL interstitial. This metric helps to
    understand whether or not cache miss is possible.
  </summary>
</histogram>

<histogram name="WebController.EmptyNavigationManagerCausedByStopLoading"
    enum="Boolean">
  <owner>eugenebut@chromium.org</owner>
  <summary>
    [iOS] Chrome for iOS crashes because NavigationManager does not have any
    navigation items and visible navigation item is dereferenced
    (crbug.com/565457). The assumption is that crash occurs if pending load was
    stopped for a child window. This metric will prove or disprove that
    assumption.
  </summary>
</histogram>

<histogram name="WebController.ExternalURLRequestBlocking"
    enum="IOSExternalURLRequestStatus">
  <owner>mrefaat@chromium.org</owner>
  <summary>
    [iOS] Measures the proportion of external URL requests that originate from a
    subframe without any user interaction (e.g. an advertisement contains an
    iframe directed at the App Store).
  </summary>
</histogram>

<histogram
    name="WebController.StartProvisionalNavigationExitedWithEmptyNavigationManager"
    enum="BooleanHit">
  <obsolete>
    Deprecated 2017-02. This metric disproved the assumption mentioned in the
    summary and it is no longer needed.
  </obsolete>
  <owner>eugenebut@chromium.org</owner>
  <summary>
    Chrome for iOS crashes in |didCommitNavigation:| if Navigation Manager is
    empty. It's unclear how the app can get into this state and one assumption
    is that didStartProvisionalNavigation: does not add a pending navigation.
    This metric is logged when didStartProvisionalNavigation: fails to add a
    pending item.
  </summary>
</histogram>

<histogram name="WebController.WKWebViewHasCertForSecureConnection"
    enum="BooleanHasCert">
  <owner>eugenebut@google.com</owner>
  <summary>
    Whether or not WKWebView has provided a valid -certificateChain when loaded
    a page over a secure connection.
  </summary>
</histogram>

<histogram name="WebCore.Animation.CSSProperties" enum="MappedCSSProperties">
  <owner>ajuma@chromium.org</owner>
  <summary>
    Counts the number of times each CSS property is animated. There is no limit
    on the number of times each property is counted per page view -- a property
    that is animated multiple times during a single page view is counted each
    time it animates.
  </summary>
</histogram>

<histogram name="WebCore.CanvasContextUsage" enum="CanvasContextUsage">
  <owner>zmin@chromium.org</owner>
  <owner>junov@chromium.org</owner>
  <summary>
    The usage of Canvas 2D Context API. Logged when the particular API is used.
  </summary>
</histogram>

<histogram name="WebCore.DistillabilityUs" units="microseconds">
  <owner>wychen@chromium.org</owner>
  <summary>
    The time spent on collecting the statistics of the document in the main
    frame. These statistics would be used as features to classify whether the
    page is suitable for DOM distiller.

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

<histogram name="WebCore.Document.execCommand" enum="MappedEditingCommands">
  <owner>yoichio@chromium.org</owner>
  <summary>
    Counts the number of times each document.execCommand is executed. This
    doesn't count commands not supported by Blink.
  </summary>
</histogram>

<histogram name="WebCore.Editing.Commands" enum="MappedEditingCommands">
  <owner>yoichio@chromium.org</owner>
  <summary>
    Counts the number of times each Editor::Command::execute is called. This
    doesn't count commands not supported by Blink.
  </summary>
</histogram>

<histogram name="WebCore.FeatureObserver" enum="FeatureObserver">
  <obsolete>
    As of M57 this has been superseded by Blink.UseCounter.Features which fixes
    a number of issues.  See https://crbug.com/676837.
  </obsolete>
  <owner>rbyers@chromium.org</owner>
  <summary>
    Count of how many page loads use various features. The PageVisits bucket is
    incremented for each page load, and the other buckets incremented at most
    once per PageVisit via the WebCore::UseCounter class.
  </summary>
</histogram>

<histogram name="WebCore.FeatureObserver.CSSProperties"
    enum="MappedCSSProperties">
  <obsolete>
    As of M57 this has been superseded by Blink.UseCounter.CSSProperties which
    fixes a number of issues.  See https://crbug.com/676837.
  </obsolete>
  <owner>mikelawther@chromium.org</owner>
  <summary>
    Records usage of CSS properties used on a page, either statically or
    dynamically, from the time the page is initialised to when it is closed or
    navigated away from. Each property is counted at most once per page per
    view.
  </summary>
</histogram>

<histogram name="WebCore.Framebust" enum="FramebustPermissions">
  <owner>japhet@chromium.org</owner>
  <summary>
    Records instances of child frames navigating the top frame. Includes whether
    or not the navigation would have been permitted if not for our special case
    for 'framebusting', the practice of ensuring a given document is never
    displayed in a frame.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.BackingStore.ConsistencyError"
    enum="IDBLevelDBBackingStoreInternalErrorType">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Methods that encountered consistency errors. Such errors probably point to a
    bug in our code.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.BackingStore.InternalError"
    enum="IDBLevelDBBackingStoreInternalErrorType">
  <obsolete>
    As of chrome 26, use {Consistency, Read, Write}Error instead.
  </obsolete>
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Count of internal IndexedDB errors (data corruption, I/O errors, etc)
    encountered.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.BackingStore.OpenStatus"
    enum="IDBLevelDBBackingStoreOpenResult">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Count of the different success and failure modes when opening an IndexedDB
    backing store - clean open, successful open with recovery, failed recovery,
    etc. Includes all hosts.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.BackingStore.OpenStatus.Docs"
    enum="IDBLevelDBBackingStoreOpenResult">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Count of the different success and failure modes when opening an IndexedDB
    backing store - clean open, successful open with recovery, failed recovery,
    etc. Only for docs.google.com.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.BackingStore.OverlyLargeOriginLength"
    units="characters">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Length of leveldb directories that cause paths to not fit in the filesystem,
    either because the individual component is too long or the overall path is
    larger than MAX_PATH.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.BackingStore.ReadError"
    enum="IDBLevelDBBackingStoreInternalErrorType">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Methods that encountered leveldb errors while trying to read from disk.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.BackingStore.WriteError"
    enum="IDBLevelDBBackingStoreInternalErrorType">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Methods that encountered leveldb errors while trying to write to disk.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.Context.ForceCloseReason"
    enum="IDBContextForcedCloseReason">
  <owner>cmumford@chromium.org</owner>
  <summary>The reason that a forced-close of a backing store occurred.</summary>
</histogram>

<histogram name="WebCore.IndexedDB.Database.OutstandingTransactionCount"
    units="transactions">
  <owner>jsbell@chromium.org</owner>
  <summary>
    Number of outstanding transactions (running, blocked) in database when a new
    transaction is created.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.DestroyCorruptBackingStoreStatus"
    enum="LevelDBStatus">
  <owner>cmumford@chromium.org</owner>
  <summary>
    Count of the results when attempting to destroy a corrupt Indexed DB backing
    store.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.FrontEndAPICalls"
    enum="IndexedDatabaseMethods">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Count total number of front end API calls of IndexedDB methods.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDB.CloseTime" units="ms">
  <owner>cmumford@chromium.org</owner>
  <summary>
    The time that it takes to close IndexedDB's LevelDB backing store.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDB.FreeDiskSpaceFailure"
    enum="LevelDBErrorCount">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Count of how many times LevelDBDatabase got an error trying to check free
    disk space.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDB.OpenFailureFreeDiskSpace" units="Kb">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Amount of free disk space on the partition/volume/etc where LevelDB failed
    to open.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDB.OpenSuccessFreeDiskSpace" units="Kb">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Amount of free disk space on the partition/volume/etc where LevelDB was
    successfully opened.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDB.OpenTime" units="ms">
  <owner>cmumford@chromium.org</owner>
  <summary>
    The time that it takes to open IndexedDB's LevelDB backing store.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDB.PutTime" units="ms">
  <owner>cmumford@chromium.org</owner>
  <summary>
    The time that it takes to write the data IndexedDB to the LevelDB backing
    store for a put operation.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDB.Transaction.CommitTime" units="ms">
  <owner>cmumford@chromium.org</owner>
  <summary>
    The time that it takes to commit an IndexedDB transaction to its LevelDB
    backing store.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDB.WriteTime" units="ms">
  <owner>cmumford@chromium.org</owner>
  <summary>
    The time that it takes to write data to an IndexedDB's LevelDB backing
    store.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDBOpenErrors" enum="LevelDBErrorTypes">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Error classes returned by LevelDB when it failed to open a database.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDBOpenErrors.BFE"
    enum="PlatformFileError">
  <owner>cmumford@chromium.org</owner>
  <summary>
    Errors (base::File::Error) encountered by a single LevelDBEnv method when
    opening an IndexedDB instance.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDBOpenErrors.Corruption"
    enum="LevelDBCorruptionTypes">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Types of corruption that LevelDB encounters when opening a database.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDBOpenErrors.EnvMethod"
    enum="LevelDBIOErrorMethods">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    LevelDBEnv methods that generated IO errors when opening a database.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDBOpenErrors.Errno"
    enum="PopularOSErrno">
  <obsolete>
    Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBOpenErrors.BFE.
  </obsolete>
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Errno errors encountered by a single LevelDBEnv method when opening an
    IndexedDB instance.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDBOpenErrors.PFE"
    enum="PlatformFileError">
  <obsolete>
    Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBOpenErrors.BFE.
  </obsolete>
  <owner>dgrogan@chromium.org</owner>
  <summary>
    PlatformFileErrors encountered by a single LevelDBEnv method when opening an
    IndexedDB instance.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDBReadErrors" enum="LevelDBErrorTypes">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Error classes returned by LevelDB when it failed to read a database.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDBReadErrors.BFE"
    enum="PlatformFileError">
  <owner>cmumford@chromium.org</owner>
  <summary>
    Errors (base::File::Error) encountered by a single LevelDBEnv method when
    reading from an IndexedDB instance.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDBReadErrors.Corruption"
    enum="LevelDBCorruptionTypes">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Types of corruption that LevelDB encounters when reading a database.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDBReadErrors.EnvMethod"
    enum="LevelDBIOErrorMethods">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    LevelDBEnv methods that generated IO errors when reading a database.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDBReadErrors.Errno"
    enum="PopularOSErrno">
  <obsolete>
    Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBReadErrors.BFE.
  </obsolete>
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Errno errors encountered by a single LevelDBEnv method when reading an
    IndexedDB instance.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDBReadErrors.PFE"
    enum="PlatformFileError">
  <obsolete>
    Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBReadErrors.BFE.
  </obsolete>
  <owner>dgrogan@chromium.org</owner>
  <summary>
    PlatformFileErrors encountered by a single LevelDBEnv method when opening an
    IndexedDB instance.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDBWriteErrors" enum="LevelDBErrorTypes">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Error classes returned by LevelDB when it failed to write to a database.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDBWriteErrors.BFE"
    enum="PlatformFileError">
  <owner>cmumford@chromium.org</owner>
  <summary>
    Errors (base::File::Error) encountered by a single LevelDBEnv method when
    writing to an IndexedDB instance.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDBWriteErrors.Corruption"
    enum="LevelDBCorruptionTypes">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Types of corruption returned by LevelDB when it failed to write to a
    database.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDBWriteErrors.EnvMethod"
    enum="LevelDBIOErrorMethods">
  <owner>dgrogan@chromium.org</owner>
  <summary>
    LevelDBEnv methods that generated IO errors when writing to a database.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDBWriteErrors.Errno"
    enum="PopularOSErrno">
  <obsolete>
    Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBWriteErrors.BFE.
  </obsolete>
  <owner>dgrogan@chromium.org</owner>
  <summary>
    Errno errors encountered by a single LevelDBEnv method when writing to an
    IndexedDB instance.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.LevelDBWriteErrors.PFE"
    enum="PlatformFileError">
  <obsolete>
    Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBWriteErrors.BFE.
  </obsolete>
  <owner>dgrogan@chromium.org</owner>
  <summary>
    PlatformFileErrors encountered by a single LevelDBEnv method when writing to
    an IndexedDB instance.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.ObjectStore.IndexEntry.KeyType"
    enum="IDBKeyType">
  <owner>jsbell@chromium.org</owner>
  <summary>
    The type of key (number, string, etc.) used for an index entry for a record
    being newly stored or updated in an Indexed DB object store. For array keys,
    the types of sub-keys are not recorded.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.ObjectStore.Record.KeyType"
    enum="IDBKeyType">
  <owner>jsbell@chromium.org</owner>
  <summary>
    The type of key (number, string, etc.) used for a record being newly stored
    or updated in an Indexed DB object store. For array keys, the types of
    sub-keys are not recorded.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.OpenTime.Blocked" units="ms">
  <owner>cmumford@chromium.org</owner>
  <summary>
    The delay between the receipt of the request to open an IndexedDB database
    and the firing of the blocked event.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.OpenTime.Error" units="ms">
  <owner>cmumford@chromium.org</owner>
  <summary>
    The delay between the receipt of the request to open an IndexedDB database
    and the firing of the error event.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.OpenTime.Success" units="ms">
  <owner>cmumford@chromium.org</owner>
  <summary>
    The delay between the receipt of the request to open an IndexedDB database
    and the firing of the success event.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.OpenTime.UpgradeNeeded" units="ms">
  <owner>cmumford@chromium.org</owner>
  <summary>
    The delay between the receipt of the request to open an IndexedDB database
    and the firing of the upgradeneeded event.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.PutBlobsCount" units="blobs">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The number of blobs being saved in an IndexedDB object store 'put'
    operation. Recorded for every 'put' operation.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.PutBlobsTotalSize" units="KB">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The total size of the blobs being saved in an IndexedDB object store 'put'
    operation. Recorded for every 'put' operation, except when there are no
    attached blobs or a blob has an unknown size.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.PutKeySize" units="KB">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The size of the IndexedDB key used in an IndexedDB object store 'put'
    operation. Recorded for every 'put' operation.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.PutValueSize" units="KB">
  <obsolete>
    Replaced with WebCore.IndexedDB.PutValueSize2 on 6/2017
  </obsolete>
  <owner>dmurph@chromium.org</owner>
  <summary>
    The size of the IndexedDB value used in an IndexedDB object store 'put'
    operation. Recorded for every 'put' operation.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.PutValueSize2" units="KB">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The size of the IndexedDB value used in an IndexedDB object store 'put'
    operation. Recorded for every 'put' operation.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.Schema.Index.KeyPathType"
    enum="IDBKeyPathType">
  <owner>jsbell@chromium.org</owner>
  <summary>
    Records the 'keyPath' type (none, string, or array) during IDBObjectStore's
    createIndex operation. See http://www.w3.org/TR/IndexedDB/
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.Schema.Index.MultiEntry" enum="Boolean">
  <owner>jsbell@chromium.org</owner>
  <summary>
    Records the 'multiEntry' flag value during IDBObjectStore's createIndex
    operation. See http://www.w3.org/TR/IndexedDB/
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.Schema.Index.Unique" enum="Boolean">
  <owner>jsbell@chromium.org</owner>
  <summary>
    Records the 'unique' flag value during IDBObjectStore's createIndex
    operation. See http://www.w3.org/TR/IndexedDB/
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.Schema.ObjectStore.AutoIncrement"
    enum="Boolean">
  <owner>jsbell@chromium.org</owner>
  <summary>
    Records the 'autoIncrement' flag value during IDBDatabase's
    createObjectStore operation. See http://www.w3.org/TR/IndexedDB/
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.Schema.ObjectStore.KeyPathType"
    enum="IDBKeyPathType">
  <owner>jsbell@chromium.org</owner>
  <summary>
    Records the 'keyPath' type (none, string, or array) during IDBDatabase's
    createObjectStore operation. See http://www.w3.org/TR/IndexedDB/
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.SchemaV2HasBlobs" enum="Boolean">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Records if a v2 schema has blob keys in the database, which means the
    database is corrupt. These databases will eventually be wiped as corrupt.
    Recorded when the IndexedDB backing store for an origin is first opened,
    which happens when a IndexedDB database connection is opened or when
    database names are fetched. Note: The backing store stays alive for
    subsequent connections, and sticks around for a couple seconds after the
    last connection is closed. See WebCore.IndexedDB.SchemaV2HasBlobs.Docs for
    the Docs-only version.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.SchemaV2HasBlobs.Docs" enum="Boolean">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Records if a v2 schema has blob keys in the database, which means the
    database is corrupt.  These databases will eventually be wiped as corrupt.
    Recorded when the IndexedDB backing store for an origin is first opened,
    which happens when a IndexedDB database connection is opened or when
    database names are fetched. Note: The backing store stays alive for
    subsequent connections, and sticks around for a couple seconds after the
    last connection is closed. Only for docs.google.com. Note that these samples
    will also be recorded in WebCore.IndexedDB.SchemaV2HasBlobs.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.SchemaVersion" units="version">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Records the schema version of the IndexedDB database read from disk.
    Recorded when the IndexedDB backing store for an origin is first opened,
    which happens when a IndexedDB database connection is opened or when
    database names are fetched. Note: The backing store stays alive for
    subsequent connections, and sticks around for a couple seconds after the
    last connection is closed. See WebCore.IndexedDB.SchemaVersion.Docs for the
    Docs-only version.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.SchemaVersion.Docs" units="version">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Records the schema version of the IndexedDB database read from disk.
    Recorded when the IndexedDB backing store for an origin is first opened,
    which happens when a IndexedDB database connection is opened or when
    database names are fetched. Note: The backing store stays alive for
    subsequent connections, and sticks around for a couple seconds after the
    last connection is closed. Only for docs.google.com. Note that these samples
    will also be recorded in WebCore.IndexedDB.SchemaVersion.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.TombstoneSweeper.DeletedTombstonesSize"
    units="bytes">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Records the total size of tombstones deleted by the IndexedDB Tombstone
    Sweeper. Recorded on the browser side (back end) when the sweeper has
    completed scanning and it is in the 'deletion' mode. See
    https://goo.gl/coKwA7.
  </summary>
</histogram>

<histogram
    name="WebCore.IndexedDB.TombstoneSweeper.DeletionCommitTime.Complete"
    units="ms">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Records the time it takes for the IndexedDB Tombstone Sweeper to commit
    tombstone deletions. Recorded on the browser side (back end) when the
    sweeper has completed a round of sweeping and, it's in 'deletion' mode, and
    it has tombstones to delete. See https://goo.gl/coKwA7.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.TombstoneSweeper.DeletionTotalTime.Complete"
    units="ms">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Records the time it takes for the IndexedDB Tombstone Sweeper to fully sweep
    the indexes. Recorded on the browser side (back end) when the sweeper has
    completed sweeping all indexes (so partial sweeps are not recorded) and it
    is in 'deletion' mode. See https://goo.gl/coKwA7.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.TombstoneSweeper.DeletionWriteError"
    units="LevelDBStatus">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Records when an error occurs during deletion of index tombstones by the
    IndexedDB Tombstone Sweeper. Recorded on the browser side (back end) when
    the sweeper has completed a round of sweeping and, it's in 'deletion' mode,
    and it has tombstones to delete. See https://goo.gl/coKwA7.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.TombstoneSweeper.IndexScanPercent"
    units="%/5">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Recorded on the browser side (back end) when the IndexedDB Tombstone Sweeper
    has completed scanning. Records the percentage of the indexes the scanner
    fully scanned before it was stopped. To reduce the number of buckets, the
    recorded value is the percentage divided by 5. See https://goo.gl/coKwA7.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.TombstoneSweeper.NumDeletedTombstones"
    units="Index Tombstones">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Records the number of tombstones deleted by the IndexedDB Tombstone Sweeper.
    Recorded on the browser side (back end) when the sweeper has completed
    scanning and it is in 'deletion' mode. See https://goo.gl/coKwA7.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.TombstoneSweeper.NumTombstones"
    units="Index Tombstones">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Records the number of tombstones encountered by the IndexedDB Tombstone
    Sweeper. Recorded on the browser side (back end) when the sweeper has
    completed scanning and it is in 'statistics' mode. See
    https://goo.gl/coKwA7.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.TombstoneSweeper.StatsTotalTime.Complete"
    units="ms">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Records the time it takes for the IndexedDB Tombstone Sweeper to fully scan
    the indexes. Recorded on the browser side (back end) when the sweeper has
    completed scanning all indexes (so partial scans are not recorded) and it is
    in 'statistics' mode. See https://goo.gl/coKwA7.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.TombstoneSweeper.SweepError"
    enum="LevelDBStatus">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Recorded on the browser side (back end) when the IndexedDB Tombstone Sweeper
    encounters an error while sweeping. See https://goo.gl/coKwA7.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.TombstoneSweeper.TombstonesSize"
    units="bytes">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Records the total size of tombstones encountered by the IndexedDB Tombstone
    Sweeper. Recorded on the browser side (back end) when the sweeper has
    completed scanning and it is in the 'statistics' mode. See
    https://goo.gl/coKwA7.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.Transaction.ReadOnly.SizeOnCommit"
    units="KB">
  <obsolete>
    Replaced with WebCore.IndexedDB.Transaction.ReadOnly.SizeOnCommit2 on 6/2017
  </obsolete>
  <owner>dmurph@chromium.org</owner>
  <summary>
    The total temporary size of an IndexedDB ReadOnly Transaction. Since this is
    a readonly transaction, the size should only be &gt;0 when the transaction
    is removing tombstone index keys. Recorded on transaction commit.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.Transaction.ReadOnly.SizeOnCommit2"
    units="KB">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The total temporary size of an IndexedDB ReadOnly Transaction. Since this is
    a readonly transaction, the size should only be &gt;0 when the transaction
    is removing tombstone index keys. Recorded on transaction commit.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.Transaction.ReadOnly.TimeActive" units="ms">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The time it takes for an IndexedDB ReadOnly Transaction to commit, starting
    from when it starts executing tasks (when it is scheduled). Recorded on
    transaction commit.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.Transaction.ReadWrite.SizeOnCommit"
    units="KB">
  <obsolete>
    Replaced with WebCore.IndexedDB.Transaction.ReadWrite.SizeOnCommit2 on
    6/2017
  </obsolete>
  <owner>dmurph@chromium.org</owner>
  <summary>
    The total temporary size of an IndexedDB ReadWrite Transaction. This is the
    memory that is temporarily stored before writing to disk. Recorded on
    transaction commit.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.Transaction.ReadWrite.SizeOnCommit2"
    units="KB">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The total temporary size of an IndexedDB ReadWrite Transaction. This is the
    memory that is temporarily stored before writing to disk. Recorded on
    transaction commit.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.Transaction.ReadWrite.TimeActive" units="ms">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The time it takes for an IndexedDB ReadWrite Transaction to commit, starting
    from when it starts executing tasks (when it is scheduled). Recorded on
    transaction commit.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.Transaction.VersionChange.SizeOnCommit"
    units="KB">
  <obsolete>
    Replaced with WebCore.IndexedDB.Transaction.VersionChange.SizeOnCommit2 on
    6/2017
  </obsolete>
  <owner>dmurph@chromium.org</owner>
  <summary>
    The total temporary size of an IndexedDB VersionChange Transaction. This is
    the memory that is temporarily stored before writing to disk. Version change
    transactions happen when creating a database or updating a current database
    schema. Recorded on transaction commit.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.Transaction.VersionChange.SizeOnCommit2"
    units="KB">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The total temporary size of an IndexedDB VersionChange Transaction. This is
    the memory that is temporarily stored before writing to disk. Version change
    transactions happen when creating a database or updating a current database
    schema. Recorded on transaction commit.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.Transaction.VersionChange.TimeActive"
    units="ms">
  <owner>dmurph@chromium.org</owner>
  <summary>
    The time it takes for an IndexedDB VersionChange Transaction to commit,
    starting from when it starts executing tasks (when it is scheduled). Version
    change transactions happen when creating a database or updating a current
    database schema. Recorded on transaction commit.
  </summary>
</histogram>

<histogram name="WebCore.IndexedDB.TransactionAbortReason" enum="IDBException">
  <owner>dmurph@chromium.org</owner>
  <summary>
    Recorded on the browser side (back end) when an IndexedDB transaction is
    aborted, specifically recording the reason for the abort. This can be
    triggered by javascript code on the renderer, errors or force closes on the
    backend, or by the transaction timeout timer.
  </summary>
</histogram>

<histogram name="WebCore.PreloadDelayMs" units="ms">
  <obsolete>
    Deprecated, preloads are issued on the main thread now, so this is less
    useful.
  </obsolete>
  <owner>csharrison@chromium.org</owner>
  <summary>
    The delay between when the preload scanner discovers a resource on the
    parser thread and when the preload request is issued on the main thread.
  </summary>
</histogram>

<histogram name="WebCore.ResourceFetcher.ActionUponResourceRequest"
    enum="ActionUponResourceRequest">
  <owner>clamy@chromium.org</owner>
  <summary>
    The resulting action (e.g. load resource, use resource from in-memory
    cache...) upon a resource request.
  </summary>
</histogram>

<histogram name="WebCore.ResourceFetcher.HitCount">
  <obsolete>
    Deprecated April 2017.
  </obsolete>
  <owner>clamy@chromium.org</owner>
  <summary>
    Number of dead resources found in the memory cache over the lifetime of the
    ResourceFetcher.
  </summary>
</histogram>

<histogram name="WebCore.ResourceFetcher.LoadCount">
  <obsolete>
    Deprecated April 2017.
  </obsolete>
  <owner>clamy@chromium.org</owner>
  <summary>
    Number of resources that needed to be loaded by the ResourceFetcher over its
    lifetime.
  </summary>
</histogram>

<histogram name="WebCore.ResourceFetcher.ResourceHasClientUponCacheHit"
    enum="ResourceHasClient">
  <owner>clamy@chromium.org</owner>
  <summary>
    Whether the resource in the cache is being used by at least one client (live
    resource) or not (dead resource) upon a cache hit.
  </summary>
</histogram>

<histogram name="WebCore.ResourceFetcher.ResourceTypeUponCacheHit"
    enum="ResourceType">
  <obsolete>
    This metric has been not recorded at least since 2016/01. The displayed enum
    labels might be unreliable because C++ enum values of blink::Resource::Type
    have been changed over time.
  </obsolete>
  <owner>clamy@chromium.org</owner>
  <summary>
    The type of the resource (e.g. image, script...) upon a cache hit.
  </summary>
</histogram>

<histogram name="WebCore.ResourceFetcher.RevalidateCount">
  <obsolete>
    Deprecated April 2017.
  </obsolete>
  <owner>clamy@chromium.org</owner>
  <summary>
    Number of dead resources that needed to be revalidated by the
    ResourceFetcher over its lifetime.
  </summary>
</histogram>

<histogram name="WebCore.ScriptedIdleTaskController.IdleCallbackDeadline"
    units="ms">
  <obsolete>
    Deprecated November 2017.
  </obsolete>
  <owner>rmcilroy@chromium.org</owner>
  <summary>
    The amount of time allotted to a requestIdleCallback callback, i.e., the
    difference between the time when it is called and when its deadline expires.
  </summary>
</histogram>

<histogram name="WebCore.ScriptedIdleTaskController.IdleCallbackOverrun"
    units="ms">
  <owner>rmcilroy@chromium.org</owner>
  <summary>
    The amount of time by which a requestIdleCallback callback overran its
    deadline. Callbacks which don't overrun their deadline will report an
    overrun of 0.
  </summary>
</histogram>

<histogram name="WebCore.Scripts.Async.NotStreamingReason"
    enum="NotStreamingReason">
  <owner>marja@chromium.org</owner>
  <summary>Reason for not streaming an async script.</summary>
</histogram>

<histogram name="WebCore.Scripts.Async.StartedStreaming" enum="BooleanStreamed">
  <owner>marja@chromium.org</owner>
  <summary>Whether an async script was streamed or not.</summary>
</histogram>

<histogram name="WebCore.Scripts.Deferred.NotStreamingReason"
    enum="NotStreamingReason">
  <owner>marja@chromium.org</owner>
  <summary>Reason for not streaming a deferred script.</summary>
</histogram>

<histogram name="WebCore.Scripts.Deferred.StartedStreaming"
    enum="BooleanStreamed">
  <owner>marja@chromium.org</owner>
  <summary>Whether a deferred script was streamed or not.</summary>
</histogram>

<histogram name="WebCore.Scripts.ParsingBlocking.AlreadyLoaded"
    enum="BooleanLoaded">
  <obsolete>
    Deprecated as this data was needed for streaming investigations, no longer
    needed.
  </obsolete>
  <owner>marja@chromium.org</owner>
  <summary>
    Whether a parsing blocking script was already preloaded from the net or the
    cache by the time it was needed.
  </summary>
</histogram>

<histogram name="WebCore.Scripts.ParsingBlocking.NotStreamingReason"
    enum="NotStreamingReason">
  <owner>marja@chromium.org</owner>
  <summary>Reason for not streaming a parsing blocking script.</summary>
</histogram>

<histogram name="WebCore.Scripts.ParsingBlocking.StartedStreaming"
    enum="BooleanStreamed">
  <owner>marja@chromium.org</owner>
  <summary>Whether a parsing blocking script was streamed or not.</summary>
</histogram>

<histogram name="WebCore.Scripts.ParsingBlocking.TimeBetweenLoadedAndCompiled"
    units="ms">
  <obsolete>
    Deprecated as this data was needed for streaming investigations, no longer
    needed.
  </obsolete>
  <owner>marja@chromium.org</owner>
  <summary>
    Time between the events &quot;script is loaded&quot; and &quot;script is
    compiled&quot; for parsing blocking scripts.
  </summary>
</histogram>

<histogram name="WebCore.SpellChecker.RequestInterval" units="ms">
  <owner>xiaochengh@chromium.org</owner>
  <summary>
    The amount of time between consecutive spellcheck requests made by Blink,
    with the exception that requests made simultaneously checking different
    parts of the same editing host count as only one request.
  </summary>
</histogram>

<histogram name="WebCore.UseCounter_TEST.CSSProperties"
    enum="MappedCSSProperties">
  <obsolete>
    Temporary histogram replaced by Blink.UseCounter.CSSProperties.
  </obsolete>
  <owner>rbyers@chromium.org</owner>
</histogram>

<histogram name="WebCore.UseCounter_TEST.Features" enum="FeatureObserver">
  <obsolete>
    Temporary histogram replaced by Blink.UseCounter.Features.
  </obsolete>
  <owner>rbyers@chromium.org</owner>
</histogram>

<histogram name="WebCore.UseCounter_TEST.SVGImage.CSSProperties"
    enum="MappedCSSProperties">
  <obsolete>
    Temporary histogram replaced by Blink.UseCounter.SVGImage.CSSProperties.
  </obsolete>
  <owner>rbyers@chromium.org</owner>
</histogram>

<histogram name="WebCore.UseCounter_TEST.SVGImage.Features"
    enum="FeatureObserver">
  <obsolete>
    Temporary histogram replaced by Blink.UseCounter.SVGImage.Features.
  </obsolete>
  <owner>rbyers@chromium.org</owner>
</histogram>

<histogram name="WebCore.V8DOMWindowShell.createContext.IsolatedWorld"
    units="ms">
  <obsolete>
    Deprecated 05/2013, we no longer have the code that uses this metric.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Duration of time taken to create a V8 Context for an isolated world.
  </summary>
</histogram>

<histogram name="WebCore.V8DOMWindowShell.createContext.MainWorld" units="ms">
  <obsolete>
    Deprecated 05/2013, we no longer have the code that uses this metric.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Duration of time taken to create a V8 Context for the main world.
  </summary>
</histogram>

<histogram name="WebCore.WebSocket.BinaryTypeChangesAfterOpen">
  <obsolete>
    Deprecate 2017-06, as we've collected enough data to discuss. (see issue
    584616).
  </obsolete>
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>
    Count the number of changes to WebSocket.binaryType after the connection
    opened, per connection. Assignments that match the existing binaryType are
    not counted. This is recorded after WebSocket close, whether explicit or due
    to error or navigation. It is not recorded if the render process is
    destroyed before the WebSocket is closed.
  </summary>
</histogram>

<histogram name="WebCore.WebSocket.HandshakeResult"
    enum="WebSocketHandshakeResult">
  <obsolete>
    Deprecated 2014-06 when we replaced the WebSocket implementation (see issue
    226931).
  </obsolete>
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>
    Count the number of WebSocket handshake for each result. Use this histogram
    as a baseline for investigating feature usage counters.
  </summary>
</histogram>

<histogram name="WebCore.WebSocket.MessageSize.Receive" units="bytes">
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>
    The sizes of binary WebSocket messages received, broken down by type. One
    entry per message. Clamped to 100 MB.
  </summary>
</histogram>

<histogram name="WebCore.WebSocket.MessageSize.Send" units="bytes">
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>
    The sizes of binary WebSocket messages sent, broken down by type. One entry
    per message. Clamped to 100 MB.
  </summary>
</histogram>

<histogram name="WebCore.WebSocket.PerMessageDeflateContextTakeOverMode"
    enum="WebSocketPerMessageDeflateContextTakeOverMode">
  <obsolete>
    Deprecated 2014-06 when we replaced the WebSocket implementation (see issue
    226931).
  </obsolete>
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>
    Count the number of WebSockets that accepted permessage-deflate extension
    for each context take over mode. Used by the old Blink-based WebSocket
    implementation.
  </summary>
</histogram>

<histogram name="WebCore.WebSocket.ReceiveType" enum="WebSocketReceiveType">
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>
    Count the number of messages for each message type and set binary type.
  </summary>
</histogram>

<histogram name="WebCore.WebSocket.SendType" enum="WebSocketSendType">
  <owner>yhirano@chromium.org</owner>
  <owner>ricea@chromium.org</owner>
  <summary>
    Count the number of send() method calls on WebSockets for each argument
    type.
  </summary>
</histogram>

<histogram name="WebCore.XHR.send.ArrayBufferOrView"
    enum="XMLHttpRequestSendArrayBufferOrView">
  <obsolete>
    Deprecated as of 7/2014. This histogram was used to determine when it would
    be ok to remove the deprecated XMLHttpRequest.send(ArrayBuffer) overload.
    The support for ArrayBuffer was un-deprecated in the WHATWG spec for XHR,
    and subsequently un-deprecated in Blink.
  </obsolete>
  <owner>costan@gmail.com</owner>
  <summary>
    Count the number of XHR.send() calls for each argument type to see when we
    can deprecate the ArrayBuffer type support.
  </summary>
</histogram>

<histogram name="WebFont.BlankTextShownTime" units="ms">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    A histogram tracking the time we spent showing blank text because a web font
    wasn't available by the time we needed it. Measured once per @font-face that
    ended up showing blank text.
  </summary>
</histogram>

<histogram name="WebFont.CacheHit" enum="WebFontCacheHit">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Recorded upon web fonts load. Counts the number of times web font is loaded
    from cache (disk cache or memory cache), fetched over network, or served
    from data URL.
  </summary>
</histogram>

<histogram name="WebFont.CORSSuccess" enum="BooleanSuccess">
  <owner>bashi@chromium.org</owner>
  <owner>kenjibaheux@chromium.org</owner>
  <summary>The success or failure of web fonts CORS-enabled fetching.</summary>
</histogram>

<histogram name="WebFont.DecodeSpeed" units="KB/s">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Uncompressed font image size divided by the duration of time OTS takes to
    decode the font image, in kilobytes per second.
  </summary>
</histogram>

<histogram name="WebFont.DiskCache.EntryAge.Evict" units="hours">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Recorded upon an eviction of a cache entry for a font in Google Fonts.
    Records the age of the cache entry.
  </summary>
</histogram>

<histogram name="WebFont.DiskCache.EntryAge.Hit" units="hours">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Recorded upon a cache hit for a font in Google Fonts. Records the age of the
    cache entry.
  </summary>
</histogram>

<histogram name="WebFont.DiskCache.ReuseCount.Evict">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    When a cache entry for a font in Google Fonts is evicted, records the reuse
    count of the cache entry.
  </summary>
</histogram>

<histogram name="WebFont.DiskCache.ReuseCount.Hit">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Recorded upon a cache hit for a font in Google Fonts. Records the reuse
    count of the cache entry.
  </summary>
</histogram>

<histogram name="WebFont.DiskCacheHit" enum="WebFontDiskCacheHit">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Whether the font was in the cache or not. &quot;Previously in the
    cache&quot; means there was an evicted entry for the font in the cache.
    Recorded upon a disk cache query for a font in Google Fonts.
  </summary>
</histogram>

<histogram name="WebFont.DownloadTime.0.Under10KB" units="ms">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time it takes for a webfont download to finish, for webfonts of under
    10KB.
  </summary>
</histogram>

<histogram name="WebFont.DownloadTime.1.10KBTo50KB" units="ms">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time it takes for a webfont download to finish, for webfonts of
    10KB-50KB.
  </summary>
</histogram>

<histogram name="WebFont.DownloadTime.2.50KBTo100KB" units="ms">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time it takes for a webfont download to finish, for webfonts of
    50KB-100KB.
  </summary>
</histogram>

<histogram name="WebFont.DownloadTime.3.100KBTo1MB" units="ms">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time it takes for a webfont download to finish, for webfonts of
    100KB-1MB.
  </summary>
</histogram>

<histogram name="WebFont.DownloadTime.4.Over1MB" units="ms">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time it takes for a webfont download to finish, for webfonts of over
    1MB.
  </summary>
</histogram>

<histogram name="WebFont.DownloadTime.LoadError" units="ms">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time taken for a webfont download that failed. Includes aborted
    requests.
  </summary>
</histogram>

<histogram name="WebFont.FontDisplayValue" enum="FontDisplayValue">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The value of font-display @font-face descriptor. Counted only when
    explicitly specified in the @font-face rule.
  </summary>
</histogram>

<histogram name="WebFont.HadBlankText" enum="BooleanHadBlankText">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    This metrics is logged when a page that use web fonts is loaded. The value
    is whether we had to wait on at least one web font and ended up showing
    blank text, or not.
  </summary>
</histogram>

<histogram name="WebFont.InterventionResult" enum="WebFontInterventionResult">
  <obsolete>
    Deprecated 10/2017. Related field trial has finished rolling out.
  </obsolete>
  <owner>toyoshim@chromium.org</owner>
  <owner>kenjibaheux@chromium.org</owner>
  <summary>
    For each WebFont load attempt, records whether User Agent Intervention was
    triggered, and whether the request (would have) timed out or not. The
    intervention takes adaptive behaviors to handle loading timeouts to improve
    user experiences on slow networks.
  </summary>
</histogram>

<histogram name="WebFont.InterventionResult.MissedCache"
    enum="WebFontInterventionResult">
  <obsolete>
    Deprecated 10/2017. Related field trial has finished rolling out.
  </obsolete>
  <owner>toyoshim@chromium.org</owner>
  <owner>kenjibaheux@chromium.org</owner>
  <summary>
    Like InterventionResult, this records whether User Agent Intervention was
    triggered, and whether the request (would have) timed out or not. But this
    version records only when data actually comes from network, not from disk or
    memory cache, and is not provided in a data URL format.
  </summary>
</histogram>

<histogram name="WebFont.LayoutLatency" units="ms">
  <obsolete>
    Renamed to WebFont.StyleRecalcToDownloadLatency for clarity.
  </obsolete>
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time from when the webfont was referenced by a calculated style for the
    first time to the start of the font download.
  </summary>
</histogram>

<histogram name="WebFont.LoadLimitOnDiskCacheMiss" enum="WebFontLoadLimitState">
  <owner>ksakamoto@chromium.org</owner>
  <owner>shaochuan@chromium.org</owner>
  <owner>toyoshim@chromium.org</owner>
  <summary>
    The load limit state when the first disk-cache-only request fails by cache
    miss, if WebFonts cache-aware timeout adaptation is enabled and applicable.
  </summary>
</histogram>

<histogram name="WebFont.LoadTime.0.Under10KB" units="ms">
  <obsolete>
    Deprecated as of 8/2013, replaced by WebFont.DownloadTime.0.Under10KB.
  </obsolete>
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time it takes for a webfont download to finish, for webfonts of under
    10KB.
  </summary>
</histogram>

<histogram name="WebFont.LoadTime.1.10KBTo50KB" units="ms">
  <obsolete>
    Deprecated as of 8/2013, replaced by WebFont.DownloadTime.1.10KBTo50KB.
  </obsolete>
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time it takes for a webfont download to finish, for webfonts of
    10KB-50KB.
  </summary>
</histogram>

<histogram name="WebFont.LoadTime.2.50KBTo100KB" units="ms">
  <obsolete>
    Deprecated as of 8/2013, replaced by WebFont.DownloadTime.2.50KBTo100KB.
  </obsolete>
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time it takes for a webfont download to finish, for webfonts of
    50KB-100KB.
  </summary>
</histogram>

<histogram name="WebFont.LoadTime.3.100KBTo1MB" units="ms">
  <obsolete>
    Deprecated as of 8/2013, replaced by WebFont.DownloadTime.3.100KBTo1MB.
  </obsolete>
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time it takes for a webfont download to finish, for webfonts of
    100KB-1MB.
  </summary>
</histogram>

<histogram name="WebFont.LoadTime.4.Over1MB" units="ms">
  <obsolete>
    Deprecated as of 8/2013, replaced by WebFont.DownloadTime.4.Over1MB.
  </obsolete>
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time it takes for a webfont download to finish, for webfonts of over
    1MB.
  </summary>
</histogram>

<histogram name="WebFont.LoadTime.LoadError" units="ms">
  <obsolete>
    Deprecated as of 8/2013, replaced by WebFont.DownloadTime.LoadError.
  </obsolete>
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time taken for a webfont download that failed. Includes aborted
    requests.
  </summary>
</histogram>

<histogram name="WebFont.LocalFontUsed" enum="BooleanUsage">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    Whether a locallly installed font is actually used when @font-face had local
    sources.
  </summary>
</histogram>

<histogram name="WebFont.PackageFormat" enum="WebFontPackageFormat">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The packaging format of the font file (e.g. SFNT, WOFF ...) upon a webfont
    load.
  </summary>
</histogram>

<histogram name="WebFont.Resource.StyleRecalcToDownloadLatency" units="ms">
  <obsolete>
    Deprecated 11/2013. No longer tracked.
  </obsolete>
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time from when the webfont was referenced by a calculated style for the
    first time to the start of the font download. Recorded at most once for each
    FontResource object (not recorded if the font is retrieved from the memory
    cache).
  </summary>
</histogram>

<histogram name="WebFont.Resource.UsageType" enum="WebFontUsageType">
  <obsolete>
    Deprecated 11/2013. No longer tracked.
  </obsolete>
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    For each webfont, this records (a) if the font was 'styled', i.e. referenced
    by a calculated style for a RenderText before the font data was used, and
    (b) if the font was actually used or not, i.e. the renderer requested the
    font data or not. (A Font can be used without being styled, for example when
    drawn by a Canvas 2D Context.) This is recorded upon a download request of a
    webfont, or destruction of a FontResource object. Recorded at most once for
    each FontResource object in the renderer's memory cahce.
  </summary>
</histogram>

<histogram name="WebFont.StyleRecalcToDownloadLatency" units="ms">
  <obsolete>
    Deprecated as of 9/2013, replaced by
    WebFont.Resource.StyleRecalcToDownloadLatency.
  </obsolete>
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The time from when the webfont was referenced by a calculated style for the
    first time to the start of the font download.
  </summary>
</histogram>

<histogram name="WebFont.UsageType" enum="WebFontUsageType">
  <obsolete>
    Deprecated as of 9/2013, replaced by WebFont.Resource.UsageType.
  </obsolete>
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    For each webfont, this records (a) if the font was 'styled', i.e. referenced
    by a calculated style for a RenderText before the font data was used, and
    (b) if the font was actually used or not, i.e. the renderer requested the
    font data or not. (A Font can be used without being styled, for example when
    drawn by a Canvas 2D Context.) This is recorded upon a download request of a
    webfont, or destruction of a CSSFontFaceSource object. Recorded at most once
    for each url() source of @font-face CSS rule.
  </summary>
</histogram>

<histogram name="WebFont.WebFontsInPage">
  <owner>kenjibaheux@chromium.org</owner>
  <owner>ksakamoto@chromium.org</owner>
  <summary>
    The number of webfonts used in a page. This is recorded when the first
    layout is done, and so will not count webfonts dynamically loaded by
    scripts.
  </summary>
</histogram>

<histogram name="WebHistory.LocalResultMissingOnServer" units="%"
    expires_after="2018-08-30">
  <owner>zea@chromium.org</owner>
  <summary>
    Percentage of results that are present locally but are not returned by the
    web history API call. Recorded every time a signed-in user visits the
    chrome://history page and the results from the web history are received.
  </summary>
</histogram>

<histogram name="WebHistory.OAuthTokenCompletion" enum="BooleanSuccess"
    expires_after="2018-08-30">
  <owner>zea@chromium.org</owner>
  <summary>
    Whether getting the OAuth token was successful for a web history query. On
    visits to the chrome://history page this token is obtained and then used to
    get the user's synced web history.
  </summary>
</histogram>

<histogram name="WebHistory.OAuthTokenResponseCode" units="code"
    expires_after="2018-08-30">
  <owner>zea@chromium.org</owner>
  <summary>
    HTTP Response code returned by the server when trying to fetch the OAuth
    token for a web history query.
  </summary>
</histogram>

<histogram name="WebHistory.QueryCompletion" enum="WebHistoryStatus">
  <owner>zea@chromium.org</owner>
  <summary>
    Whether the web history API call was successful. Every time a signed-in user
    visits the chrome://history page this query is executed to get the user's
    synced web history. If successful, the local and remote results are merged
    and shown in the history page.
  </summary>
</histogram>

<histogram name="WebHistory.ResponseTime" units="ms" expires_after="2018-08-30">
  <owner>zea@chromium.org</owner>
  <summary>
    Time it took for the web history to reply. Recorded when the web history API
    call triggered by visiting chrome://history receives the data, measuring how
    much time it took for the server to reply.
  </summary>
</histogram>

<histogram name="WebP.DecodedImageFormat" enum="WebpDecodedFormat">
  <owner>droger@chromium.org</owner>
  <summary>
    Histogram for the format of decoded WebP images on iOS, as Chrome re-encodes
    WebP images on that platform.
  </summary>
</histogram>

<histogram name="WebRTC.AecDelayBasedQuality" enum="DelayBasedEchoQuality">
  <owner>hlundin@chromium.org</owner>
  <summary>
    Captures if the estimated delay between rendered and captured audio is out
    of bounds which can cause the Echo Cancellation to fail. This is logged
    roughly once every 5 seconds. The values are logged in four buckets
    reflecting how well the Echo Cancellation likely performs based on the
    estimated delay.
  </summary>
</histogram>

<histogram name="WebRTC.AecFilterHasDivergence" units="%">
  <owner>grunell@chromium.org</owner>
  <owner>minyue@chromium.org</owner>
  <summary>
    The percentage of measurement periods during a capture stream's lifetime
    when the echo canceler's filter is considered to have diverged at least
    once. A diverged filter could mean that there was echo och ducking
    experienced. The measurement period size is fixed and in the order of one
    second. The first measurement period is larger, typically 2-3 seconds.
    Capture streams with shorter lifetimes (i.e. no data available) are not
    recorded here.
  </summary>
</histogram>

<histogram name="WebRTC.ApplicationMaxConsecutiveBytesDiscard">
  <obsolete>
    Deprecated as of 12/2014, replaced by
    WebRTC.ApplicationMaxConsecutiveBytesDiscard.v2.
  </obsolete>
  <owner>guoweis@chromium.org</owner>
  <summary>
    The maximum consecutive discarded bytes caused by not enough buffer
    available in WebRTC's socket implementation.  This happens when WebRTC
    IpcPacketSocket's throttling mechanism kicks in.
  </summary>
</histogram>

<histogram name="WebRTC.ApplicationMaxConsecutiveBytesDiscard.v2">
  <owner>guoweis@chromium.org</owner>
  <summary>
    The maximum consecutive discarded bytes caused by not enough buffer
    available in WebRTC's socket implementation.  This happens when WebRTC
    IpcPacketSocket's throttling mechanism kicks in. The maximum bucket is
    expanded from previous version to provide more insight when upper layer
    feeds a lot of packets.
  </summary>
</histogram>

<histogram name="WebRTC.ApplicationPercentPacketsDiscarded" units="%">
  <owner>guoweis@chromium.org</owner>
  <summary>
    The percentage of packets discarded by WebRTC's socket layer due to
    EWOULDBLOCKs when WebRTC IpcPacketSocket's throttling mechanism kicks in.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.AecDelayAdjustmentMsAgnosticValue" units="ms">
  <owner>hlundin@chromium.org</owner>
  <summary>
    The AEC in WebRTC will sometimes realign the far- and near-end signal
    buffers to keep in sync with delay changes in the echo path. This metric
    logs each such realignment, storing the delay change in ms, when the change
    is triggered by a shift in the signal based delay estimation (a.k.a
    delay-agnostic).
  </summary>
</histogram>

<histogram name="WebRTC.Audio.AecDelayAdjustmentMsSystemValue" units="ms">
  <owner>hlundin@chromium.org</owner>
  <summary>
    The AEC in WebRTC will sometimes realign the far- and near-end signal
    buffers to keep in sync with delay changes in the echo path. This metric
    logs each such realignment, storing the delay change in ms, when the change
    is triggered by a shift in system reported delay.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.AecSystemDelayJump" units="ms">
  <owner>hlundin@chromium.org</owner>
  <summary>
    The AEC in WebRTC keeps a buffer to mimic the audio buffers in the lower
    layers. This histogram logs a sudden positive jump in buffer size. Since we
    detect jumps in the capture thread, only positive values are feasible. Note
    that the difference in milliseconds is logged and not the actual AEC system
    delay value. Sampled every time the AEC system delay changes more than 50
    milliseconds.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.Agc2.FixedDigitalGainCurveRegion.Identity"
    units="seconds">
  <owner>aleloi@chromium.org</owner>
  <summary>
    The Fixed-Digital part of the AGC protects from saturation by reducing the
    level of too loud signals. This metric shows how long the level estimate
    stays in the 'Identity' region. In this region no attanuating gain is
    applied.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.Agc2.FixedDigitalGainCurveRegion.Knee"
    units="seconds">
  <owner>aleloi@chromium.org</owner>
  <summary>
    The Fixed-Digital part of the AGC protects from saturation by reducing the
    level of too loud signals. This metric shows how long the level estimate
    stays in the 'Knee' region. In this region some attanuating gain is applied.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.Agc2.FixedDigitalGainCurveRegion.Limiter"
    units="seconds">
  <owner>aleloi@chromium.org</owner>
  <summary>
    The Fixed-Digital part of the AGC protects from saturation by reducing the
    level of too loud signals. This metric shows how long the level estimate
    stays in the 'Limiter' region. In this region some more attanuating gain is
    applied.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.Agc2.FixedDigitalGainCurveRegion.Saturation"
    units="seconds">
  <owner>aleloi@chromium.org</owner>
  <summary>
    The Fixed-Digital part of the AGC protects from saturation by reducing the
    level of too loud signals. This metric shows how long the level estimate
    stays in the 'Saturation' region. In this region much attanuating gain is
    applied.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.AgcClippingAdjustmentAllowed" enum="Boolean">
  <owner>hlundin@chromium.org</owner>
  <summary>
    The automatic gain control (AGC) in WebRTC tries to adjust the microphone
    gain to maintain a strong audio level, but without clipping (saturation).
    The histogram will log a value every time input clipping is detected. The
    value is a boolean, with &quot;true&quot; meaning that the gain was in fact
    adjusted in response to the detected clipping, and &quot;false&quot; meaning
    that adjustment was not allowed due to limiting boundaries in the algorithm.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.AgcSetLevel" units="level">
  <owner>hlundin@chromium.org</owner>
  <summary>
    The automatic gain control (AGC) in WebRTC tries to adjust the microphone
    gain to maintain a strong audio level, but without clipping (saturation).
    The histogram will log a new value every time the AGC changes the target
    level.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.ApmCaptureInputLevelAverageRms"
    units="dBFS (negated)">
  <owner>hlundin@chromium.org</owner>
  <summary>
    This histogram reports the average RMS of the signal coming in to WebRTC's
    Audio Processing Module, prior to any WebRTC processing. A new value is
    reported every 10 seconds, and the average is over the latest interval. The
    metric is negated dBFS, meaning that 0 is a full-scale signal, while 127
    corresponds to -127 dBFS (very faint).
  </summary>
</histogram>

<histogram name="WebRTC.Audio.ApmCaptureInputLevelPeakRms"
    units="dBFS (negated)">
  <owner>hlundin@chromium.org</owner>
  <summary>
    This histogram reports the peak RMS of the signal coming in to WebRTC's
    Audio Processing Module, prior to any WebRTC processing. A new value is
    reported every 10 seconds, and the peak is the RMS of the strongest 10 ms
    block over the latest interval. The metric is negated dBFS, meaning that 0
    is a full-scale signal, while 127 corresponds to -127 dBFS (very faint).
  </summary>
</histogram>

<histogram name="WebRTC.Audio.ApmCaptureOutputLevelAverageRms"
    units="dBFS (negated)">
  <owner>peah@chromium.org</owner>
  <summary>
    This histogram reports the average RMS of the signal in the output of
    WebRTC's Audio Processing Module, after all audio WebRTC processing. A new
    value is reported every 10 seconds, and the average is over the latest
    interval. The metric is negated dBFS, meaning that 0 is a full-scale signal,
    while 127 corresponds to -127 dBFS (very faint).
  </summary>
</histogram>

<histogram name="WebRTC.Audio.ApmCaptureOutputLevelPeakRms"
    units="dBFS (negated)">
  <owner>peah@chromium.org</owner>
  <summary>
    This histogram reports the peak RMS of the signal in the output of WebRTC's
    Audio Processing Module, after all WebRTC audio processing. A new value is
    reported every 10 seconds, and the peak is the RMS of the strongest 10 ms
    block over the latest interval. The metric is negated dBFS, meaning that 0
    is a full-scale signal, while 127 corresponds to -127 dBFS (very faint).
  </summary>
</histogram>

<histogram name="WebRTC.Audio.AudioMixer.MixingRate" enum="WebRtcNativeRate">
  <owner>aleloi@chromium.org</owner>
  <summary>
    Reports the sampling rate at which audio mixing is done. Lower rates result
    in faster processing, higher rates can give higher quality.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.AudioMixer.NumIncomingActiveStreams"
    units="count">
  <owner>aleloi@chromium.org</owner>
  <summary>
    Reports the number of active incoming streams in the WebRTC audio mixer. An
    incoming stream is active if it is not muted. When multiple sterams are
    active, adding them can result in saturation and limiting is needed.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.AudioMixer.NumIncomingStreams" units="count">
  <owner>aleloi@chromium.org</owner>
  <summary>
    Reports the number of streams in the WebRTC audio mixer. The mixer queries
    all streams for audio and preferred sampling rate. The number of streams
    affects mixing decisions. Whether to mix in floating points or use a limiter
    depends on the number of incoming streams.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.AverageExcessBufferDelayMs" units="ms">
  <owner>hlundin@chromium.org</owner>
  <summary>
    Measures the average waiting time in the buffer for each packet. The waiting
    time is the time elapsed from the packet arrives until it is decoded. The
    metric is calculated as the average over one minute, and is logged at the
    end of each such interval. A well tuned target buffer level should lead to a
    low value.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.DelayedPacketOutageEventMs" units="ms">
  <owner>hlundin@chromium.org</owner>
  <summary>
    Measures the duration of each packet loss concealment (a.k.a. expand) event
    that is not followed by a merge operation. The outage is measured in
    milliseconds, with a range between 0 and 2000 ms. This gives an indication
    of how well the jitter buffer's level adaptation is working. If the chosen
    target level is too low, this value will increase.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.DelayedPacketOutageEventsPerMinute"
    units="events/minute">
  <owner>hlundin@chromium.org</owner>
  <summary>
    Counts the number of delayed packet outage events per minute. The range is
    between 0 and 100 (corresponds to more 1.6 events per second). See
    WebRTC.Audio.DelayedPacketOutageEventMs for the definition of a delayed
    packet outage event, and the interpretation of such events.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.EchoCanceller.ActiveRender" enum="Boolean">
  <owner>peah@chromium.org</owner>
  <summary>
    This histogram logs a value indicating whether the WebRTC echo canceller
    detects that there is active content in the render signal. A new value is
    logged every 10 seconds and the logged value is averaged over this period.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.EchoCanceller.BufferDelay" units="Blocks">
  <owner>peah@chromium.org</owner>
  <summary>
    This histogram logs the applied render buffer delay used in the WebRTC echo
    canceller. A new value is logged every 10 seconds and the logged value
    constitutes the current buffer delay at the time when the value is logged.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.EchoCanceller.CaptureSaturation" enum="Boolean">
  <owner>peah@chromium.org</owner>
  <summary>
    This histogram logs a value every time the WebRTC echo canceller has
    detected saturation in the capture signal. A new value is logged every 10
    seconds and the logged value indicates whether the capture signal has been
    saturated during the last 10 seconds.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.EchoCanceller.ComfortNoiseBand0"
    units="dBFS (negated)">
  <owner>peah@chromium.org</owner>
  <summary>
    This histogram logs the level of the comfort noise in the WebRTC echo
    canceller in the lower 4 kHz. A new value is logged every 10 seconds.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.EchoCanceller.ComfortNoiseBand1"
    units="dBFS (negated)">
  <owner>peah@chromium.org</owner>
  <summary>
    This histogram logs the level of the comfort noise in the WebRTC echo
    canceller between 4 and 8 kHz. A new value is logged every 10 seconds.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.EchoCanceller.DelayChanges"
    enum="WebRTCEventFrequency">
  <owner>peah@chromium.org</owner>
  <summary>
    This histogram logs the frequency of echo path delay changes that are
    detected by the delay estimator in the WebRTC echo canceller. A new value is
    logged every 10 seconds and the logged value indicates how frequent delay
    changes have been during the last 10 seconds.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.EchoCanceller.EchoPathDelay" units="Blocks">
  <owner>peah@chromium.org</owner>
  <summary>
    This histogram logs the estimated echo path delay in 64 sample blocks as
    seen by the delay estimator in the WebRTC echo canceller. A new value is
    logged every 10 seconds and the logged value is the estimate of the delay of
    the echo path at the time when the value is logged.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.EchoCanceller.Erl" units="dB (shifted)">
  <owner>gustaf@chromium.org</owner>
  <summary>
    This histogram logs the echo return loss achieved by the WebRTC echo
    canceller as described in ITU G.168. When the echo canceller is being used,
    one value is logged every 10 seconds per ongoing WebRTC call.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.EchoCanceller.ErlBand0" units="dB (shifted)">
  <owner>peah@chromium.org</owner>
  <summary>
    This histogram logs the echo return loss achieved by the WebRTC echo
    canceller in the lower 4 kHz. A new value is logged every 10 seconds.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.EchoCanceller.ErlBand1" units="dB (shifted)">
  <owner>peah@chromium.org</owner>
  <summary>
    This histogram logs the echo return loss achieved by the WebRTC echo
    canceller between 4 and 8 kHz. A new value is logged every 10 seconds.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.EchoCanceller.Erle" units="dB">
  <owner>gustaf@chromium.org</owner>
  <summary>
    This histogram logs the echo return loss enhancement achieved by the WebRTC
    echo canceller as described in ITU G.168. When the echo canceller is being
    used, one value is logged every 10 seconds per ongoing WebRTC call.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.EchoCanceller.ErleBand0" units="dB (shifted)">
  <owner>peah@chromium.org</owner>
  <summary>
    This histogram logs the echo return loss enhancement achieved by the WebRTC
    echo canceller in the lower 4 kHz. A new value is logged every 10 seconds.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.EchoCanceller.ErleBand1" units="dB (shifted)">
  <owner>peah@chromium.org</owner>
  <summary>
    This histogram logs the echo return loss enhancement achieved by the WebRTC
    echo canceller between 4 and 8 kHz. A new value is logged every 10 seconds.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.EchoCanceller.FilterDelay" units="Blocks">
  <owner>peah@chromium.org</owner>
  <summary>
    This histogram logs the estimated echo path delay in 64 sample blocks as
    seen by the linear filter delay in the WebRTC echo canceller. The value 0
    means that no delay could be estimated from the linear filter, otherwise the
    logged delay corresponds to the actual delay + 1. A new value is logged
    every 10 seconds and the logged value is the estimate of the filter delay at
    the time when the value is logged.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.EchoCanceller.MaxSkewShiftCount"
    units="events/minute">
  <owner>peah@chromium.org</owner>
  <summary>
    This histogram logs the number of times per minute that the WebRTC echo
    canceller detects a shift in the skew between the total number of render and
    capture calls. The metric is reported once per minute and the report is done
    also for the case of 0 detected skew shifts have been detected. The amount
    of skew shifts per minute is capped to 20. The metric is reported separately
    for each render process. The metric is only reported for render processes
    where the WebRTC echo canceller is active in and there is both audio being
    played out and captured simultaneously. The reporting is only done when the
    browser is awake.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.EchoCanceller.ModelBasedAecFeasible"
    enum="Boolean">
  <owner>peah@chromium.org</owner>
  <summary>
    This histogram logs a value every time the WebRTC echo canceller deems that
    echo path is possible to model using any of the the echo canceller echo path
    models. A new value is logged every 10 seconds and the logged value is the
    feasibility assessment at the time when the value is logged.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.EchoCanceller.ReliableDelayEstimates"
    enum="WebRTCAecDelayEstimateReliability">
  <owner>peah@chromium.org</owner>
  <summary>
    This histogram logs the assessed reliability of the delay estimates produced
    by the delay estimator in the WebRTC echo canceller. A new value is logged
    every 10 seconds and the logged value is a meausure based on how often
    during that period the delay estimate was reliable.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.EchoCanceller.RenderOverruns"
    enum="WebRTCEventFrequency">
  <owner>peah@chromium.org</owner>
  <summary>
    This histogram logs the frequency of overruns in the render buffer of the
    WebRTC echo canceller. A new value is logged every 10 seconds and the logged
    value is a meausure that indicates how often overruns occurred.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.EchoCanceller.RenderUnderruns"
    enum="WebRTCEventFrequency">
  <owner>peah@chromium.org</owner>
  <summary>
    This histogram logs the frequency of underruns in the render buffer of the
    WebRTC echo canceller. A new value is logged every 10 seconds and the logged
    value is a meausure that indicates how often underruns occurred.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.EchoCanceller.SuppressorGainBand0"
    units="dB (negated)">
  <owner>peah@chromium.org</owner>
  <summary>
    This histogram logs the echo suppressor gain in the WebRTC echo canceller in
    the lower 4 kHz. A new value is logged every 10 seconds.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.EchoCanceller.SuppressorGainBand1"
    units="dB (negated)">
  <owner>peah@chromium.org</owner>
  <summary>
    This histogram logs the echo suppressor gain in the WebRTC echo canceller
    between 4 and 8 kHz. A new value is logged every 10 seconds.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.EchoCanceller.UsableLinearEstimate"
    enum="Boolean">
  <owner>peah@chromium.org</owner>
  <summary>
    This histogram logs a value every time the WebRTC echo canceller deems that
    the linear filter in the echo canceller is sufficiently well adapted to be
    usable. A new value is logged every 10 seconds and the logged value is the
    assessment of whether the filter is usable at the time when the value is
    logged.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.Encoder.CodecType" enum="WebRtcAudioCodecs">
  <owner>aleloi@chromium.org</owner>
  <summary>
    Histogram of audio codec usage. Every sample corresponds to 5 seconds of
    encoding with that codec.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.ExpandRatePercent" units="%">
  <owner>hlundin@chromium.org</owner>
  <summary>
    Measures the expand rate for an incoming WebRTC audio stream. The expand
    rate is the fraction of samples that are generated through loss-concealemnt
    algorithms instead of being decoded from incoming media packets. The metric
    is calculated as the percent over a 10 second internval, and is logged at
    the end of each such interval.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.NumOfAecSystemDelayJumps" units="jumps">
  <owner>hlundin@chromium.org</owner>
  <summary>
    Number of triggered WebRTC.Audio.AecSystemDelayJump during a call. This is
    recorded when a WebRTC based call has ended. AecSystemDelayJump can be
    triggered when, for example, the capture thread is stalled, which can harm
    the AEC. NumOfAecSystemDelayJumps shows how often this occurs in general as
    well as during a call.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.NumOfPlatformReportedStreamDelayJumps"
    units="jumps">
  <owner>hlundin@chromium.org</owner>
  <summary>
    Number of triggered WebRTC.Audio.PlatformReportedStreamDelayJump during a
    call. This is recorded when a WebRTC based call has ended.
    PlatformReportedStreamDelayJump can be triggered when, for example, the
    capture thread is stalled, which can harm the AEC.
    NumOfPlatformReportedStreamDelayJumps shows how often this occurs in general
    as well as during a call.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.PlatformReportedStreamDelayJump" units="ms">
  <owner>hlundin@chromium.org</owner>
  <summary>
    The difference in stream delay reported to WebRTC by Chrome. Since we detect
    jumps in the capture thread, only positive values are feasible. Note that
    the difference in milliseconds is logged and not the actual stream delay
    value. Sampled every time the stream delay changes more than 50
    milliseconds.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.ReceiverDelayEstimateMs" units="ms">
  <owner>hlundin@chromium.org</owner>
  <summary>
    The sum of the jitter buffer delay and the sound card's buffering delay for
    the receiving side. That is, the sum of the metrics
    WebRTC.Audio.ReceiverDeviceDelayMs and
    WebRTC.Audio.ReceiverJitterBufferDelayMs. Sampled once every 10 ms when
    WebRTC audio is playing.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.ReceiverDeviceDelayMs" units="ms">
  <owner>hlundin@chromium.org</owner>
  <summary>
    The sound card's buffering delay for the receiving side. Sampled once every
    10 ms when WebRTC audio is playing.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.ReceiverJitterBufferDelayMs" units="ms">
  <owner>hlundin@chromium.org</owner>
  <summary>
    The jitter buffer delay for the receiving side. Sampled once every 10 ms
    when WebRTC audio is playing.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.ResidualEchoDetector.EchoLikelihood" units="%">
  <owner>hlundin@chromium.org</owner>
  <owner>ivoc@chromium.org</owner>
  <summary>
    The estimated likelihood percentage of echo as detected by the residual echo
    detector. The residual echo detector can be used to detect cases where the
    AEC (hardware or software) is not functioning properly. The detector can be
    non-causal and operates on larger timescales with more delay than the
    regular AEC.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.SpeechExpandRatePercent" units="%">
  <owner>hlundin@chromium.org</owner>
  <summary>
    Measures the audible expand rate for an incoming WebRTC audio stream. The
    metric is very similar to WebRTC.Audio.ExpandRate, with the difference that
    this metric only reports loss-concealement that generates audible samples.
    The metric is calculated as the percent over a 10 second internval, and is
    logged at the end of each such interval.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.TargetBitrateInKbps" units="kbps">
  <owner>hlundin@chromium.org</owner>
  <summary>
    The target bitrate in kbps that the audio codec should try to produce on
    average. Sampled every time the rate is updated.
  </summary>
</histogram>

<histogram name="WebRTC.Audio.TargetJitterBufferDelayMs" units="ms">
  <owner>hlundin@chromium.org</owner>
  <summary>
    The target jitter buffer delay for the receiving side. Sampled once every 10
    ms per WebRTC receive stream when WebRTC audio is playing.
  </summary>
</histogram>

<histogram name="WebRTC.AudioCaptureTime" units="ms">
  <obsolete>
    Removed from code 2014/2/25.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Duration in milliseconds of WebRTC audio capture session.</summary>
</histogram>

<histogram name="WebRTC.AudioInputChannelLayout" enum="ChannelLayout">
  <owner>henrika@chromium.org</owner>
  <summary>Audio input channel layout in WebRTC.</summary>
</histogram>

<histogram name="WebRTC.AudioInputFramesPerBuffer" enum="AudioFramesPerBuffer">
  <obsolete>
    No longer exists in the code as of 2014/2/25.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Size of WebRTC audio input buffers (in audio frames).</summary>
</histogram>

<histogram name="WebRTC.AudioInputFramesPerBufferUnexpected"
    units="audio frames">
  <obsolete>
    No longer exists in the code as of 2014/2/25.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Size of WebRTC audio input buffers (atypical values, in audio frames).
  </summary>
</histogram>

<histogram name="WebRTC.AudioInputSampleRate" enum="AudioSampleRate">
  <owner>henrika@chromium.org</owner>
  <summary>Audio input sample rate for WebRTC (in Hz).</summary>
</histogram>

<histogram name="WebRTC.AudioInputSampleRateUnexpected" units="Hz">
  <owner>henrika@chromium.org</owner>
  <summary>
    Audio input sample rate for WebRTC (atypical values, in Hz).
  </summary>
</histogram>

<histogram name="WebRTC.AudioOutputChannelLayout" enum="ChannelLayout">
  <obsolete>
    Removed from code on 2014/2/25.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Audio output channel layout in WebRTC.</summary>
</histogram>

<histogram name="WebRTC.AudioOutputFramesPerBuffer" enum="AudioFramesPerBuffer">
  <obsolete>
    Removed from code Sep 2014.
  </obsolete>
  <owner>henrika@chromium.org</owner>
  <summary>Size of WebRTC audio output buffers (in audio frames).</summary>
</histogram>

<histogram name="WebRTC.AudioOutputFramesPerBufferUnexpected"
    units="audio frames">
  <obsolete>
    Removed from code Sep 2014.
  </obsolete>
  <owner>henrika@chromium.org</owner>
  <summary>
    Size of WebRTC audio output buffers (atypical values, in audio frames).
  </summary>
</histogram>

<histogram name="WebRTC.AudioOutputSampleRate" enum="AudioSampleRate">
  <owner>henrika@chromium.org</owner>
  <summary>Audio output sample rate for WebRTC (in Hz).</summary>
</histogram>

<histogram name="WebRTC.AudioOutputSampleRateUnexpected" units="Hz">
  <owner>henrika@chromium.org</owner>
  <summary>
    Audio output sample rate for WebRTC (atypical values, in Hz).
  </summary>
</histogram>

<histogram name="WebRTC.AudioRenderTime" units="ms">
  <obsolete>
    Removed from code 2014/2/25.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>Duration in milliseconds of WebRTC audio render session.</summary>
</histogram>

<histogram name="WebRTC.AudioRenderTimes" units="ms">
  <obsolete>
    Deprecated as of Aug 2016, replaced by
    Media.Audio.Render.GetSourceDataTime.WebRTC.
  </obsolete>
  <owner>henrika@chromium.org</owner>
  <summary>
    Measures the time spent in WebRtcAudioRenderer::SourceCallback. Sampled 10
    times per second.
  </summary>
</histogram>

<histogram name="WebRTC.BWE.InitialBandwidthEstimate" units="kbps">
  <owner>holmer@chromium.org</owner>
  <summary>The bandwidth estimate 2 seconds into a WebRTC call.</summary>
</histogram>

<histogram name="WebRTC.BWE.InitiallyLostPackets" units="packets">
  <owner>holmer@chromium.org</owner>
  <summary>
    The number of video packets lost durig the first 2 seconds in a WebRTC call.
  </summary>
</histogram>

<histogram name="WebRTC.BWE.InitialRtt" units="ms">
  <owner>holmer@chromium.org</owner>
  <summary>
    The round-trip time as measured 2 seconds into a WebRTC call.
  </summary>
</histogram>

<histogram name="WebRTC.BWE.InitialVsConvergedDiff" units="kbps">
  <owner>holmer@chromium.org</owner>
  <summary>
    The difference between the bandwidth estimate at 2 seconds and 20 seconds
    into a WebRTC call, with a min at 0, which is supposed to capture the how
    much the initial bandwidth estimate overshot the actual bandwidth available.
  </summary>
</histogram>

<histogram name="WebRTC.BWE.MidCallProbing.Initiated" units="kbps">
  <owner>philipel@chromium.org</owner>
  <summary>
    The bitrate that will be probed, triggered by an update to the max
    configured bitrate.
  </summary>
</histogram>

<histogram name="WebRTC.BWE.MidCallProbing.ProbedKbps" units="kbps">
  <owner>philipel@chromium.org</owner>
  <summary>
    The resulting bitrate probed, triggered by an update to the max configured
    bitrate.
  </summary>
</histogram>

<histogram name="WebRTC.BWE.MidCallProbing.Success" units="kbps">
  <owner>philipel@chromium.org</owner>
  <summary>
    A successful probing attempt for a given bitrate, triggered by an update to
    the max configured bitrate. NOTE! This is not the resulting bitrate from a
    probing attempt, see WebRTC.BWE.MidCallProbing.ProbedKbps.
  </summary>
</histogram>

<histogram name="WebRTC.BWE.RampUpTimeTo1000kbpsInMs" units="ms">
  <owner>holmer@chromium.org</owner>
  <summary>
    The time it takes the estimated bandwidth to reach 1000 kbps from the first
    RTCP packet received. Used to measure the bandwidth ramp-up time.
  </summary>
</histogram>

<histogram name="WebRTC.BWE.RampUpTimeTo2000kbpsInMs" units="ms">
  <owner>holmer@chromium.org</owner>
  <summary>
    The time it takes the estimated bandwidth to reach 2000 kbps from the first
    RTCP packet received. Used to measure the bandwidth ramp-up time.
  </summary>
</histogram>

<histogram name="WebRTC.BWE.RampUpTimeTo500kbpsInMs" units="ms">
  <owner>holmer@chromium.org</owner>
  <summary>
    The time it takes the estimated bandwidth to reach 500 kbps from the first
    RTCP packet received. Used to measure the bandwidth ramp-up time.
  </summary>
</histogram>

<histogram name="WebRTC.BWE.Types" enum="WebRtcBweType">
  <owner>holmer@chromium.org</owner>
  <summary>
    The bandwidth estimation used in WebRTC calls. Records whether the BWE is
    running on the sender or the receiver and what BWE related RTP header
    extensions are in use.
  </summary>
</histogram>

<histogram name="WebRTC.Call.AudioBitrateReceivedInKbps" units="kbps">
  <owner>holmer@chromium.org</owner>
  <summary>
    Average audio bitrate received during a call, counted from first packet
    received until Call instance is destroyed. Only mesured for calls that are
    at least 10 seconds long.
  </summary>
</histogram>

<histogram name="WebRTC.Call.BitrateReceivedInKbps" units="kbps">
  <owner>holmer@chromium.org</owner>
  <summary>
    Average total bitrate received during a call (audio + video + RTCP), counted
    from first packet received until Call instance is destroyed. Only mesured
    for calls that are at least 10 seconds long.
  </summary>
</histogram>

<histogram name="WebRTC.Call.EstimatedSendBitrateInKbps" units="kbps">
  <owner>holmer@chromium.org</owner>
  <summary>
    Average estimated send bitrate during a call, counted from first packet sent
    until Call instance is destroyed. Only mesured for calls that are at least
    10 seconds long.
  </summary>
</histogram>

<histogram name="WebRTC.Call.LifetimeInSeconds" units="seconds">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The lifetime of a call. Recorded when a Call instance is destroyed.
  </summary>
</histogram>

<histogram name="WebRTC.Call.PacerBitrateInKbps" units="kbps">
  <owner>holmer@chromium.org</owner>
  <summary>
    Average pacer bitrate during a call, counted from first packet sent until
    Call instance is destroyed. Only mesured for calls that are at least 10
    seconds long.
  </summary>
</histogram>

<histogram name="WebRTC.Call.RtcpBitrateReceivedInBps" units="bits/s">
  <owner>holmer@chromium.org</owner>
  <summary>
    Average RTCP bitrate received during a call, counted from first packet
    received until Call instance is destroyed. Only mesured for calls that are
    at least 10 seconds long.
  </summary>
</histogram>

<histogram name="WebRTC.Call.TimeReceivingAudioRtpPacketsInSeconds" units="s">
  <owner>saza@chromium.org</owner>
  <summary>
    The amount of time between the arrival of the first and last audio RTP
    packets to pass through a Call object. This is logged when the Call object
    is destroyed. This is only logged if audio RTP packets are at some point in
    time received, and is a way to omit temporary objects that do not send any
    actual media.
  </summary>
</histogram>

<histogram name="WebRTC.Call.TimeReceivingVideoRtpPacketsInSeconds" units="s">
  <owner>saza@chromium.org</owner>
  <summary>
    The amount of time between the arrival of the first and last video RTP
    packets to pass through a Call object. This is logged when the Call object
    is destroyed. This is only logged if video RTP packets are at some point in
    time received, and is a way to omit temporary objects that do not send any
    actual media.
  </summary>
</histogram>

<histogram name="WebRTC.Call.TimeSendingAudioRtpPacketsInSeconds" units="s">
  <owner>saza@chromium.org</owner>
  <summary>
    The amount of time between sending the first and the last audio RTP packets
    through the audiostreams of a Call object. This is logged when the Call
    object is destroyed. This is only logged if audio RTP packets are at some
    point in time received, and is a way to omit temporary objects that do not
    send any actual media.
  </summary>
</histogram>

<histogram name="WebRTC.Call.VideoBitrateReceivedInKbps" units="kbps">
  <owner>holmer@chromium.org</owner>
  <summary>
    Average video bitrate received during a call, counted from first packet
    received until Call instance is destroyed. Only mesured for calls that are
    at least 10 seconds long.
  </summary>
</histogram>

<histogram name="WebRTC.DataChannelCounters" enum="DataChannelCounters">
  <owner>perkj@chromium.org</owner>
  <summary>
    Counters on creation, opening, and a few main attributes of data channels.
  </summary>
</histogram>

<histogram name="WebRTC.DataChannelMaxRetransmits">
  <owner>perkj@chromium.org</owner>
  <summary>
    The maximum number of retransmissions that are attempted in unreliable mode.
    It is set to the value used in the configuration when a RTCDataChannel is
    created.
  </summary>
</histogram>

<histogram name="WebRTC.DataChannelMaxRetransmitTime" units="ms">
  <owner>perkj@chromium.org</owner>
  <summary>
    The length of the time window during which transmissions and retransmissions
    may occur in unreliable mode. It is set to the value used in the
    configuration when a RTCDataChannel is created.
  </summary>
</histogram>

<histogram name="WebRTC.DesktopCaptureCounters" enum="DesktopCaptureCounters">
  <owner>jiayl@chromium.org</owner>
  <summary>
    Counters on creation of DesktopCaptureDevice and the first capture call.
  </summary>
</histogram>

<histogram name="WebRTC.ICE.TcpSocketWriteErrorCode" enum="SocketErrorCode">
  <owner>zhihuang@chromium.org</owner>
  <summary>
    Counters on different types of TCP socket error code. Collected when we hit
    the error code when writing.
  </summary>
</histogram>

<histogram name="WebRTC.ICE.UdpSocketWriteErrorCode" enum="SocketErrorCode">
  <owner>zhihuang@chromium.org</owner>
  <summary>
    Counters on different types of UDP socket error code. Collected when we hit
    the error code when writing.
  </summary>
</histogram>

<histogram name="WebRTC.NAT.Metrics" enum="NatTypeCounters">
  <owner>guoweis@chromium.org</owner>
  <summary>
    Counters on various types of NAT observed. This is logged once per session.
  </summary>
</histogram>

<histogram name="WebRTC.NumDataChannelsPerPeerConnection">
  <owner>perkj@chromium.org</owner>
  <summary>
    Number of data channels created per PeerConnection. Sample added to the
    histogram when the PeerConnection is destroyed. Note that this is done
    purely on the renderer side, so no sample will be generated when the
    renderer process is destroyed (as in the fast shutdown path for the
    renderer) before the PeerConnection is destroyed.
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.CandidatePairType"
    enum="IceCandidatePairTypes">
  <owner>guoweis@chromium.org</owner>
  <summary>
    Counters of various ICE Endpoint types. These values are logged for the
    first selected candidate pair of a PeerConnection.
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.ConnectionState"
    enum="IceConnectionStates">
  <owner>guoweis@chromium.org</owner>
  <summary>
    Counters of ICE Connection states. These values are logged when the
    PeerConnection gets into that state for the first time or after the ICE
    restart.
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.DtlsHandshakeError"
    enum="DtlsHandshakeError">
  <owner>zhihuang@chromium.org</owner>
  <summary>
    Records the error whenever the Dtls handshake fails. There are only two
    types of errors, incompatitable cipher suite and unknown error, for now.
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.IceRegatheringReason"
    enum="IceRegatheringReason">
  <owner>honghaiz@chromium.org</owner>
  <summary>Records the reasons for ICE re-gathering.</summary>
</histogram>

<histogram name="WebRTC.PeerConnection.IceRestartState" enum="IceRestartState">
  <owner>honghaiz@chromium.org</owner>
  <summary>
    Records the transport channel states when ICE restart happens.
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.IPMetrics" enum="PeerConnectionCounters">
  <owner>mallinath@chromium.org</owner>
  <summary>
    Counters on IPv4 and IPv6 usage in PeerConnection. These values are logged
    once per PeerConnection.
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.IPPermissionStatus"
    enum="IPPermissionStatus">
  <owner>guoweis@chromium.org</owner>
  <summary>
    Whether the permission to collect the local IP addresses in WebRTC has been
    requested and/or granted. This is collected the first time when networks
    updated event is reported or if never reported, during the destruction phase
    of a call.
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.IPv4Interfaces">
  <owner>mallinath@chromium.org</owner>
  <summary>
    Number of IPv4 network interfaces discovered in a PeerConnection Session.
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.IPv4LocalCandidates">
  <owner>guoweis@chromium.org</owner>
  <summary>
    Number of IPv4 local Candidates gathered in a PeerConnection Session once
    the ICE address gathering process reaches the Completed status. To avoid
    miscounting, this only includes the first m line's first component.
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.IPv6Interfaces">
  <owner>mallinath@chromium.org</owner>
  <summary>
    Number of IPv6 network interfaces discovered in a PeerConnection Session.
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.IPv6LocalCandidates">
  <owner>guoweis@chromium.org</owner>
  <summary>
    Number of IPv6 local Candidates gathered in a PeerConnection Session once
    the ICE address gathering process reaches the Completed status. To avoid
    miscounting, this only includes the first m line's first component.
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.KeyProtocol"
    enum="PeerConnectionKeyProtocol">
  <owner>hta@chromium.org</owner>
  <summary>
    What key exchange protocol (DTLS or SDES) is used to establish the crypto
    keys for a PeerConnection's RTP transport.
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.KeyProtocolByMedia"
    enum="PeerConnectionKeyProtocolByMedia">
  <owner>hta@chromium.org</owner>
  <summary>
    What key exchange protocol (DTLS or SDES) is used to establish the crypto
    keys for a PeerConnection's RTP transport, specified per media type.
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.RtcpMux" enum="PeerConnectionRtcpMux">
  <owner>pthatcher@chromium.org</owner>
  <summary>
    Whether RTCP-mux is used for the PeerConnection (both the local and remote
    description enable RTCP-mux).  Recorded after SetLocalDescription and
    SetRemoteDescription are called, once per PeerConnection.
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.SdpFormatReceived"
    enum="PeerConnectionSdpFormatReceived">
  <owner>steveanton@chromium.org</owner>
  <summary>
    What SDP format is received in the remote offer. The value &quot;no
    tracks&quot; means that no audio or video tracks were received. The value
    &quot;simple&quot; means that at most one audio and at most one video track
    was received. The value &quot;complex&quot; means that more than one audio
    or more than one video track was received, and how this was signaled is
    indicated (&quot;Plan B&quot; meaning with a=ssrc lines within the same m=
    section and &quot;Unified Plan&quot; meaning with a separate m= section).
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.SdpSemanticNegotiated"
    enum="PeerConnectionSdpSemanticNegotiated">
  <owner>hta@chromium.org</owner>
  <summary>
    What SDP semantic (Unified Plan or Plan B) was detected when completing
    negotiation of a PeerConnection. This is recorded when accepting an SDP
    Answer. The value &quot;mixed&quot; means that the accepted answer included
    both types of marker in the SDP. The value &quot;none&quot; will happen when
    the answerer sends no media.
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.SdpSemanticRequested"
    enum="PeerConnectionSdpSemanticRequested">
  <owner>hta@chromium.org</owner>
  <summary>
    What SDP semantic (Unified Plan, Plan B or &quot;use default&quot;) has been
    asked for by the creator of a PeerConnection.
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.SelectedRtcpMuxPolicy"
    enum="PeerConnectionRtcpMuxPolicy">
  <obsolete>
    Deprecated on Dec 2016. This histogram is used to gauge the risk of making
    the change for issue 6030. The decision has been made and this is not needed
    any more.
  </obsolete>
  <owner>zhihuang@chromium.org</owner>
  <summary>
    Whether the application specified a value for RTCP-mux policy, and if so,
    which value, &quot;Require&quot; or &quot;Negotiate&quot;. Recorded after
    parsing the configuration when creating the RTCPeerConnection.
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.SrtcpUnprotectError"
    enum="SrtpErrorCode">
  <owner>steveanton@chromium.org</owner>
  <summary>
    What error code is reported by libsrtp when failing to unprotect an incoming
    SRTCP (secured media control) packet.
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.SrtpCryptoSuite"
    enum="DTLS_SRTPCryptoSuite">
  <owner>guoweis@chromium.org</owner>
  <summary>
    Counters on the type of SRTP crypto suites used by WebRTC. This is collected
    whenever the transport signals the OnCompleted event.
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.SrtpUnprotectError" enum="SrtpErrorCode">
  <owner>steveanton@chromium.org</owner>
  <summary>
    What error code is reported by libsrtp when failing to unprotect an incoming
    SRTP (secured media) packet.
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.SslCipherSuite" enum="SSLCipherSuite">
  <owner>guoweis@chromium.org</owner>
  <summary>
    Counters on the type of SSL cipher suites used by WebRTC. This is collected
    whenever the transport signals the OnCompleted event.
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.TimeToConnect" units="ms">
  <owner>mallinath@chromium.org</owner>
  <summary>Time to setup a peer to peer call with PeerConnection.</summary>
</histogram>

<histogram name="WebRTC.PeerConnection.TimeToNetworkUpdated" units="ms">
  <owner>guoweis@chromium.org</owner>
  <summary>
    Time to receive the first SignalNetworksChanged from the request to start
    updating network in PeerConnection.
  </summary>
</histogram>

<histogram name="WebRTC.PeerConnection.UsagePattern"
    enum="WebRtcPeerConnectionUsagePattern">
  <owner>hta@chromium.org</owner>
  <summary>
    Capsule history of a WebRTC PeerConnection, encoded as a sequence of bits
    encapsulated in an integer. Only a few values will be deemed interesting,
    but the interesting values may change over time.
  </summary>
</histogram>

<histogram name="WebRTC.ReceivedAudioTrackDuration" units="ms">
  <owner>perkj@chromium.org</owner>
  <summary>
    Durations of audio tracks received over a PeerConnection. The stopwatch
    starts when the track first becomes connected, and ends when it is
    disconnected or very soon thereafter.
  </summary>
</histogram>

<histogram name="WebRTC.ReceivedVideoTrackDuration" units="ms">
  <owner>perkj@chromium.org</owner>
  <summary>
    Durations of video tracks received over a PeerConnection. The stopwatch
    starts when the track first becomes connected, and ends when it is
    disconnected or very soon thereafter.
  </summary>
</histogram>

<histogram name="WebRTC.ReliableDataChannelMessageSize" units="bytes">
  <owner>perkj@chromium.org</owner>
  <summary>
    Sizes of messages sent over reliable data channels. The size of an
    individual message is added to the histogram as a sample immediately when a
    message is sent.
  </summary>
</histogram>

<histogram name="WebRTC.ScreenCaptureTime" units="ms">
  <owner>jiayl@chromium.org</owner>
  <summary>Time for capturing one frame in screen capturing.</summary>
</histogram>

<histogram name="WebRTC.SentAudioTrackDuration" units="ms">
  <owner>perkj@chromium.org</owner>
  <summary>
    Durations of audio tracks sent over a PeerConnection. The stopwatch starts
    when the track first becomes connected, and ends when it is disconnected or
    very soon thereafter.
  </summary>
</histogram>

<histogram name="WebRTC.SentVideoTrackDuration" units="ms">
  <owner>perkj@chromium.org</owner>
  <summary>
    Durations of video tracks sent over a PeerConnection. The stopwatch starts
    when the track first becomes connected, and ends when it is disconnected or
    very soon thereafter.
  </summary>
</histogram>

<histogram name="WebRTC.Stun.BatchSuccessPercent" units="%">
  <owner>guoweis@chromium.org</owner>
  <summary>
    For clients using a shared source port per STUN binding request toward the
    specified servers, success rate for requests which received a response with
    various intervals between requests. Only the first instance of renderers
    will conduct the trial and log this result. The STUN binding requests are
    grouped into multiple batches and the success rate is calculated for an
    individual batch.
  </summary>
</histogram>

<histogram name="WebRTC.Stun.ResponseLatency" units="ms">
  <owner>guoweis@chromium.org</owner>
  <summary>
    For clients using a shared source port per STUN binding request, average RTT
    for requests which received a response with various intervals between
    requests. Only the first instance of renderers will conduct the trial and
    log this result.
  </summary>
</histogram>

<histogram name="WebRTC.Stun.SuccessPercent" units="%">
  <owner>guoweis@chromium.org</owner>
  <summary>
    For clients using a shared source port per STUN binding request, success
    rate for requests which received a response with various intervals between
    requests. Only the first instance of renderers will conduct the trial and
    log this result.
  </summary>
</histogram>

<histogram name="WebRTC.SystemMaxConsecutiveBytesDelayed">
  <owner>guoweis@chromium.org</owner>
  <summary>
    The maximum of consecutive delayed bytes caused by EWOULDBLOCKs from system.
    This happens when system can't send any packet synchronously at that moment.
  </summary>
</histogram>

<histogram name="WebRTC.SystemPercentPacketsDelayed" units="%">
  <owner>guoweis@chromium.org</owner>
  <summary>
    The percentage of packets delayed due to ERR_IO_PENDING from system in a
    WebRTC socket. This happens when system can't send any packet synchronously
    at that moment.
  </summary>
</histogram>

<histogram name="WebRTC.SystemSendPacketDuration" units="ms">
  <owner>guoweis@chromium.org</owner>
  <summary>
    The duration that it takes to send out a packet in system layer. This
    includes both the queuing time (under the condition when socket returns
    EWOULDBLOCK from system) as well as the time system takes to finish the
    asynchronous send. For UDP, it's the time from P2PSocketHostUdp::Send to
    P2PSocketHostUdp::HandleSendResult. Tcp part is to be implemented.
  </summary>
</histogram>

<histogram name="WebRTC.UnreliableDataChannelMessageSize" units="bytes">
  <owner>perkj@chromium.org</owner>
  <summary>
    Sizes of messages sent over unreliable data channels. The size of an
    individual message is added to the histogram as a sample immediately when a
    message is sent.
  </summary>
</histogram>

<histogram name="WebRTC.UserMediaRequest.NoResultState"
    enum="MediaStreamRequestState">
  <owner>andresp@chromium.org</owner>
  <summary>
    The state of a UserMediaRequest when it gets destroyed before having a
    result.

    Note: &quot;Explicitly Cancelled&quot; means
    MediaStreamImpl::cancelUserMediaRequest was called and not necessarily that
    the user cancelled. Those are likely tracked as UserMediaRequest with a
    result of permission denied.
  </summary>
</histogram>

<histogram name="WebRTC.UserMediaRequest.Result"
    enum="MediaStreamRequestResult">
  <obsolete>
    Replaced by WebRTC.UserMediaRequest.Result2 in Feb 2018.
  </obsolete>
  <owner>andresp@chromium.org</owner>
  <summary>
    Counters for UserMediaRequests results such as failure reasons.
  </summary>
</histogram>

<histogram name="WebRTC.UserMediaRequest.Result2"
    enum="MediaStreamRequestResult2">
  <owner>grunell@chromium.org</owner>
  <summary>
    Counters for UserMediaRequests results such as failure reasons. The standard
    specification error names are in parenthesis.
  </summary>
</histogram>

<histogram name="WebRTC.Video.AdaptChangesPerMinute" units="changes/minute">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The average number of adaptation changes per minute for a sent video stream.
    Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.AverageRoundTripTimeInMilliseconds" units="ms">
  <owner>holmer@chromium.org</owner>
  <summary>
    The average round-trip time of a WebRTC call in milliseconds. Recorded when
    a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.AVSyncOffsetInMs" units="ms">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The absolute value of the sync offset between a rendered video frame and the
    latest played audio frame is measured per video frame. The average offset
    per received video stream is recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.BadCall.Any" units="%">
  <owner>sprang@chromium.org</owner>
  <summary>
    Fraction of time the call was classified as bad because of any reason.
  </summary>
</histogram>

<histogram name="WebRTC.Video.BadCall.FrameRate" units="%">
  <owner>sprang@chromium.org</owner>
  <summary>
    Fraction of time the call was classified as bad because of low framerate.
  </summary>
</histogram>

<histogram name="WebRTC.Video.BadCall.FrameRateVariance" units="%">
  <owner>sprang@chromium.org</owner>
  <summary>
    Fraction of time the call was classified as bad because of high framerate
    variance.
  </summary>
</histogram>

<histogram name="WebRTC.Video.BadCall.Qp" units="%">
  <owner>sprang@chromium.org</owner>
  <summary>
    Fraction of time the call was classified as bad because of high qp.
  </summary>
</histogram>

<histogram name="WebRTC.Video.BandwidthLimitedResolutionInPercent" units="%">
  <owner>asapersson@chromium.org</owner>
  <summary>
    Percentage of sent frames that are limited in resolution due to bandwidth
    for a sent video stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.BandwidthLimitedResolutionsDisabled"
    units="disabled resolutions">
  <owner>asapersson@chromium.org</owner>
  <summary>
    For frames that are limited in resolution due to bandwidth, the average
    number of disabled resolutions is recorded for a sent video stream. Recorded
    when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.BitrateReceivedInKbps" units="kbps">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of received bits per second for a received video stream. Recorded
    when a stream is removed. The total number of bytes is divided by the time
    the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.BitrateSentInKbps" units="kbps">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of sent bits per second for a sent video stream. Recorded when a
    stream is removed. The total number of bytes is divided by the time the
    video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.CompleteFramesReceivedPerSecond" units="fps">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of complete frames received per second for a received video
    stream. Recorded when a stream is removed. The total number of frames is
    divided by the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.CpuLimitedResolutionInPercent" units="%">
  <owner>asapersson@chromium.org</owner>
  <summary>
    Percentage of frames that are limited in resolution due to CPU for a sent
    video stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.CurrentDelayInMs" units="ms">
  <owner>asapersson@chromium.org</owner>
  <summary>
    Average current delay for a received video stream. This is the actual delay
    imposed on frames (where the goal is to reach the target delay (see
    WebRTC.Video.TargetDelayInMs)). Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Decoded.Vp8.Qp" units="qp value">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The average QP (quantizer value) per frame for a received VP8 video stream.
    Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.DecodedFramesPerSecond" units="fps">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of decoded frames per second for a received video stream.
    Recorded when a stream is removed. The total number of frames is divided by
    the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.DecodeTimeInMs" units="ms">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The average decode time per frame for a received video stream. Recorded when
    a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.DelayedFramesToRenderer" units="%">
  <owner>asapersson@chromium.org</owner>
  <summary>
    Percentage of delayed frames to renderer for a received video stream.
    Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.DelayedFramesToRenderer_AvgDelayInMs" units="ms">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The average delay of delayed frames to renderer for a received video stream.
    Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.DiscardedPacketsInPercent" units="%">
  <owner>asapersson@chromium.org</owner>
  <summary>
    Percentage of discarded packets by the jitter buffer due to arriving too
    late for a received video stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.DroppedFrames.Capturer" units="frames">
  <owner>ilnik@chromium.org</owner>
  <summary>
    Total number of frames dropped by a capturer for a sent video stream.
    Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.DroppedFrames.Encoder" units="frames">
  <owner>ilnik@chromium.org</owner>
  <summary>
    Total number of frames dropped by an encoder's internal rate limiter for a
    sent video stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.DroppedFrames.EncoderQueue" units="frames">
  <owner>ilnik@chromium.org</owner>
  <summary>
    Total number of frames dropped because encoder queue is full for a sent
    video stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.DroppedFrames.Ratelimiter" units="frames">
  <owner>ilnik@chromium.org</owner>
  <summary>
    Total number of frames dropped by a WebRTC rate limiter (in MediaOpt) for a
    sent video stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.DroppedFrames.Receiver" units="frames">
  <owner>ilnik@chromium.org</owner>
  <summary>
    Total number of frames dropped by a WebRTC on the receive side because they
    are incomplete or undecodable.
  </summary>
</histogram>

<histogram name="WebRTC.Video.DuplicatedPacketsInPercent" units="%">
  <owner>asapersson@chromium.org</owner>
  <summary>
    Percentage of duplicated packets in the jitter buffer for a received video
    stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Encoded.Qp" units="qp value">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The average QP (quantizer value) per frame for a sent video stream. Recorded
    when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Encoder.CodecType" enum="WebRtcVideoCodecs">
  <owner>asapersson@chromium.org</owner>
  <summary>
    Configured video codec for a sent video stream. Recorded when a
    VideoSendStream is destroyed (for streams whose lifetime is longer than 10
    seconds).
  </summary>
</histogram>

<histogram name="WebRTC.Video.EncodeTimeInMs" units="ms">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The average encode time per frame for a sent video stream. Recorded when a
    stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.EndToEndDelayInMs" units="ms">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The average end-to-end delay per frame for a received video stream. Recorded
    when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.EndToEndDelayMaxInMs" units="ms">
  <owner>ilnik@chromium.org</owner>
  <summary>
    The maximum end-to-end delay per frame for a received video stream. Recorded
    when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.FecBitrateReceivedInKbps" units="kbps">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of received FEC bits per second for a received video stream.
    Recorded when a stream is removed. The total number of bytes is divided by
    the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.FecBitrateSentInKbps" units="kbps">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of sent FEC bits per second for a sent video stream. Recorded
    when a stream is removed. The total number of bytes is divided by the time
    the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.FirPacketsReceivedPerMinute"
    units="packets/minute">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of received RTCP FIR packets per minute for a sent video stream.
    Recorded when a stream is removed. The total number of packets is divided by
    the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.FirPacketsSentPerMinute" units="packets/minute">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of sent RTCP FIR packets per minute for a received video stream.
    Recorded when a stream is removed. The total number of packets is divided by
    the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.H264DecoderImpl.Event"
    enum="WebRtcH264DecoderImplEvent">
  <owner>hbos@chromium.org</owner>
  <summary>
    The number of |H264DecoderImpl| events, such as an initialization or
    decoding error, that have occurred. At most one Init and one Error is
    reported per |H264DecoderImpl| instance. This is to avoid the same event
    from being reported multiple times (e.g. if there is an error you might
    re-initialize or get a decode error every frame which would otherwise
    pollute the data).
  </summary>
</histogram>

<histogram name="WebRTC.Video.H264EncoderImpl.Event"
    enum="WebRtcH264EncoderImplEvent">
  <owner>hbos@chromium.org</owner>
  <summary>
    The number of |H264EncoderImpl| events, such as an initialization or
    encoding error, that have occurred. At most one Init and one Error is
    reported per |H264EncoderImpl| instance. This is to avoid the same event
    from being reported multiple times (e.g. if there is an error you might
    re-initialize or get an encode error every frame which would otherwise
    pollute the data).
  </summary>
</histogram>

<histogram name="WebRTC.Video.InputFramesPerSecond" units="fps">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of incoming frames per second for a sent video stream. Recorded
    when a stream is removed. The total number of frames is divided by the time
    the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.InputHeightInPixels" units="pixels">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The average input height per frame (for incoming frames to video engine) for
    a sent video stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.InputWidthInPixels" units="pixels">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The average input width per frame (for incoming frames to video engine) for
    a sent video stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.InterframeDelay95PercentileInMs" units="ms">
  <owner>ilnik@chromium.org</owner>
  <summary>
    The 95th percentile of interframe delay for a received video stream.
    Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.InterframeDelayInMs" units="ms">
  <owner>ilnik@chromium.org</owner>
  <summary>
    The average interframe delay for a received video stream. Recorded when a
    stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.InterframeDelayMaxInMs" units="ms">
  <owner>ilnik@chromium.org</owner>
  <summary>
    The maximum interframe delay for a received video stream. Recorded when a
    stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.JitterBufferDelayInMs" units="ms">
  <owner>asapersson@chromium.org</owner>
  <summary>
    Average jitter buffer delay for a received video stream. Recorded when a
    stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.KeyFramesReceivedInPermille" units="permille">
  <owner>asapersson@chromium.org</owner>
  <summary>
    Permille of frames that are key frames for a received video stream. Recorded
    when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.KeyFramesSentInPermille" units="permille">
  <owner>asapersson@chromium.org</owner>
  <summary>
    Permille of frames that are key frames for a sent video stream. Recorded
    when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.MeanFreezeDurationMs" units="ms">
  <owner>ilnik@chromium.org</owner>
  <summary>
    The average duration of a freeze in video playback. Recorded then a recieve
    stream is removed or content type changes.
  </summary>
</histogram>

<histogram name="WebRTC.Video.MeanTimeBetweenFreezesMs" units="ms">
  <owner>ilnik@chromium.org</owner>
  <summary>
    The average duration of a smooth video playback. Recorded then a recieve
    stream is removed or content type changes.
  </summary>
</histogram>

<histogram name="WebRTC.Video.MediaBitrateReceivedInKbps" units="kbps">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of received media payload bits per second for a received video
    stream. Recorded when a stream is removed. The total number of bytes is
    divided by the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.MediaBitrateSentInKbps" units="kbps">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of sent media payload bits per second for a sent video stream.
    Recorded when a stream is removed. The total number of bytes is divided by
    the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.NackPacketsReceivedPerMinute"
    units="packets/minute">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of received RTCP NACK packets per minute for a sent video stream.
    Recorded when a stream is removed. The total number of packets is divided by
    the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.NackPacketsSentPerMinute" units="packets/minute">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of sent RTCP NACK packets per minute for a received video stream.
    Recorded when a stream is removed. The total number of packets is divided by
    the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.NumberOfPauseEvents" units="pause events">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of times a video stream has been paused/resumed during a call.
    Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.NumberResolutionDownswitchesPerMinute"
    units="switches/minute">
  <owner>ilnik@chromium.org</owner>
  <summary>
    The average number of resolution down-switches per minute for a receive
    video stream. Recorded then a stream is removed or content type changes.
  </summary>
</histogram>

<histogram name="WebRTC.Video.OnewayDelayInMs" units="ms">
  <owner>asapersson@chromium.org</owner>
  <summary>
    Average delay (network delay (rtt/2) + jitter delay + decode time + render
    delay) for a received video stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.PaddingBitrateReceivedInKbps" units="kbps">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of received padding bits per second for a received video stream.
    Recorded when a stream is removed. The total number of bytes is divided by
    the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.PaddingBitrateSentInKbps" units="kbps">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of sent padding bits per second for a sent video stream. Recorded
    when a stream is removed. The total number of bytes is divided by the time
    the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.PausedTimeInPercent" units="%">
  <owner>asapersson@chromium.org</owner>
  <summary>
    Percentage of time that the video has been paused for a sent video stream.
    Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.PliPacketsReceivedPerMinute"
    units="packets/minute">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of received RTCP PLI packets per minute for a sent video stream.
    Recorded when a stream is removed. The total number of packets is divided by
    the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.PliPacketsSentPerMinute" units="packets/minute">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of sent RTCP PLI packets per minute for a received video stream.
    Recorded when a stream is removed. The total number of packets is divided by
    the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.QualityLimitedResolutionDownscales"
    units="downscales">
  <owner>asapersson@chromium.org</owner>
  <summary>
    For frames that are downscaled in resolution due to quality, the average
    number of downscales is recorded for a sent video stream. Recorded when a
    stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.QualityLimitedResolutionInPercent" units="%">
  <owner>asapersson@chromium.org</owner>
  <summary>
    Percentage of sent frames that are downscaled in resolution due to quality
    for a sent video stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.ReceivedFecPacketsInPercent" units="%">
  <owner>asapersson@chromium.org</owner>
  <summary>
    Percentage of received FEC packets for a received video stream. Recorded
    when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.ReceivedHeightInPixels" units="pixels">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The average received height per frame for a received video stream. Recorded
    when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.ReceivedPacketsLostInPercent" units="%">
  <owner>asapersson@chromium.org</owner>
  <summary>
    Percentage of received packets lost for a received video stream. Recorded
    when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.ReceivedWidthInPixels" units="pixels">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The average received width per frame for a received video stream. Recorded
    when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.ReceiveStreamLifetimeInSeconds" units="seconds">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The lifetime of a video receive stream. Recorded when a VideoReceiveStream
    instance is destroyed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.RecoveredMediaPacketsInPercentOfFec" units="%">
  <owner>asapersson@chromium.org</owner>
  <summary>
    Percentage of recovered media packets from FEC packets for a received video
    stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.RenderFramesPerSecond" units="fps">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of sent frames to the renderer per second for a received video
    stream. Recorded when a stream is removed. The total number of frames is
    divided by the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.RenderSqrtPixelsPerSecond" units="pps">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of pixels (sqrt(width*height)) of sent frames to the renderer per
    second for a received video stream. Recorded when a stream is removed. The
    total number of pixels is divided by the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.RetransmittedBitrateReceivedInKbps" units="kbps">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of retransmitted bits per second for a received video stream.
    Recorded when a stream is removed. The total number of bytes is divided by
    the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.RetransmittedBitrateSentInKbps" units="kbps">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of retransmitted bits per second for a sent video stream.
    Recorded when a stream is removed. The total number of bytes is divided by
    the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.RtpToNtpFreqOffsetInKhz" units="kHz">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The absolute value of the difference between the estimated frequency during
    RTP timestamp to NTP time conversion and the actual value (i.e. 90 kHz) is
    measured per received video frame. The max offset during 40 second intervals
    is stored. The average of these stored offsets per received video stream is
    recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.RtxBitrateReceivedInKbps" units="kbps">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of received bits over RTX per second for a received video stream.
    Recorded when a stream is removed. The total number of bytes is divided by
    the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.RtxBitrateSentInKbps" units="kbps">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of sent bits over RTX per second for a sent video stream.
    Recorded when a stream is removed. The total number of bytes is divided by
    the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.BandwidthLimitedResolutionInPercent"
    units="%">
  <owner>sprang@chromium.org</owner>
  <summary>
    Percentage of sent frames that are limited in resolution due to bandwidth
    for a sent (screen content) video stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.BandwidthLimitedResolutionsDisabled"
    units="disabled resolutions">
  <owner>sprang@chromium.org</owner>
  <summary>
    For frames that are limited in resolution due to bandwidth, the average
    number of disabled resolutions is recorded for a sent (screen content) video
    stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.BitrateSentInKbps" units="kbps">
  <owner>sprang@chromium.org</owner>
  <summary>
    The number of sent bits per second for a sent screenshare stream. Recorded
    when a stream is removed. The total number of bytes is divided by the time
    the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.Decoded.Vp8.Qp" units="qp value">
  <owner>ilnik@chromium.org</owner>
  <summary>
    The average QP (quantizer value) per frame for a received VP8 screenshare
    stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.DroppedFrames.Capturer"
    units="frames">
  <owner>ilnik@chromium.org</owner>
  <summary>
    Total number of frames dropped by a capturer for a sent screenshare stream.
    Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.DroppedFrames.Encoder" units="frames">
  <owner>ilnik@chromium.org</owner>
  <summary>
    Total number of frames dropped by an encoder's internal rate limiter for a
    sent screenshare stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.DroppedFrames.EncoderQueue"
    units="frames">
  <owner>ilnik@chromium.org</owner>
  <summary>
    Total number of frames dropped because encoder queue is full for a sent
    screenshare stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.DroppedFrames.Ratelimiter"
    units="frames">
  <owner>ilnik@chromium.org</owner>
  <summary>
    Total number of frames dropped by a WebRTC rate limiter (in MediaOpt) for a
    sent screenshare stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.EncodeTimeInMs" units="ms">
  <owner>sprang@chromium.org</owner>
  <summary>
    The average encode time per frame for a sent (screen content) video stream.
    Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.EndToEndDelayInMs" units="ms">
  <owner>ilnik@chromium.org</owner>
  <summary>
    The average end-to-end delay per frame for a received screenshare stream.
    Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.EndToEndDelayMaxInMs" units="ms">
  <owner>ilnik@chromium.org</owner>
  <summary>
    The maximum end-to-end delay per frame for a received screenshare stream.
    Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.FecBitrateSentInKbps" units="kbps">
  <owner>sprang@chromium.org</owner>
  <summary>
    The number of sent FEC bits per second for a sent screenshare stream.
    Recorded when a stream is removed. The total number of bytes is divided by
    the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.FirPacketsReceivedPerMinute"
    units="packets/minute">
  <owner>sprang@chromium.org</owner>
  <summary>
    The number of received RTCP FIR packets per minute for a sent screenshare
    stream. Recorded when a stream is removed. The total number of packets is
    divided by the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.FramesPerDrop"
    units="sent/dropped ratio">
  <owner>sprang@chromium.org</owner>
  <summary>
    Ratio of sent frames to dropped frames at the encoder. The value is reported
    when a stream is removed and is calculated as the total number frames sent
    divided by the number of dropped frames.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.FramesPerOvershoot"
    units="sent/overshoot ratio">
  <owner>sprang@chromium.org</owner>
  <summary>
    Ratio of sent frames to number of re-encoded frames (due to target bitrate
    overshoot). The value is reported when a stream is removed and is calculated
    as the total number frames sent divided by the number of re-encoded frames.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.InputFramesPerSecond" units="fps">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of incoming frames per second for a sent (screen content) video
    stream. Recorded when a stream is removed. The total number of frames is
    divided by the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.InputHeightInPixels" units="pixels">
  <owner>sprang@chromium.org</owner>
  <summary>
    The average input height per frame (for incoming frames to video engine) for
    a sent (screen content) video stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.InputWidthInPixels" units="pixels">
  <owner>sprang@chromium.org</owner>
  <summary>
    The average input width per frame (for incoming frames to video engine) for
    a sent (screen content) video stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.InterframeDelay95PercentileInMs"
    units="ms">
  <owner>ilnik@chromium.org</owner>
  <summary>
    The 95th percentile of interframe delay for a received screenshare stream.
    Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.InterframeDelayInMs" units="ms">
  <owner>ilnik@chromium.org</owner>
  <summary>
    The average interframe delay for a received screenshare stream. Recorded
    when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.InterframeDelayMaxInMs" units="ms">
  <owner>ilnik@chromium.org</owner>
  <summary>
    The maximum interframe delay for a received screenshare stream. Recorded
    when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.KeyFramesReceivedInPermille"
    units="permille">
  <owner>ilnik@chromium.org</owner>
  <summary>
    Permille of frames that are key frames for a received screenshare stream.
    Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.KeyFramesSentInPermille"
    units="permille">
  <owner>sprang@chromium.org</owner>
  <summary>
    Permille of frames that are key frames for a sent (screen content) video
    stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.Layer0">
  <owner>sprang@chromium.org</owner>
  <summary>
    Stats for the lower layer (TL0) of a screenshare stream in conference mode.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.Layer1">
  <owner>sprang@chromium.org</owner>
  <summary>
    Stats for the higher layer (TL1) of a screenshare stream in conference mode.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.MeanFreezeDurationMs" units="ms">
  <owner>ilnik@chromium.org</owner>
  <summary>
    The average duration of a freeze in screenshare playback. Recorded then a
    recieve stream is removed or content type changes.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.MeanTimeBetweenFreezesMs" units="ms">
  <owner>ilnik@chromium.org</owner>
  <summary>
    The average duration of a smooth video playback for screenshare stream.
    Recorded then a recieve stream is removed or content type changes.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.MediaBitrateReceivedInKbps"
    units="kbps">
  <owner>ilnik@chromium.org</owner>
  <summary>
    The number of received media payload bits per second for a received
    screenshare stream. Recorded when a stream is removed. The total number of
    bytes is divided by the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.MediaBitrateSentInKbps" units="kbps">
  <owner>sprang@chromium.org</owner>
  <summary>
    The number of sent media payload bits per second for a sent screenshare
    stream. Recorded when a stream is removed. The total number of bytes is
    divided by the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.NackPacketsReceivedPerMinute"
    units="packets/minute">
  <owner>sprang@chromium.org</owner>
  <summary>
    The number of received RTCP NACK packets per minute for a sent screenshare
    stream. Recorded when a stream is removed. The total number of packets is
    divided by the time the video stream exists.
  </summary>
</histogram>

<histogram
    name="WebRTC.Video.Screenshare.NumberResolutionDownswitchesPerMinute"
    units="switches/minute">
  <owner>ilnik@chromium.org</owner>
  <summary>
    The average number of resolution down-switches per minute for a receive
    screenshare stream. Recorded then a stream is removed or content type
    changes.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.PaddingBitrateSentInKbps"
    units="kbps">
  <owner>sprang@chromium.org</owner>
  <summary>
    The number of sent padding bits per second for a sent screenshare stream.
    Recorded when a stream is removed. The total number of bytes is divided by
    the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.PliPacketsReceivedPerMinute"
    units="packets/minute">
  <owner>sprang@chromium.org</owner>
  <summary>
    The number of received RTCP PLI packets per minute for a sent screenshare
    stream. Recorded when a stream is removed. The total number of packets is
    divided by the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.QualityLimitedResolutionDownscales"
    units="downscales">
  <owner>sprang@chromium.org</owner>
  <summary>
    For frames that are downscaled in resolution due to quality, the average
    number of downscales is recorded for a sent (screen content) video stream.
    Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.QualityLimitedResolutionInPercent"
    units="%">
  <owner>sprang@chromium.org</owner>
  <summary>
    Percentage of sent frames that are downscaled in resolution due to quality
    for a sent (screen content) video stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.ReceivedHeightInPixels"
    units="pixels">
  <owner>ilnik@chromium.org</owner>
  <summary>
    The average received height per frame for a received screenshare stream.
    Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.ReceivedPacketsLostInPercent"
    units="%">
  <owner>ilnik@chromium.org</owner>
  <summary>
    Percentage of received packets lost for a received screenshare stream.
    Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.ReceivedWidthInPixels" units="pixels">
  <owner>ilnik@chromium.org</owner>
  <summary>
    The average received width per frame for a received screenshare stream.
    Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.ReceiveStreamLifetimeInSeconds"
    units="seconds">
  <owner>ilnik@chromium.org</owner>
  <summary>
    The lifetime of a screenshare receive stream. Recorded when a
    VideoReceiveStream instance is destroyed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.RetransmittedBitrateSentInKbps"
    units="kbps">
  <owner>sprang@chromium.org</owner>
  <summary>
    The number of retransmitted bits per second for a sent screenshare stream.
    Recorded when a stream is removed. The total number of bytes is divided by
    the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.RtxBitrateSentInKbps" units="kbps">
  <owner>sprang@chromium.org</owner>
  <summary>
    The number of sent bits over RTX per second for a sent screenshare stream.
    Recorded when a stream is removed. The total number of bytes is divided by
    the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.SendSideDelayInMs" units="ms">
  <owner>sprang@chromium.org</owner>
  <summary>
    The average delay (of average delays) of sent packets for a sent (screen
    content) video stream. Recorded when a stream is removed. The delay is
    measured from a frame is input to video engine until a packet is sent to the
    network. For each sent packet, the average delay of all sent packets over
    the last second is reported. The average of these reported delays is
    recorded.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.SendSideDelayMaxInMs" units="ms">
  <owner>sprang@chromium.org</owner>
  <summary>
    The average delay (of max delays) of sent packets for a sent (screen
    content) video stream. Recorded when a stream is removed. The delay is
    measured from a frame is input to video engine until a packet is sent to the
    network. For each sent packet, the maximum delay of all sent packets over
    the last second is reported. The average of these reported delays is
    recorded.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.SentFramesPerSecond" units="fps">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of sent frames per second for a sent (screen content) video
    stream. Recorded when a stream is removed. The total number of frames is
    divided by the time the video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.SentHeightInPixels" units="pixels">
  <owner>sprang@chromium.org</owner>
  <summary>
    The average sent height per frame for a sent (screen content) video stream.
    Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.SentPacketsLostInPercent" units="%">
  <owner>sprang@chromium.org</owner>
  <summary>
    Percentage of sent packets lost for a sent screenshare stream. Recorded when
    a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.SentToInputFpsRatioPercent" units="%">
  <owner>ilnik@chromium.org</owner>
  <summary>
    Ratio between Screenshare.SentFramesPerSecond and
    Screenshare.InputFramesPerSecond in percents. Recorded when a stream is
    removed. The total number of sent frames is divided by the total number of
    input frames and multiplied by 100.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.SentWidthInPixels" units="pixels">
  <owner>sprang@chromium.org</owner>
  <summary>
    The average sent width per frame for a sent (screen content) video stream.
    Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.TimeInBlockyVideoPercentage"
    units="%">
  <owner>ilnik@chromium.org</owner>
  <summary>
    Percentage of time the recieve screenshare stream playbacks low quality
    blocky video. Recorded then a stream is removed or content type changes.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.TimeInHdPercentage" units="%">
  <owner>ilnik@chromium.org</owner>
  <summary>
    Percentage of time the recieve screenshare stream playbacks HD resolution.
    Recorded then a stream is removed or content type changes.
  </summary>
</histogram>

<histogram name="WebRTC.Video.Screenshare.UniqueNackRequestsReceivedInPercent"
    units="%">
  <owner>sprang@chromium.org</owner>
  <summary>
    Percentage of unique RTCP NACK requests that are received in response to a
    sent screenshare stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.SendDelayInMs" units="ms">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The average send delay of sent packets for a sent video stream. Recorded
    when a stream is removed. The delay is measured from a packet is sent to the
    transport until leaving the socket.
  </summary>
</histogram>

<histogram name="WebRTC.Video.SendSideDelayInMs" units="ms">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The average delay (of average delays) of sent packets for a sent video
    stream. Recorded when a stream is removed. The delay is measured from a
    frame is input to video engine until a packet is sent to the network. For
    each sent packet, the average delay of all sent packets over the last second
    is reported. The average of these reported delays is recorded.
  </summary>
</histogram>

<histogram name="WebRTC.Video.SendSideDelayMaxInMs" units="ms">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The average delay (of max delays) of sent packets for a sent video stream.
    Recorded when a stream is removed. The delay is measured from a frame is
    input to video engine until a packet is sent to the network. For each sent
    packet, the maximum delay of all sent packets over the last second is
    reported. The average of these reported delays is recorded.
  </summary>
</histogram>

<histogram name="WebRTC.Video.SendStreamLifetimeInSeconds" units="seconds">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The lifetime of a video send stream. Recorded when a VideoSendStream
    instance is destroyed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.SentFramesPerSecond" units="fps">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The number of sent frames per second for a sent video stream. Recorded when
    a stream is removed. The total number of frames is divided by the time the
    video stream exists.
  </summary>
</histogram>

<histogram name="WebRTC.Video.SentHeightInPixels" units="pixels">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The average sent height per frame for a sent video stream. Recorded when a
    stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.SentPacketsLostInPercent" units="%">
  <owner>asapersson@chromium.org</owner>
  <summary>
    Percentage of sent packets lost for a sent video stream. Recorded when a
    stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.SentToInputFpsRatioPercent" units="%">
  <owner>ilnik@chromium.org</owner>
  <summary>
    Ratio between SentFramesPerSecond and InputFramesPerSecond in percents.
    Recorded when a stream is removed. The total number of sent frames is
    divided by the total number of input frames and multiplied by 100.
  </summary>
</histogram>

<histogram name="WebRTC.Video.SentWidthInPixels" units="pixels">
  <owner>asapersson@chromium.org</owner>
  <summary>
    The average sent width per frame for a sent video stream. Recorded when a
    stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.TargetDelayInMs" units="ms">
  <owner>asapersson@chromium.org</owner>
  <summary>
    Average target delay (jitter delay + decode time + render delay) for a
    received video stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.TimeInBlockyVideoPercentage" units="%">
  <owner>ilnik@chromium.org</owner>
  <summary>
    Percentage of time the recieve video stream playbacks low quality blocky
    video. Recorded then a stream is removed or content type changes.
  </summary>
</histogram>

<histogram name="WebRTC.Video.TimeInHdPercentage" units="%">
  <owner>ilnik@chromium.org</owner>
  <summary>
    Percentage of time the recieve video stream playbacks HD resolution.
    Recorded then a stream is removed or content type changes.
  </summary>
</histogram>

<histogram name="WebRTC.Video.UniqueNackRequestsReceivedInPercent" units="%">
  <owner>asapersson@chromium.org</owner>
  <summary>
    Percentage of unique RTCP NACK requests that are received in response to a
    sent video stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.UniqueNackRequestsSentInPercent" units="%">
  <owner>asapersson@chromium.org</owner>
  <summary>
    Percentage of unique RTCP NACK requests that are sent in response to a
    received video stream. Recorded when a stream is removed.
  </summary>
</histogram>

<histogram name="WebRTC.Video.VP8DecoderImpl.TooManyPendingFrames"
    units="counts">
  <owner>perkj@chromium.org</owner>
  <summary>
    Counts occurences of if the VP8 software decoder runs out of buffers due to
    that they are not returned to the buffer pool. See http://crbug/652923 and
    http://crbug/542522.
  </summary>
</histogram>

<histogram name="WebRTC.webkitApiCount" enum="WebRTCAPIName">
  <owner>perkj@chromium.org</owner>
  <owner>mcasas@chromium.org</owner>
  <owner>emircan@chromium.org</owner>
  <summary>Counts number of calls to WebRTC APIs from JavaScript.</summary>
</histogram>

<histogram name="WebRTC.webkitApiCountPerSession" enum="WebRTCAPIName">
  <owner>perkj@chromium.org</owner>
  <summary>
    Counts the number of calls to WebRTC APIs from JavaScript once per session.
    A session is a crude estimate since its implemented as the lifetime of the
    render process that called the WebRTC API.
  </summary>
</histogram>

<histogram name="WebRTC.webkitApiCountUniqueByOrigin" enum="WebRTCAPIName">
  <obsolete>
    Deprecated as of r253828 (27 Feb 2014).
  </obsolete>
  <owner>tommi@chromium.org</owner>
  <summary>
    Counts number of calls to WebRTC APIs from JavaScript, once per origin per
    renderer process.
  </summary>
</histogram>

<histogram name="WebRTC.WindowCaptureTime" units="ms">
  <owner>jiayl@chromium.org</owner>
  <summary>Time for capturing one frame in window capturing.</summary>
</histogram>

<histogram name="WebShare.ApiCount" enum="WebShareMethod">
  <owner>mgiuca@chromium.org</owner>
  <summary>
    Counts the number of calls to navigator.share. Includes both successful and
    failed shares.
  </summary>
</histogram>

<histogram name="WebShare.ShareOutcome" enum="WebShareOutcome">
  <owner>mgiuca@chromium.org</owner>
  <summary>
    Records the outcome of calls to navigator.share. This will not count any
    calls that never complete (e.g., if the page closes while the picker is
    open). Therefore, DO NOT look at the raw percentages of this histogram;
    instead, compare these numbers with the WebShare.ApiCount.Share total.

    NOTE: At the moment, if the user cancels the picker, its recording will be
    delayed, and possibly never recorded (https://crbug.com/636274), so that
    will account for a discrepancy between ShareOutcome and ApiCount.Share.
  </summary>
</histogram>

<histogram name="WebsiteSettings.Action" enum="WebsiteSettingsAction">
  <owner>estark@chromium.org</owner>
  <summary>
    Tracks actions with the website setting (a.k.a. page info / origin info)
    bubble, such as opening it up or clicking on the Connection tab.
  </summary>
</histogram>

<histogram name="WebsiteSettings.Action.HttpsUrl" enum="WebsiteSettingsAction">
  <obsolete>
    Deprecated October 2016 in favor of Security.PageInfo.Action.HttpsUrl.Valid,
    Security.PageInfo.Action.HttpsUrl.Dangerous, and
    Security.PageInfo.Action.HttpsUrl.Downgraded.
  </obsolete>
  <owner>estark@chromium.org</owner>
  <summary>
    Tracks WebsiteSettings actions that take place on an HTTPS URL. This
    completely disregards security status.
  </summary>
</histogram>

<histogram name="WebsiteSettings.Menu.PermissionChanged" enum="ContentType">
  <owner>miguelg@chromium.org</owner>
  <owner>finnur@chromium.org</owner>
  <summary>
    Count of how often a specific content type (permission) is changed using the
    content settings menu.

    Note: The values of this metric collected for Chrome 49 (early 2016) are
    innacurate and should not be trusted. crbug.com/589255.
  </summary>
</histogram>

<histogram name="WebsiteSettings.Menu.PermissionChanged.Allowed"
    enum="ContentType">
  <owner>miguelg@chromium.org</owner>
  <owner>finnur@chromium.org</owner>
  <summary>
    Count of how often a specific content type (permission) is set to 'Allowed'
    using the content settings menu.

    Note: The values of this metric collected for Chrome 49 (early 2016) are
    innacurate and should not be trusted. crbug.com/589255.
  </summary>
</histogram>

<histogram name="WebsiteSettings.Menu.PermissionChanged.Ask" enum="ContentType">
  <owner>miguelg@chromium.org</owner>
  <owner>finnur@chromium.org</owner>
  <summary>
    Count of how often a specific content type (permission) is set to 'Ask'
    using the content settings menu.
  </summary>
</histogram>

<histogram name="WebsiteSettings.Menu.PermissionChanged.Blocked"
    enum="ContentType">
  <owner>miguelg@chromium.org</owner>
  <owner>finnur@chromium.org</owner>
  <summary>
    Count of how often a specific content type (permission) is set to 'Blocked'
    using the content settings menu.

    Note: The values of this metric collected for Chrome 49 (early 2016) are
    innacurate and should not be trusted. crbug.com/589255.
  </summary>
</histogram>

<histogram name="WebsiteSettings.Menu.PermissionChanged.Reset"
    enum="ContentType">
  <owner>miguelg@chromium.org</owner>
  <owner>finnur@chromium.org</owner>
  <summary>
    Count of how often a specific content type (permission) is reset to the
    default value using the content settings menu.

    Note: The values of this metric collected for Chrome 49 (early 2016) are
    innacurate and should not be trusted. crbug.com/589255.
  </summary>
</histogram>

<histogram name="WebsiteSettings.Menu.PermissionChanged.SessionOnly"
    enum="ContentType">
  <owner>timloh@chromium.org</owner>
  <summary>
    Count of how often a specific content type (permission) is changed to the
    session only value using the content settings menu. This option only exists
    for cookies.
  </summary>
</histogram>

<histogram name="WebsiteSettings.OriginInfo.PermissionChanged"
    enum="ContentType">
  <owner>sashab@chromium.org</owner>
  <owner>felt@chromium.org</owner>
  <summary>
    Count of how often a specific content type (permission) is changed using the
    Origin Info dialog.

    Note: The values of this metric collected for Chrome 49 (early 2016) are
    innacurate and should not be trusted. crbug.com/589255.
  </summary>
</histogram>

<histogram name="WebsiteSettings.OriginInfo.PermissionChanged.Allowed"
    enum="ContentType">
  <owner>sashab@chromium.org</owner>
  <owner>felt@chromium.org</owner>
  <summary>
    Count of how often a specific content type (permission) is set to 'Allowed'
    using the Origin Info dialog.

    Note: The values of this metric collected for Chrome 49 (early 2016) are
    innacurate and should not be trusted. crbug.com/589255.
  </summary>
</histogram>

<histogram name="WebsiteSettings.OriginInfo.PermissionChanged.Blocked"
    enum="ContentType">
  <owner>sashab@chromium.org</owner>
  <owner>felt@chromium.org</owner>
  <summary>
    Count of how often a specific content type (permission) is set to 'Blocked'
    using the Origin Info dialog.

    Note: The values of this metric collected for Chrome 49 (early 2016) are
    innacurate and should not be trusted. crbug.com/589255.
  </summary>
</histogram>

<histogram name="WebsiteSettings.PermissionChanged" enum="ContentType">
  <obsolete>
    Deprecated 12/2014 in Issue 433776, and replaced by
    WebsiteSettings.OriginInfo.PermissionChanged.
  </obsolete>
  <owner>sashab@chromium.org</owner>
  <summary>
    Count of how often a specific content type (permission) is changed using the
    Page Info UI.

    Note: The values of this metric collected for Chrome 49 (early 2016) are
    innacurate and should not be trusted. crbug.com/589255.
  </summary>
</histogram>

<histogram name="websql.Async.OpenTime.Error" units="ms">
  <owner>cmumford@chromium.org</owner>
  <summary>
    The time required to try (and fail) to open a Web SQL database.
  </summary>
</histogram>

<histogram name="websql.Async.OpenTime.Success" units="ms">
  <owner>cmumford@chromium.org</owner>
  <summary>The time required to successfully open a Web SQL database.</summary>
</histogram>

<histogram name="websql.OpenDatabase" enum="BooleanSecure">
  <owner>michaeln@chromium.org</owner>
  <summary>
    Counts the number of WebSQL databases opened for secure vs insecure origins.
  </summary>
</histogram>

<histogram name="Webstore.ExtensionInstallResult" enum="BooleanSuccess">
  <owner>jackhou@chromium.org</owner>
  <summary>
    The success or failure of all extension installs from the webstore. This
    includes those initiated by sync.
  </summary>
</histogram>

<histogram name="WebstoreWidgetApp.Close" enum="SuggestAppsDialogCloseReason">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Webstore Widget app: the reason why the suggest apps dialog was closed.
  </summary>
</histogram>

<histogram name="WebstoreWidgetApp.Install" enum="SuggestAppsDialogInstall">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Webstore Widget app: whether the Webstore item user selected was
    successfully installed or not.
  </summary>
</histogram>

<histogram name="WebstoreWidgetApp.Load" enum="SuggestAppsDialogLoad">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Webstore Widget app: whether the initialization of the dialog succeeded or
    not.
  </summary>
</histogram>

<histogram name="WebstoreWidgetApp.LoadTime" units="ms">
  <owner>joshwoodward@google.com</owner>
  <summary>
    Webstore Widget app: time to load the widget contained in the app. Measured
    between the moment window appears and the moment all the contents in the app
    including the Chrome Webstore widget are ready.
  </summary>
</histogram>

<histogram name="WebUI.CreatedForUrl" enum="WebUIUrlHashes">
  <owner>dbeam@chromium.org</owner>
  <summary>URLs for which Chrome creates WebUIControllers.</summary>
</histogram>

<histogram name="WebUI.Settings.PathVisited" enum="WebUISettingsPathHashes">
  <owner>dschuyler@chromium.org</owner>
  <owner>tbuckley@chromium.org</owner>
  <owner>bettes@chromium.org</owner>
  <summary>
    Paths within chrome://settings visited. For evaluating popularity and
    priorities for chrome://settings GUI.
  </summary>
</histogram>

<histogram name="WebUsb.ChooserClosed" enum="WebUsbChooserClosed">
  <owner>reillyg@chromium.org</owner>
  <owner>juncai@chromium.org</owner>
  <summary>
    Records the reason why the WebUSB device chooser was closed.
  </summary>
</histogram>

<histogram name="WebUsb.DetectorInitialization" units="ms">
  <owner>reillyg@chromium.org</owner>
  <owner>juncai@chromium.org</owner>
  <summary>
    Records the time spent initializing the WebUSB detector module.
  </summary>
</histogram>

<histogram name="WebUsb.NotificationClosed" enum="WebUsbNotificationClosed">
  <owner>reillyg@chromium.org</owner>
  <owner>juncai@chromium.org</owner>
  <summary>
    Records the reason why the &quot;WebUSB device detected&quot; notification
    was dismissed.
  </summary>
</histogram>

<histogram name="WebUsb.PermissionRevoked" enum="WebUsbPermissionRevoked">
  <owner>reillyg@chromium.org</owner>
  <owner>juncai@chromium.org</owner>
  <summary>
    Records when the user revokes permission for an origin to connect to a USB
    device using the WebUSB API.
  </summary>
</histogram>

<histogram name="WebView.LoadDataWithBaseUrl.HistoryUrl" enum="HistoryUrlType">
  <obsolete>
    Obsolete 04/04/2018 as it has been replaced by
    Android.WebView.LoadDataWithBaseUrl.HistoryUrl.
  </obsolete>
  <owner>jamwalla@chromium.org</owner>
  <summary>
    Records whether the historyUrl parameter to loadDataWithBaseUrl is empty/
    null, the same as the baseUrl parameter, or different from baseUrl.
  </summary>
</histogram>

<histogram name="Welcome.SignInPromptResult" enum="WelcomeSignInPromptOutcome">
  <owner>tmartino@chromium.org</owner>
  <summary>
    Records the result of promoting sign-in via the Welcome page.
  </summary>
</histogram>

<histogram name="Welcome.Win10.DefaultPromptResult" enum="BooleanDefault">
  <owner>tmartino@chromium.org</owner>
  <summary>
    Records whether or not Chrome was the default browser when the user left the
    Win10-specific Welcome page.
  </summary>
</histogram>

<histogram name="Welcome.Win10.NewPromoPageAdded" enum="BooleanShown">
  <owner>pmonette@chromium.org</owner>
  <owner>tmartino@chromium.org</owner>
  <summary>
    Emits a &quot;true&quot; sample when the revamped WebUI-based welcome page
    is added to the startup tabs list. This means that barring an error on
    startup, it was shown to the user. This histogram can only be recorded
    during first-run flow, when the EnableWelcomeWin10 experiment is enabled.
  </summary>
</histogram>

<histogram name="Welcome.Win10.OriginalPromoPageAdded" enum="BooleanShown">
  <owner>pmonette@chromium.org</owner>
  <owner>tmartino@chromium.org</owner>
  <summary>
    Emits a &quot;true&quot; sample when the old external welcome page is added
    to the startup tabs list. This means that barring an error on startup, it
    was shown to the user. This histogram can only be recorded during first-run
    flow, when the EnableWelcomeWin10 experiment is disabled.
  </summary>
</histogram>

<histogram name="Welcome.Win10.PinCheckTimedOut" enum="BooleanTimedOut">
  <owner>pmonette@chromium.org</owner>
  <owner>tmartino@chromium.org</owner>
  <summary>
    Records whether or not the check that verifies if Chrome is pinned to the
    taskbar has timed out. This check is done when the welcome page is opened in
    order to determine which instructions to display to the user.
  </summary>
</histogram>

<histogram name="Welcome.Win10.PinnedPromptResult" enum="BooleanPinned">
  <owner>tmartino@chromium.org</owner>
  <summary>
    Records whether or not Chrome was pinned to the taskbar when the user left
    the Win10-specific Welcome page.
  </summary>
</histogram>

<histogram name="WheelScrolling.WasLatched" enum="BooleanLatched">
  <owner>sahel@chromium.org</owner>
  <summary>
    Records whether or not a GSU event with wheel source is latched to the
    current scrolling element. It is false for the first GSU event of every
    scrolling sequence and true for the rest of the GSU events.
  </summary>
</histogram>

<histogram name="Win8.PageLoad" enum="Win8PageLoadType">
  <owner>zturner@chromium.org</owner>
  <summary>
    Count of page loads in each of the 2 different environments (metro/desktop)
    on Windows 8.
  </summary>
</histogram>

<histogram name="WindowManager.AppWindowCountPerLoad">
  <owner>kuscher@chromium.org</owner>
  <summary>
    The number of app windows open when a load completes. This includes windows
    opened by an app shortcut, or apps opened in a popup. This only counts v1
    apps.
  </summary>
</histogram>

<histogram name="WindowManager.PanelWindowCountPerLoad">
  <obsolete>
    Deprecated 4/2013. No longer tracked.
  </obsolete>
  <owner>kuscher@chromium.org</owner>
  <summary>
    The number of panel windows open when a load completes. Panels are windows
    docked to the bottom of the OS desktop, which are visible to the user even
    while the user is interacting with other applications.
  </summary>
</histogram>

<histogram name="WindowManager.PopUpWindowCountPerLoad">
  <owner>kuscher@chromium.org</owner>
  <summary>
    The number of popup windows open when a load completes. Popup windows only
    have one content area (no multiple tabs) and a stripped down toolbar
    consisting only of a read-only address bar.
  </summary>
</histogram>

<histogram name="WindowManager.TabbedWindowCountPerLoad">
  <owner>kuscher@chromium.org</owner>
  <summary>
    The number of tabbed windows open when a load completes. A tabbed window is
    a normal browser window which can have one or more tabs.
  </summary>
</histogram>

<histogram name="Windows.ComputeNativeWindowOcclusionTime" units="microseconds">
  <owner>fdoray@chromium.org</owner>
  <summary>
    The amount of CPU time a call to ComputeNativeWindowOcclusionStatus() takes.
  </summary>
</histogram>

<histogram name="Windows.CreateThreadTime" units="ms">
  <owner>stanisc@chromium.org</owner>
  <summary>
    Time spent inside CreateThread() Windows API call creating a single thread.
  </summary>
</histogram>

<histogram base="true" name="Windows.FilesystemError" enum="WinGetLastError">
  <owner>grt@chromium.org</owner>
  <summary>
    The Windows error code relating to a failed attempt to operate on a file or
    a directory.
  </summary>
</histogram>

<histogram name="Windows.GetVersionExVersion" enum="WindowsVersion">
  <owner>scottmg@chromium.org</owner>
  <summary>
    The Windows version (base::win::Version) as reported by GetVersionEx(). This
    is queried shortly after startup.
  </summary>
</histogram>

<histogram name="Windows.HasHighResolutionTimeTicks" enum="Boolean">
  <owner>gab@chromium.org</owner>
  <summary>
    The value of TimeTicks::IsHighResolution(). Reported once per browser
    session, on startup.
  </summary>
</histogram>

<histogram name="Windows.HighResolutionTimerUsage" units="%">
  <owner>stanisc@chromium.org</owner>
  <summary>
    Percentage of elapsed time the high resolution timer is activated. The usage
    is reported by each of Chrome processes individually (without aggregation)
    and logged every 10 minutes.
  </summary>
</histogram>

<histogram name="Windows.InCompatibilityMode" enum="BooleanCompatibilityMode">
  <owner>scottmg@chromium.org</owner>
  <summary>
    A boolean used to indicate when the Windows version reported by
    GetVersionEx() and the Windows version reported by VerQueryValue() on
    kernel32 do not match. This is queried shortly after startup.
  </summary>
</histogram>

<histogram name="Windows.IsPinnedToTaskbar" enum="IsPinnedToTaskbarResult">
  <owner>pmonette@chromium.org</owner>
  <summary>
    Indicates whether Chrome is pinned to the Windows taskbar for the current
    user. Recorded shortly after startup.
  </summary>
</histogram>

<histogram name="Windows.IsPinnedToTaskbar.ProcessError" enum="BooleanError">
  <owner>pmonette@chromium.org</owner>
  <summary>
    Indicates whether a connection error occured between the browser and the
    shell handler process. This is usually caused by a crash in the utility
    process. This is logged every time the pinned state is queried.
  </summary>
</histogram>

<histogram name="Windows.Kernel32Version" enum="WindowsVersion">
  <owner>scottmg@chromium.org</owner>
  <summary>
    The Windows version (base::win::Version) as reported by VeryQueryValue() on
    kernel32.dll. This is queried shortly after startup.
  </summary>
</histogram>

<histogram name="Windows.NativeWindowVisibility" units="windows">
  <owner>fdoray@chromium.org</owner>
  <summary>
    The number of Chrome browser windows in a given visibility state. This is
    computed using ComputeNativeWindowOcclusionStatus() and is recorded every 10
    minutes.
  </summary>
</histogram>

<histogram name="Windows.ParentProcessNameHash" enum="ProcessNameHash">
  <owner>wfh@chromium.org</owner>
  <summary>
    The 32-bit hash of the lower-case parent process basename (e.g.
    explorer.exe) of the main Chrome executable. Reported once during startup as
    part of install verification.
  </summary>
</histogram>

<histogram base="true" name="Windows.PostOperationState"
    enum="PostOperationState">
  <owner>grt@chromium.org</owner>
  <summary>
    The state of an item in the filesystem following an operation on it.
  </summary>
</histogram>

<histogram name="Windows.Tablet" enum="BooleanTablet">
  <owner>zturner@chromium.org</owner>
  <summary>Count of browser launches from a Windows tablet pc.</summary>
</histogram>

<histogram name="Windows.Win32kRendererLockdown" enum="BooleanEnabled">
  <obsolete>
    Deprecated 10/2016 as this is enabled by default so provides no useful data.
  </obsolete>
  <owner>wfh@chromium.org</owner>
  <summary>
    Count of browser launches where Win32k renderer lockdown is enabled.
  </summary>
</histogram>

<histogram name="WinJumplist.Action" enum="WinJumplistCategory">
  <owner>noms@chromium.org</owner>
  <summary>The type of category clicked in the Windows Jumplist</summary>
</histogram>

<histogram name="WinJumplist.CreateIconFilesCount">
  <obsolete>
    Obsolete 07/06/2017 as we are no long recording this metric.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>
    The number of jumplist icons requested to create per jumplist update. It is
    recorded whenever UpdateJumpList() is called.
  </summary>
</histogram>

<histogram name="WinJumplist.CreateIconFilesDuration" units="ms">
  <obsolete>
    Obsolete 07/06/2017 as we are no long recording this metric.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>
    Time spent in CreateIconFiles(). This method is called whenever there is a
    jumplist update and the JumpListIcons folder is empty.
  </summary>
</histogram>

<histogram name="WinJumplist.DeleteDirectoryContentDuration" units="ms">
  <obsolete>
    Obsolete 07/06/2016 as we are no long recording this metric.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>Time spent in DeleteDirectoryContentAndLogRuntime().</summary>
</histogram>

<histogram name="WinJumplist.DeleteDirectoryDuration" units="ms">
  <obsolete>
    Obsolete 04/25/2017 as we are no long recording this metric.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>Time spent in DeleteDirectoryAndLogResults().</summary>
</histogram>

<histogram name="WinJumplist.DeleteStatusJumpListIcons"
    enum="JumplisticonsDeleteCategory">
  <obsolete>
    Obsolete 04/25/2017 as we are no long recording this metric.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>
    This metric records the detailed delete result of JumpListIcons directory.
  </summary>
</histogram>

<histogram name="WinJumplist.DeleteStatusJumpListIconsOld"
    enum="JumplisticonsDeleteCategory">
  <obsolete>
    Obsolete 04/25/2017 as we are no long recording this metric.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>
    This metric records the detailed delete result of JumpListIconsOld
    directory.
  </summary>
</histogram>

<histogram name="WinJumplist.DetailedFolderMoveResults"
    enum="JumplistIconsDetailedFolderMoveCategory">
  <obsolete>
    Obsolete 12/13/2016 as we are no long recording this metric.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>
    This metric is recorded when folder JumpListIcons is moved (can be rename or
    copy and delete) to JumpListIconsOld. This happens when tabs are closed,
    mostly visited URLs get updated, etc. There are several key steps in this
    folder move operation. Before the move operation, there is another step that
    JumpListIconsOld folder is deleted. The status of these steps are put
    together and recorded in this metric. The failure of any of these steps is
    suspected to be related to a known issue.
  </summary>
</histogram>

<histogram name="WinJumplist.DetailedFolderResults"
    enum="JumplistIconsDetailedFolderOperationCategory">
  <obsolete>
    Obsolete 03/10/2017 as it is replaced by DetailedFolderResultsDeleteUpdated.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>
    This metric is recorded when folders JumpListIcons and JumpListIconsOld get
    updated. These two folders are updated when tabs are closed, mostly visited
    URLs get updated, etc. These two folders are updated as follows 1)
    JumpListIconsOld with its content get deleted; 2) if step 1 succeeds,
    JumpListIcons is moved, 3) if any of the previous steps fails, JumpListIcons
    is deleted, 4) A new JumpListIcons folder is created. The status of these 4
    file operations are put together and recorded in this metric. The failure of
    any of these file operations is suspected to be related to a known issue.
  </summary>
</histogram>

<histogram name="WinJumplist.DetailedFolderResultsDeleteUpdated"
    enum="JumplistIconsDetailedFolderOperationDeleteUpdatedCategory">
  <obsolete>
    Obsolete 03/20/2017. New metrics named WinJumplist.DeleteStatusJumpListIcons
    and WinJumplist.DeleteStatusJumpListIconsOld are used instead.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>
    This metric is recorded when folders JumpListIcons and JumpListIconsOld get
    updated. These two folders are updated when tabs are closed, mostly visited
    URLs get updated, etc. These two folders are updated as follows 1)
    JumpListIconsOld with its content get deleted; 2) if step 1 succeeds,
    JumpListIcons is renamed to JumpListIconsOld, 3) if any of the previous
    steps fails, JumpListIcons is deleted, 4) A new JumpListIcons folder is
    created if deletion of JumpListIcons' content succeeds (only fail to delete
    the directory is okay). The status of these 4 file operations are put
    together and recorded in this metric. The failure of any of these file
    operations is suspected to be related to a known issue.
  </summary>
</histogram>

<histogram name="WinJumplist.DirectoryStatusJumpListIcons"
    enum="JumpListIconsFolderExistOrEmptyCategory">
  <obsolete>
    Obsolete 04/25/2017 as we are no long recording this metric.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>
        This metric records whether the folder JumpListIcons exists; and if it
    does, whether it is empty or non-empty.
  </summary>
</histogram>

<histogram name="WinJumplist.DirectoryStatusJumpListIconsOld"
    enum="JumpListIconsFolderExistOrEmptyCategory">
  <obsolete>
    Obsolete 04/25/2017 as we are no long recording this metric.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>
        This metric records whether the folder JumpListIconsOld exists; and if
    it does, whether it is empty or non-empty.
  </summary>
</histogram>

<histogram name="WinJumplist.FolderMoveResults"
    enum="JumplistIconsFolderMoveCategory">
  <obsolete>
    Obsolete 12/08/2016. DetailedFolderMoveResults is used for more detailed
    analysis.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>
    This metric is recorded when folder JumpListIcons is moved (can be rename or
    copy and delete) to JumpListIconsOld. This happens when tabs are closed,
    mostly visited URLs get updated, etc. There are 3 possible steps in this
    folder move operation. Before the move operation, there is another step that
    JumpListIconsOld folder is deleted. The status of these steps are put
    together and recorded in this metric. The failure of any of these steps is
    suspected to be related to a known issue listed below.
    https://bugs.chromium.org/p/chromium/issues/detail?id=179576
  </summary>
</histogram>

<histogram name="WinJumplist.FolderResults" enum="JumplisticonsfolderCategory">
  <obsolete>
    Obsolete 12/13/2016, as we are now recording DetailedFolderResults.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>
    This metric is recorded when folders JumpListIcons and JumpListIconsOld get
    updated. These two folders are updated when tabs are closed, mostly visited
    URLs get updated, etc. These two folders are updated as follows 1)
    JumpListIconsOld with its content get deleted; 2) JumpListIcons is moved, 3)
    A new JumpListIcons folder is created. The status of these three file
    operations are put together and recorded in this metric. The failure of any
    of these file operations is suspected to be related to a known issue.
  </summary>
</histogram>

<histogram name="WinJumplist.NotificationTimeInterval" units="ms">
  <obsolete>
    Obsolete 07/10/2017 as it's no longer needed.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>
    The time interval between two adjacent update notifications if it's less
    than 3500 ms.
  </summary>
</histogram>

<histogram name="WinJumplist.NotificationTimeInterval2" units="ms">
  <obsolete>
    Obsolete 07/23/2017 as it's no longer needed.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>
    The time interval between two adjacent update notifications. A zero value
    indicates the interval is greater than 3500 ms.
  </summary>
</histogram>

<histogram name="WinJumplist.OnFaviconDataAvailableDuration" units="ms">
  <obsolete>
    Obsolete 06/22/2017 as it's no longer needed.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>Time spent in OnFaviconDataAvailable().</summary>
</histogram>

<histogram name="WinJumplist.RatioAddCategoryTime" units="scaled ratio">
  <obsolete>
    Obsolete 07/23/2017 as it's no longer needed.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>
    The ratio of the duration spent adding the most-visited category compared to
    the duration spent adding the recently-closed category, multiplied by 10.
  </summary>
</histogram>

<histogram name="WinJumplist.StartLoadingFaviconDuration" units="ms">
  <obsolete>
    Obsolete 06/22/2017 as it's no longer needed.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>Time spent in StartLoadingFavicon().</summary>
</histogram>

<histogram name="WinJumplist.UpdateJumpListDuration" units="ms">
  <obsolete>
    Obsolete 04/20/2017 as it's no longer accurate due to the code change.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>
    Time spent in UpdateJumpList(). This method is called whenever there is a
    jumplist update.
  </summary>
</histogram>

<histogram name="WinJumplistUpdater.AddCustomCategoryDuration" units="ms">
  <obsolete>
    Obsolete 07/26/2017 as it's no longer needed.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>Time spent in JumpListUpdater::AddCustomCategory.</summary>
</histogram>

<histogram name="WinJumplistUpdater.AddTasksDuration" units="ms">
  <obsolete>
    Obsolete 07/10/2017 as it's no longer needed.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>Time spent in JumpListUpdater::AddTasks.</summary>
</histogram>

<histogram name="WinJumplistUpdater.BeginUpdateDuration" units="ms">
  <obsolete>
    Obsolete 07/26/2017 as it's no longer needed.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>Time spent in JumpListUpdater::BeginUpdate.</summary>
</histogram>

<histogram name="WinJumplistUpdater.CommitUpdateDuration" units="ms">
  <obsolete>
    Obsolete 07/26/2017 as it's no longer needed.
  </obsolete>
  <owner>chengx@chromium.org</owner>
  <summary>Time spent in JumpListUpdater::CommitUpdate.</summary>
</histogram>

<histogram name="WinTimeTicks.FailedToChangeCores" enum="WindowsVersion">
  <obsolete>
    Removed 01/2017.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Incremented each time the TimeTicks field trial runs on a machine with
    multiple cores, but failed to change thread affinity. Broken down by Windows
    version.
  </summary>
</histogram>

<histogram name="WinTimeTicks.MinResolutionNanoseconds" units="nanoseconds">
  <obsolete>
    Removed 01/2017.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The smallest non-zero delta reported by subsequent calls to
    QueryPerformanceCounter.
  </summary>
</histogram>

<histogram name="WinTimeTicks.NonStopTsc">
  <obsolete>
    Removed 01/2017.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    True if the CPU's timestamp counter ticks at a constant rate regardless of
    CPU frequency.
  </summary>
</histogram>

<histogram name="WinTimeTicks.TickedBackwards" enum="WindowsVersion">
  <obsolete>
    Removed 01/2017.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of times the TimeTicks field trial failed because
    QueryPerformanceCounter ticked backwards. Broken down by Windows version.
  </summary>
</histogram>

<histogram name="WinTimeTicks.VersionSuccessful" enum="WindowsVersion">
  <obsolete>
    Removed 01/2017.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of times the TimeTicks field trial succeeded. Broken down by
    Windows version.
  </summary>
</histogram>

<histogram name="WinTimeTicks.VersionTotal" enum="WindowsVersion">
  <obsolete>
    Removed 01/2017.
  </obsolete>
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    The number of times the TimeTicks field trial ran for comparison with
    WinTimeTicks.VersionSuccess. Broken down by Windows version.
  </summary>
</histogram>

<histogram name="WorkerScheduler.WorkerThreadLoad" units="%">
  <owner>kinuko@chromium.org</owner>
  <summary>
    Worker thread load, i.e. percentage of time spent on running tasks. This
    metric is emitted at most once per kWorkerThreadLoadTrackerReportingInterval
    sec per worker thread amortized. E.g. if a worker ran a single task for X
    seconds and then went to idle for Y seconds before it shuts down, and
    assuming the interval rate was 1 sec, we get X samples for 100% and Y
    samples for 0%.
  </summary>
</histogram>

<histogram name="WorkerThread.DebuggerTask.Time" units="ms">
  <obsolete>
    Deprecated on 2018-02.
  </obsolete>
  <owner>nhiroki@chromium.org</owner>
  <summary>The time taken for running a debugger task on WorkerThread.</summary>
</histogram>

<histogram name="WorkerThread.ExitCode" enum="WorkerThreadExitCode">
  <owner>nhiroki@chromium.org</owner>
  <summary>Records the exit code of WorkerThread.</summary>
</histogram>

<histogram name="WorkerThread.Runtime" units="ms">
  <owner>kinuko@chromium.org</owner>
  <summary>
    The amount of time a worker thread ran for. Starts recording when a worker
    scheduler for the thread is created, and stops when the scheduler is shut
    down.
  </summary>
</histogram>

<histogram name="WorkerThread.Task.Time" units="ms">
  <obsolete>
    Deprecated on 2018-02. The sample count was overflowing. crbug.com/809672.
  </obsolete>
  <owner>nhiroki@chromium.org</owner>
  <summary>The time taken for running a worker task on WorkerThread.</summary>
</histogram>

<histogram name="WrenchMenu.MenuAction" enum="WrenchMenuAction">
  <owner>ainslie@chromium.org</owner>
  <owner>edwardjung@chromium.org</owner>
  <summary>Number of times that each menu item is clicked.</summary>
</histogram>

<histogram name="WrenchMenu.OpeningAnimationFrameTimes" units="ms">
  <owner>kkimlabs@chromium.org</owner>
  <summary>
    Frame times of the Android wrench menu opening animation. For example, if
    the menu opening animation runs exactly at 60fps for a second, then each
    frame time is 16ms, and a total of 60 values of 16ms are recorded. If the
    animation is janky, we will see values greater than 16ms in the histogram.
  </summary>
</histogram>

<histogram name="WrenchMenu.RecentTabsSubMenu" enum="RecentTabsAction">
  <owner>rpop@chromium.org</owner>
  <summary>
    The number of times each tab or window restore option in the Recent Tabs
    submenu is clicked.
  </summary>
</histogram>

<histogram name="WrenchMenu.TimeToAction">
  <owner>ainslie@chromium.org</owner>
  <owner>edwardjung@chromium.org</owner>
  <summary>
    The time a user takes to select a menu item after opening the menu.
  </summary>
</histogram>

<histogram name="WrenchMenu.TouchDuration" units="ms">
  <owner>kkimlabs@chromium.org</owner>
  <summary>
    Time difference between touch down and touch up on Android wrench button.
  </summary>
</histogram>

<histogram name="XHR.Async.PageDismissal" enum="XHRPageDismissalState">
  <owner>panicker@chromium.org</owner>
  <summary>
    Records occurence of async XHR during page dismissal state (unload,
    beforeunload, pagehide etc).
  </summary>
</histogram>

<histogram name="XHR.Sync.PageDismissal" enum="XHRPageDismissalState">
  <owner>panicker@chromium.org</owner>
  <summary>
    Records occurence of sync XHR during page dismissal state (unload,
    beforeunload, pagehide etc).
  </summary>
</histogram>

<histogram name="XR.RuntimeAvailable" enum="XRRuntimeAvailable">
  <owner>billorr@chromium.org</owner>
  <summary>
    Indicates which VR APIs are installed. Recorded shortly after startup.
  </summary>
</histogram>

<histogram name="XR.VRSession.StartAction" enum="VRSessionStartAction">
  <owner>offenwanger@chromium.org</owner>
  <summary>
    The action that triggered the transition into Chrome in VR, either from 2D
    or another VR app.
  </summary>
</histogram>

<histogram name="XR.WebXR.PresentationSession" enum="VRPresentationStartAction">
  <owner>offenwanger@chromium.org</owner>
  <summary>
    The action that triggered VR presentation, which is the display of web
    content on a VR device.
  </summary>
</histogram>

<histogram name="XR.WebXR.RenderPath.Used" enum="XRRenderPath">
  <owner>klausw@chromium.org</owner>
  <summary>
    Records the WebXR/WebVR render path used for presentation on presentation
    start. The render path is affected by overrides and device capabilities.
  </summary>
</histogram>

<histogram name="ZeroSuggest.AllResults">
  <owner>hfung@chromium.org</owner>
  <summary>
    The number of results (either query or URL) from ZeroSuggest. This is set
    every time a successful response from ZeroSuggest is recieved, which can be
    every time the user focuses on the omnibox.
  </summary>
</histogram>

<histogram name="ZeroSuggest.QueryResults">
  <owner>hfung@chromium.org</owner>
  <summary>
    The number of query results returned from ZeroSuggest. This is set every
    time a successful response from ZeroSuggest is recieved, which can be every
    time the user focuses on the omnibox.
  </summary>
</histogram>

<histogram name="ZeroSuggest.URLResults">
  <owner>hfung@chromium.org</owner>
  <summary>
    The number of URL results returned from ZeroSuggest. This is set every time
    a successful response from ZeroSuggest is recieved, which can be every time
    the user focuses on the omnibox.
  </summary>
</histogram>

</histograms>

<!-- Histogram suffixes list -->

<histogram_suffixes_list>

<histogram_suffixes name="AccessorySheetType" separator=".">
  <suffix name="Passwords" label="Password suggestions and generation."/>
  <affected-histogram name="KeyboardAccessory.AccessorySheetSuggestionCount"/>
  <affected-histogram
      name="KeyboardAccessory.AccessorySheetSuggestionsSelected"/>
  <affected-histogram name="KeyboardAccessory.AccessorySheetTriggered"/>
</histogram_suffixes>

<histogram_suffixes name="AccountInvestigationReportingType" separator="_">
  <suffix name="OnChange"
      label="Driven from a change in signin status or change in content area
             GAIA accounts."/>
  <suffix name="Periodic" label="Emitted once per 24 hours."/>
  <affected-histogram name="Signin.CookieJar.ChromeAccountRelation"/>
  <affected-histogram name="Signin.CookieJar.SignedInCount"/>
  <affected-histogram name="Signin.CookieJar.SignedOutCount"/>
  <affected-histogram name="Signin.CookieJar.StableAge"/>
  <affected-histogram name="Signin.CookieJar.TotalCount"/>
  <affected-histogram name="Signin.IsShared"/>
</histogram_suffixes>

<histogram_suffixes name="ActiveNetworkState" separator="_">
  <suffix name="Offline"
      label="network manager thinks that the active network is offline"/>
  <suffix name="Online"
      label="network manager thinks that the active network is online"/>
  <suffix name="RestrictedPool"
      label="network manager thinks that the active network is behind portal"/>
  <affected-histogram name="CaptivePortal.OOBE.DiscrepancyWithShill"/>
  <affected-histogram name="CaptivePortal.Session.DiscrepancyWithShill"/>
</histogram_suffixes>

<histogram_suffixes name="ActivityType" separator=".">
  <suffix name="CustomTabs" label="CustomTabs"/>
  <suffix name="TabbedMode" label="TabbedMode"/>
  <suffix name="WebApk" label="WebApk"/>
  <suffix name="WebApp" label="WebApp"/>
  <affected-histogram name="MobileStartup.IntentToCreationTime"/>
</histogram_suffixes>

<histogram_suffixes name="ActivityType" separator=".">
  <suffix name="Tabbed"
      label="Chrome starts up with intent to ChromeTabbedActivity"/>
  <suffix name="WebApk" label="Chrome starts up with intent to WebApkActivity"/>
  <affected-histogram name="Startup.Android.Cold.TimeToFirstContentfulPaint"/>
  <affected-histogram name="Startup.Android.Cold.TimeToFirstNavigationCommit"/>
</histogram_suffixes>

<histogram_suffixes name="AdsPageLoadMetrics" separator="." ordering="prefix">
  <suffix name="Clients.Ads.All" label="Includes all discovered ads."/>
  <suffix name="Clients.Ads.Google" label="Includes only Google ads."/>
  <suffix name="Clients.Ads.SubresourceFilter"
      label="Includes only ads discovered by the SubResourceFilter."/>
  <affected-histogram name="PageLoad.Bytes.AdFrames.Aggregate.Network"/>
  <affected-histogram name="PageLoad.Bytes.AdFrames.Aggregate.PercentNetwork"/>
  <affected-histogram name="PageLoad.Bytes.AdFrames.Aggregate.Total"/>
  <affected-histogram name="PageLoad.Bytes.AdFrames.PerFrame.Network"/>
  <affected-histogram name="PageLoad.Bytes.AdFrames.PerFrame.PercentNetwork"/>
  <affected-histogram name="PageLoad.Bytes.AdFrames.PerFrame.Total"/>
  <affected-histogram name="PageLoad.Bytes.FullPage.Network"/>
  <affected-histogram name="PageLoad.Bytes.FullPage.Network.PercentAds"/>
  <affected-histogram name="PageLoad.Bytes.FullPage.Total"/>
  <affected-histogram name="PageLoad.Bytes.FullPage.Total.PercentAds"/>
  <affected-histogram name="PageLoad.Bytes.NonAdFrames.Aggregate.Total"/>
  <affected-histogram
      name="PageLoad.FrameCounts.AdFrames.PerFrame.CrossOrigin"/>
  <affected-histogram
      name="PageLoad.FrameCounts.AdFrames.PerFrame.OriginStatus"/>
  <affected-histogram name="PageLoad.FrameCounts.AnyParentFrame.AdFrames"/>
</histogram_suffixes>

<histogram_suffixes name="AffiliationDummyData" separator=".">
  <suffix name="OnStartup"
      label="with the dummy data being requested shortly after start-up"/>
  <suffix name="Periodic"
      label="with the dummy data being requested periodically later"/>
  <affected-histogram
      name="PasswordManager.AffiliationDummyData.RequestResultCount"/>
  <affected-histogram
      name="PasswordManager.AffiliationDummyData.RequestSuccess"/>
</histogram_suffixes>

<histogram_suffixes name="AlternateProtocol" separator="_">
  <suffix name="AlternateProtocol_http"
      label="(with alternate protocol available and spdy is used"/>
  <suffix name="AlternateProtocol_spdy"
      label="with alternate protocol available but http is used"/>
  <affected-histogram name="PLT.StartToCommit_LinkLoadNormal"/>
  <affected-histogram name="PLT.StartToCommit_NormalLoad"/>
  <affected-histogram name="PLT.StartToFinish_LinkLoadNormal"/>
  <affected-histogram name="PLT.StartToFinish_NormalLoad"/>
</histogram_suffixes>

<histogram_suffixes name="AndroidBootProgressEvents" separator="_">
  <suffix name="ams_ready" label="For the boot_progress_ams_ready event."/>
  <suffix name="enable_screen"
      label="For the boot_progress_enable_screen event."/>
  <suffix name="pms_data_scan_start"
      label="For the boot_progress_pms_data_scan_start event."/>
  <suffix name="pms_ready" label="For the boot_progress_pms_ready event."/>
  <suffix name="pms_scan_end"
      label="For the boot_progress_pms_scan_end event."/>
  <suffix name="pms_start" label="For the boot_progress_pms_start event."/>
  <suffix name="pms_system_scan_start"
      label="For the boot_progress_pms_system_scan_start event."/>
  <suffix name="preload_end" label="For the boot_progress_preload_end event."/>
  <suffix name="preload_start"
      label="For the boot_progress_preload_start event."/>
  <suffix name="start" label="For the boot_progress_start event."/>
  <suffix name="system_run" label="For the boot_progress_system_run event."/>
  <affected-histogram name="Arc.boot_progress"/>
</histogram_suffixes>

<histogram_suffixes name="AndroidBootTypes" separator=".">
  <suffix name="FirstBoot" label="For the very first boot, aka opt-in."/>
  <suffix name="FirstBootAfterUpdate"
      label="For the first boot after Chrome OS update."/>
  <suffix name="RegularBoot" label="For a regular boot."/>
  <affected-histogram name="Arc.AndroidBootTime"/>
  <affected-histogram name="Arc.boot_progress_ams_ready"/>
  <affected-histogram name="Arc.boot_progress_enable_screen"/>
  <affected-histogram name="Arc.boot_progress_pms_data_scan_start"/>
  <affected-histogram name="Arc.boot_progress_pms_ready"/>
  <affected-histogram name="Arc.boot_progress_pms_scan_end"/>
  <affected-histogram name="Arc.boot_progress_pms_start"/>
  <affected-histogram name="Arc.boot_progress_pms_system_scan_start"/>
  <affected-histogram name="Arc.boot_progress_preload_end"/>
  <affected-histogram name="Arc.boot_progress_preload_start"/>
  <affected-histogram name="Arc.boot_progress_start"/>
  <affected-histogram name="Arc.boot_progress_system_run"/>
</histogram_suffixes>

<histogram_suffixes name="AndroidCrashUploadTypes" separator="_">
  <suffix name="Browser" label="Measures browser crash uploads."/>
  <suffix name="GPU" label="Measures GPU crash uploads."/>
  <suffix name="Other" label="Measures other crash uploads."/>
  <suffix name="Renderer" label="Measures renderer crash uploads."/>
  <affected-histogram name="Tab.AndroidCrashUpload"/>
</histogram_suffixes>

<histogram_suffixes name="AndroidDownloadTypes" separator=".">
  <suffix name="Audio"/>
  <suffix name="Document"/>
  <suffix name="Image"/>
  <suffix name="OfflinePage"/>
  <suffix name="Other"/>
  <suffix name="Total"/>
  <suffix name="Video"/>
  <affected-histogram name="Android.DownloadManager.InitialCount"/>
  <affected-histogram name="Android.DownloadManager.InitialCount.Viewed"/>
</histogram_suffixes>

<histogram_suffixes name="AndroidGATTEvents" separator=".">
  <suffix name="onCharacteristicRead.Status"/>
  <suffix name="onCharacteristicWrite.Status"/>
  <suffix name="onConnectionStateChange.Status.Connected"
      label="While Connected"/>
  <suffix name="onConnectionStateChange.Status.Disconnected"
      label="While Disonnected"/>
  <suffix name="onConnectionStateChange.Status.InvalidState"
      label="While InvalidState"/>
  <suffix name="onDescriptorRead.Status"/>
  <suffix name="onDescriptorWrite.Status"/>
  <suffix name="onServicesDiscovered.Status.Connected" label="While Connected"/>
  <suffix name="onServicesDiscovered.Status.Disconnected"
      label="While Disconnected"/>
  <affected-histogram name="Bluetooth.Web.Android"/>
</histogram_suffixes>

<histogram_suffixes name="AndroidGetAccountsTypes" separator="_">
  <suffix name="AccountManager" label="Using Android AccountManager API"/>
  <suffix name="GoogleAuthUtil" label="Using GoogleAuthUtil API"/>
  <affected-histogram name="Signin.AndroidGetAccountsTime"/>
  <affected-histogram name="Signin.AndroidGetAccountsTimeUiThread"/>
</histogram_suffixes>

<histogram_suffixes name="AndroidProcessType" separator=".">
  <suffix name="Browser" label="Browser process"/>
  <suffix name="ChildService"
      label="Child service process (renderer, GPU, etc.)"/>
  <affected-histogram name="Android.MemoryPressureNotification"/>
</histogram_suffixes>

<histogram_suffixes name="AndroidTabPersistentStoreTime" separator=".">
  <suffix name="CleanupAllEncryptedTime">
    <obsolete>
      Original code deleted in a refactoring.
    </obsolete>
  </suffix>
  <suffix name="LoadStateInternalPrefetchTime"/>
  <suffix name="LoadStateInternalTime"/>
  <suffix name="LoadStateTime"/>
  <suffix name="MergeStateInternalFetchTime"/>
  <suffix name="MergeStateInternalTime"/>
  <suffix name="ReadMergedStateTime"/>
  <suffix name="ReadSavedStateTime"/>
  <suffix name="RestoreTabPrefetchTime"/>
  <suffix name="RestoreTabTime"/>
  <suffix name="SaveListTime"/>
  <suffix name="SaveStateTime"/>
  <suffix name="SaveTabsTime"/>
  <affected-histogram name="Android.StrictMode.TabPersistentStore"/>
</histogram_suffixes>

<histogram_suffixes name="AppListFirstPaintWarmStartFast" separator="">
  <obsolete>
    Deprecated 03/2018 with Mash AppList refactoring.
  </obsolete>
  <suffix name="" label="Normal start."/>
  <suffix name="Fast"
      label="Fast start by skipping normal chrome.dll startup."/>
  <affected-histogram name="Startup.AppListFirstPaintWarmStart"/>
</histogram_suffixes>

<histogram_suffixes name="AppListFolderExperiment" separator=".">
  <suffix name="FullscreenAppListDisabled" label="Peeking Launcher Disabled"/>
  <suffix name="FullscreenAppListEnabled" label="Peeking Launcher Enabled"/>
  <affected-histogram name="Apps.AppsInFolders"/>
</histogram_suffixes>

<histogram_suffixes name="AppUIComponent" separator=".">
  <suffix name="AppGrid" label="App - Fullscreen Launcher"/>
  <suffix name="Desktop" label="Desktop"/>
  <suffix name="SearchResult" label="Launcher App Search Result"/>
  <suffix name="Shelf" label="Shelf"/>
  <suffix name="ShelfButton" label="ShelfButton"/>
  <suffix name="SuggestedAppFullscreen"
      label="Suggested App, Fullscreen Launcher"/>
  <suffix name="SuggestedAppPeeking" label="Suggested App, Peeking Launcher"/>
  <affected-histogram name="Apps.ContextMenuShowSource"/>
  <affected-histogram name="Apps.ContextMenuUserJourneyTime"/>
</histogram_suffixes>

<histogram_suffixes name="ArcUserTypes" separator=".">
  <suffix name="ActiveDirectory" label="User with active directory account"/>
  <suffix name="Child" label="User with child accounts."/>
  <suffix name="DemoMode" label="Demo devices with a demo mode robot account."/>
  <suffix name="Managed" label="User with forced Play Store feature"/>
  <suffix name="OfflineDemoMode" label="Offline enrolled demo mode devices."/>
  <suffix name="RobotAccount"
      label="Managed devices with a robot account (Public Session or Kiosk)"/>
  <suffix name="Unmanaged" label="User with optional Play Store feature"/>
  <affected-histogram name="Arc.PlayStoreShown.TimeDelta"/>
  <affected-histogram name="Arc.Provisioning.Result"/>
  <affected-histogram name="Arc.Provisioning.TimeDelta.Failure"/>
  <affected-histogram name="Arc.Provisioning.TimeDelta.Success"/>
  <affected-histogram name="Arc.Reauthorization.Result"/>
  <affected-histogram name="Arc.StateByUserType"/>
</histogram_suffixes>

<histogram_suffixes name="AsyncDNSPref" separator="_">
  <suffix name="Disabled"/>
  <suffix name="Enabled"/>
  <affected-histogram name="AsyncDNS.PrefDefaultSource"/>
  <affected-histogram name="AsyncDNS.PrefSource"/>
</histogram_suffixes>

<histogram_suffixes name="AsyncSlowStart" separator="_">
  <suffix name="AsyncSlowStart" label="Async Slow Start on"/>
  <suffix name="AsyncSlowStart_off" label="Async Slow Start off"/>
  <suffix name="AsyncSlowStart_on" label="Async Slow Start on"/>
  <affected-histogram name="Net.Transaction_Connected_New"/>
  <affected-histogram name="Renderer4.StartToFinish"/>
</histogram_suffixes>

<histogram_suffixes name="AttemptResultCode" separator="_">
  <obsolete>
    Deprecated 2016/03. The async set-as-default experiments are finished.
  </obsolete>
  <suffix name="Abandoned"/>
  <suffix name="Failure"/>
  <suffix name="NoErrorsNotDefault"/>
  <suffix name="Retry"/>
  <suffix name="Success"/>
  <affected-histogram name="DefaultBrowser.AsyncSetAsDefault.Duration"/>
  <affected-histogram name="DefaultBrowser.SetDefaultAsyncDuration"/>
</histogram_suffixes>

<histogram_suffixes name="AudioLatency" separator=".">
  <suffix name="LatencyExactMs" label="Exact latency in milliseconds"/>
  <suffix name="LatencyInteractive" label="Interactive latency"/>
  <suffix name="LatencyPlayback" label="Playback latency"/>
  <suffix name="LatencyRtc" label="RTC latency"/>
  <affected-histogram name="Media.Audio.Render.BrowserCallbackRegularity"/>
</histogram_suffixes>

<histogram_suffixes name="AudioSystemInfoRequest" separator=".">
  <suffix name="GetAssociatedOutputDeviceID"
      label="SystemInfo::GetAssociatedOutputDeviceID()"/>
  <suffix name="GetInputDeviceDescriptions"
      label="SystemInfo::GetInputDeviceDescriptions()"/>
  <suffix name="GetInputDeviceInfo" label="SystemInfo::GetInputDeviceInfo()"/>
  <suffix name="GetInputStreamParameters"
      label="SystemInfo::GetInputStreamParameters()"/>
  <suffix name="GetOutputDeviceDescriptions"
      label="SystemInfo::GetOutputDeviceDescriptions()"/>
  <suffix name="GetOutputStreamParameters"
      label="SystemInfo::GetOutputStreamParameters()"/>
  <suffix name="HasInputDevices" label="SystemInfo::HasInputDevices()"/>
  <suffix name="HasOutputDevices" label="SystemInfo::HasOutputDevices()"/>
  <affected-histogram name="Media.AudioService.SystemInfoClient"/>
</histogram_suffixes>

<histogram_suffixes name="AutofillCreditCardInfoBarSaveType" separator=".">
  <suffix name="Local" label="Local credit card save"/>
  <suffix name="Server" label="Server/upload credit card save"/>
  <affected-histogram name="Autofill.CreditCardInfoBar"/>
</histogram_suffixes>

<histogram_suffixes name="AutofillCreditCardType" separator=".">
  <suffix name="Local" label="Local"/>
  <suffix name="Server" label="Server (Google Payments)"/>
  <affected-histogram name="Autofill.DaysSinceLastUse.StoredCreditCard"/>
  <affected-histogram name="Autofill.SaveCardWithFirstAndLastNameComplete"/>
  <affected-histogram name="Autofill.SaveCardWithFirstAndLastNameOffered"/>
  <affected-histogram name="Autofill.StoredCreditCardCount"/>
  <affected-histogram name="Autofill.StoredCreditCardDisusedCount"/>
</histogram_suffixes>

<histogram_suffixes name="AutofillDataAvailability" separator=".">
  <suffix name="WithBothServerAndLocalData"
      label="both server and local autofill data"/>
  <suffix name="WithNoData" label="no autofill data"/>
  <suffix name="WithOnlyLocalData" label="only local autofill data"/>
  <suffix name="WithOnlyServerData" label="only server autofill data"/>
  <affected-histogram name="Autofill.FormEvents.Address"/>
  <affected-histogram name="Autofill.FormEvents.CreditCard"/>
</histogram_suffixes>

<histogram_suffixes name="AutofillFieldPredictionSource" separator=".">
  <suffix name="Heuristic"
      label="Field type predictions using local heuristics."/>
  <suffix name="Overall"
      label="Field type prediction as seen by the user after combining the
             heuristic and crowd sourced predictions."/>
  <suffix name="Server"
      label="Field types based on crowd-sourced prediction fetched from the
             Autofill Server"/>
  <affected-histogram name="Autofill.FieldPrediction"/>
  <affected-histogram name="Autofill.FieldPredictionQuality.Aggregate"/>
  <affected-histogram name="Autofill.FieldPredictionQuality.ByFieldType"/>
</histogram_suffixes>

<histogram_suffixes name="AutofillFormType" separator=".">
  <suffix name="Address" label="Address form"/>
  <suffix name="CreditCard" label="Credit card form"/>
  <suffix name="Password" label="Password form"/>
  <suffix name="Unknown" label="Unknown form type"/>
  <affected-histogram
      name="Autofill.FillDuration.FromInteraction.WithAutofill"/>
  <affected-histogram
      name="Autofill.FillDuration.FromInteraction.WithoutAutofill"/>
  <affected-histogram name="Autofill.UserHappiness"/>
</histogram_suffixes>

<histogram_suffixes name="AutofillLocalCardMigrationBubbleShow" separator=".">
  <suffix name="FirstShow" label="First time bubble is shown"/>
  <suffix name="Reshows" label="Bubble was reopened after being closed"/>
  <affected-histogram name="Autofill.LocalCardMigrationBubbleOffer"/>
  <affected-histogram name="Autofill.LocalCardMigrationBubbleUserInteraction"/>
</histogram_suffixes>

<histogram_suffixes name="AutofillPayloadCompressionType" separator=".">
  <suffix name="Query" label="Query request compression"/>
  <suffix name="Upload" label="Upload request compression"/>
  <affected-histogram name="Autofill.PayloadCompressionRatio"/>
</histogram_suffixes>

<histogram_suffixes name="AutofillRealPanResultGroups" separator=".">
  <suffix name="Failure" label="Failure"/>
  <suffix name="NetworkError" label="Network errors"/>
  <suffix name="Success" label="Success"/>
  <affected-histogram name="Autofill.UnmaskPrompt.GetRealPanDuration"/>
  <affected-histogram name="Autofill.UnmaskPrompt.UnmaskingDuration"/>
</histogram_suffixes>

<histogram_suffixes name="AutofillSaveCreditCardPromptDestination"
    separator=".">
  <suffix name="Local" label="to local storage"/>
  <suffix name="Upload" label="to upload"/>
  <affected-histogram name="Autofill.SaveCreditCardPrompt"/>
</histogram_suffixes>

<histogram_suffixes name="AutofillSaveCreditCardPromptPreviousUserDecision"
    separator=".">
  <suffix name="NoPreviousDecision"
      label="User previous decision not on record"/>
  <suffix name="PreviouslyAccepted"
      label="User had previously accepted save credit card prompt"/>
  <suffix name="PreviouslyDenied"
      label="User had previously denied save credit card prompt"/>
  <affected-histogram name="Autofill.CreditCardInfoBar.Local"/>
  <affected-histogram name="Autofill.CreditCardInfoBar.Server"/>
  <affected-histogram name="Autofill.SaveCreditCardPrompt.Local.FirstShow"/>
  <affected-histogram name="Autofill.SaveCreditCardPrompt.Local.Reshows"/>
  <affected-histogram name="Autofill.SaveCreditCardPrompt.Upload.FirstShow"/>
  <affected-histogram name="Autofill.SaveCreditCardPrompt.Upload.Reshows"/>
</histogram_suffixes>

<histogram_suffixes name="AutofillSaveCreditCardPromptRequestingCardholderName"
    separator=".">
  <suffix name="RequestingCardholderName"
      label="Cardholder name was explicitly requested in prompt"/>
  <affected-histogram name="Autofill.SaveCreditCardPrompt.Upload.FirstShow"/>
  <affected-histogram name="Autofill.SaveCreditCardPrompt.Upload.Reshows"/>
</histogram_suffixes>

<histogram_suffixes name="AutofillSaveCreditCardPromptShow" separator=".">
  <suffix name="FirstShow"
      label="first time prompt is shown for a single credit card submit"/>
  <suffix name="Reshows" label="all shows after the first one, combined"/>
  <affected-histogram name="Autofill.SaveCreditCardPrompt.Local"/>
  <affected-histogram name="Autofill.SaveCreditCardPrompt.Upload"/>
</histogram_suffixes>

<histogram_suffixes name="AutofillServerExperiments" separator="_">
  <obsolete>
    Deprecated as of at least 2013. Current autofill experiments rely on Finch
    rather than a custom experimentation setup.
  </obsolete>
  <suffix name="ar1" label="Acceptance ratio: 1.0"/>
  <suffix name="ar2" label="Acceptance ratio: 2.0"/>
  <suffix name="ar4" label="Acceptance ratio: 4.0"/>
  <suffix name="ar04wr3fs4"
      label="Acceptance ratio: 0.4; winner lead ratio: 3.0; min form score: 4"/>
  <suffix name="ar05wlr15"
      label="Acceptance ratio: 0.5; winner lead ratio: 1.5"/>
  <suffix name="ar05wlr25"
      label="Acceptance ratio: 0.5; winner lead ratio: 2.5"/>
  <suffix name="ar05wr15fs5"
      label="Acceptance ratio: 0.5; winner lead ratio: 1.5; min form score: 5"/>
  <suffix name="ar06" label="Acceptance ratio: 0.6"/>
  <suffix name="fp05" label="Probability picker algorithm, p=0.5"/>
  <suffix name="fp05cc03"
      label="Probability picker algorithm, p=0.5; p_ccname=0.3"/>
  <suffix name="fp05cc03e1"
      label="Probability picker algorithm, p=0.5 for cc and company name
             fields; p_ccname_given_other_cc_fields=0.3; with fallback to the
             default algorithm;"/>
  <suffix name="fp05cco03"
      label="Probability picker algorithm, p=0.5;
             p_ccname_given_other_cc_fields=0.3"/>
  <suffix name="fp05cco03cstd"
      label="Probability picker algorithm, p=0.5;
             p_ccname_given_other_cc_fields=0.3; with fallback to the default
             algorithm"/>
  <suffix name="fp025" label="Probability picker algorithm, p=0.25"/>
  <suffix name="tbar1" label="Use only Toolbar upload data"/>
  <affected-histogram name="Autofill.Quality"/>
  <affected-histogram name="AutoFill.Quality"/>
  <affected-histogram name="Autofill.Quality.HeuristicType"/>
  <affected-histogram name="Autofill.Quality.HeuristicType.ByFieldType"/>
  <affected-histogram name="Autofill.Quality.PredictedType"/>
  <affected-histogram name="Autofill.Quality.PredictedType.ByFieldType"/>
  <affected-histogram name="Autofill.Quality.ServerType"/>
  <affected-histogram name="Autofill.Quality.ServerType.ByFieldType"/>
</histogram_suffixes>

<histogram_suffixes name="AutofillStoredServerCardType" separator=".">
  <suffix name="Masked" label="Masked cards"/>
  <suffix name="Unmasked" label="Unmasked cards (locally cached)"/>
  <affected-histogram name="Autofill.DaysSinceLastUse.StoredCreditCard.Server"/>
  <affected-histogram name="Autofill.StoredCreditCardCount.Server"/>
  <affected-histogram name="Autofill.StoredCreditCardDisusedCount.Server"/>
  <affected-histogram name="Autofill.StoredServerCreditCardCount"/>
</histogram_suffixes>

<histogram_suffixes name="AutofillUnmaskPromptCloseReasonEvents" separator=".">
  <suffix name="AbandonUnmasking" label="Abandon unmasking"/>
  <suffix name="Failure" label="Failure"/>
  <suffix name="NoAttempts" label="No attempts"/>
  <suffix name="Success" label="Success"/>
  <affected-histogram name="Autofill.UnmaskPrompt.Duration"/>
</histogram_suffixes>

<histogram_suffixes name="BackgroundFetchEvents" separator=".">
  <suffix name="AbortEvent" label="BackgroundFetchAbortEvent"/>
  <suffix name="ClickEvent" label="BackgroundFetchClickEvent"/>
  <suffix name="FailEvent" label="BackgroundFetchFailEvent"/>
  <suffix name="FetchedEvent" label="BackgroundFetchedEvent"/>
  <affected-histogram name="BackgroundFetch.EventDispatchFailure.Dispatch"/>
  <affected-histogram name="BackgroundFetch.EventDispatchFailure.FindWorker"/>
  <affected-histogram name="BackgroundFetch.EventDispatchFailure.StartWorker"/>
  <affected-histogram name="BackgroundFetch.EventDispatchResult"/>
</histogram_suffixes>

<histogram_suffixes name="BadBlockCounts" separator=".">
  <suffix name="Backupsys" label="backupsys partition"/>
  <suffix name="Bbt" label="bbt partition"/>
  <suffix name="Block0" label="block0 partition"/>
  <suffix name="Bootloader" label="bootloader partition"/>
  <suffix name="Cache" label="cache partition"/>
  <suffix name="Factory_store" label="factory_store partition"/>
  <suffix name="Fts" label="fts partition"/>
  <suffix name="Kernel" label="kernel partition"/>
  <suffix name="Postbootloader" label="postbootloader partition"/>
  <suffix name="Postbootloader-B" label="postbootloader-B partition"/>
  <suffix name="Prebootloader" label="prebootloader partition"/>
  <suffix name="Recovery" label="recovery partition"/>
  <suffix name="Rootfs" label="rootfs partition"/>
  <suffix name="Total" label="total partition"/>
  <suffix name="TZ" label="TZ partition"/>
  <suffix name="TZ-B" label="TZ-B partition"/>
  <suffix name="Userdata" label="userdata partition"/>
  <affected-histogram name="Platform.Storage.Flash.BadBlocks"/>
</histogram_suffixes>

<histogram_suffixes name="BatchStunPingParameters" separator=".">
  <suffix name="1ms.1" label="1ms gap, 1st batch"/>
  <suffix name="1ms.2" label="1ms gap, 2nd batch"/>
  <suffix name="1ms.3" label="1ms gap, 3rd batch"/>
  <suffix name="5ms.1" label="5ms gap, 1st batch"/>
  <suffix name="5ms.2" label="5ms gap, 2nd batch"/>
  <suffix name="5ms.3" label="5ms gap, 3rd batch"/>
  <suffix name="10ms.1" label="10ms gap, 1st batch"/>
  <suffix name="10ms.2" label="10ms gap, 2nd batch"/>
  <suffix name="10ms.3" label="10ms gap, 3rd batch"/>
  <suffix name="25ms.1" label="25ms gap, 1st batch"/>
  <suffix name="25ms.2" label="25ms gap, 2nd batch"/>
  <suffix name="25ms.3" label="25ms gap, 3rd batch"/>
  <suffix name="50ms.1" label="50ms gap, 1st batch"/>
  <suffix name="50ms.2" label="50ms gap, 2nd batch"/>
  <suffix name="50ms.3" label="50ms gap, 3rd batch"/>
  <affected-histogram name="WebRTC.Stun.BatchSuccessPercent.NoNAT"/>
  <affected-histogram name="WebRTC.Stun.BatchSuccessPercent.NonSymNAT"/>
  <affected-histogram name="WebRTC.Stun.BatchSuccessPercent.SymNAT"/>
  <affected-histogram name="WebRTC.Stun.BatchSuccessPercent.UnknownNAT"/>
</histogram_suffixes>

<histogram_suffixes name="BlinkCanvasDrawImageType" separator=".">
  <suffix name="Canvas"/>
  <suffix name="ImageBitmap"/>
  <suffix name="OffscreenCanvas"/>
  <suffix name="Others"/>
  <suffix name="SVG"/>
  <suffix name="Video"/>
  <affected-histogram name="Blink.Canvas.DrawImage"/>
</histogram_suffixes>

<histogram_suffixes name="BlinkCanvasDurationBySource" separator=".">
  <suffix name="CPU"/>
  <suffix name="DisplayList">
    <obsolete>
      Deprecated 11/2017 with removal of Display List Canvas 2D mode.
    </obsolete>
  </suffix>
  <suffix name="GPU"/>
  <affected-histogram name="Blink.Canvas.DrawImage.Canvas"/>
  <affected-histogram name="Blink.Canvas.DrawImage.ImageBitmap"/>
  <affected-histogram name="Blink.Canvas.DrawImage.OffscreenCanvas"/>
  <affected-histogram name="Blink.Canvas.DrawImage.Others"/>
  <affected-histogram name="Blink.Canvas.DrawImage.SVG"/>
  <affected-histogram name="Blink.Canvas.DrawImage.Video"/>
  <affected-histogram name="Blink.Canvas.GetImageData"/>
  <affected-histogram name="Blink.Canvas.PutImageData"/>
</histogram_suffixes>

<histogram_suffixes name="BlinkCanvasOffscreenCommitType" separator=".">
  <suffix name="GPUCanvasGPUCompositingMain"/>
  <suffix name="GPUCanvasGPUCompositingWorker"/>
  <suffix name="GPUCanvasSoftwareCompositingMain"/>
  <suffix name="GPUCanvasSoftwareCompositingWorker"/>
  <suffix name="SoftwareCanvasGPUCompositingMain"/>
  <suffix name="SoftwareCanvasGPUCompositingWorker"/>
  <suffix name="SoftwareCanvasSoftwareCompositingMain"/>
  <suffix name="SoftwareCanvasSoftwareCompositingWorker"/>
  <affected-histogram name="Blink.Canvas.OffscreenCommitTimer"/>
</histogram_suffixes>

<histogram_suffixes name="BlinkCanvasToBlobIdleEncodAndDelayType" separator=".">
  <suffix name="JPEG"/>
  <suffix name="PNG"/>
  <affected-histogram name="Blink.Canvas.ToBlob.CompleteEncodingDelay"/>
  <affected-histogram name="Blink.Canvas.ToBlob.IdleEncodeDuration">
    <obsolete>
      Replaced with Blink.Canvas.ToBlob.CompleteEncodingDelay in 2017/12.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="Blink.Canvas.ToBlob.InitiateEncodingDelay"/>
</histogram_suffixes>

<histogram_suffixes name="BlinkCanvasToBlobType" separator=".">
  <suffix name="JPEG"/>
  <suffix name="PNG"/>
  <suffix name="WEBP"/>
  <affected-histogram name="Blink.Canvas.ToBlobDuration"/>
</histogram_suffixes>

<histogram_suffixes name="BlinkCanvasToDataURLTime" separator=".">
  <suffix name="BMP">
    <obsolete>
      Removed in Oct 2016
    </obsolete>
  </suffix>
  <suffix name="GIF">
    <obsolete>
      Removed in Oct 2016
    </obsolete>
  </suffix>
  <suffix name="ICON">
    <obsolete>
      Removed in Oct 2016
    </obsolete>
  </suffix>
  <suffix name="JPEG"/>
  <suffix name="PNG"/>
  <suffix name="TIFF">
    <obsolete>
      Removed in Oct 2016
    </obsolete>
  </suffix>
  <suffix name="Unknown">
    <obsolete>
      Removed in Oct 2016
    </obsolete>
  </suffix>
  <suffix name="WEBP"/>
  <affected-histogram name="Blink.Canvas.ToDataURL"/>
</histogram_suffixes>

<histogram_suffixes name="BlinkCompositingLayerCount" separator=".">
  <suffix name="ActiveAnimation"/>
  <suffix name="AssumedOverlap"/>
  <suffix name="IndirectComposited"/>
  <suffix name="Overlap"/>
  <suffix name="TotalComposited"/>
  <affected-histogram name="Blink.Compositing.LayerPromotionCount"/>
</histogram_suffixes>

<histogram_suffixes name="BlinkGCReason" separator="_">
  <suffix name="ConservativeGC" label="Conservative GC"/>
  <suffix name="ForcedGC" label="Forced GC"/>
  <suffix name="IdleGC" label="Idle GC"/>
  <suffix name="IncrementalIdleGC" label="Idle GC with incremental marking"/>
  <suffix name="IncrementalV8FollowupGC"
      label="V8 follow-up GC with incremental marking"/>
  <suffix name="MemoryPressureGC" label="Memory pressure GC"/>
  <suffix name="PageNavigationGC" label="Page navigation GC"/>
  <suffix name="PreciseGC" label="Precise GC"/>
  <suffix name="Testing" label="Testing GC"/>
  <suffix name="ThreadTerminationGC" label="Thread termination GC"/>
  <affected-histogram name="BlinkGC.AtomicPhaseMarking"/>
  <affected-histogram name="BlinkGC.CollectionRate"/>
  <affected-histogram name="BlinkGC.TimeForTotalCollectGarbage"/>
</histogram_suffixes>

<histogram_suffixes name="BlinkLazyLoadEffectiveConnectionTypeSuffixes"
    separator=".">
  <suffix name="2G" label="2G effective connection type"/>
  <suffix name="3G" label="3G effective connection type"/>
  <suffix name="4G" label="4G effective connection type"/>
  <suffix name="Offline" label="Offline effective connection type"/>
  <suffix name="Slow2G" label="Slow-2G effective connection type"/>
  <suffix name="Unknown" label="Unknown effective connection type"/>
  <affected-histogram
      name="Blink.LazyLoad.CrossOriginFrames.InitialDeferralAction"/>
</histogram_suffixes>

<histogram_suffixes name="BlinkVisibleLoadTimeSuffixes" separator=".">
  <suffix name="2G" label="2G effective connection type"/>
  <suffix name="3G" label="3G effective connection type"/>
  <suffix name="4G" label="4G effective connection type"/>
  <suffix name="Slow2G" label="Slow-2G effective connection type"/>
  <affected-histogram
      name="Blink.VisibleLoadTime.LazyLoadEligibleFrames.AboveTheFold"/>
  <affected-histogram
      name="Blink.VisibleLoadTime.LazyLoadEligibleFrames.BelowTheFold"/>
</histogram_suffixes>

<histogram_suffixes name="CachedResourceType" separator=".">
  <suffix name="Audio"
      label="Showing cache patterns only for audio resources."/>
  <suffix name="CSS" label="Showing cache patterns only for CSS resources."/>
  <suffix name="Font" label="Showing cache patterns only for font resources."/>
  <suffix name="Image"
      label="Showing cache patterns only for image resources."/>
  <suffix name="JavaScript"
      label="Showing cache patterns only for JavaScript resources."/>
  <suffix name="MainFrameHTML"
      label="Showing cache patterns only for main-frame HTML resources."/>
  <suffix name="NonMainFrameHTML"
      label="Showing cache patterns only for non-main-frame HTML resources."/>
  <suffix name="NonTinyImage"
      label="Showing cache patterns only for image resources with
             content-length &gt;= 100 bytes."/>
  <suffix name="TinyImage"
      label="Showing cache patterns only for image resources with
             content-length less than 100 bytes."/>
  <suffix name="Video"
      label="Showing cache patterns only for video resources."/>
  <affected-histogram name="HttpCache.Pattern"/>
  <affected-histogram
      name="HttpCache.StaleEntry.FreshnessPeriodsSinceLastUsed"/>
  <affected-histogram name="HttpCache.ValidationCause"/>
</histogram_suffixes>

<histogram_suffixes name="CacheInstance" separator="." ordering="prefix">
  <suffix name="App"
      label="Collected from the HTML5 Application Cache instance."/>
  <suffix name="Http" label="Collected from the HTTP Cache instance."/>
  <suffix name="Media" label="Collected from the Media Cache instance."/>
  <affected-histogram name="SimpleCache.CacheSizeOnInit"/>
  <affected-histogram name="SimpleCache.CheckCRCResult"/>
  <affected-histogram name="SimpleCache.CreationToIndex"/>
  <affected-histogram name="SimpleCache.CreationToIndexFail"/>
  <affected-histogram name="SimpleCache.DiskCloseLatency"/>
  <affected-histogram name="SimpleCache.DiskCreateLatency"/>
  <affected-histogram name="SimpleCache.DiskDoomLatency"/>
  <affected-histogram name="SimpleCache.DiskOpenLatency"/>
  <affected-histogram name="SimpleCache.DiskOpenStream2NonTinyLatency"/>
  <affected-histogram name="SimpleCache.DiskOpenStream2TinyLatency"/>
  <affected-histogram name="SimpleCache.DiskWriteLatency"/>
  <affected-histogram name="SimpleCache.EntryCreatedAndStream2Omitted"/>
  <affected-histogram name="SimpleCache.EntryCreationResult"/>
  <affected-histogram name="SimpleCache.EntryCreationTime"/>
  <affected-histogram name="SimpleCache.EntryOpenedAndStream2Removed"/>
  <affected-histogram name="SimpleCache.EntryOperationsPending"/>
  <affected-histogram name="SimpleCache.Eviction.CacheSizeOnStart"/>
  <affected-histogram name="SimpleCache.Eviction.CacheSizeOnStart2"/>
  <affected-histogram name="SimpleCache.Eviction.EntryCount"/>
  <affected-histogram name="SimpleCache.Eviction.MaxCacheSizeOnStart"/>
  <affected-histogram name="SimpleCache.Eviction.MaxCacheSizeOnStart2"/>
  <affected-histogram name="SimpleCache.Eviction.Result"/>
  <affected-histogram name="SimpleCache.Eviction.SizeOfEvicted"/>
  <affected-histogram name="SimpleCache.Eviction.SizeOfEvicted2"/>
  <affected-histogram name="SimpleCache.Eviction.SizeWhenDone"/>
  <affected-histogram name="SimpleCache.Eviction.SizeWhenDone2"/>
  <affected-histogram name="SimpleCache.Eviction.TimeToDone"/>
  <affected-histogram name="SimpleCache.Eviction.TimeToSelectEntries"/>
  <affected-histogram name="SimpleCache.FileDescriptorLimitHard">
    <obsolete>
      Removed January 2018, as the limit is independent of the backend type.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="SimpleCache.FileDescriptorLimitSoft">
    <obsolete>
      Removed January 2018, as the limit is independent of the backend type.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="SimpleCache.FileDescriptorLimitStatus">
    <obsolete>
      Removed January 2018, as the limit is independent of the backend type.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="SimpleCache.GlobalOpenEntryCount"/>
  <affected-histogram name="SimpleCache.HeaderSize"/>
  <affected-histogram name="SimpleCache.HeaderSizeChange"/>
  <affected-histogram name="SimpleCache.HeaderSizeDecreaseAbsolute"/>
  <affected-histogram name="SimpleCache.HeaderSizeDecreasePercentage"/>
  <affected-histogram name="SimpleCache.HeaderSizeIncreaseAbsolute"/>
  <affected-histogram name="SimpleCache.HeaderSizeIncreasePercentage"/>
  <affected-histogram name="SimpleCache.IndexCorrupt"/>
  <affected-histogram name="SimpleCache.IndexCreatedEntryCount"/>
  <affected-histogram name="SimpleCache.IndexEntriesLoaded"/>
  <affected-histogram name="SimpleCache.IndexEntriesRestored"/>
  <affected-histogram name="SimpleCache.IndexFileStateOnLoad"/>
  <affected-histogram name="SimpleCache.IndexInitializationWaiters"/>
  <affected-histogram name="SimpleCache.IndexInitializeMethod"/>
  <affected-histogram name="SimpleCache.IndexLoadTime"/>
  <affected-histogram name="SimpleCache.IndexNumEntriesOnInit"/>
  <affected-histogram name="SimpleCache.IndexNumEntriesOnWrite"/>
  <affected-histogram name="SimpleCache.IndexRestoreTime"/>
  <affected-histogram name="SimpleCache.IndexWriteInterval.Background"/>
  <affected-histogram name="SimpleCache.IndexWriteInterval.Foreground"/>
  <affected-histogram name="SimpleCache.IndexWriteReason"/>
  <affected-histogram name="SimpleCache.IndexWriteReasonAtLoad"/>
  <affected-histogram name="SimpleCache.IndexWriteToDiskTime.Background"/>
  <affected-histogram name="SimpleCache.IndexWriteToDiskTime.Foreground"/>
  <affected-histogram name="SimpleCache.KeyMatchedOnOpen"/>
  <affected-histogram name="SimpleCache.LastClusterLossPercent"/>
  <affected-histogram name="SimpleCache.LastClusterSize"/>
  <affected-histogram name="SimpleCache.MaxCacheSizeOnInit"/>
  <affected-histogram name="SimpleCache.NumOpsBlockedByPendingDoom"/>
  <affected-histogram name="SimpleCache.OpenEntryIndexState"/>
  <affected-histogram name="SimpleCache.PercentFullOnInit"/>
  <affected-histogram name="SimpleCache.QueueLatency.CreateEntry"/>
  <affected-histogram name="SimpleCache.QueueLatency.OpenEntry"/>
  <affected-histogram name="SimpleCache.QueueLatency.PendingDoom"/>
  <affected-histogram name="SimpleCache.ReadIsParallelizable"/>
  <affected-histogram name="SimpleCache.ReadResult"/>
  <affected-histogram name="SimpleCache.ReadStream1FromPrefetched"/>
  <affected-histogram name="SimpleCache.StaleIndexExtraEntryCount"/>
  <affected-histogram name="SimpleCache.StaleIndexMissedEntryCount"/>
  <affected-histogram name="SimpleCache.StaleIndexQuality"/>
  <affected-histogram name="SimpleCache.SyncCheckEOFHasCrc"/>
  <affected-histogram name="SimpleCache.SyncCheckEOFResult"/>
  <affected-histogram name="SimpleCache.SyncCloseResult"/>
  <affected-histogram name="SimpleCache.SyncCreatePlatformFileError"/>
  <affected-histogram name="SimpleCache.SyncCreatePlatformFileError_WithIndex"/>
  <affected-histogram
      name="SimpleCache.SyncCreatePlatformFileError_WithoutIndex"/>
  <affected-histogram name="SimpleCache.SyncCreateResult"/>
  <affected-histogram name="SimpleCache.SyncCreateResult_WithIndex"/>
  <affected-histogram name="SimpleCache.SyncCreateResult_WithoutIndex"/>
  <affected-histogram name="SimpleCache.SyncKeySHA256Result"/>
  <affected-histogram name="SimpleCache.SyncOpenDidPrefetch"/>
  <affected-histogram name="SimpleCache.SyncOpenEntryAge"/>
  <affected-histogram name="SimpleCache.SyncOpenPlatformFileError"/>
  <affected-histogram name="SimpleCache.SyncOpenPlatformFileError_WithIndex"/>
  <affected-histogram
      name="SimpleCache.SyncOpenPlatformFileError_WithoutIndex"/>
  <affected-histogram name="SimpleCache.SyncOpenResult"/>
  <affected-histogram name="SimpleCache.SyncOpenResult_WithIndex"/>
  <affected-histogram name="SimpleCache.SyncOpenResult_WithoutIndex"/>
  <affected-histogram name="SimpleCache.SyncWriteResult"/>
  <affected-histogram name="SimpleCache.WriteDependencyType"/>
  <affected-histogram name="SimpleCache.WriteResult"/>
  <affected-histogram name="SimpleCache.WriteResult2"/>
</histogram_suffixes>

<histogram_suffixes name="CacheListSize" separator="_">
  <obsolete>
    Experiments no longer active.
  </obsolete>
  <suffix name="CacheListSize_12" label="Control"/>
  <suffix name="CacheListSize_13" label="Extended deleted list (2x)"/>
  <suffix name="CacheListSize_14" label="Out of the experiment"/>
  <affected-histogram name="DiskCache.TotalIOTime"/>
  <affected-histogram name="Net.HttpJob.TotalTime"/>
  <affected-histogram name="Net.HttpJob.TotalTimeCached"/>
  <affected-histogram name="Net.HttpJob.TotalTimeCancel"/>
  <affected-histogram name="Net.HttpJob.TotalTimeNotCached"/>
  <affected-histogram name="Net.HttpJob.TotalTimeSuccess"/>
  <affected-histogram name="PLT.Abandoned"/>
  <affected-histogram name="PLT.BeginToFinish"/>
  <affected-histogram name="PLT.BeginToFinish_HistoryLoad"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadCacheOnly"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
  <affected-histogram name="PLT.BeginToFinish_Reload"/>
</histogram_suffixes>

<histogram_suffixes name="CacheSensitivityAnalysis" separator="_">
  <obsolete>
    Experiments no longer active.
  </obsolete>
  <suffix name="100" label="100% slowdown"/>
  <suffix name="100A" label="100% slowdown, Group A"/>
  <suffix name="100B" label="100% slowdown, Group B"/>
  <suffix name="200A" label="200% slowdown, Group A"/>
  <suffix name="200B" label="200% slowdown, Group B"/>
  <suffix name="400A" label="400% slowdown, Group A"/>
  <suffix name="400B" label="400% slowdown, Group B"/>
  <suffix name="Control" label="Control group"/>
  <suffix name="ControlA" label="Control, Group A"/>
  <suffix name="ControlB" label="Control, Group B"/>
  <suffix name="No" label="Turned off"/>
  <affected-histogram name="Net.HttpJob.TotalTime"/>
  <affected-histogram name="Net.HttpJob.TotalTimeCached"/>
  <affected-histogram name="Net.HttpJob.TotalTimeCancel"/>
  <affected-histogram name="Net.HttpJob.TotalTimeNotCached"/>
  <affected-histogram name="Net.HttpJob.TotalTimeSuccess"/>
  <affected-histogram name="PLT.BeginToFinish_CacheSensitivity"/>
  <affected-histogram name="PLT.BeginToFinishDoc_CacheSensitivity"/>
  <affected-histogram name="PLT.BeginToFirstPaint_CacheSensitivity"/>
  <affected-histogram name="PLT.CommitToFirstPaint_CacheSensitivity"/>
</histogram_suffixes>

<histogram_suffixes name="CacheSensitivityHistograms" separator="_">
  <suffix name="CacheSensitivity" label="Cache Sensivitiy Analysis"/>
  <affected-histogram name="PLT.BeginToFinish"/>
  <affected-histogram name="PLT.BeginToFinishDoc"/>
  <affected-histogram name="PLT.BeginToFirstPaint"/>
  <affected-histogram name="PLT.CommitToFirstPaint"/>
</histogram_suffixes>

<histogram_suffixes name="CacheSensitivityHistograms" separator="_">
  <suffix name="CacheSensitivity" label="Cache Sensivitiy Analysis"/>
  <affected-histogram name="PLT.BeginToFinish"/>
  <affected-histogram name="PLT.BeginToFinishDoc"/>
  <affected-histogram name="PLT.BeginToFirstPaint"/>
  <affected-histogram name="PLT.CommitToFirstPaint"/>
</histogram_suffixes>

<histogram_suffixes name="CacheThrottle" separator="_">
  <suffix name="CacheThrottle_Off" label="Control group."/>
  <suffix name="CacheThrottle_On" label="Throttling payload requests."/>
  <affected-histogram name="DiskCache.TotalIOTime"/>
  <affected-histogram name="PLT.Abandoned"/>
  <affected-histogram name="PLT.BeginToFinish"/>
  <affected-histogram name="PLT.BeginToFinish_HistoryLoad"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadCacheOnly"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
  <affected-histogram name="PLT.BeginToFinish_Reload"/>
</histogram_suffixes>

<histogram_suffixes name="CanvasRequestedImageMimeTypeFunctions" separator="_">
  <suffix name="convertToBlobPromise"
      label="Image formats passed to OffscreenCanvas.convertToBlob (promise)"/>
  <suffix name="toBlobCallback"
      label="Image formats passed to canvas.toBlob (callback)"/>
  <suffix name="toDataURL" label="Image formats passed to canvas.toDataURL"/>
  <affected-histogram name="Canvas.RequestedImageMimeTypes"/>
</histogram_suffixes>

<histogram_suffixes name="CertificateTransparencyProtocol" separator=".">
  <suffix name="QUIC"/>
  <suffix name="SSL"/>
  <affected-histogram
      name="Net.CertificateTransparency.ConnectionComplianceStatus2"/>
  <affected-histogram
      name="Net.CertificateTransparency.CTRequiredConnectionComplianceStatus2"/>
  <affected-histogram name="Net.CertificateTransparency.EVCompliance2"/>
</histogram_suffixes>

<histogram_suffixes name="CertificateTypeAlgorithms" separator=".">
  <owner>rsleevi@chromium.org</owner>
  <suffix name="DH" label="DH"/>
  <suffix name="DSA" label="DSA"/>
  <suffix name="ECDH" label="ECDH"/>
  <suffix name="ECDSA" label="ECDSA"/>
  <suffix name="RSA" label="RSA"/>
  <suffix name="Unknown" label="SPKI unrecognized by cert library"/>
  <suffix name="Unsupported" label="Un-histogrammed type - please fix"/>
  <affected-histogram name="CertificateType.BR.Intermediate"/>
  <affected-histogram name="CertificateType.BR.Leaf"/>
  <affected-histogram name="CertificateType.BR.Root"/>
  <affected-histogram name="CertificateType.NonBR.Intermediate"/>
  <affected-histogram name="CertificateType.NonBR.Leaf"/>
  <affected-histogram name="CertificateType.NonBR.Root"/>
  <affected-histogram name="CertificateType2.BR.Intermediate"/>
  <affected-histogram name="CertificateType2.BR.Leaf"/>
  <affected-histogram name="CertificateType2.BR.Root"/>
  <affected-histogram name="CertificateType2.NonBR.Intermediate"/>
  <affected-histogram name="CertificateType2.NonBR.Leaf"/>
  <affected-histogram name="CertificateType2.NonBR.Root"/>
</histogram_suffixes>

<histogram_suffixes name="CertificateTypeBRValidity" separator=".">
  <obsolete>
    Deprecated as of 8/2013. This histogram only considered the leaf certificate
    expiry date as a proxy for whether a certificate was in-scope for the BRs,
    but did not consider the issuance date. As some CAs have issued long-lived
    certs prior to the BRs, this disproportionately reported those certs as
    being subject to the BRs, but non-compliant, when in reality they're not
    subject.
  </obsolete>
  <suffix name="BR"
      label="The *leaf* certificate of the chain expires after 2013-12-31,
             meaning that it should be in scope for the Baseline
             Requirement's key size requirements"/>
  <suffix name="NonBR"
      label="The *leaf* certificate of the chain expires on or before
             2013-12-31"/>
  <affected-histogram name="CertificateType"/>
</histogram_suffixes>

<histogram_suffixes name="CertificateTypeBRValidity2" separator=".">
  <suffix name="BR"
      label="The *leaf* certificate of the chain expires after 2013-12-31 and
             was issued on or after 2012-07-01, as judged by the notBefore,
             meaning that it should be in scope for the Baseline
             Requirement's key size requirements"/>
  <suffix name="NonBR"
      label="The *leaf* certificate of the chain expires on or before
             2013-12-31 or was issued before 2012-07-01"/>
  <affected-histogram name="CertificateType2"/>
</histogram_suffixes>

<histogram_suffixes name="CertificateTypeChainPosition" separator=".">
  <suffix name="Intermediate" label="Intermediate's SPKI"/>
  <suffix name="Leaf" label="Leaf's SPKI"/>
  <suffix name="Root" label="Root's SPKI"/>
  <affected-histogram name="CertificateType.BR"/>
  <affected-histogram name="CertificateType.NonBR"/>
  <affected-histogram name="CertificateType2.BR"/>
  <affected-histogram name="CertificateType2.NonBR"/>
</histogram_suffixes>

<histogram_suffixes name="CertIo" separator="">
  <obsolete>
    Deprecated as of 01/2016. CertCacheTrial has been removed.
    https://crbug.com/522312
  </obsolete>
  <suffix name="ReadFailure"
      label="failure rate of reading a certificate from the disk cache"/>
  <suffix name="ReadSuccess"
      label="success rate of reading a certificate from the disk cache"/>
  <suffix name="WriteFailure"
      label="failure rate of writing a certificate to the disk cache"/>
  <suffix name="WriteSuccess"
      label="success rate of writing a certificate to the disk cache"/>
  <affected-histogram name="DiskBasedCertCache.CertIo"/>
</histogram_suffixes>

<histogram_suffixes name="ChromeActivityName" separator=".">
  <suffix name="ChromeTabbedActivity"
      label="Activity launched in TABBED mode on Android"/>
  <suffix name="CustomTabActivity"
      label="Activity launched with a CUSTOM TAB on Android"/>
  <suffix name="DocumentActivity"
      label="Activity launched in DOCUMENT mode (Tabs and apps together) on
             Android"/>
  <affected-histogram name="MobileStartup.ToolbarFirstDrawTime"/>
  <affected-histogram name="MobileStartup.ToolbarFirstDrawTime2"/>
  <affected-histogram name="MobileStartup.ToolbarFirstFocusStartupState"/>
  <affected-histogram name="MobileStartup.ToolbarFirstFocusTime"/>
  <affected-histogram name="MobileStartup.ToolbarFirstFocusTime2"/>
  <affected-histogram name="MobileStartup.ToolbarInflationTime"/>
</histogram_suffixes>

<histogram_suffixes name="ChromeCleanerDialogDoneReason" separator="_">
  <suffix name="Accepted" label="User accepted the prompt."/>
  <suffix name="Canceled" label="User clicked the cancel button."/>
  <suffix name="DetailsButtonClicked" label="User clicked the details button."/>
  <suffix name="Dismissed"
      label="User dismissed the prompt, for example by pressing ESC."/>
  <affected-histogram name="SoftwareReporter.PromptDialog.TimeUntilDone"/>
</histogram_suffixes>

<histogram_suffixes name="ChromeCleanerFetchCompletedReason" separator="_">
  <suffix name="DownloadFailure"
      label="Download failed without an OK HTTP response code."/>
  <suffix name="DownloadSuccess" label="Download succeeded."/>
  <suffix name="NetworkError" label="Download failed due to a network error."/>
  <affected-histogram name="SoftwareReporter.Cleaner.NumberOfDownloadAttempts">
    <obsolete>
      Removed Jan 2018
    </obsolete>
  </affected-histogram>
  <affected-histogram name="SoftwareReporter.Cleaner.TimeToCompleteDownload"/>
</histogram_suffixes>

<histogram_suffixes name="ChromeContentBrowserClientMetricSuffixes"
    separator=".">
  <suffix name="docs" label="Custom histogram for Google Docs"/>
  <suffix name="search"
      label="Custom histogram for the Google Search results page"/>
  <affected-histogram
      name="ServiceWorker.ActivatedWorkerPreparationForMainFrame.Type"/>
</histogram_suffixes>

<histogram_suffixes name="ChromeOS.MachineIdRegen.AgeSeconds" separator="_">
  <suffix name="Network"/>
  <suffix name="Periodic"/>
  <suffix name="Unknown"/>
  <affected-histogram name="ChromeOS.MachineIdRegen.AgeSeconds"/>
</histogram_suffixes>

<histogram_suffixes name="Clients.StaleWhileRevalidateExperiment" separator="."
    ordering="prefix">
  <suffix name="Clients.StaleWhileRevalidateExperiment"
      label="Timing was recorded on one of the domains of focus for
             stale-while-revalidate"/>
  <affected-histogram name="PageLoad.Timing2.NavigationToFirstLayout"/>
  <affected-histogram name="PageLoad.Timing2.NavigationToFirstTextPaint"/>
  <affected-histogram name="PageLoad.Timing2.NavigationToLoadEventFired"/>
</histogram_suffixes>

<histogram_suffixes name="ClockResolution" separator=".">
  <obsolete>
    These were temporary metrics intended to understand whether high/low
    resolution clocks adversely impact page load metrics. After collecting a few
    months of data it was determined that clock resolution doesn't adversely
    impact our metrics, and that these histograms were no longer needed.
  </obsolete>
  <suffix name="HighResolutionClock"
      label="base::TimeTicks::IsHighResolution() is true for this measurement"/>
  <suffix name="LowResolutionClock"
      label="base::TimeTicks::IsHighResolution() is false for this
             measurement"/>
  <affected-histogram name="PageLoad.Timing2.NavigationToFirstContentfulPaint"/>
</histogram_suffixes>

<histogram_suffixes name="CloudPrintRequests" separator=".">
  <suffix name="DownloadData" label="Download data request"/>
  <suffix name="Other" label="Other requests"/>
  <suffix name="Register" label="Register request"/>
  <suffix name="UpdatePrinter" label="Update printer request"/>
  <affected-histogram name="CloudPrint.UrlFetcherDownloadSize"/>
  <affected-histogram name="CloudPrint.UrlFetcherRequestTime"/>
  <affected-histogram name="CloudPrint.UrlFetcherRetries"/>
  <affected-histogram name="CloudPrint.UrlFetcherUploadSize"/>
</histogram_suffixes>

<histogram_suffixes name="CompositorPendingTreeType" separator=".">
  <suffix name="Impl" label="Impl side invalidation initiated pending tree"/>
  <suffix name="Main" label="Commit initiated pending tree"/>
  <affected-histogram
      name="Scheduling.Renderer.ReadyToActivateToActivationDuration2"/>
</histogram_suffixes>

<histogram_suffixes name="CompositorTimingHistoryProcess" separator="."
    ordering="prefix">
  <suffix name="Browser"/>
  <suffix name="Renderer"/>
  <affected-histogram name="Scheduling.ActivateDuration2"/>
  <affected-histogram name="Scheduling.BeginImplFrameLatency2"/>
  <affected-histogram name="Scheduling.BeginMainFrameQueueDurationCritical2"/>
  <affected-histogram name="Scheduling.BeginMainFrameStartToCommitDuration2"/>
  <affected-histogram name="Scheduling.CommitToReadyToActivateDuration2"/>
  <affected-histogram name="Scheduling.DrawDuration2"/>
  <affected-histogram
      name="Scheduling.DrawIntervalWithMainThreadCompositableAnimations2"/>
  <affected-histogram name="Scheduling.InvalidationToReadyToActivateDuration2"/>
  <affected-histogram name="Scheduling.MainAndImplFrameTimeDelta2"/>
  <affected-histogram name="Scheduling.PrepareTilesDuration2"/>
  <affected-histogram name="Scheduling.SwapAckWasFast"/>
  <affected-histogram name="Scheduling.SwapToAckLatency2"/>
</histogram_suffixes>

<histogram_suffixes name="CompositorTimingHistoryProcess2" separator="."
    ordering="prefix">
  <suffix name="Browser"/>
  <suffix name="Renderer"/>
  <affected-histogram name="Scheduling.ImageInvalidationUpdateDuration"/>
</histogram_suffixes>

<histogram_suffixes name="CompositorTimingHistoryProcessObsolete" separator="."
    ordering="prefix">
  <obsolete>
    These used an old bucketing scheme that that had too many buckets and were
    an inefficient usage of UMA bandwidth. They have been replaced by new
    metrics of the same name with a &quot;2&quot; appended to them.
  </obsolete>
  <suffix name="Browser"/>
  <suffix name="Renderer"/>
  <affected-histogram name="Scheduling.ActivateDuration"/>
  <affected-histogram name="Scheduling.BeginMainFrameIntervalCritical"/>
  <affected-histogram name="Scheduling.BeginMainFrameIntervalNotCritical"/>
  <affected-histogram name="Scheduling.BeginMainFrameQueueDurationCritical"/>
  <affected-histogram name="Scheduling.BeginMainFrameQueueDurationNotCritical"/>
  <affected-histogram name="Scheduling.BeginMainFrameStartToCommitDuration"/>
  <affected-histogram name="Scheduling.BeginMainFrameToCommitDuration"/>
  <affected-histogram name="Scheduling.CommitInterval"/>
  <affected-histogram name="Scheduling.CommitToReadyToActivateDuration"/>
  <affected-histogram name="Scheduling.DrawDuration"/>
  <affected-histogram name="Scheduling.DrawInterval"/>
  <affected-histogram name="Scheduling.MainAndImplFrameTimeDelta"/>
  <affected-histogram name="Scheduling.PrepareTilesDuration"/>
  <affected-histogram name="Scheduling.SwapToAckLatency"/>
</histogram_suffixes>

<histogram_suffixes name="CompositorTimingHistorySubcategory" separator=".">
  <obsolete>
    Estimates don't need long term monitoring.
  </obsolete>
  <suffix name="NotUsedForEstimate"
      label="Samples that don't affect estimates. For example, because we are
             coming out of idle."/>
  <suffix name="Overestimate"
      label="Tracks when the compositor's estimates were too high and by how
             much."/>
  <suffix name="Underestimate"
      label="Tracks when the compositor's estimates were too low and by how
             much."/>
  <affected-histogram name="Scheduling.Browser.ActivateDuration"/>
  <affected-histogram name="Scheduling.Browser.BeginMainFrameToCommitDuration"/>
  <affected-histogram
      name="Scheduling.Browser.CommitToReadyToActivateDuration"/>
  <affected-histogram name="Scheduling.Browser.DrawDuration"/>
  <affected-histogram name="Scheduling.Browser.PrepareTilesDuration"/>
  <affected-histogram name="Scheduling.Renderer.ActivateDuration"/>
  <affected-histogram
      name="Scheduling.Renderer.BeginMainFrameToCommitDuration"/>
  <affected-histogram
      name="Scheduling.Renderer.CommitToReadyToActivateDuration"/>
  <affected-histogram name="Scheduling.Renderer.DrawDuration"/>
  <affected-histogram name="Scheduling.Renderer.PrepareTilesDuration"/>
</histogram_suffixes>

<histogram_suffixes name="CompositorTimingHistorySubcategory2" separator=".">
  <obsolete>
    Estimates don't need long term monitoring.
  </obsolete>
  <suffix name="NotUsedForEstimate"
      label="Samples that don't affect estimates. For example, because we are
             coming out of idle."/>
  <affected-histogram
      name="Scheduling.Browser.BeginMainFrameQueueDurationCritical"/>
  <affected-histogram
      name="Scheduling.Browser.BeginMainFrameQueueDurationNotCritical"/>
  <affected-histogram
      name="Scheduling.Browser.BeginMainFrameStartToCommitDuration"/>
  <affected-histogram
      name="Scheduling.Renderer.BeginMainFrameQueueDurationCritical"/>
  <affected-histogram
      name="Scheduling.Renderer.BeginMainFrameQueueDurationNotCritical"/>
  <affected-histogram
      name="Scheduling.Renderer.BeginMainFrameStartToCommitDuration"/>
</histogram_suffixes>

<histogram_suffixes name="CompositorTreePriority" separator=".">
  <suffix name="NewContent" label="New content/pending tree takes priority."/>
  <suffix name="Same" label="Same priority for both trees."/>
  <suffix name="Smoothness" label="Smoothness takes priority."/>
  <affected-histogram
      name="Scheduling.Browser.CommitToReadyToActivateDuration2"/>
  <affected-histogram
      name="Scheduling.Browser.InvalidationToReadyToActivateDuration2"/>
  <affected-histogram
      name="Scheduling.Renderer.CommitToReadyToActivateDuration2"/>
  <affected-histogram
      name="Scheduling.Renderer.InvalidationToReadyToActivateDuration2"/>
</histogram_suffixes>

<histogram_suffixes name="ConnCountImpact" separator="_">
  <suffix name="conn_count_4" label="with 4 persistent connections per host"/>
  <suffix name="conn_count_5" label="with 5 persistent connections per host"/>
  <suffix name="conn_count_6" label="with 6 persistent connections per host"/>
  <suffix name="conn_count_7" label="with 7 persistent connections per host"/>
  <suffix name="conn_count_8" label="with 8 persistent connections per host"/>
  <suffix name="conn_count_9" label="with 9 persistent connections per host"/>
  <suffix name="conn_count_16" label="with 16 persistent connections per host"/>
  <affected-histogram name="Net.Transaction_Connected_New"/>
  <affected-histogram name="PLT.Abandoned"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
  <affected-histogram name="Renderer4.Abandoned"/>
  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadNormal"/>
  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadReload"/>
  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadStaleOk"/>
  <affected-histogram name="Renderer4.BeginToFinish_NormalLoad"/>
</histogram_suffixes>

<histogram_suffixes name="ConnectionMigrationCause" separator=".">
  <suffix name="OnMigrateBackToDefaultNetwork"/>
  <suffix name="OnNetworkConnected"/>
  <suffix name="OnNetworkDisconnected"/>
  <suffix name="OnNetworkMadeDefault"/>
  <suffix name="OnPathDegrading"/>
  <suffix name="OnWriteError"/>
  <suffix name="Unknown"/>
  <affected-histogram name="Net.QuicSession.ConnectionMigration"/>
  <affected-histogram name="Net.QuicSession.ConnectionMigrationProbeSuccess"/>
  <affected-histogram
      name="Net.QuicSession.HandshakeStatusOnConnectionMigration"/>
</histogram_suffixes>

<histogram_suffixes name="ConnectivityDiagnostics" separator=".">
  <suffix name="0" label="INTERNET_DISCONNECTED"/>
  <suffix name="1" label="CHROME_VERSION"/>
  <suffix name="2" label="CHROMEOS_VERSION"/>
  <suffix name="3" label="DNS_RESOLVER_PRESENT"/>
  <suffix name="4" label="CAPTIVE_PORTAL_DNS"/>
  <suffix name="5" label="CAPTIVE_PORTAL_HTTP"/>
  <suffix name="6" label="FIREWALL_80"/>
  <suffix name="7" label="FIREWALL_443"/>
  <suffix name="8" label="RESOLVER_LATENCY"/>
  <suffix name="9" label="HTTP_LATENCY"/>
  <suffix name="10" label="NIC_SIGNAL_STRENGTH"/>
  <suffix name="11" label="PING_GATEWAY"/>
  <affected-histogram name="ConnectivityDiagnostics.TestVerdict"/>
  <affected-histogram name="ConnectivityDiagnostics.TimeTaken"/>
</histogram_suffixes>

<histogram_suffixes name="ConnnectBackupJobs" separator="_">
  <suffix name="ConnectBackupJobsDisabled"/>
  <suffix name="ConnectBackupJobsEnabled"/>
  <affected-histogram name="Net.PreconnectUtilization"/>
  <affected-histogram name="Net.PreconnectUtilization2"/>
  <affected-histogram name="PLT.Abandoned"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
  <affected-histogram name="PLT.LoadType"/>
</histogram_suffixes>

<histogram_suffixes name="ContentSettingsType" separator=".">
  <suffix name="app-banner" label="App banner exceptions"/>
  <suffix name="auto-select-certificate" label="Auto-select cert exceptions"/>
  <suffix name="automatic-downloads" label="Automatic downloads exceptions"/>
  <suffix name="autoplay" label="Autoplay exception"/>
  <suffix name="background-sync" label="Background sync exceptions"/>
  <suffix name="bluetooth-guard" label="Bluetooth guard exceptions"/>
  <suffix name="cookies" label="Cookies exceptions"/>
  <suffix name="durable-storage" label="Durable Storage Exceptions"/>
  <suffix name="fullscreen" label="Fullscreen exceptions"/>
  <suffix name="geolocation" label="Geolocation exceptions"/>
  <suffix name="images" label="Images exceptions"/>
  <suffix name="javascript" label="JavaScript exceptions"/>
  <suffix name="keygen" label="Keygen exceptions"/>
  <suffix name="media-stream-camera" label="Camera exceptions"/>
  <suffix name="media-stream-mic" label="Microphone exceptions"/>
  <suffix name="midi-sysex" label="Midi exceptions"/>
  <suffix name="mixed-script" label="Mixed script exceptions"/>
  <suffix name="mouselock" label="Mouse lock exceptions"/>
  <suffix name="notifications" label="Notification exceptions"/>
  <suffix name="plugins" label="Plugins exceptions"/>
  <suffix name="popups" label="Popups exceptions"/>
  <suffix name="ppapi-broker" label="Ppapi broker exceptions"/>
  <suffix name="protected-media-identifier" label="Protected media exceptions"/>
  <suffix name="protocol-handler" label="Protocol handler exceptions"/>
  <suffix name="push-messaging" label="Push messaging exceptions"/>
  <suffix name="site-engagement" label="Site engagement exceptions"/>
  <suffix name="sound" label="Sound exceptions"/>
  <suffix name="ssl-cert-decisions" label="SSL cert decisions exceptions"/>
  <suffix name="subresource-filter" label="Subresource filter exceptions"/>
  <suffix name="usb-chooser-data" label="USB chooser data exceptions"/>
  <affected-histogram name="ContentSettings.Exceptions"/>
</histogram_suffixes>

<histogram_suffixes name="ContentSuggestionCategory" separator=".">
  <suffix name="Articles" label="Articles for you"/>
  <suffix name="Bookmarks" label="Bookmarks"/>
  <suffix name="Contextual" label="Contextual suggestions"/>
  <suffix name="Downloads" label="Downloads"/>
  <suffix name="Experimental" label="Experimental"/>
  <suffix name="ForeignTabs" label="Open tabs on other devices"/>
  <suffix name="PhysicalWeb" label="Physical Web pages"/>
  <suffix name="ReadingList" label="Reading List entries"/>
  <suffix name="RecentTabs" label="Recent (offline) tabs"/>
  <affected-histogram
      name="NewTabPage.ContentSuggestions.CountOnNtpOpenedIfVisible"/>
  <affected-histogram name="NewTabPage.ContentSuggestions.DismissedUnvisited"/>
  <affected-histogram name="NewTabPage.ContentSuggestions.DismissedVisited"/>
  <affected-histogram name="NewTabPage.ContentSuggestions.MenuOpened"/>
  <affected-histogram name="NewTabPage.ContentSuggestions.MenuOpenedAge"/>
  <affected-histogram name="NewTabPage.ContentSuggestions.MenuOpenedScore"/>
  <affected-histogram
      name="NewTabPage.ContentSuggestions.MenuOpenedScoreNormalized"/>
  <affected-histogram name="NewTabPage.ContentSuggestions.MoreButtonClicked"/>
  <affected-histogram name="NewTabPage.ContentSuggestions.MoreButtonShown"/>
  <affected-histogram name="NewTabPage.ContentSuggestions.OpenDisposition"/>
  <affected-histogram name="NewTabPage.ContentSuggestions.Opened"/>
  <affected-histogram name="NewTabPage.ContentSuggestions.OpenedAge"/>
  <affected-histogram name="NewTabPage.ContentSuggestions.OpenedCategoryIndex"/>
  <affected-histogram name="NewTabPage.ContentSuggestions.OpenedScore"/>
  <affected-histogram
      name="NewTabPage.ContentSuggestions.OpenedScoreNormalized"/>
  <affected-histogram name="NewTabPage.ContentSuggestions.Shown"/>
  <affected-histogram name="NewTabPage.ContentSuggestions.ShownAge"/>
  <affected-histogram name="NewTabPage.ContentSuggestions.ShownScore"/>
  <affected-histogram
      name="NewTabPage.ContentSuggestions.ShownScoreNormalized"/>
  <affected-histogram name="NewTabPage.ContentSuggestions.VisitDuration"/>
</histogram_suffixes>

<histogram_suffixes name="ContextMenuFromApp" separator=".">
  <suffix name="FromApp" label="The source of the context menu was an app."/>
  <suffix name="NotFromApp"
      label="The source of the context menu was shelf or wallpaper."/>
  <affected-histogram name="Apps.ContextMenuExecuteCommand"/>
</histogram_suffixes>

<histogram_suffixes name="ContextMenuType" separator=".">
  <suffix name="Image"
      label="The context menu was shown for a (non-link) image"/>
  <suffix name="ImageLink"
      label="The context menu was shown for an image which is also a link"/>
  <suffix name="Link"
      label="The context menu was shown for a (non-image) link"/>
  <suffix name="MisspelledWord"
      label="The context menu was shown for a misspelt word"/>
  <suffix name="SelectedText"
      label="The context menu was shown for a text selection"/>
  <suffix name="Video" label="The context menu was shown for a video"/>
  <affected-histogram name="ContextMenu.SelectedOption"/>
</histogram_suffixes>

<histogram_suffixes name="ContextType" separator=".">
  <suffix name="BlimpRenderCompositor"
      label="BlimpCompositor compositor command buffer context">
    <obsolete>
      Deprecated and removed from code as of 02/2017.
    </obsolete>
  </suffix>
  <suffix name="BlimpRenderWorker"
      label="BlimpCompositor worker command buffer context">
    <obsolete>
      Deprecated and removed from code as of 02/2017.
    </obsolete>
  </suffix>
  <suffix name="BrowserCompositor"
      label="A BrowserCompositor GPU command buffer context"/>
  <suffix name="BrowserMainThread"
      label="A BrowserMainThread GPU command buffer context"/>
  <suffix name="DisplayCompositor"
      label="A display compositor GPU command buffer context"/>
  <suffix name="Media" label="The media worker command buffer context"/>
  <suffix name="MusClient" label="A mus client command buffer context"/>
  <suffix name="RenderCompositor"
      label="A RenderCompositor GPU command buffer context"/>
  <suffix name="RenderMainThread"
      label="A RenderMainThread GPU command buffer context"/>
  <suffix name="RenderWorker"
      label="A RenderWorker GPU command buffer context"/>
  <suffix name="UICompositor" label="The UI compositor command buffer context">
    <obsolete>
      Deprecated and removed from code as of 07/2018.
    </obsolete>
  </suffix>
  <suffix name="Unknown" label="A GPU command buffer context of unknown type"/>
  <suffix name="VideoAccelerator"
      label="A VideoAccelerator GPU command buffer context"/>
  <suffix name="VideoCapture"
      label="A VideoCapture GPU command buffer context"/>
  <suffix name="WebGL" label="A WebGL GPU command buffer context"/>
  <affected-histogram name="GPU.ContextLost"/>
</histogram_suffixes>

<histogram_suffixes name="ContextualSearchQuickActionCategory" separator=".">
  <suffix name="Address"/>
  <suffix name="Email"/>
  <suffix name="Event"/>
  <suffix name="None"/>
  <suffix name="Phone"/>
  <suffix name="Website"/>
  <affected-histogram name="Search.ContextualSearchQuickActions.Clicked"/>
  <affected-histogram
      name="Search.ContextualSearchQuickActions.IntentResolution"/>
  <affected-histogram name="Search.ContextualSearchQuickActions.ResultsSeen"/>
</histogram_suffixes>

<histogram_suffixes name="CookieConnectionType" separator="">
  <suffix name="NonSecure" label="For non-secure,"/>
  <suffix name="Secure" label="For secure,"/>
  <affected-histogram name="Cookie.AgeFor"/>
  <affected-histogram name="Cookie.AllAgesFor"/>
</histogram_suffixes>

<histogram_suffixes name="CookieSiteAffinity" separator="">
  <suffix name="CrossSiteRequest" label="cross-site requests."/>
  <suffix name="SameSiteRequest" label="same-site requests."/>
  <affected-histogram name="Cookie.AgeForNonSecure"/>
  <affected-histogram name="Cookie.AgeForSecure"/>
  <affected-histogram name="Cookie.AllAgesForNonSecure"/>
  <affected-histogram name="Cookie.AllAgesForSecure"/>
</histogram_suffixes>

<histogram_suffixes name="CreditCardScanSuccess" separator="_">
  <suffix name="Cancelled" label="Credit card scan was cancelled."/>
  <suffix name="Completed" label="Credit card scan completed."/>
  <affected-histogram name="Autofill.ScanCreditCard.Duration"/>
</histogram_suffixes>

<histogram_suffixes name="CrosFirstRunStep" separator="">
  <suffix name="AppList"/>
  <suffix name="Help"/>
  <suffix name="Tray"/>
  <affected-histogram name="CrosFirstRun.TimeSpentOnStep"/>
</histogram_suffixes>

<histogram_suffixes name="CurrentTabState" separator="_">
  <suffix name="Active"
      label="For an active tab which is shown foreground in a browser window."/>
  <suffix name="Detached"
      label="For a tab that is being dragged by user to outside of the
             browser window."/>
  <suffix name="Inactive"
      label="For tabs in background and not shown to user."/>
  <suffix name="Initial" label="For a tab that is just being created."/>
  <affected-histogram name="Tabs.StateTransfer.Target"/>
  <affected-histogram name="Tabs.StateTransfer.Time"/>
</histogram_suffixes>

<histogram_suffixes name="CustomTabOpenSource" separator=".">
  <suffix name="Other" label="CustomTab opened by other apps."/>
  <suffix name="TWA" label="CustomTab opened by Trusted Web Activity."/>
  <suffix name="WebApk" label="CustomTab opened by WebApk."/>
  <suffix name="Webapp" label="CustomTab opened by Webapp."/>
  <affected-histogram name="CustomTab.SessionDuration"/>
</histogram_suffixes>

<histogram_suffixes name="CustomTabs.DetachedResourceRequestFinalStatus"
    separator=".">
  <suffix name="Failure" label="Failed detached request"/>
  <suffix name="Success" label="Successful detached request"/>
  <affected-histogram name="CustomTabs.DetachedResourceRequest.Duration"/>
  <affected-histogram name="CustomTabs.DetachedResourceRequest.RedirectsCount"/>
</histogram_suffixes>

<histogram_suffixes name="DataReductionProxy" separator="_">
  <obsolete>
    Deprecated 9/2016.
  </obsolete>
  <suffix name="DataReductionProxy"
      label="Only page loads through the data reduction proxy are considered."/>
  <suffix name="HTTPS_DataReductionProxy"
      label="Only page loads through the data reduction proxy through an HTTP
             tunnel for HTTPS origins are considered."/>
  <affected-histogram name="PLT.NT_Connect"/>
  <affected-histogram name="PLT.NT_DelayBeforeConnect"/>
  <affected-histogram name="PLT.NT_DelayBeforeDomainLookup"/>
  <affected-histogram name="PLT.NT_DelayBeforeDomLoading"/>
  <affected-histogram name="PLT.NT_DelayBeforeFetch"/>
  <affected-histogram name="PLT.NT_DelayBeforeFetchRedirect"/>
  <affected-histogram name="PLT.NT_DelayBeforeLoadEvent"/>
  <affected-histogram name="PLT.NT_DelayBeforeRequest"/>
  <affected-histogram name="PLT.NT_DomainLookup"/>
  <affected-histogram name="PLT.NT_DomContentLoaded"/>
  <affected-histogram name="PLT.NT_DomInteractive"/>
  <affected-histogram name="PLT.NT_DomLoading"/>
  <affected-histogram name="PLT.NT_LoadEvent"/>
  <affected-histogram name="PLT.NT_Redirect"/>
  <affected-histogram name="PLT.NT_Request"/>
  <affected-histogram name="PLT.NT_Response"/>
  <affected-histogram name="PLT.PT_BeginToCommit"/>
  <affected-histogram name="PLT.PT_BeginToFinish"/>
  <affected-histogram name="PLT.PT_BeginToFinishDoc"/>
  <affected-histogram name="PLT.PT_CommitToFinish"/>
  <affected-histogram name="PLT.PT_CommitToFinishDoc"/>
  <affected-histogram name="PLT.PT_FinishDocToFinish"/>
  <affected-histogram name="PLT.PT_RequestToCommit"/>
  <affected-histogram name="PLT.PT_RequestToDomContentLoaded"/>
  <affected-histogram name="PLT.PT_RequestToFinish"/>
  <affected-histogram name="PLT.PT_RequestToFinishDoc"/>
  <affected-histogram name="PLT.PT_RequestToStart"/>
  <affected-histogram name="PLT.PT_StartToCommit"/>
  <affected-histogram name="PLT.PT_StartToFinish"/>
</histogram_suffixes>

<histogram_suffixes
    name="DataReductionProxy.LoFi.Accuracy.DifferentRecordingIntervals"
    separator=".">
  <suffix name="15"
      label="Recorded approximately 15 seconds after navigation start"/>
  <suffix name="30"
      label="Recorded approximately 30 seconds after navigation start"/>
  <suffix name="60"
      label="Recorded approximately 60 seconds after navigation start"/>
  <affected-histogram name="DataReductionProxy.LoFi.Accuracy"/>
</histogram_suffixes>

<histogram_suffixes name="DataReductionProxy.MimeType" separator="_">
  <suffix name="Application" label="Application mime-type"/>
  <suffix name="Unknown"
      label="Deprecated. Moved to UnknownMime in M46. Unknown mime-type"/>
  <suffix name="UnknownMime" label="Unknown mime-type"/>
  <suffix name="Video" label="Video mime-type"/>
  <affected-histogram name="Net.DailyContentLength"/>
  <affected-histogram name="Net.DailyContentLength_DataReductionProxyEnabled"/>
  <affected-histogram name="Net.DailyContentLength_ViaDataReductionProxy"/>
  <affected-histogram name="Net.DailyOriginalContentLength"/>
  <affected-histogram
      name="Net.DailyOriginalContentLength_DataReductionProxyEnabled"/>
  <affected-histogram
      name="Net.DailyOriginalContentLength_ViaDataReductionProxy"/>
</histogram_suffixes>

<histogram_suffixes name="DataReductionProxy.NetworkTypes" separator=".">
  <suffix name="2G" label="On 2G network"/>
  <suffix name="3G" label="On 3G Network"/>
  <suffix name="4G" label="On 4G network"/>
  <suffix name="Bluetooth" label="On Bluetooth network"/>
  <suffix name="Ethernet" label="On Ethernet network"/>
  <suffix name="None" label="With no detected network"/>
  <suffix name="Unknown" label="On Unknown network"/>
  <suffix name="WiFi" label="On WiFi network"/>
  <affected-histogram name="DataReductionProxy.AutoLoFiAccuracy"/>
  <affected-histogram name="DataReductionProxy.AutoLoFiRequestHeaderState"/>
  <affected-histogram name="DataReductionProxy.LoFi.Accuracy.15"/>
  <affected-histogram name="DataReductionProxy.LoFi.Accuracy.30"/>
  <affected-histogram name="DataReductionProxy.LoFi.Accuracy.60"/>
  <affected-histogram name="DataReductionProxy.LoFi.ImplicitOptOutAction"/>
</histogram_suffixes>

<histogram_suffixes
    name="DataReductionProxy.WarmupURL.FetchAttemptsBeforeSuccess"
    separator=".">
  <suffix name="Insecure.Core"
      label="Records fetch attempts for the first core insecure data
             reduction proxy"/>
  <suffix name="Insecure.NonCore"
      label="Records fetch attempts for the first non-core insecure data
             reduction proxy"/>
  <suffix name="Secure.Core"
      label="Records fetch attempts for the first core secure data reduction
             proxy"/>
  <suffix name="Secure.NonCore"
      label="Records fetch attempts for the first non-core secure data
             reduction proxy"/>
  <affected-histogram
      name="DataReductionProxy.WarmupURL.FetchAttemptsBeforeSuccess"/>
</histogram_suffixes>

<histogram_suffixes name="DataReductionProxy.WithValidOCL.LoFiOn" separator=".">
  <obsolete>
    Deprecated 04/2018.
  </obsolete>
  <suffix name="LoFiOn"
      label="Only page loads through the data reduction proxy with Lo-Fi On
             are considered."/>
  <affected-histogram name="Net.HttpContentLengthDifferenceWithValidOCL"/>
  <affected-histogram name="Net.HttpContentLengthWithValidOCL"/>
  <affected-histogram name="Net.HttpOriginalContentLengthWithValidOCL"/>
</histogram_suffixes>

<histogram_suffixes name="DataReductionProxy_AutoLoFi" separator="_">
  <obsolete>
    Deprecated 09/2016.
  </obsolete>
  <suffix name="DataReductionProxy_AutoLoFiOff"
      label="Only page loads through the data reduction proxy with auto LoFi
             disabled are considered."/>
  <suffix name="DataReductionProxy_AutoLoFiOn"
      label="Only page loads through the data reduction proxy with auto LoFi
             enabled are considered."/>
  <suffix name="HTTPS_DataReductionProxy_AutoLoFiOff"
      label="Only page loads through the data reduction proxy through an HTTP
             tunnel for HTTPS origins with auto LoFi disabled are considered."/>
  <suffix name="HTTPS_DataReductionProxy_AutoLoFiOn"
      label="Only page loads through the data reduction proxy through an HTTP
             tunnel for HTTPS origins with auto LoFi enabled are considered."/>
  <affected-histogram name="PLT.BeginToFirstPaint"/>
  <affected-histogram name="PLT.PT_BeginToFinish"/>
  <affected-histogram name="PLT.PT_CommitToFinish"/>
  <affected-histogram name="PLT.PT_RequestToDomContentLoaded"/>
  <affected-histogram name="PLT.PT_RequestToFinish"/>
  <affected-histogram name="PLT.PT_StartToFinish"/>
</histogram_suffixes>

<histogram_suffixes name="DataReductionProxy_TamperingFingerprints"
    separator="_">
  <suffix name="ChromeProxy"
      label="for each carrier, number of tamperings detected on Chrome-Proxy
             header"/>
  <suffix name="CompressionRatio_Image"
      label="the histogram of compression ratio of images"/>
  <suffix name="CompressionRatio_Image_0_10KB"
      label="the histogram of compression ratio of images whose sizes are in
             the range of 0-10KB"/>
  <suffix name="CompressionRatio_Image_10_100KB"
      label="the histogram of compression ratio of images whose sizes are in
             the range of 10-100KB"/>
  <suffix name="CompressionRatio_Image_100_500KB"
      label="the histogram of compression ratio of images whose sizes are in
             the range of 100-500KB"/>
  <suffix name="CompressionRatio_Image_500KB"
      label="the histogram of compression ratio of images whose sizes are
             larger than 500KB"/>
  <suffix name="CompressionRatio_Image_GIF"
      label="the histogram of compression ratio of GIF images"/>
  <suffix name="CompressionRatio_Image_JPG"
      label="the histogram of compression ratio of JPG images"/>
  <suffix name="CompressionRatio_Image_PNG"
      label="the histogram of compression ratio of PNG images"/>
  <suffix name="CompressionRatio_Image_WEBP"
      label="the histogram of compression ratio of WEBP images"/>
  <suffix name="CompressionRatio_Video"
      label="the histogram of compression ratio of videos"/>
  <suffix name="ContentLength"
      label="for each carrier, total number of responses whose Content-Length
             header has been tampered with"/>
  <suffix name="ContentLength_CSS"
      label="for each carrier, number of CSS responses whose Content-Length
             header has been tampered with"/>
  <suffix name="ContentLength_Image"
      label="for each carrier, number of image responses whose Content-Length
             header has been tampered with"/>
  <suffix name="ContentLength_Image_GIF"
      label="for each carrier, number of GIF image responses whose
             Content-Length header has been tampered with"/>
  <suffix name="ContentLength_Image_JPG"
      label="for each carrier, number of JPEG image responses whose
             Content-Length header has been tampered with"/>
  <suffix name="ContentLength_Image_PNG"
      label="for each carrier, number of PNG image responses whose
             Content-Length header has been tampered with"/>
  <suffix name="ContentLength_Image_WEBP"
      label="for each carrier, number of WebP image responses whose
             Content-Length header has been tampered with"/>
  <suffix name="ContentLength_JS"
      label="for each carrier, number of JavaScript responses whose
             Content-Length header has been tampered with"/>
  <suffix name="ContentLength_Other"
      label="for each carrier, number of other type responses whose
             Content-Length header has been tampered with"/>
  <suffix name="ContentLength_Video"
      label="for each carrier, number of video responses whose Content-Length
             header has been tampered with"/>
  <suffix name="OtherHeaders"
      label="for each carrier, number of tamperings detected on a list of
             headers"/>
  <suffix name="Via"
      label="for each carrier, number of tamperings detected on Via header"/>
  <suffix name="Via_Missing"
      label="for each carrier, number of responses whose data reduction
             proxy's Via header is missing"/>
  <affected-histogram name="DataReductionProxy.HeaderTamperedHTTP"/>
  <affected-histogram name="DataReductionProxy.HeaderTamperedHTTPS"/>
</histogram_suffixes>

<histogram_suffixes name="DataReductionProxy_TamperingTotal" separator="_">
  <suffix name="Total" label="total number of tamperings detected"/>
  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTP"/>
  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTP_CSS"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_0_10KB"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_100_500KB"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_10_100KB"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_500KB"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_GIF"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_JPG"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_PNG"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_WEBP"/>
  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTP_JS"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperDetectionHTTP_Video"/>
  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTPS"/>
  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTPS_CSS"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_0_10KB"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_100_500KB"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_10_100KB"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_500KB"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_GIF"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_JPG"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_PNG"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_WEBP"/>
  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTPS_JS"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Video"/>
  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionPassHTTP"/>
  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionPassHTTPS"/>
  <affected-histogram name="DataReductionProxy.HeaderTamperedHTTP_ChromeProxy"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperedHTTP_ContentLength"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperedHTTP_ContentLength_CSS"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperedHTTP_ContentLength_Image"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperedHTTP_ContentLength_JS"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperedHTTP_ContentLength_Other"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperedHTTP_OtherHeaders"/>
  <affected-histogram name="DataReductionProxy.HeaderTamperedHTTP_Via"/>
  <affected-histogram name="DataReductionProxy.HeaderTamperedHTTP_Via_Missing"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperedHTTPS_ChromeProxy"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperedHTTPS_ContentLength"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperedHTTPS_ContentLength_CSS"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperedHTTPS_ContentLength_Image"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperedHTTPS_ContentLength_JS"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperedHTTPS_ContentLength_Other"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperedHTTPS_OtherHeaders"/>
  <affected-histogram name="DataReductionProxy.HeaderTamperedHTTPS_Via"/>
  <affected-histogram
      name="DataReductionProxy.HeaderTamperedHTTPS_Via_Missing"/>
</histogram_suffixes>

<histogram_suffixes name="DataReductionProxy_TotalCounts" separator="_">
  <suffix name="CSS" label="CSS count"/>
  <suffix name="Image" label="image count"/>
  <suffix name="Image_0_10KB" label="image counts of 0-10KB"/>
  <suffix name="Image_10_100KB" label="image counts of 10-100KB"/>
  <suffix name="Image_100_500KB" label="image counts of 100-500KB"/>
  <suffix name="Image_500KB" label="image counts of more than 500KB"/>
  <suffix name="Image_GIF" label="GIF image count"/>
  <suffix name="Image_JPG" label="JPG image count"/>
  <suffix name="Image_PNG" label="PNG image count"/>
  <suffix name="Image_WEBP" label="WEBP image count"/>
  <suffix name="JS" label="JavaScript count"/>
  <suffix name="Video" label="Video count"/>
  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTP"/>
  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTPS"/>
</histogram_suffixes>

<histogram_suffixes name="DataReductionProxyBypassedBytes" separator=".">
  <suffix name="Current" label="Bypass due to explicit instruction"/>
  <suffix name="CurrentApplicationOctetStream"
      label="Bypass due to explicit instruction for
             'application/octet-stream' content type"/>
  <suffix name="CurrentAudioVideo"
      label="Bypass due to explicit instruction for audio/video"/>
  <suffix name="LocalBypassRules"
      label="Bypass due to client-side bypass rules or because the proxy
             config was missing at the client"/>
  <suffix name="LongAll" label="Long bypass"/>
  <suffix name="LongTriggeringRequest" label="Triggering request long bypass"/>
  <suffix name="Malformed407"
      label="Bypass due to 407 response from proxy without a challenge"/>
  <suffix name="ManagedProxyConfig"
      label="Deprecated 1/9/2014 (M-41). Bypass due to a managed config"/>
  <suffix name="MediumAll" label="Medium bypass"/>
  <suffix name="MediumTriggeringRequest"
      label="Triggering request medium bypass"/>
  <suffix name="MissingViaHeader4xx"
      label="Bypass due to a 4xx missing via header"/>
  <suffix name="MissingViaHeaderOther"
      label="Bypass due to other missing via header"/>
  <suffix name="NetworkErrorOther" label="Bypass due to any network error"/>
  <suffix name="NetworkErrorProxyCertificateInvalid"
      label="Bypass due to invalid proxy certificate"/>
  <suffix name="NetworkErrorProxyConnectionFailed"
      label="Bypass due to failed proxy connection"/>
  <suffix name="NetworkErrorTimedOut" label="Bypass due to network timeout"/>
  <suffix name="ProxyOverridden"
      label="Bypass due to another proxy taking precedence"/>
  <suffix name="ShortAll" label="Short bypass"/>
  <suffix name="ShortAudioVideo"
      label="Triggering request short bypass due to audio/video"/>
  <suffix name="ShortTriggeringRequest"
      label="Triggering request short bypass"/>
  <suffix name="SSL" label="Bypass due to SSL"/>
  <suffix name="Status500HttpInternalServerError"
      label="Bypass due to internal server error"/>
  <suffix name="Status502HttpBadGateway"
      label="Bypass because the request URI was too long"/>
  <suffix name="Status503HttpServiceUnavailable"
      label="Bypass due to a 503 response"/>
  <suffix name="URLRedirectCycle" label="Bypass due to URL redirect cycle"/>
  <affected-histogram name="DataReductionProxy.BypassedBytes"/>
</histogram_suffixes>

<histogram_suffixes name="DataReductionProxyConfigFetchLostBytes" separator="_">
  <obsolete>
    Removed in Feb 2016.
  </obsolete>
  <suffix name="0" label="Bucket 0 for gathering multiple data points."/>
  <suffix name="1" label="Bucket 1 for gathering multiple data points."/>
  <suffix name="2" label="Bucket 2 for gathering multiple data points."/>
  <suffix name="3" label="Bucket 3 for gathering multiple data points."/>
  <suffix name="4" label="Bucket 4 for gathering multiple data points."/>
  <suffix name="5" label="Bucket 5 for gathering multiple data points."/>
  <suffix name="6" label="Bucket 6 for gathering multiple data points."/>
  <suffix name="7" label="Bucket 7 for gathering multiple data points."/>
  <suffix name="8" label="Bucket 8 for gathering multiple data points."/>
  <suffix name="9" label="Bucket 9 for gathering multiple data points."/>
  <affected-histogram name="DataReductionProxy.ConfigFetchLostBytesCL"/>
  <affected-histogram name="DataReductionProxy.ConfigFetchLostBytesDiff"/>
  <affected-histogram name="DataReductionProxy.ConfigFetchLostBytesOCL"/>
</histogram_suffixes>

<histogram_suffixes name="DataReductionProxyMissingViaHeaderBytes"
    separator=".">
  <obsolete>
    Removed 2018/04.
  </obsolete>
  <suffix name="4xx" label="Response with 4xx response code"/>
  <suffix name="Other" label="Other response"/>
  <affected-histogram name="DataReductionProxy.MissingViaHeader.Bytes"/>
</histogram_suffixes>

<histogram_suffixes name="DataReductionProxyMissingViaHeaderResponseCode"
    separator=".">
  <suffix name="Fallback" label="Fallback data reduction proxy"/>
  <suffix name="Primary" label="Primary data reduction proxy"/>
  <affected-histogram name="DataReductionProxy.MissingViaHeader.ResponseCode"/>
</histogram_suffixes>

<histogram_suffixes name="DataReductionProxyRequestCompletionErrorCodes"
    separator=".">
  <suffix name="Fallback" label="Fallback data reduction proxy"/>
  <suffix name="Primary" label="Primary data reduction proxy"/>
  <affected-histogram name="DataReductionProxy.RequestCompletionErrorCodes"/>
</histogram_suffixes>

<histogram_suffixes
    name="DataReductionProxyRequestCompletionErrorCodesMainFrame" separator=".">
  <suffix name="Fallback" label="Fallback data reduction proxy"/>
  <suffix name="Primary" label="Primary data reduction proxy"/>
  <affected-histogram
      name="DataReductionProxy.RequestCompletionErrorCodes.MainFrame"/>
</histogram_suffixes>

<histogram_suffixes name="DataSaverEnabled" separator=".">
  <suffix name="DataSaverDisabled" label="Data Saver is disabled"/>
  <suffix name="DataSaverEnabled" label="Data Saver is enabled"/>
  <affected-histogram name="Previews.ContentLength"/>
  <affected-histogram name="Previews.DataInflation"/>
  <affected-histogram name="Previews.DataInflationPercent"/>
  <affected-histogram name="Previews.DataSavings"/>
  <affected-histogram name="Previews.DataSavingsPercent"/>
  <affected-histogram name="Previews.OriginalContentLength"/>
</histogram_suffixes>

<histogram_suffixes name="DataSaverProxyTypes" separator=".">
  <suffix name="InsecureProxy.Core"
      label="Over an insecure, core data saver proxy."/>
  <suffix name="InsecureProxy.NonCore"
      label="Over an insecure, non-core data saver proxy."/>
  <owner>tbansal@chromium.org</owner>
  <suffix name="SecureProxy.Core"
      label="Over a secure, core data saver proxy."/>
  <suffix name="SecureProxy.NonCore"
      label="Over a secure, non-core data saver proxy."/>
  <affected-histogram
      name="DataReductionProxy.WarmupURLFetcherCallback.SuccessfulFetch"/>
</histogram_suffixes>

<histogram_suffixes name="DataUsageReportSubmissionBytes" separator=".">
  <suffix name="Failed"
      label="Platform external data use observer reported the submission as
             failed"/>
  <suffix name="Lost"
      label="Lost before it could be submitted to platform external data use
             observer"/>
  <suffix name="Successful"
      label="Platform external data use observer reported the submission as
             successful"/>
  <suffix name="TimedOut"
      label="Submission of the report to the platform external data use
             observer timed out"/>
  <affected-histogram name="DataUsage.ReportSubmission.Bytes"/>
</histogram_suffixes>

<histogram_suffixes name="DataUse.AppTabState.Dimensions" separator=".">
  <suffix name="Downstream.AppBackground"/>
  <suffix name="Downstream.AppForeground.TabBackground"/>
  <suffix name="Downstream.AppForeground.TabForeground"/>
  <suffix name="Upstream.AppBackground"/>
  <suffix name="Upstream.AppForeground.TabBackground"/>
  <suffix name="Upstream.AppForeground.TabForeground"/>
  <affected-histogram name="DataUse.AppTabState"/>
</histogram_suffixes>

<histogram_suffixes name="DataUse.Bytes" separator=".">
  <suffix name="Delegate" label="As reported by the network delegate."/>
  <suffix name="OS"
      label="As reported by the operating system. Currently logged only on
             Android."/>
  <affected-histogram name="DataUse.BytesReceived"/>
  <affected-histogram name="DataUse.BytesSent"/>
</histogram_suffixes>

<histogram_suffixes name="DataUse.Dimensions" separator=".">
  <suffix name="Downstream.Background.Cellular"/>
  <suffix name="Downstream.Background.NotCellular"/>
  <suffix name="Downstream.Foreground.Cellular"/>
  <suffix name="Downstream.Foreground.NotCellular"/>
  <suffix name="Downstream.Unknown.Cellular"/>
  <suffix name="Downstream.Unknown.NotCellular"/>
  <suffix name="Upstream.Background.Cellular"/>
  <suffix name="Upstream.Background.NotCellular"/>
  <suffix name="Upstream.Foreground.Cellular"/>
  <suffix name="Upstream.Foreground.NotCellular"/>
  <suffix name="Upstream.Unknown.Cellular"/>
  <suffix name="Upstream.Unknown.NotCellular"/>
  <affected-histogram name="DataUse.TrafficSize.System"/>
  <affected-histogram name="DataUse.TrafficSize.User"/>
</histogram_suffixes>

<histogram_suffixes name="DataUse.Dimensions.AllServices" separator=".">
  <obsolete>
    Replaced by version without network-type breakdown in June, 2018.
  </obsolete>
  <suffix name="Downstream.Background.Cellular">
    <obsolete>
      Replaced by KB version in October, 2017.
    </obsolete>
  </suffix>
  <suffix name="Downstream.Background.CellularKB"/>
  <suffix name="Downstream.Background.NotCellular">
    <obsolete>
      Replaced by KB version in October, 2017.
    </obsolete>
  </suffix>
  <suffix name="Downstream.Background.NotCellularKB"/>
  <suffix name="Downstream.Foreground.Cellular">
    <obsolete>
      Replaced by KB version in October, 2017.
    </obsolete>
  </suffix>
  <suffix name="Downstream.Foreground.CellularKB"/>
  <suffix name="Downstream.Foreground.NotCellular">
    <obsolete>
      Replaced by KB version in October, 2017.
    </obsolete>
  </suffix>
  <suffix name="Downstream.Foreground.NotCellularKB"/>
  <suffix name="Downstream.Unknown.Cellular">
    <obsolete>
      Replaced by KB version in October, 2017.
    </obsolete>
  </suffix>
  <suffix name="Downstream.Unknown.CellularKB"/>
  <suffix name="Downstream.Unknown.NotCellular">
    <obsolete>
      Replaced by KB version in October, 2017.
    </obsolete>
  </suffix>
  <suffix name="Downstream.Unknown.NotCellularKB"/>
  <suffix name="Upstream.Background.Cellular">
    <obsolete>
      Replaced by KB version in October, 2017.
    </obsolete>
  </suffix>
  <suffix name="Upstream.Background.CellularKB"/>
  <suffix name="Upstream.Background.NotCellular">
    <obsolete>
      Replaced by KB version in October, 2017.
    </obsolete>
  </suffix>
  <suffix name="Upstream.Background.NotCellularKB"/>
  <suffix name="Upstream.Foreground.Cellular">
    <obsolete>
      Replaced by KB version in October, 2017.
    </obsolete>
  </suffix>
  <suffix name="Upstream.Foreground.CellularKB"/>
  <suffix name="Upstream.Foreground.NotCellular">
    <obsolete>
      Replaced by KB version in October, 2017.
    </obsolete>
  </suffix>
  <suffix name="Upstream.Foreground.NotCellularKB"/>
  <suffix name="Upstream.Unknown.Cellular">
    <obsolete>
      Replaced by KB version in October, 2017.
    </obsolete>
  </suffix>
  <suffix name="Upstream.Unknown.CellularKB"/>
  <suffix name="Upstream.Unknown.NotCellular">
    <obsolete>
      Replaced by KB version in October, 2017.
    </obsolete>
  </suffix>
  <suffix name="Upstream.Unknown.NotCellularKB"/>
  <affected-histogram name="DataUse.MessageSize.AllServices"/>
</histogram_suffixes>

<histogram_suffixes name="DataUse.Dimensions.AllServicesKB" separator=".">
  <suffix name="Downstream.Background"/>
  <suffix name="Downstream.Foreground"/>
  <suffix name="Upstream.Background"/>
  <suffix name="Upstream.Foreground"/>
  <affected-histogram name="DataReductionProxy.LastWeekAggregateKB.Services"/>
  <affected-histogram name="DataReductionProxy.ThisWeekAggregateKB.Services"/>
  <affected-histogram name="DataUse.AllServicesKB"/>
</histogram_suffixes>

<histogram_suffixes name="DataUse.Service.Types" separator=".">
  <suffix name="Autofill"/>
  <suffix name="DomainReliability"/>
  <suffix name="GAIA"/>
  <suffix name="GCMDriver"/>
  <suffix name="GoogleURLTracker"/>
  <suffix name="ImageFetcherUntagged"/>
  <suffix name="Invalidation"/>
  <suffix name="LargeIconService"/>
  <suffix name="MachineIntelligence"/>
  <suffix name="NotTagged"/>
  <suffix name="NTPSnippets">
    <obsolete>
      Deprecated March 2017
    </obsolete>
  </suffix>
  <suffix name="NTPSnippetsSuggestions"/>
  <suffix name="NTPSnippetsThumbnails"/>
  <suffix name="Omnibox"/>
  <suffix name="Policy"/>
  <suffix name="ProfileDownloader"/>
  <suffix name="Rappor"/>
  <suffix name="SafeBrowsing"/>
  <suffix name="SpellChecker"/>
  <suffix name="Suggestions"/>
  <suffix name="Sync"/>
  <suffix name="Translate"/>
  <suffix name="UMA"/>
  <suffix name="UpdateClient"/>
  <suffix name="Variations"/>
  <suffix name="WebResourceService"/>
  <affected-histogram name="DataUse.MessageSize"/>
</histogram_suffixes>

<histogram_suffixes name="DataUse.TrafficSource" separator=".">
  <suffix name="System"/>
  <suffix name="User"/>
  <affected-histogram name="DataUse.BackgroundToDataRecievedPerByte"/>
  <affected-histogram name="DataUse.BackgroundToFirstDownstream"/>
</histogram_suffixes>

<histogram_suffixes name="DefaultAppsExperiment" separator="_">
  <suffix name="NoDefaultApps" label="User's without default apps installed"/>
  <suffix name="WithDefaultApps" label="User's with default apps installed"/>
  <affected-histogram name="Extensions.AppTabLaunchType"/>
  <affected-histogram name="Extensions.ExtensionInstalled"/>
  <affected-histogram name="Extensions.ExtensionUninstalled"/>
  <affected-histogram name="NewTabPage.DefaultPageType"/>
  <affected-histogram name="NewTabPage.SelectedPageType"/>
  <affected-histogram name="NtpHandler.AttachShownPageType"/>
  <affected-histogram name="NtpHandler.SelectedShownPageType"/>
  <affected-histogram name="Profile.AppCount"/>
</histogram_suffixes>

<histogram_suffixes name="DefaultPinnedApps" separator="_">
  <obsolete>
    Deprecated as of 12/2013. Default pinned apps trial is finished.
  </obsolete>
  <suffix name="Alternate"/>
  <suffix name="Control"/>
  <suffix name="Existing"/>
  <affected-histogram name="Cros.ClickOnShelf"/>
</histogram_suffixes>

<histogram_suffixes name="DeprecatedPrerenderSource" separator="_"
    ordering="prefix">
  <obsolete>
    Deprecated August 2016
  </obsolete>
  <suffix name="" label="All prerenders."/>
  <suffix name="exp1" label="Likelihood threshold experiment 1.">
    <obsolete>
      Deprecated April 2015
    </obsolete>
  </suffix>
  <suffix name="exp2" label="Likelihood threshold experiment 2.">
    <obsolete>
      Deprecated April 2015
    </obsolete>
  </suffix>
  <suffix name="exp3" label="Likelihood threshold experiment 3.">
    <obsolete>
      Deprecated April 2015
    </obsolete>
  </suffix>
  <suffix name="exp4" label="Likelihood threshold experiment 4.">
    <obsolete>
      Deprecated April 2015
    </obsolete>
  </suffix>
  <suffix name="exp5" label="Likelihood threshold experiment 5.">
    <obsolete>
      Deprecated April 2015
    </obsolete>
  </suffix>
  <suffix name="exp6" label="Likelihood threshold experiment 6.">
    <obsolete>
      Deprecated April 2015
    </obsolete>
  </suffix>
  <suffix name="exp7" label="Likelihood threshold experiment 7.">
    <obsolete>
      Deprecated April 2015
    </obsolete>
  </suffix>
  <suffix name="exp8" label="Likelihood threshold experiment 8.">
    <obsolete>
      Deprecated April 2015
    </obsolete>
  </suffix>
  <suffix name="exp9" label="Likelihood threshold experiment 9.">
    <obsolete>
      Deprecated April 2015
    </obsolete>
  </suffix>
  <suffix name="externalrequest" label="Externally triggered prerender."/>
  <suffix name="externalrequestforced"
      label="Forced prerender regardless of network."/>
  <suffix name="gws" label="GWS triggered prerender."/>
  <suffix name="Instant" label="Instant search prerender.">
    <obsolete>
      Deprecated October 2017
    </obsolete>
  </suffix>
  <suffix name="localpredictor" label="Local predictor triggered prerender.">
    <obsolete>
      Deprecated April 2015
    </obsolete>
  </suffix>
  <suffix name="offline"
      label="Prerender triggered for saving a page for offline use.">
    <obsolete>
      Deprecated October 2017
    </obsolete>
  </suffix>
  <suffix name="omnibox" label="Triggered from the omnibox."/>
  <suffix name="wash" label="Multiple sources could have triggered.">
    <obsolete>
      Deprecated April 2017
    </obsolete>
  </suffix>
  <suffix name="web" label="Link triggered prerender."/>
  <suffix name="webcross"
      label="Link triggered prerender, rel=prerender, cross domain."/>
  <suffix name="webnext" label="Link triggered prerender, rel=next."/>
  <suffix name="websame"
      label="Link triggered prerender, rel=prerender, same domain."/>
  <affected-histogram name="Prerender.FinalStatus_Prerender5minTTL"/>
  <affected-histogram name="Prerender.FinalStatus_PrerenderControl"/>
  <affected-histogram name="Prerender.FinalStatus_PrerenderEnabled"/>
  <affected-histogram name="Prerender.FinalStatus_PrerenderMatchComplete"/>
  <affected-histogram name="Prerender.FinalStatus_PrerenderMulti"/>
  <affected-histogram name="Prerender.FinalStatus_PrerenderNoUse"/>
  <affected-histogram name="Prerender.FinalStatusMatchComplete"/>
  <affected-histogram
      name="Prerender.FinalStatusMatchComplete_Prerender5minTTL"/>
  <affected-histogram
      name="Prerender.FinalStatusMatchComplete_PrerenderControl"/>
  <affected-histogram
      name="Prerender.FinalStatusMatchComplete_PrerenderEnabled"/>
  <affected-histogram
      name="Prerender.FinalStatusMatchComplete_PrerenderMatchComplete"/>
  <affected-histogram name="Prerender.FinalStatusMatchComplete_PrerenderMulti"/>
  <affected-histogram name="Prerender.FinalStatusMatchComplete_PrerenderNoUse"/>
  <affected-histogram name="Prerender.FractionPixelsFinalAtSwapin"/>
  <affected-histogram
      name="Prerender.FractionPixelsFinalAtSwapin_Prerender5minTTL"/>
  <affected-histogram
      name="Prerender.FractionPixelsFinalAtSwapin_PrerenderControl"/>
  <affected-histogram
      name="Prerender.FractionPixelsFinalAtSwapin_PrerenderEnabled"/>
  <affected-histogram
      name="Prerender.FractionPixelsFinalAtSwapin_PrerenderMatchComplete"/>
  <affected-histogram
      name="Prerender.FractionPixelsFinalAtSwapin_PrerenderMulti"/>
  <affected-histogram
      name="Prerender.FractionPixelsFinalAtSwapin_PrerenderNoUse"/>
  <affected-histogram name="Prerender.LocalPredictorEvent"/>
  <affected-histogram name="Prerender.LocalPredictorEvent_Prerender5minTTL"/>
  <affected-histogram name="Prerender.LocalPredictorEvent_PrerenderControl"/>
  <affected-histogram name="Prerender.LocalPredictorEvent_PrerenderEnabled"/>
  <affected-histogram
      name="Prerender.LocalPredictorEvent_PrerenderMatchComplete"/>
  <affected-histogram name="Prerender.LocalPredictorEvent_PrerenderMulti"/>
  <affected-histogram name="Prerender.LocalPredictorEvent_PrerenderNoUse"/>
  <affected-histogram name="Prerender.PerceivedPLT_Prerender5minTTL"/>
  <affected-histogram name="Prerender.PerceivedPLT_PrerenderControl"/>
  <affected-histogram name="Prerender.PerceivedPLT_PrerenderEnabled"/>
  <affected-histogram name="Prerender.PerceivedPLT_PrerenderMatchComplete"/>
  <affected-histogram name="Prerender.PerceivedPLT_PrerenderMulti"/>
  <affected-histogram name="Prerender.PerceivedPLT_PrerenderNoUse"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMiss_Prerender5minTTL"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMiss_PrerenderControl"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMiss_PrerenderEnabled"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMiss_PrerenderMatchComplete"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMiss_PrerenderMulti"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMiss_PrerenderNoUse"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_Prerender5minTTL"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_PrerenderControl"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_PrerenderEnabled"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_PrerenderMatchComplete"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_PrerenderMulti"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_PrerenderNoUse"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissBoth_Prerender5minTTL"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissBoth_PrerenderControl"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissBoth_PrerenderEnabled"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissBoth_PrerenderMatchComplete"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissBoth_PrerenderMulti"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissBoth_PrerenderNoUse"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_Prerender5minTTL"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_PrerenderControl"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_PrerenderEnabled"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_PrerenderMatchComplete"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_PrerenderMulti"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_PrerenderNoUse"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_Prerender5minTTL"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_PrerenderControl"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_PrerenderEnabled"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_PrerenderMatchComplete"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_PrerenderMulti"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_PrerenderNoUse"/>
  <affected-histogram name="Prerender.PerceivedPLTMatched_Prerender5minTTL"/>
  <affected-histogram name="Prerender.PerceivedPLTMatched_PrerenderControl"/>
  <affected-histogram name="Prerender.PerceivedPLTMatched_PrerenderEnabled"/>
  <affected-histogram
      name="Prerender.PerceivedPLTMatched_PrerenderMatchComplete"/>
  <affected-histogram name="Prerender.PerceivedPLTMatched_PrerenderMulti"/>
  <affected-histogram name="Prerender.PerceivedPLTMatched_PrerenderNoUse"/>
  <affected-histogram name="Prerender.PerceivedPLTMatchedComplete"/>
  <affected-histogram
      name="Prerender.PerceivedPLTMatchedComplete_Prerender5minTTL"/>
  <affected-histogram
      name="Prerender.PerceivedPLTMatchedComplete_PrerenderControl"/>
  <affected-histogram
      name="Prerender.PerceivedPLTMatchedComplete_PrerenderEnabled"/>
  <affected-histogram
      name="Prerender.PerceivedPLTMatchedComplete_PrerenderMatchComplete"/>
  <affected-histogram
      name="Prerender.PerceivedPLTMatchedComplete_PrerenderMulti"/>
  <affected-histogram
      name="Prerender.PerceivedPLTMatchedComplete_PrerenderNoUse"/>
  <affected-histogram name="Prerender.PerceivedPLTWindowed_PrerenderEnabled"/>
  <affected-histogram
      name="Prerender.PerceivedPLTWindowNotMatched_Prerender5minTTL"/>
  <affected-histogram
      name="Prerender.PerceivedPLTWindowNotMatched_PrerenderControl"/>
  <affected-histogram
      name="Prerender.PerceivedPLTWindowNotMatched_PrerenderEnabled"/>
  <affected-histogram
      name="Prerender.PerceivedPLTWindowNotMatched_PrerenderMatchComplete"/>
  <affected-histogram
      name="Prerender.PerceivedPLTWindowNotMatched_PrerenderMulti"/>
  <affected-histogram
      name="Prerender.PerceivedPLTWindowNotMatched_PrerenderNoUse"/>
  <affected-histogram name="Prerender.PercentLoadDoneAtSwapin"/>
  <affected-histogram
      name="Prerender.PercentLoadDoneAtSwapin_Prerender5minTTL"/>
  <affected-histogram
      name="Prerender.PercentLoadDoneAtSwapin_PrerenderControl"/>
  <affected-histogram
      name="Prerender.PercentLoadDoneAtSwapin_PrerenderEnabled"/>
  <affected-histogram
      name="Prerender.PercentLoadDoneAtSwapin_PrerenderMatchComplete"/>
  <affected-histogram name="Prerender.PercentLoadDoneAtSwapin_PrerenderMulti"/>
  <affected-histogram name="Prerender.PercentLoadDoneAtSwapin_PrerenderNoUse"/>
  <affected-histogram
      name="Prerender.PrerenderNotSwappedInPLT_Prerender5minTTL"/>
  <affected-histogram
      name="Prerender.PrerenderNotSwappedInPLT_PrerenderControl"/>
  <affected-histogram
      name="Prerender.PrerenderNotSwappedInPLT_PrerenderEnabled"/>
  <affected-histogram
      name="Prerender.PrerenderNotSwappedInPLT_PrerenderMatchComplete"/>
  <affected-histogram name="Prerender.PrerenderNotSwappedInPLT_PrerenderMulti"/>
  <affected-histogram name="Prerender.PrerenderNotSwappedInPLT_PrerenderNoUse"/>
  <affected-histogram
      name="Prerender.SimulatedLocalBrowsingBaselinePLT_Prerender5minTTL"/>
  <affected-histogram
      name="Prerender.SimulatedLocalBrowsingBaselinePLT_PrerenderControl"/>
  <affected-histogram
      name="Prerender.SimulatedLocalBrowsingBaselinePLT_PrerenderEnabled"/>
  <affected-histogram
      name="Prerender.SimulatedLocalBrowsingBaselinePLT_PrerenderMatchComplete"/>
  <affected-histogram
      name="Prerender.SimulatedLocalBrowsingBaselinePLT_PrerenderMulti"/>
  <affected-histogram
      name="Prerender.SimulatedLocalBrowsingBaselinePLT_PrerenderNoUse"/>
  <affected-histogram
      name="Prerender.SimulatedLocalBrowsingPLT_Prerender5minTTL"/>
  <affected-histogram
      name="Prerender.SimulatedLocalBrowsingPLT_PrerenderControl"/>
  <affected-histogram
      name="Prerender.SimulatedLocalBrowsingPLT_PrerenderEnabled"/>
  <affected-histogram
      name="Prerender.SimulatedLocalBrowsingPLT_PrerenderMatchComplete"/>
  <affected-histogram
      name="Prerender.SimulatedLocalBrowsingPLT_PrerenderMulti"/>
  <affected-histogram
      name="Prerender.SimulatedLocalBrowsingPLT_PrerenderNoUse"/>
</histogram_suffixes>

<histogram_suffixes name="DesktopIOSEntryPoints" separator="."
    ordering="prefix">
  <suffix name="BookmarksFootNote"/>
  <suffix name="BookmarksNewBubble"/>
  <suffix name="HistoryPage"/>
  <suffix name="SavePasswordsNewBubble"/>
  <affected-histogram name="DesktopIOSPromotion.DismissalReason"/>
  <affected-histogram name="DesktopIOSPromotion.SMSToSigninTime"/>
</histogram_suffixes>

<histogram_suffixes name="DesktopIOSPromotionSMSSent" separator="."
    ordering="prefix">
  <suffix name="NoSMS" label="No SMS was sent from the promotion."/>
  <suffix name="SMSSent" label="SMS sent from the promotion."/>
  <affected-histogram name="DesktopIOSPromotion.IOSSigninReason"/>
  <affected-histogram name="DesktopIOSPromotion.VariationSigninReason"/>
</histogram_suffixes>

<histogram_suffixes name="DialogTypes" separator="." ordering="prefix">
  <suffix name="BubbleDialogDelegateView"
      label="Counts dialog boxes created using BubbleDialogDelegateView.
             These are a subset of those created with DialogDelegateView
             (which, in turn, are a subset of those created with
             DialogDelegate)."/>
  <suffix name="DialogDelegate"
      label="Counts dialog boxes created using DialogDelegate."/>
  <suffix name="DialogDelegateView"
      label="Counts dialog boxes created using DialogDelegateView. These are
             a subset of those created with DialogDelegate."/>
  <affected-histogram name="Dialog.Create"/>
</histogram_suffixes>

<histogram_suffixes name="DiscardReason" separator=".">
  <suffix name="Extension" label="An extension discarded a tab."/>
  <suffix name="Proactive"
      label="The browser proactively discarded a tab to avoid entering a
             memory pressure state."/>
  <suffix name="Urgent"
      label="The browser urgently discarded a tab because there was memory
             pressure."/>
  <affected-histogram name="Discarding.OnlineOnReload"/>
</histogram_suffixes>

<histogram_suffixes name="DiskUsagePerUserCount" separator=".">
  <suffix name="1User" label="Only 1 user exists on device."/>
  <suffix name="2Users" label="2 users exist on device."/>
  <suffix name="3Users" label="3 users exist on device."/>
  <suffix name="4Users" label="4 users exist on device."/>
  <suffix name="5Users" label="5 users exist on device."/>
  <suffix name="6Users" label="6 users exist on device."/>
  <suffix name="7OrMoreUsers" label="7 or more users exist on device."/>
  <affected-histogram name="Platform.DiskUsage.Cache_Avg"/>
  <affected-histogram name="Platform.DiskUsage.Cache_Max"/>
  <affected-histogram name="Platform.DiskUsage.Downloads_Avg"/>
  <affected-histogram name="Platform.DiskUsage.Downloads_Max"/>
  <affected-histogram name="Platform.DiskUsage.GCache_Avg"/>
  <affected-histogram name="Platform.DiskUsage.GCache_Max"/>
  <affected-histogram name="Platform.DiskUsage.LeastUsedAccountDays"/>
</histogram_suffixes>

<histogram_suffixes name="DNS.HostCache.UpdateStale.AddressListDeltaType"
    separator="_">
  <suffix name="Disjoint" label="All different addresses."/>
  <suffix name="Identical" label="Same addresses, in the same order."/>
  <suffix name="Overlap" label="Some same addreses, some different."/>
  <suffix name="Reordered" label="Same addresses, in a different order."/>
  <affected-histogram name="DNS.HostCache.UpdateStale.ExpiredBy"/>
  <affected-histogram name="DNS.HostCache.UpdateStale.NetworkChanges"/>
</histogram_suffixes>

<histogram_suffixes name="DnsImpact2" separator="_">
  <suffix name="disabled_prefetch"
      label="DNS pre-resolving is disabled in these clients"/>
  <suffix name="disabled_prefetch_4_connections"
      label="DNS pre-resolving is disabled in these clients, and a maximum of
             4 connections per host was allowed"/>
  <suffix name="enabled_prefetch_4_connections"
      label="a maximum of 4 connections per host was allowed in these clients"/>
  <suffix name="parallel_4_prefetch"
      label="DNS pre-resolving was only doing 4 concurrent speculative
             resolutions in this test"/>
  <affected-histogram name="Net.Dns_Resolution_And_TCP_Connection_Latency"/>
  <affected-histogram name="Net.TCP_Connection_Idle_Sockets">
    <with-suffix name="disabled_prefetch"/>
    <with-suffix name="disabled_prefetch_4_connections"/>
    <with-suffix name="enabled_prefetch_4_connections"/>
  </affected-histogram>
  <affected-histogram name="Net.TCP_Connection_Latency"/>
  <affected-histogram name="Net.Transaction_Connected"/>
  <affected-histogram name="Net.Transaction_Connected_New"/>
  <affected-histogram name="Net.Transaction_Connected_New_b"/>
  <affected-histogram name="Net.Transaction_Connected_Under_10"/>
  <affected-histogram name="Net.Transaction_Latency"/>
  <affected-histogram name="Net.Transaction_Latency_b"/>
  <affected-histogram name="Net.Transaction_Latency_Total"/>
  <affected-histogram name="Net.Transaction_Latency_Total_New_Connection"/>
  <affected-histogram
      name="Net.Transaction_Latency_Total_New_Connection_Under_10"/>
  <affected-histogram name="Net.Transaction_Latency_Total_Under_10"/>
  <affected-histogram name="Net.Transaction_Latency_Under_10"/>
  <affected-histogram name="PLT.RequestToFinish">
    <with-suffix name="parallel_4_prefetch"/>
  </affected-histogram>
</histogram_suffixes>

<histogram_suffixes name="DnsImpact3" separator="_">
  <suffix name="disabled_prefetch" label="with DNS pre-resolving disabled"/>
  <suffix name="parallel_4_prefetch"
      label="with only 4 concurrent speculative resolutions done in parallel"/>
  <affected-histogram name="Net.Transaction_Connected_New">
    <with-suffix name="disabled_prefetch"/>
  </affected-histogram>
  <affected-histogram name="Renderer2.FinishDocToFinish"/>
  <affected-histogram name="Renderer2.RequestToFinish"/>
  <affected-histogram name="Renderer2.RequestToFinish_L">
    <with-suffix name="disabled_prefetch"/>
  </affected-histogram>
  <affected-histogram name="Renderer2.RequestToFirstLayout"/>
  <affected-histogram name="Renderer2.RequestToStart"/>
  <affected-histogram name="Renderer2.StartToFinish"/>
  <affected-histogram name="Renderer2.StartToFinishDoc"/>
  <affected-histogram name="Renderer2.StartToFirstLayout"/>
  <affected-histogram name="Renderer4.RequestToFinish">
    <with-suffix name="parallel_4_prefetch"/>
  </affected-histogram>
  <affected-histogram name="Renderer4.StartToFinish">
    <with-suffix name="parallel_4_prefetch"/>
  </affected-histogram>
</histogram_suffixes>

<histogram_suffixes name="DnsParallelism" separator="_">
  <suffix name="parallel_6"
      label="with only 6 concurrent resolutions done in parallel"/>
  <suffix name="parallel_7"
      label="with only 7 concurrent resolutions done in parallel"/>
  <suffix name="parallel_8"
      label="with only 8 concurrent resolutions done in parallel"/>
  <suffix name="parallel_9"
      label="with only 9 concurrent resolutions done in parallel"/>
  <suffix name="parallel_10"
      label="with only 10 concurrent resolutions done in parallel"/>
  <suffix name="parallel_14"
      label="with only 14 concurrent resolutions done in parallel"/>
  <suffix name="parallel_20"
      label="with only 20 concurrent resolutions done in parallel"/>
  <suffix name="parallel_default"
      label="with the default number of concurrent resolutions done in
             parallel"/>
  <affected-histogram name="DNS.ResolveCategory"/>
  <affected-histogram name="DNS.ResolveSuccess"/>
</histogram_suffixes>

<histogram_suffixes name="DocsSpecific" separator=".">
  <suffix name="Docs" label="Only for docs.google.com"/>
  <affected-histogram name="appcache.MainResourceResponseRetrieval"/>
  <affected-histogram name="appcache.SubResourceResponseRetrieval"/>
  <affected-histogram name="appcache.UpdateJobResult"/>
  <affected-histogram name="appcache.UpdateProgressAtPointOfFaliure"/>
  <affected-histogram name="appcache.UpdateWasOffOriginAtPointOfFailure"/>
  <affected-histogram name="appcache.UpdateWasStalledAtPointOfFailure"/>
</histogram_suffixes>

<histogram_suffixes name="DomainGoogle" separator="">
  <suffix name="Google" label="only Google cookies are recorded."/>
  <suffix name="Other" label="only NON-Google cookies are recorded."/>
  <affected-histogram name="Cookie.ReinstatedCookies"/>
</histogram_suffixes>

<histogram_suffixes name="DOMStorageCachePurgeReason" separator=".">
  <suffix name="AggressivePurgeTriggered"
      label="Aggressive purge was triggered on memory pressure."/>
  <suffix name="AreaCountLimitExceeded"
      label="Storage areas count exceeded limit."/>
  <suffix name="InactiveOnLowEndDevice"
      label="Inactive areas found in low end device."/>
  <suffix name="ModeratePurgeTriggered"
      label="Moderate purge was triggered on memory pressure."/>
  <suffix name="SizeLimitExceeded" label="Cache size exceeded limit."/>
  <affected-histogram name="LocalStorage.BrowserLocalStorageCachePurgedInKB"/>
  <affected-histogram name="LocalStorageContext.CachePurgedInKB"/>
  <affected-histogram name="SessionStorageContext.CachePurgedInKB"/>
</histogram_suffixes>

<histogram_suffixes name="Download.Parallelizable" separator=".">
  <suffix name="Parallelizable" label="Parallelizable download."/>
  <affected-histogram name="Download.DownloadSize"/>
</histogram_suffixes>

<histogram_suffixes name="Download.Service.CleanUpReason" separator=".">
  <suffix name="HardRecovery" label="File is deleted in hard recovery."/>
  <suffix name="Orphaned" label="No client associated with the file."/>
  <suffix name="Timeout" label="File is deleted after timeout."/>
  <suffix name="Unknown" label="No database entry associated with the file."/>
  <affected-histogram name="Download.Service.Files.CleanUp.External"/>
  <affected-histogram name="Download.Service.Files.CleanUp.Failure"/>
  <affected-histogram name="Download.Service.Files.CleanUp.Success"/>
</histogram_suffixes>

<histogram_suffixes name="Download.Service.Client" separator=".">
  <suffix name="BackgroundFetch" label="Background fetch."/>
  <suffix name="Debugging" label="Debugging client."/>
  <suffix name="MountainInternal" label="Mountain internal client."/>
  <suffix name="OfflinePage" label="Offline page prefetch."/>
  <affected-histogram name="Download.Service.Request.ClientAction"/>
  <affected-histogram name="Download.Service.Request.StartResponse"/>
  <affected-histogram name="Download.Service.Request.StartResult"/>
  <affected-histogram name="Download.Service.Upload.HasUploadData"/>
</histogram_suffixes>

<histogram_suffixes name="Download.Service.CompletionType" separator=".">
  <suffix name="Abort" label="Abort."/>
  <suffix name="Cancel" label="Cancel."/>
  <suffix name="Fail" label="Fail."/>
  <suffix name="Succeed" label="Succeed."/>
  <suffix name="Timeout" label="Timeout."/>
  <suffix name="Unknown" label="Unknown."/>
  <affected-histogram name="Download.Service.Finish.FileSize"/>
</histogram_suffixes>

<histogram_suffixes name="Download.Service.EntryState" separator=".">
  <suffix name="Active" label="The active state."/>
  <suffix name="Available" label="The available state."/>
  <suffix name="Complete" label="The complte state."/>
  <suffix name="New" label="The initial state."/>
  <suffix name="Paused" label="The paused state."/>
  <affected-histogram name="Download.Service.Db.Records"/>
</histogram_suffixes>

<histogram_suffixes name="Download.Service.StartUpStep" separator=".">
  <suffix name="Initialization" label="The initialization start up step."/>
  <suffix name="Recovery" label="The recovery start up step."/>
  <affected-histogram name="Download.Service.StartUpStatus"/>
</histogram_suffixes>

<histogram_suffixes name="Download.Service.TaskType" separator=".">
  <suffix name="CleanUpTask" label="Clean up task."/>
  <suffix name="DownloadTask" label="Download task."/>
  <affected-histogram name="Download.Service.TaskScheduler.Status"/>
</histogram_suffixes>

<histogram_suffixes name="DownloadableStringsTimeouts" separator=".">
  <suffix name="RetryLater" label="Failed with RETRY_LATER error."/>
  <suffix name="ServiceError" label="Failed with SERVICE_ERROR error."/>
  <suffix name="UpdateCheckError"
      label="Failed with UPDATE_CHECK_ERROR error."/>
  <affected-histogram name="DownloadableStrings.Timeout"/>
</histogram_suffixes>

<histogram_suffixes name="DownloadDangerPromptResponse" separator=".">
  <suffix name="Proceed"
      label="The user clicked through and recovered the download."/>
  <suffix name="Shown" label="The user was shown the prompt."/>
  <affected-histogram name="Download.DownloadDangerPrompt.DangerousContent"/>
  <affected-histogram name="Download.DownloadDangerPrompt.DangerousFile"/>
  <affected-histogram name="Download.DownloadDangerPrompt.DangerousHost"/>
  <affected-histogram name="Download.DownloadDangerPrompt.DangerousURL"/>
  <affected-histogram name="Download.DownloadDangerPrompt.PotentiallyUnwanted"/>
  <affected-histogram name="Download.DownloadDangerPrompt.UncommonContent"/>
</histogram_suffixes>

<histogram_suffixes name="DownloadDangerPromptType" separator=".">
  <suffix name="DangerousContent" label="File marked DANGEROUS_CONTENT"/>
  <suffix name="DangerousFile" label="File marked DANGEROUS_FILE"/>
  <suffix name="DangerousHost" label="File marked DANGEROUS_HOST"/>
  <suffix name="DangerousURL" label="File marked DANGEROUS_URL"/>
  <suffix name="PotentiallyUnwanted" label="File marked POTENTIALLY_UNWANTED"/>
  <suffix name="UncommonContent" label="File marked UNCOMMON_CONTENT"/>
  <affected-histogram name="Download.DownloadDangerPrompt"/>
</histogram_suffixes>

<histogram_suffixes name="DownloadSource" separator=".">
  <suffix name="ContextMenu" label="ContextMenu."/>
  <suffix name="DragAndDrop" label="DragAndDrop."/>
  <suffix name="ExtensionAPI" label="ExtensionAPI."/>
  <suffix name="ExtensionInstaller" label="ExtensionInstaller."/>
  <suffix name="FromRenderer" label="FromRenderer."/>
  <suffix name="InternalAPI" label="InternalAPI."/>
  <suffix name="Navigation" label="Navigation."/>
  <suffix name="OfflinePage" label="OfflinePage."/>
  <suffix name="UnknownSource" label="UnknownSource."/>
  <suffix name="WebContentsAPI" label="WebContentsAPI."/>
  <affected-histogram name="Download.Counts"/>
  <affected-histogram name="Download.InterruptedReason"/>
</histogram_suffixes>

<histogram_suffixes name="DownloadType" separator=".">
  <suffix name="Transient" label="Transient download."/>
  <suffix name="UserDownload" label="User download."/>
  <affected-histogram name="Download.PathGenerationEvent"/>
  <affected-histogram name="Download.PathValidationResult"/>
</histogram_suffixes>

<histogram_suffixes name="DownloadWithUnsupportedScheme" separator=".">
  <suffix name="ContentIdScheme" label="downloads with cid scheme"/>
  <suffix name="ContentScheme" label="downloads with content scheme"/>
  <suffix name="FileSystemScheme" label="downloads with filesystem scheme"/>
  <suffix name="FtpScheme" label="downloads with ftp scheme"/>
  <suffix name="GopherScheme" label="downloads with gopher scheme"/>
  <suffix name="JavaScriptScheme" label="downloads with javascript scheme"/>
  <suffix name="LocalFileScheme" label="downloads with file:/// scheme"/>
  <suffix name="OtherUnsupportedScheme" label="Other unsupported schemes"/>
  <suffix name="RemoteFileScheme" label="downloads with file:// scheme"/>
  <suffix name="WSOrWSSScheme" label="downloads with ws or wss scheme"/>
  <affected-histogram name="SBClientDownload.UnsupportedScheme"/>
</histogram_suffixes>

<histogram_suffixes name="DrawQuadsType" separator=".">
  <suffix name="" label=""/>
  <suffix name="Removed"
      label="Captures only draw quads that have removed by draw occlusion.">
    <obsolete>
        Deprecated as of 03/2018. We'd learned enough from this metric and it
      made no sense to keep it around.
    </obsolete>
  </suffix>
  <suffix name="Resized"
      label="Captures only draw quads that have changed size by draw
             occlusion.">
    <obsolete>
        Deprecated as of 03/2018. We'd learned enough from this metric and it
      made no sense to keep it around.
    </obsolete>
  </suffix>
  <suffix name="Skipped"
      label="Captures only draw quads that are too small to apply draw
             occlusion.">
    <obsolete>
        Deprecated as of 03/2018. We'd learned enough from this metric and it
      made no sense to keep it around.
    </obsolete>
  </suffix>
  <suffix name="Smaller"
      label="Captures only draw quads that are smaller than the layer
             occlusion minimum size (160x160).">
    <obsolete>
        Deprecated as of 03/2018. We'd learned enough from this metric and it
      made no sense to keep it around.
    </obsolete>
  </suffix>
  <suffix name="With.Complex.Transform"
      label="Captures only draw quads that need to go through no scale and no
             translation transforms.">
    <obsolete>
      Deprecated as of 03/2018. We'd learned enough from this metric and it made
      no sense to keep it around.
    </obsolete>
  </suffix>
  <affected-histogram name="Compositing.Display.Draw.Quads"/>
</histogram_suffixes>

<histogram_suffixes name="DualCertVerifierTrial" separator="_">
  <suffix name="TrialPrimary"/>
  <suffix name="TrialSecondary"/>
  <affected-histogram name="Net.CertVerifier_First_Job_Latency"/>
  <affected-histogram name="Net.CertVerifier_Job_Latency"/>
</histogram_suffixes>

<histogram_suffixes name="EmePromise" separator=".">
  <suffix name="CloseSession" label="CloseSession promises only."/>
  <suffix name="CreateSession" label="CreateSession promises only.">
    <obsolete>
      Replaced by GenerateRequest.
    </obsolete>
  </suffix>
  <suffix name="GenerateRequest" label="GenerateRequest promises only."/>
  <suffix name="LoadSession" label="LoadSession promises only."/>
  <suffix name="RemoveSession" label="RemoveSession promises only."/>
  <suffix name="UpdateSession" label="UpdateSession promises only."/>
  <affected-histogram name="Media.EME.ClearKey"/>
  <affected-histogram name="Media.EME.Unknown"/>
  <affected-histogram name="Media.EME.Widevine"/>
</histogram_suffixes>

<histogram_suffixes name="EmeTimeToResolvePromise" separator=".">
  <suffix name="GenerateRequest" label="GenerateRequest promises only."/>
  <suffix name="LoadSession" label="LoadSession promises only."/>
  <affected-histogram name="Media.EME.ClearKey.TimeTo"/>
  <affected-histogram name="Media.EME.Unknown.TimeTo"/>
  <affected-histogram name="Media.EME.Widevine.TimeTo"/>
</histogram_suffixes>

<histogram_suffixes name="EngagementScoreBuckets" separator="_">
  <owner>calamity@chromium.org</owner>
  <suffix name="0"/>
  <suffix name="10"/>
  <suffix name="20"/>
  <suffix name="30"/>
  <suffix name="40"/>
  <suffix name="50"/>
  <suffix name="60"/>
  <suffix name="70"/>
  <suffix name="80"/>
  <suffix name="90"/>
  <suffix name="100"/>
  <affected-histogram name="SiteEngagementService.EngagementScoreBucket"/>
</histogram_suffixes>

<histogram_suffixes name="EnterpriseAutoEnrollmentType" separator=".">
  <suffix name="ForcedReenrollment" label="Forced Re-Enrollment"/>
  <suffix name="InitialEnrollment" label="Initial Enrollment Exchange"/>
  <affected-histogram name="Enterprise.AutoEnrollmentBucketDownloadTime"/>
  <affected-histogram name="Enterprise.AutoEnrollmentExtraTime"/>
  <affected-histogram name="Enterprise.AutoEnrollmentProtocolTime"/>
  <affected-histogram name="Enterprise.AutoEnrollmentRequestNetworkErrorCode"/>
  <affected-histogram name="Enterprise.AutoEnrollmentRequestStatus"/>
</histogram_suffixes>

<histogram_suffixes name="EnterpriseRetrievePolicyResponse" separator=".">
  <owner>emaxx@chromium.org</owner>
  <owner>igorcov@chromium.org</owner>
  <suffix name="Device" label="Device policy fetch response."/>
  <suffix name="DeviceLocalAccount"
      label="DeviceLocalAccount policy fetch response."/>
  <suffix name="User" label="User policy fetch response."/>
  <suffix name="UserDuringLogin"
      label="User policy fetch response during login."/>
  <affected-histogram name="Enterprise.RetrievePolicyResponse"/>
</histogram_suffixes>

<histogram_suffixes name="EventLatencyOS" separator=".">
  <suffix name="MOUSE_WHEEL"/>
  <suffix name="TOUCH_MOVED"/>
  <suffix name="TOUCH_PRESSED"/>
  <suffix name="TOUCH_RELEASED"/>
  <affected-histogram name="Event.Latency.OS"/>
</histogram_suffixes>

<histogram_suffixes name="ExitFunnels" separator=".">
  <suffix name="BackgroundOff"/>
  <suffix name="BackgroundOn"/>
  <suffix name="BrowserExit"/>
  <suffix name="EndSession"/>
  <suffix name="ES_CloseApp"/>
  <suffix name="ES_Critical"/>
  <suffix name="ES_Logoff"/>
  <suffix name="ES_Other"/>
  <suffix name="HungBrowserTerminated"/>
  <suffix name="KillProcess"/>
  <suffix name="LastWindowClose"/>
  <suffix name="MessageWindowHung"/>
  <suffix name="MessageWindowNotFound"/>
  <suffix name="MessageWindowVanished"/>
  <suffix name="ProcessSingletonIsShuttingDown"/>
  <suffix name="RendezvousToHungBrowser"/>
  <suffix name="SessionEnding"/>
  <suffix name="TraybarEndSession"/>
  <suffix name="TraybarExit"/>
  <suffix name="WatcherEndSession"/>
  <suffix name="WatcherLogoff"/>
  <suffix name="WatcherQueryEndSession"/>
  <suffix name="WM_ENDSESSION"/>
  <affected-histogram name="Stability.ExitFunnel"/>
</histogram_suffixes>

<histogram_suffixes name="ExpectedQueueingDurationThreshold" separator="_">
  <obsolete>
    Deprecated as of 08/2017. Replaced with ExpectedQueueingDurationThreshold.
  </obsolete>
  <suffix name="GreaterThan.10ms"
      label="Expected Queueing Time greater than 10ms."/>
  <suffix name="GreaterThan.150ms"
      label="Expected Queueing Time greater than 150ms."/>
  <suffix name="GreaterThan.300ms"
      label="Expected Queueing Time greater than 300ms."/>
  <suffix name="GreaterThan.450ms"
      label="Expected Queueing Time greater than 450ms."/>
  <suffix name="LessThan.10ms" label="Expected Queueing Time less than 10ms."/>
  <suffix name="LessThan.150ms"
      label="Expected Queueing Time less than 150ms."/>
  <suffix name="LessThan.300ms"
      label="Expected Queueing Time less than 300ms."/>
  <suffix name="LessThan.450ms"
      label="Expected Queueing Time less than 450ms."/>
  <affected-histogram
      name="RendererScheduler.QueueingDurationWhenExpectedQueueingTime"/>
</histogram_suffixes>

<histogram_suffixes name="ExtensionContextType" separator=".">
  <suffix name="BlessedExtensionContext" label="Blessed Extension Context"/>
  <suffix name="BlessedWebPageContext" label="Blessed Web Page Context"/>
  <suffix name="ContentScriptContext" label="Content Script Context"/>
  <suffix name="LockScreenExtensionContext"
      label="Lock Screen Extension Context"/>
  <suffix name="ServiceWorkerContext" label="Service Worker Context"/>
  <suffix name="UnblessedExtensionContext" label="Unblessed Extension Context"/>
  <suffix name="WebPageContext" label="(unblessed) Web Page Context"/>
  <suffix name="WebUIContext" label="WebUI Context"/>
  <affected-histogram name="Extensions.Bindings.UpdateBindingsForContextTime"/>
</histogram_suffixes>

<histogram_suffixes name="ExtensionFunctionExecutionTime" separator=".">
  <suffix name="1msTo5ms"
      label="Execution took between 1ms and 5ms (tolerable)."/>
  <suffix name="5msTo10ms" label="Execution took between 5ms and 10ms (slow)."/>
  <suffix name="LessThan1ms" label="Execution took less than 1ms (fast)."/>
  <suffix name="Over10ms" label="Execution took over 10ms (glacial)."/>
  <affected-histogram name="Extensions.Functions.FailedTime"/>
  <affected-histogram name="Extensions.Functions.SucceededTime"/>
</histogram_suffixes>

<histogram_suffixes name="ExtensionMessagingPortCreationTime" separator=".">
  <suffix name="InBeforeUnload"
      label="Created during an event handler for the 'beforeunload' event.">
    <obsolete>
      Deprecated and removed from code as of 05/2015.
    </obsolete>
  </suffix>
  <suffix name="InUnload"
      label="Created during an event handler for the 'unload' event.">
    <obsolete>
      Deprecated and removed from code as of 05/2015.
    </obsolete>
  </suffix>
  <suffix name="Normal"
      label="Created during any time other than the 'unload' or 'beforeunload'
             handlers.">
    <obsolete>
      Deprecated and removed from code as of 05/2015.
    </obsolete>
  </suffix>
  <suffix name="Total" label="The total number of ports created."/>
  <affected-histogram name="Extensions.Messaging.ExtensionPortsCreated"/>
</histogram_suffixes>

<histogram_suffixes name="ExtensionMessagingPortType" separator=".">
  <suffix name="Extension" label="A port opened to an extension context."/>
  <suffix name="NativeApp" label="A port opened to a native application."/>
  <suffix name="Tab" label="A port opened to a tab context."/>
  <affected-histogram name="Extensions.Messaging.GetPortIdAsyncTime"/>
  <affected-histogram name="Extensions.Messaging.GetPortIdSyncTime"/>
  <affected-histogram name="Extensions.Messaging.SetPortIdTime"/>
</histogram_suffixes>

<histogram_suffixes name="Extensions.WebRequest.WS_RequestHeaders"
    separator="_">
  <suffix name="Origin" label="origin"/>
  <suffix name="OriginOrCookie" label="origin, cookie, cookie2"/>
  <suffix name="SecOrProxy" label="origin, sec-*, proxy-*"/>
  <suffix name="SecOrProxyExceptProtocol"
      label="origin, sec-* (except for sec-websocket-protocol), proxy-*"/>
  <suffix name="Unsafe"
      label="!net::HttpUtil::IsSafeHeader (except for user-agent)"/>
  <suffix name="WebSocket"
      label="sec-websocket-*, origin, cache-control, pragma, host, upgrade,
             connection"/>
  <suffix name="WebSocketExceptProtocol"
      label="sec-websocket-* (except for sec-websocket-protocol), origin,
             cache-control, pragma, host, upgrade, connection"/>
  <affected-histogram name="Extensions.WebRequest.WS_RequestHeaders"/>
</histogram_suffixes>

<histogram_suffixes name="ExtensionsDatabaseOpen" separator=".">
  <suffix name="Rules" label="Rules backing stores"/>
  <suffix name="Settings" label="Settings backing stores"/>
  <suffix name="State" label="State backing stores"/>
  <affected-histogram name="Extensions.Database.Open"/>
</histogram_suffixes>

<histogram_suffixes name="ExtensionsDatabaseRestore" separator=".">
  <suffix name="Rules" label="Rules backing stores"/>
  <suffix name="Settings" label="Settings backing stores"/>
  <suffix name="State" label="State backing stores"/>
  <affected-histogram name="Extensions.Database.Restore"/>
</histogram_suffixes>

<histogram_suffixes name="ExtensionWebUiPageType" separator=".">
  <suffix name="MD" label="The Material Design chrome://extensions page."/>
  <suffix name="Uber" label="The Uber chrome://extensions page.">
    <obsolete>
      Deprecated and removed from code as of 04/2018.
    </obsolete>
  </suffix>
  <affected-histogram name="Extensions.WebUi.DocumentLoadedInMainFrameTime"/>
  <affected-histogram name="Extensions.WebUi.LoadCompletedInMainFrame"/>
</histogram_suffixes>

<histogram_suffixes name="ExternalExtensionEvent" separator="">
  <suffix name="NonWebstore"
      label="sideloaded extensions that don't update from the webstore"/>
  <suffix name="Webstore"
      label="sideloaded extensions that update from the webstore"/>
  <affected-histogram name="Extensions.ExternalExtensionEvent"/>
</histogram_suffixes>

<histogram_suffixes name="FaviconIconType" separator=".">
  <obsolete>
    Deprecated as of 12/2017.
  </obsolete>
  <suffix name="Favicons" label="Metrics for regular favicons."/>
  <suffix name="LargeIcons" label="Metrics for large non-touch icons."/>
  <suffix name="TouchIcons" label="Metrics for large touch icons."/>
  <affected-histogram name="Favicons.DownloadAttempts"/>
</histogram_suffixes>

<histogram_suffixes name="FieldPredictionSubmissionEvents" separator=".">
  <suffix name="BasedOnAutocomplete"
      label="Quality metrics based on autocomplete attributes."/>
  <suffix name="NoSubmission" label="No observed submission."/>
  <affected-histogram name="Autofill.FieldPrediction.Heuristic"/>
  <affected-histogram name="Autofill.FieldPrediction.Overall"/>
  <affected-histogram name="Autofill.FieldPrediction.Server"/>
  <affected-histogram
      name="Autofill.FieldPredictionQuality.Aggregate.Heuristic"/>
  <affected-histogram name="Autofill.FieldPredictionQuality.Aggregate.Overall"/>
  <affected-histogram name="Autofill.FieldPredictionQuality.Aggregate.Server"/>
  <affected-histogram
      name="Autofill.FieldPredictionQuality.ByFieldType.Heuristic"/>
  <affected-histogram
      name="Autofill.FieldPredictionQuality.ByFieldType.Overall"/>
  <affected-histogram
      name="Autofill.FieldPredictionQuality.ByFieldType.Server"/>
  <affected-histogram
      name="Autofill.NumberOfEditedAutofilledFieldsAtSubmission"/>
  <affected-histogram name="Autofill.Quality.HeuristicType"/>
  <affected-histogram name="Autofill.Quality.HeuristicType.ByFieldType"/>
  <affected-histogram name="Autofill.Quality.PredictedType"/>
  <affected-histogram name="Autofill.Quality.PredictedType.ByFieldType"/>
  <affected-histogram name="Autofill.Quality.ServerType"/>
  <affected-histogram name="Autofill.Quality.ServerType.ByFieldType"/>
</histogram_suffixes>

<histogram_suffixes name="FileBrowserLoad" separator=".">
  <suffix name="BackgroundLaunch"
      label="Time from onLaunched event is called to the window is created."/>
  <suffix name="BackgroundRestart" label="Time to create a window on restart."/>
  <suffix name="BackgroundScript"
      label="Time to initialize backend script to wait for events."/>
  <suffix name="Construct"
      label="Time spent constructing the main Javascript object.">
    <obsolete>
      Deprecated as of 12/2016.
    </obsolete>
  </suffix>
  <suffix name="DOM" label="Time to initialize DOM.">
    <obsolete>
      Deprecated as of 12/2016.
    </obsolete>
  </suffix>
  <suffix name="FileSystem"
      label="Time to get access to the local file system.">
    <obsolete>
      Deprecated as of 9/2013.
    </obsolete>
  </suffix>
  <suffix name="ImportElements"
      label="Time to initialize the polymer elements."/>
  <suffix name="InitBackgroundPage"
      label="Time to initialize the background page."/>
  <suffix name="InitDocuments"
      label="Time to initialize the background page and the elements."/>
  <suffix name="InitSettings" label="Time to restore user settings."/>
  <suffix name="InitUI"
      label="Time to initialize all UI after all elements are initialized."/>
  <suffix name="Parse" label="Time to parse Javascript and CSS (Deprecated).">
    <obsolete>
      Deprecated as of 12/2016.
    </obsolete>
  </suffix>
  <suffix name="Roots" label="Time to enumerate file system roots.">
    <obsolete>
      Deprecated as of 12/2016.
    </obsolete>
  </suffix>
  <suffix name="Script" label="Time to parse Javascript and CSS."/>
  <suffix name="Total"
      label="Total load time from the moment the Javascript started parsing
             till the moment the empty file list is displayed."/>
  <affected-histogram name="FileBrowser.Load"/>
</histogram_suffixes>

<histogram_suffixes name="FileOperations" separator=".">
  <suffix name="DeleteFile.NonRecursive"/>
  <suffix name="DeleteFile.Recursive"/>
  <affected-histogram name="Windows.FilesystemError"/>
  <affected-histogram name="Windows.PostOperationState"/>
</histogram_suffixes>

<histogram_suffixes name="FirstPacketSplit" separator="_">
  <suffix name="first_packet_intact"
      label="with GET/POST headers often using only 1 packet"/>
  <suffix name="first_packet_split"
      label="with all GET/POST requests using at least 2 packets"/>
  <affected-histogram name="Renderer4.Abandoned"/>
  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadNormal"/>
  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadReload"/>
  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadStaleOk"/>
  <affected-histogram name="Renderer4.BeginToFinish_NormalLoad"/>
  <affected-histogram name="Renderer4.LoadType"/>
</histogram_suffixes>

<histogram_suffixes name="FirstUserActionType" separator="">
  <suffix name="Continuation"
      label="and performed an user action indicating that they were
             continuing a task from the last time they used the app"/>
  <suffix name="Expiration"
      label="and did not perform any user actions that indicate either a new
             task or a continued task before some timeout expired"/>
  <suffix name="NewTask"
      label="and performed an user action indicating that they were beginning
             a new task from the last time they used the app"/>
  <affected-histogram name="FirstUserAction.BackgroundTime"/>
</histogram_suffixes>

<histogram_suffixes name="FirstUserActionTypeDevice" separator="">
  <suffix name="Handset" label="(handset only)"/>
  <suffix name="Tablet" label="(tablet only)"/>
  <affected-histogram name="FirstUserAction.BackgroundTimeContinuation"/>
  <affected-histogram name="FirstUserAction.BackgroundTimeExpiration"/>
  <affected-histogram name="FirstUserAction.BackgroundTimeNewTask"/>
</histogram_suffixes>

<histogram_suffixes name="FirstUserActionTypes" separator=".">
  <suffix name="Backgrounded" label="The user sent Chrome to the background"/>
  <suffix name="Continuation"
      label="The user continued the task from the last time they used the app"/>
  <suffix name="NtpCreated" label="The user action open a NTP."/>
  <suffix name="Omnibox" label="The user interacted with the omnibox."/>
  <suffix name="SwitchTabs" label="The user switched tabs."/>
  <affected-histogram name="FirstUserAction.BackgroundTime.MainIntent"/>
</histogram_suffixes>

<histogram_suffixes name="FreedesktopNotificationCapabilitiesId" separator=".">
  <suffix name="ActionIcons" label="action-icons capability"/>
  <suffix name="Actions" label="actions capability"/>
  <suffix name="Body" label="body capability"/>
  <suffix name="BodyHyperlinks" label="body-hyperlinks capability"/>
  <suffix name="BodyImages" label="body-images capability"/>
  <suffix name="BodyMarkup" label="body-markup capability"/>
  <suffix name="IconMulti" label="icon-multi capability"/>
  <suffix name="IconStatic" label="icon-static capability"/>
  <suffix name="Persistence" label="persistence capability"/>
  <suffix name="Sound" label="sound capability"/>
  <affected-histogram name="Notifications.Freedesktop.Capabilities"/>
</histogram_suffixes>

<histogram_suffixes name="FromGWS" separator="_">
  <suffix name="FromGWS"
      label="Only page loads that are a result of a navigation from a web
             search are considered."/>
  <affected-histogram name="PLT.BeginToFinish"/>
  <affected-histogram name="PLT.BeginToFinishDoc"/>
  <affected-histogram name="PLT.BeginToFirstPaint"/>
  <affected-histogram name="PLT.CommitToFirstPaint"/>
  <affected-histogram name="PLT.PT_BeginToCommit"/>
  <affected-histogram name="PLT.PT_BeginToFinish"/>
  <affected-histogram name="PLT.PT_BeginToFinishDoc"/>
  <affected-histogram name="PLT.PT_CommitToFinish"/>
  <affected-histogram name="PLT.PT_CommitToFinishDoc"/>
  <affected-histogram name="PLT.PT_RequestToCommit"/>
  <affected-histogram name="PLT.PT_RequestToDomContentLoaded"/>
  <affected-histogram name="PLT.PT_RequestToFinish"/>
  <affected-histogram name="PLT.PT_RequestToFinishDoc"/>
  <affected-histogram name="PLT.PT_RequestToStart"/>
  <affected-histogram name="PLT.PT_StartToCommit"/>
  <affected-histogram name="PLT.PT_StartToFinish"/>
</histogram_suffixes>

<histogram_suffixes name="GeolocationSettingsDialogSource" separator=".">
  <suffix name="DSE" label="Default search engine"/>
  <suffix name="NonDSE" label="Non-default search engine"/>
  <affected-histogram name="Geolocation.SettingsDialog.AcceptEvent"/>
  <affected-histogram name="Geolocation.SettingsDialog.DenyEvent"/>
  <affected-histogram name="Geolocation.SettingsDialog.ShowEvent"/>
  <affected-histogram name="Geolocation.SettingsDialog.SuppressEvent"/>
</histogram_suffixes>

<histogram_suffixes name="Gesture" separator="_">
  <suffix name="Touch"
      label="Measure the size of scroller that users touch scroll"/>
  <suffix name="Wheel"
      label="Measure the size of scroller that users wheel scroll"/>
  <affected-histogram name="Event.Scroll.ScrollerSize.OnScroll"/>
</histogram_suffixes>

<histogram_suffixes name="GLApisWithErrorReporting" separator="_">
  <suffix name="TexImage2D" label="All GL APIs that allocate a 2D texture."/>
  <suffix name="TexImage3D" label="All GL APIs that allocate a 3D texture."/>
  <affected-histogram name="GPU.Error"/>
</histogram_suffixes>

<histogram_suffixes name="GlobalSdch" separator="_">
  <obsolete>
    Deprecated 2017-9.
  </obsolete>
  <suffix name="global_disable_sdch" label="with SDCH completely disabled"/>
  <suffix name="global_enable_sdch"
      label="with SDCH support for applicable sites"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoad"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadCacheOnly"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
  <affected-histogram name="PLT.BeginToFinishDoc_LinkLoadCacheOnly"/>
  <affected-histogram name="PLT.BeginToFinishDoc_LinkLoadNormal"/>
  <affected-histogram name="PLT.BeginToFinishDoc_LinkLoadReload"/>
  <affected-histogram name="PLT.BeginToFinishDoc_LinkLoadStaleOk"/>
  <affected-histogram name="PLT.BeginToFinishDoc_NormalLoad"/>
  <affected-histogram name="PLT.LoadType"/>
  <affected-histogram name="PLT.RequestToFinish"/>
  <affected-histogram name="PLT.StartToFinish"/>
  <affected-histogram name="Renderer4.BeginToFinish_LinkLoad"/>
  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadCacheOnly"/>
  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadNormal"/>
  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadReload"/>
  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadStaleOk"/>
  <affected-histogram name="Renderer4.BeginToFinish_NormalLoad"/>
  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoad"/>
  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoadCacheOnly"/>
  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoadNormal"/>
  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoadReload"/>
  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoadStaleOk"/>
  <affected-histogram name="Renderer4.BeginToFinishDoc_NormalLoad"/>
  <affected-histogram name="Renderer4.LoadType"/>
  <affected-histogram name="Renderer4.RequestToFinish"/>
  <affected-histogram name="Renderer4.StartToFinish"/>
</histogram_suffixes>

<histogram_suffixes name="GoogleSearchVariations" separator="_">
  <owner>kmadhusu@chromium.org</owner>
  <suffix name="_PrerenderDisabled"
      label="Counts number of Google searches from various access points in
             the Android Chrome browser when prerendering is disabled via
             &quot;Bandwidth management&quot; settings or &quot;Privacy&quot;
             settings. Only recorded on Android."/>
  <suffix name="_PrerenderEnabled"
      label="Counts number of Google searches from various access points in
             the Android Chrome browser when prerendering is enabled via
             &quot;Bandwidth management&quot; settings or &quot;Privacy&quot;
             settings. Only recorded on Android."/>
  <affected-histogram name="GoogleSearch.AccessPoint"/>
</histogram_suffixes>

<histogram_suffixes name="GPU.ContextType" separator=".">
  <suffix name="GLES" label="GLES Context."/>
  <suffix name="WebGL" label="WebGL Context."/>
  <affected-histogram name="GPU.ContextMemory"/>
</histogram_suffixes>

<histogram_suffixes name="GPU.DirectComposition.OverlayFormat" separator=".">
  <suffix name="BGRA" label="BGRA"/>
  <suffix name="NV12" label="NV12"/>
  <suffix name="YUY2" label="YUY2"/>
  <affected-histogram name="GPU.DirectComposition.OverlaySupportFlags2"/>
</histogram_suffixes>

<histogram_suffixes name="GPU.MemorySamplingTime" separator=".">
  <suffix name="Periodic" label="Sampled periodically."/>
  <suffix name="Pressure" label="Sampled on CRITICAL memory pressure signal."/>
  <suffix name="Shutdown" label="Sampled at shutdown."/>
  <affected-histogram name="GPU.ContextMemory.GLES"/>
  <affected-histogram name="GPU.ContextMemory.WebGL"/>
</histogram_suffixes>

<histogram_suffixes name="GPUBlacklistPerFeature" separator=".">
  <owner>vmiura@chromium.org</owner>
  <suffix name="Accelerated2dCanvas" label="Accelerated2dCanvas"/>
  <suffix name="GpuCompositing" label="GpuCompositing"/>
  <suffix name="GpuRasterization" label="GpuRasterization"/>
  <suffix name="Webgl" label="Webgl"/>
  <suffix name="Webgl2" label="Webgl2"/>
  <affected-histogram name="GPU.BlacklistFeatureTestResults"/>
  <affected-histogram name="GPU.BlacklistFeatureTestResultsWindows"/>
  <affected-histogram name="GPU.BlacklistFeatureTestResultsWindows2"/>
</histogram_suffixes>

<histogram_suffixes name="GWSChromeJointExperiment" separator="_">
  <suffix name="Experiment1"
      label="Only page loads that are a result of a navigation from a web
             search under a specific web search/Chrome joint experiment.
             Unused at this moment."/>
  <suffix name="Experiment2"
      label="Only page loads that are a result of a navigation from a web
             search under a specific web search/Chrome joint experiment.
             Unused at this moment."/>
  <suffix name="Experiment3"
      label="Only page loads that are a result of a navigation from a web
             search under a specific web search/Chrome joint experiment.
             Unused at this moment."/>
  <suffix name="Experiment4"
      label="Only page loads that are a result of a navigation from a web
             search under a specific web search/Chrome joint experiment.
             Unused at this moment."/>
  <suffix name="Experiment5"
      label="Only page loads that are a result of a navigation from a web
             search under a specific web search/Chrome joint experiment.
             Unused at this moment."/>
  <suffix name="Experiment6"
      label="Only page loads that are a result of a navigation from a web
             search under a specific web search/Chrome joint experiment.
             Unused at this moment."/>
  <suffix name="Experiment7"
      label="Only page loads that are a result of a navigation from a web
             search under a specific web search/Chrome joint experiment.
             Unused at this moment."/>
  <suffix name="Experiment8"
      label="Only page loads that are a result of a navigation from a web
             search under a specific web search/Chrome joint experiment.
             Unused at this moment."/>
  <suffix name="Experiment9"
      label="Only page loads that are a result of a navigation from a web
             search under a specific web search/Chrome joint experiment.
             Unused at this moment."/>
  <suffix name="Experiment10"
      label="Only page loads that are a result of a navigation from a web
             search under a specific web search/Chrome joint experiment.
             Unused at this moment."/>
  <suffix name="Experiment11"
      label="Only page loads that are a result of a navigation from a web
             search under a specific web search/Chrome joint experiment.
             Unused at this moment."/>
  <suffix name="Experiment12"
      label="Only page loads that are a result of a navigation from a web
             search under a specific web search/Chrome joint experiment.
             Unused at this moment."/>
  <suffix name="Experiment13"
      label="Only page loads that are a result of a navigation from a web
             search under a specific web search/Chrome joint experiment.
             Unused at this moment."/>
  <suffix name="Experiment14"
      label="Only page loads that are a result of a navigation from a web
             search under a specific web search/Chrome joint experiment.
             Unused at this moment."/>
  <suffix name="Experiment15"
      label="Only page loads that are a result of a navigation from a web
             search under a specific web search/Chrome joint experiment.
             Unused at this moment."/>
  <suffix name="Experiment16"
      label="Only page loads that are a result of a navigation from a web
             search under a specific web search/Chrome joint experiment.
             Unused at this moment."/>
  <suffix name="Experiment17"
      label="Only page loads that are a result of a navigation from a web
             search under a specific web search/Chrome joint experiment.
             Unused at this moment."/>
  <suffix name="Experiment18"
      label="Only page loads that are a result of a navigation from a web
             search under a specific web search/Chrome joint experiment.
             Unused at this moment."/>
  <suffix name="Experiment19"
      label="Only page loads that are a result of a navigation from a web
             search under a specific web search/Chrome joint experiment.
             Unused at this moment."/>
  <suffix name="Experiment20"
      label="Only page loads that are a result of a navigation from a web
             search under a specific web search/Chrome joint experiment.
             Unused at this moment."/>
  <affected-histogram name="PLT.BeginToFinish_FromGWS"/>
  <affected-histogram name="PLT.BeginToFinish_NoPreview"/>
  <affected-histogram name="PLT.BeginToFinish_Preview"/>
  <affected-histogram name="PLT.BeginToFinish_WithPreview"/>
  <affected-histogram name="PLT.BeginToFinishDoc_FromGWS"/>
  <affected-histogram name="PLT.BeginToFinishDoc_NoPreview"/>
  <affected-histogram name="PLT.BeginToFinishDoc_Preview"/>
  <affected-histogram name="PLT.BeginToFinishDoc_WithPreview"/>
  <affected-histogram name="PLT.BeginToFirstPaint_FromGWS"/>
  <affected-histogram name="PLT.BeginToFirstPaint_NoPreview"/>
  <affected-histogram name="PLT.BeginToFirstPaint_Preview"/>
  <affected-histogram name="PLT.BeginToFirstPaint_WithPreview"/>
  <affected-histogram name="PLT.CommitToFirstPaint_FromGWS"/>
  <affected-histogram name="PLT.CommitToFirstPaint_NoPreview"/>
  <affected-histogram name="PLT.CommitToFirstPaint_Preview"/>
  <affected-histogram name="PLT.CommitToFirstPaint_WithPreview"/>
  <affected-histogram name="PLT.PT_BeginToCommit_FromGWS"/>
  <affected-histogram name="PLT.PT_BeginToCommit_NoPreview"/>
  <affected-histogram name="PLT.PT_BeginToCommit_Preview"/>
  <affected-histogram name="PLT.PT_BeginToCommit_WithPreview"/>
  <affected-histogram name="PLT.PT_BeginToFinish_FromGWS"/>
  <affected-histogram name="PLT.PT_BeginToFinish_NoPreview"/>
  <affected-histogram name="PLT.PT_BeginToFinish_Preview"/>
  <affected-histogram name="PLT.PT_BeginToFinish_WithPreview"/>
  <affected-histogram name="PLT.PT_BeginToFinishDoc_FromGWS"/>
  <affected-histogram name="PLT.PT_BeginToFinishDoc_NoPreview"/>
  <affected-histogram name="PLT.PT_BeginToFinishDoc_Preview"/>
  <affected-histogram name="PLT.PT_BeginToFinishDoc_WithPreview"/>
  <affected-histogram name="PLT.PT_CommitToFinish_FromGWS"/>
  <affected-histogram name="PLT.PT_CommitToFinish_NoPreview"/>
  <affected-histogram name="PLT.PT_CommitToFinish_Preview"/>
  <affected-histogram name="PLT.PT_CommitToFinish_WithPreview"/>
  <affected-histogram name="PLT.PT_CommitToFinishDoc_FromGWS"/>
  <affected-histogram name="PLT.PT_CommitToFinishDoc_NoPreview"/>
  <affected-histogram name="PLT.PT_CommitToFinishDoc_Preview"/>
  <affected-histogram name="PLT.PT_CommitToFinishDoc_WithPreview"/>
  <affected-histogram name="PLT.PT_RequestToCommit_FromGWS"/>
  <affected-histogram name="PLT.PT_RequestToCommit_NoPreview"/>
  <affected-histogram name="PLT.PT_RequestToCommit_Preview"/>
  <affected-histogram name="PLT.PT_RequestToCommit_WithPreview"/>
  <affected-histogram name="PLT.PT_RequestToDomContentLoaded_FromGWS"/>
  <affected-histogram name="PLT.PT_RequestToDomContentLoaded_NoPreview"/>
  <affected-histogram name="PLT.PT_RequestToDomContentLoaded_Preview"/>
  <affected-histogram name="PLT.PT_RequestToDomContentLoaded_WithPreview"/>
  <affected-histogram name="PLT.PT_RequestToFinish_FromGWS"/>
  <affected-histogram name="PLT.PT_RequestToFinish_NoPreview"/>
  <affected-histogram name="PLT.PT_RequestToFinish_Preview"/>
  <affected-histogram name="PLT.PT_RequestToFinish_WithPreview"/>
  <affected-histogram name="PLT.PT_RequestToFinishDoc_FromGWS"/>
  <affected-histogram name="PLT.PT_RequestToFinishDoc_NoPreview"/>
  <affected-histogram name="PLT.PT_RequestToFinishDoc_Preview"/>
  <affected-histogram name="PLT.PT_RequestToFinishDoc_WithPreview"/>
  <affected-histogram name="PLT.PT_RequestToStart_FromGWS"/>
  <affected-histogram name="PLT.PT_RequestToStart_NoPreview"/>
  <affected-histogram name="PLT.PT_RequestToStart_Preview"/>
  <affected-histogram name="PLT.PT_RequestToStart_WithPreview"/>
  <affected-histogram name="PLT.PT_StartToCommit_FromGWS"/>
  <affected-histogram name="PLT.PT_StartToCommit_NoPreview"/>
  <affected-histogram name="PLT.PT_StartToCommit_Preview"/>
  <affected-histogram name="PLT.PT_StartToCommit_WithPreview"/>
  <affected-histogram name="PLT.PT_StartToFinish_FromGWS"/>
  <affected-histogram name="PLT.PT_StartToFinish_NoPreview"/>
  <affected-histogram name="PLT.PT_StartToFinish_Preview"/>
  <affected-histogram name="PLT.PT_StartToFinish_WithPreview"/>
</histogram_suffixes>

<histogram_suffixes name="HadUserInput" separator=".">
  <obsolete>
    Deprecated as of 05/17/2017.
  </obsolete>
  <suffix name="HadUserInput" label="Had user input"/>
  <suffix name="NoUserInput" label="No user input"/>
  <affected-histogram
      name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
</histogram_suffixes>

<histogram_suffixes name="HandshakeConfirmed" separator=".">
  <suffix name="HandshakeConfirmed" label="the handshake was confirmed"/>
  <affected-histogram name="Net.QuicSession.ConnectionCloseErrorCodeClient"/>
  <affected-histogram name="Net.QuicSession.ConnectionCloseErrorCodeServer"/>
</histogram_suffixes>

<histogram_suffixes name="HighDownloadBandwidth" separator=".">
  <suffix name="HighDownloadBandwidth" label="download with high bandwidth."/>
  <affected-histogram name="Download.Parallelizable.DownloadTime"/>
  <affected-histogram name="Download.Parallelizable.FileSize"/>
</histogram_suffixes>

<histogram_suffixes name="HistogramInconsistencies" separator=".">
  <suffix name="Cronet" label="Cronet histograms."/>
  <affected-histogram name="Histogram.InconsistenciesBrowser"/>
  <affected-histogram name="Histogram.InconsistenciesBrowserUnique"/>
  <affected-histogram name="Histogram.InconsistentSnapshotBrowser"/>
</histogram_suffixes>

<histogram_suffixes name="HttpCacheAccessToDoneCases" separator=".">
  <suffix name="SentRequest" label="The request was sent over the network."/>
  <suffix name="Used"
      label="A cache entry was used without using the network."/>
  <affected-histogram name="HttpCache.AccessToDone"/>
</histogram_suffixes>

<histogram_suffixes name="HttpCacheBeforeSendCases" separator=".">
  <suffix name="CantConditionalize"
      label="A cached resource existed but no conditional request could be
             written."/>
  <suffix name="NotCached" label="There was no pre-existing disk cache entry."/>
  <suffix name="Updated"
      label="A cached resource existed and was updated over the network."/>
  <suffix name="Validated"
      label="A cached resource existed and was validated over the network."/>
  <affected-histogram name="HttpCache.AfterSend"/>
  <affected-histogram name="HttpCache.BeforeSend"/>
  <affected-histogram name="HttpCache.PercentBeforeSend"/>
</histogram_suffixes>

<histogram_suffixes name="HttpJobBytes" separator=".">
  <suffix name="Cache" label="For requests served from the cache."/>
  <suffix name="Net" label="For requests served from the network."/>
  <affected-histogram name="Net.HttpJob.PrefilterBytesRead"/>
</histogram_suffixes>

<histogram_suffixes name="HttpPipeliningCompatibility" separator="_">
  <suffix name="disable_test" label="Do nothing"/>
  <suffix name="enable_test" label="Test connection for HTTP pipelining"/>
  <affected-histogram name="NetConnectivity.Pipeline.0.NetworkError"/>
  <affected-histogram name="NetConnectivity.Pipeline.0.ResponseCode"/>
  <affected-histogram name="NetConnectivity.Pipeline.0.Status"/>
  <affected-histogram name="NetConnectivity.Pipeline.1.NetworkError"/>
  <affected-histogram name="NetConnectivity.Pipeline.1.ResponseCode"/>
  <affected-histogram name="NetConnectivity.Pipeline.1.Status"/>
  <affected-histogram name="NetConnectivity.Pipeline.2.NetworkError"/>
  <affected-histogram name="NetConnectivity.Pipeline.2.ResponseCode"/>
  <affected-histogram name="NetConnectivity.Pipeline.2.Status"/>
  <affected-histogram name="NetConnectivity.Pipeline.3.NetworkError"/>
  <affected-histogram name="NetConnectivity.Pipeline.3.ResponseCode"/>
  <affected-histogram name="NetConnectivity.Pipeline.3.Status"/>
  <affected-histogram name="NetConnectivity.Pipeline.4.NetworkError"/>
  <affected-histogram name="NetConnectivity.Pipeline.4.ResponseCode"/>
  <affected-histogram name="NetConnectivity.Pipeline.4.Status"/>
  <affected-histogram name="NetConnectivity.Pipeline.5.NetworkError"/>
  <affected-histogram name="NetConnectivity.Pipeline.5.ResponseCode"/>
  <affected-histogram name="NetConnectivity.Pipeline.5.Status"/>
  <affected-histogram name="NetConnectivity.Pipeline.AllHTTP11"/>
  <affected-histogram name="NetConnectivity.Pipeline.CanarySuccess"/>
  <affected-histogram name="NetConnectivity.Pipeline.Depth"/>
  <affected-histogram name="NetConnectivity.Pipeline.Success"/>
</histogram_suffixes>

<histogram_suffixes name="HubAndSpokeNavigationUsageType" separator=".">
  <suffix name="FromDefaultSearchEngine"
      label="User navigates to a new page from default search engine result
             page"/>
  <suffix name="FromFormSubmit"
      label="User navigates to a new page from a form submit page"/>
  <suffix name="FromOther"
      label="User navigates to a new page from a page other than a default
             search engine result page or a form submit page"/>
  <affected-histogram name="Tabs.Tasks.HubAndSpokeNavigationUsage"/>
</histogram_suffixes>

<histogram_suffixes name="IdleSktToImpact" separator="_">
  <suffix name="idle_timeout_5"
      label="with 5-second unused idle socket timeout"/>
  <suffix name="idle_timeout_10"
      label="with 10-second unused idle socket timeout"/>
  <suffix name="idle_timeout_20"
      label="with 20-second unused idle socket timeout"/>
  <suffix name="idle_timeout_60"
      label="with 60-second unused idle socket timeout"/>
  <affected-histogram name="PLT.Abandoned"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
</histogram_suffixes>

<histogram_suffixes name="ImageDecoderFileTypes" separator=".">
  <obsolete>
    Deprecated as of 11/29/2016.
  </obsolete>
  <suffix name="BMP" label="Image decoded as BMP"/>
  <suffix name="GIF" label="Image decoded as GIF"/>
  <suffix name="ICO" label="Image decoded as ICO"/>
  <suffix name="JPEG" label="Image decoded as JPEG"/>
  <suffix name="PNG" label="Image decoded as PNG"/>
  <affected-histogram name="Blink.DecodedImage.CanvasExpanded"/>
  <affected-histogram name="Blink.DecodedImage.EffectiveDimensionsLocation"/>
  <affected-histogram name="Blink.DecodedImage.XCanvasExpansion"/>
  <affected-histogram name="Blink.DecodedImage.YCanvasExpansion"/>
</histogram_suffixes>

<histogram_suffixes name="IMEAutoCorrect" separator=".">
  <suffix name="AC0" label="The auto-correct level is 0"/>
  <suffix name="AC1" label="The auto-correct level is 1"/>
  <suffix name="AC2" label="The auto-correct level is 2"/>
  <affected-histogram name="InputMethod.Commit.Index.FR"/>
  <affected-histogram name="InputMethod.Commit.Index.US"/>
  <affected-histogram name="InputMethod.Commit.Type.FR"/>
  <affected-histogram name="InputMethod.Commit.Type.US"/>
</histogram_suffixes>

<histogram_suffixes name="IMEMajorNames" separator=".">
  <suffix name="FR" label="The French keyboard input method"/>
  <suffix name="Pinyin" label="The Chinse Pinyin input method"/>
  <suffix name="US" label="The US keyboard input method"/>
  <affected-histogram name="InputMethod.Commit.Index"/>
  <affected-histogram name="InputMethod.Commit.Type"/>
</histogram_suffixes>

<histogram_suffixes name="IMEVKLatency" separator=".">
  <suffix name="BackgroundSettingsFetched"
      label="Latency for settings fetched from background"/>
  <suffix name="HtmlLoaded" label="Latency for the page is loaded"/>
  <suffix name="KeyboardCreated" label="Latency for the keyboard is created"/>
  <suffix name="KeyboardShown" label="Latency for keyboard is shown"/>
  <suffix name="KeysetLoaded" label="Latency for keyset config is loaded"/>
  <suffix name="LayoutLoaded" label="Latency for layout definition is loaded"/>
  <affected-histogram name="InputMethod.VirtualKeyboard.InitLatency"/>
</histogram_suffixes>

<histogram_suffixes name="ImmediatePageLoadTiming" separator=".">
  <obsolete>
    Deprecated by PageLoad.PaintTiming.NavigationToFirstContentfulPaint.
  </obsolete>
  <suffix name="Immediate"
      label="Logged immediately after a timing update is observed, unlike
             normal PageLoad timing metrics, which are logged at the end of a
             page's lifetime. This metric is temporary and is intended to
             help loading-dev to understand the impact of logging metrics at
             the end of a page load."/>
  <affected-histogram name="PageLoad.Timing2.NavigationToFirstContentfulPaint"/>
</histogram_suffixes>

<histogram_suffixes name="ImportantFileWriterSuffix" separator=".">
  <suffix name="BookmarkStorage"/>
  <suffix name="FeedbackReport"/>
  <affected-histogram name="ImportantFile.FileCreateError"/>
  <affected-histogram name="ImportantFile.FileDeleteError"/>
  <affected-histogram name="ImportantFile.FileOpenError"/>
  <affected-histogram name="ImportantFile.FileRenameError"/>
  <affected-histogram name="ImportantFile.FileWriteError"/>
  <affected-histogram name="ImportantFile.TempFileFailures"/>
  <affected-histogram name="ImportantFile.TimeToWrite"/>
</histogram_suffixes>

<histogram_suffixes name="IndexedDBLevelDBErrnoMethods" separator=".">
  <suffix name="NewLogger" label="ChromiumEnv::NewLogger"/>
  <suffix name="NewSequentialFile" label="ChromiumEnv::NewSequentialFile"/>
  <suffix name="NewWritableFile" label="ChromiumEnv::NewWritableFile"/>
  <suffix name="SequentialFileRead" label="ChromiumSequentialFile::Read"/>
  <suffix name="SequentialFileSkip" label="ChromiumSequentialFile::Skip"/>
  <suffix name="WritableFileAppend" label="ChromiumWritableFile::Append"/>
  <suffix name="WritableFileClose" label="ChromiumWritableFile::Close"/>
  <suffix name="WritableFileFlush" label="ChromiumWritableFile::Flush"/>
  <suffix name="WritableFileSync" label="ChromiumWritableFile::Sync"/>
  <suffix name="WritableFileSyncParent"
      label="ChromiumWritableFile::SyncParent"/>
  <affected-histogram name="WebCore.IndexedDB.LevelDBOpenErrors.Errno"/>
  <affected-histogram name="WebCore.IndexedDB.LevelDBReadErrors.Errno"/>
  <affected-histogram name="WebCore.IndexedDB.LevelDBWriteErrors.Errno"/>
</histogram_suffixes>

<histogram_suffixes name="IndexedDBLevelDBPFEMethods" separator=".">
  <suffix name="CreateDir" label="ChromiumEnv::CreateDir"/>
  <suffix name="DeleteDir" label="ChromiumEnv::DeleteDir"/>
  <suffix name="DeleteFile" label="ChromiumEnv::DeleteFile"/>
  <suffix name="GetChildren" label="ChromiumEnv::GetChildren"/>
  <suffix name="GetFileSize" label="ChromiumEnv::GetFileSize"/>
  <suffix name="LockFile" label="ChromiumEnv::LockFile"/>
  <suffix name="NewAppendableFile" label="ChromiumEnv::NewAppendableFile"/>
  <suffix name="NewRandomAccessFile" label="ChromiumEnv::NewRandomAccessFile"/>
  <suffix name="RandomAccessFileRead" label="ChromiumRandomAccessFile::Read"/>
  <suffix name="RenameFile" label="ChromiumEnv::RenameFile"/>
  <suffix name="UnlockFile" label="ChromiumEnv::UnlockFile"/>
  <affected-histogram name="WebCore.IndexedDB.LevelDBOpenErrors.PFE"/>
  <affected-histogram name="WebCore.IndexedDB.LevelDBReadErrors.PFE"/>
  <affected-histogram name="WebCore.IndexedDB.LevelDBWriteErrors.PFE"/>
</histogram_suffixes>

<histogram_suffixes name="InstallerDownloadSources" separator="">
  <suffix name="HttpPeer" label="Download Source: HTTP Peer"/>
  <suffix name="HttpServer" label="Download Source: HTTP Server"/>
  <suffix name="HttpsServer" label="Download Source: HTTPS Server"/>
  <affected-histogram name="Installer.SuccessfulMBsDownloadedFrom"/>
  <affected-histogram name="Installer.TotalMBsDownloadedFrom"/>
</histogram_suffixes>

<histogram_suffixes name="Instant" separator="_">
  <suffix name="Extended" label="Suggestions + Results"/>
  <suffix name="Instant" label="Results"/>
  <affected-histogram name="Instant.SessionsStorageNamespace"/>
</histogram_suffixes>

<histogram_suffixes name="InstantExtended_QuerytoQuery" separator="_">
  <obsolete>
    All relevant histograms have been marked as obsolete as of Sep 2016.
  </obsolete>
  <owner>macourteau@chromium.org</owner>
  <suffix name="400" label="Omnibox width &lt; 400"/>
  <suffix name="700" label="Omnibox width &lt; 700"/>
  <suffix name="1200" label="Omnibox width &lt; 1200"/>
  <suffix name="large" label="Omnibox width &gt;= 1200"/>
  <affected-histogram name="InstantExtended.PercentageMatchV2_QuerytoQuery"/>
  <affected-histogram name="InstantExtended.PercentageMatchV2_QuerytoURL"/>
  <affected-histogram name="InstantExtended.PercentageMatchV2_URLtoQuery"/>
  <affected-histogram name="InstantExtended.PercentageMatchV2_URLtoURL"/>
</histogram_suffixes>

<histogram_suffixes name="InstantSearchClicks" separator="_">
  <obsolete>
    Deprecated as of 7/2015.
  </obsolete>
  <suffix name="NoPreview"
      label="Only page loads through data reduction proxy that are result of
             navigation from web search and preview version of the page shown
             are considered."/>
  <suffix name="Preview"
      label="Only page loads through data reduction proxy that are result of
             navigation from web search and preview version of the page shown
             are considered."/>
  <suffix name="WithPreview"
      label="Only page loads through data reduction proxy that are result of
             navigation from web search and preview version of the page shown
             are considered."/>
  <affected-histogram name="PLT.BeginToFinish"/>
  <affected-histogram name="PLT.BeginToFinish_ContentPrefetcherReferrer"/>
  <affected-histogram name="PLT.BeginToFinishDoc"/>
  <affected-histogram name="PLT.BeginToFinishDoc_ContentPrefetcherReferrer"/>
  <affected-histogram name="PLT.BeginToFirstPaint"/>
  <affected-histogram name="PLT.CommitToFirstPaint"/>
  <affected-histogram name="PLT.PT_BeginToCommit"/>
  <affected-histogram name="PLT.PT_BeginToFinish"/>
  <affected-histogram name="PLT.PT_BeginToFinishDoc"/>
  <affected-histogram name="PLT.PT_CommitToFinish"/>
  <affected-histogram name="PLT.PT_CommitToFinishDoc"/>
  <affected-histogram name="PLT.PT_RequestToCommit"/>
  <affected-histogram name="PLT.PT_RequestToDomContentLoaded"/>
  <affected-histogram name="PLT.PT_RequestToFinish"/>
  <affected-histogram name="PLT.PT_RequestToFinishDoc"/>
  <affected-histogram name="PLT.PT_RequestToStart"/>
  <affected-histogram name="PLT.PT_StartToCommit"/>
  <affected-histogram name="PLT.PT_StartToFinish"/>
</histogram_suffixes>

<histogram_suffixes name="IntentToFirstCommitZoom" separator=".">
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <suffix name="ZoomedIn" label="Zoomed in view: shorter range, more buckets."/>
  <suffix name="ZoomedOut"
      label="Zoomed out view: longer time range, less buckets."/>
  <affected-histogram
      name="ChromeGeneratedCustomTab.IntentToFirstCommitNavigationTime2"/>
  <affected-histogram
      name="ChromeGeneratedCustomTab.IntentToFirstNavigationStartTime"/>
  <affected-histogram name="CustomTabs.IntentToFirstCommitNavigationTime2"/>
  <affected-histogram name="CustomTabs.IntentToFirstCommitNavigationTime3"/>
  <affected-histogram name="CustomTabs.IntentToFirstNavigationStartTime"/>
  <affected-histogram name="Startup.FirstCommitNavigationTime2"/>
  <affected-histogram name="Startup.FirstCommitNavigationTime3"/>
</histogram_suffixes>

<histogram_suffixes name="Interval" separator="_">
  <obsolete>
    Removed 10/2016.
  </obsolete>
  <suffix name="Interval" label="Interval between two consecutive connects is"/>
  <affected-histogram name="Net.TCP_Connection_Latency"/>
</histogram_suffixes>

<histogram_suffixes name="Interval_20ms_plus_and_minus" separator="_">
  <obsolete>
    Removed 11/2016.
  </obsolete>
  <suffix name="Interval_20ms_Minus"
      label="Interval between two consecutive connects is less than 20ms."/>
  <suffix name="Interval_20ms_Plus"
      label="Interval between two consecutive connects is greater than or
             equal to 20ms."/>
  <affected-histogram name="Net.TCP_Connection_Latency"/>
</histogram_suffixes>

<histogram_suffixes name="Interval_lt_gt_20ms" separator="_">
  <obsolete>
    Removed 11/2016.
  </obsolete>
  <suffix name="GreaterThan_20ms" label="greater than 20ms."/>
  <suffix name="LessThanOrEqual_10ms" label="less than or equal to 10ms."/>
  <suffix name="LessThanOrEqual_20ms"
      label="more than 10ms, and less than or equal to 20ms."/>
  <affected-histogram name="Net.TCP_Connection_Latency_Interval"/>
</histogram_suffixes>

<histogram_suffixes name="IOMode" separator=".">
  <suffix name="Asynchronous"/>
  <suffix name="Synchronous"/>
  <affected-histogram name="Net.QuicSession.PacketWriteTime"/>
</histogram_suffixes>

<histogram_suffixes name="iOS_PLT" separator="">
  <owner>pauljensen@chromium.org</owner>
  <suffix name="" label="not using Data Reduction Proxy"/>
  <suffix name="_DataReductionProxy" label="using Data Reduction Proxy"/>
  <affected-histogram name="Tabs.iOS_PostRedirectPLT"/>
</histogram_suffixes>

<histogram_suffixes name="IOSProductTourScreens" separator="">
  <suffix name="Incognito"/>
  <suffix name="Sync"/>
  <suffix name="Unknown"/>
  <suffix name="VoiceSearch"/>
  <affected-histogram name="ProductTour.IOSScreens"/>
</histogram_suffixes>

<histogram_suffixes name="IPHDatabase" separator=".">
  <suffix name="AvailabilityStore" label="Availability store."/>
  <suffix name="EventStore" label="Event store."/>
  <affected-histogram name="InProductHelp.Db.Init"/>
  <affected-histogram name="InProductHelp.Db.Load"/>
  <affected-histogram name="InProductHelp.Db.Update"/>
</histogram_suffixes>

<histogram_suffixes name="IPHFeatures" separator=".">
  <suffix name="IPH_BadgedReadingList"
      label="In product help badged reading list."/>
  <suffix name="IPH_Bookmark" label="In product help bookmark."/>
  <suffix name="IPH_BottomToolbarTip" label="In product help bottom toolbar."/>
  <suffix name="IPH_ChromeHomeExpand"
      label="In product help for Chrome Home shown on cold start."/>
  <suffix name="IPH_ChromeHomeMenuHeader"
      label="In product help for Chrome Home shown as a header in the app
             menu.">
    <obsolete>
      Unused as of 03/2018
    </obsolete>
  </suffix>
  <suffix name="IPH_ChromeHomePullToRefresh"
      label="In product help for Chrome Home shown after a pull-to-refresh."/>
  <suffix name="IPH_ContextualSearch">
    <obsolete>
      Replaced with IPH_ContextualSearchWebSearch.
    </obsolete>
  </suffix>
  <suffix name="IPH_ContextualSearchOptIn"
      label="In product help for opting-in for contextual search."/>
  <suffix name="IPH_ContextualSearchPanel">
    <obsolete>
      Replaced with IPH_ContextualSearchPromotePanelOpen.
    </obsolete>
  </suffix>
  <suffix name="IPH_ContextualSearchPromotePanelOpen"
      label="In product help for opening the contextual search panel."/>
  <suffix name="IPH_ContextualSearchPromoteTap"
      label="In product help for tap trigger for contextual search."/>
  <suffix name="IPH_ContextualSearchTap">
    <obsolete>
      Replaced with IPH_ContextualSearchPromoteTap.
    </obsolete>
  </suffix>
  <suffix name="IPH_ContextualSearchWebSearch"
      label="In product help for contextual search for users who use web
             search."/>
  <suffix name="IPH_ContextualSuggestions"
      label="In product help for contextual suggestions."/>
  <suffix name="IPH_DataSaverDetail"
      label="In product help data saver detail."/>
  <suffix name="IPH_DataSaverPreview"
      label="In product help data saver preview."/>
  <suffix name="IPH_DownloadHome" label="In product help download home."/>
  <suffix name="IPH_DownloadInfobarDownloadContinuing"
      label="In product help for donwload infobar to inform that downloads
             are still in progress."/>
  <suffix name="IPH_DownloadInfoBarDownloadsAreFaster"
      label="In product help for download infobar informing that downloads
             are now faster than before."/>
  <suffix name="IPH_DownloadPage" label="In product help download page."/>
  <suffix name="IPH_DownloadPageScreenshot"
      label="In product help download page for screenshot."/>
  <suffix name="IPH_DownloadSettings"
      label="In product help to access download settings from download home."/>
  <suffix name="IPH_HomePageButton" label="In product help home page button."/>
  <suffix name="IPH_IncognitoWindow" label="In product help incognito window."/>
  <suffix name="IPH_LongPressToolbarTip"
      label="In product help LongPress toolbar."/>
  <suffix name="IPH_MediaDownload" label="In product help media download."/>
  <suffix name="IPH_NewIncognitoTabTip"
      label="In product help new incognito tab tip."/>
  <suffix name="IPH_NewTab" label="In product help new tab."/>
  <suffix name="IPH_NewTabPageButton"
      label="In product help new tab page button."/>
  <suffix name="IPH_NewTabTip" label="In product help new tab tip."/>
  <affected-histogram name="InProductHelp.NotifyEventReadyState"/>
  <affected-histogram name="InProductHelp.ShouldTriggerHelpUI"/>
</histogram_suffixes>

<histogram_suffixes name="IPProtocolType" separator="_">
  <suffix name="TCP"/>
  <suffix name="UDP"/>
  <affected-histogram name="WebRTC.PeerConnection.CandidatePairType"/>
  <affected-histogram name="WebRTC.SystemMaxConsecutiveBytesDelayed"/>
  <affected-histogram name="WebRTC.SystemPercentPacketsDelayed"/>
  <affected-histogram name="WebRTC.SystemSendPacketDuration"/>
</histogram_suffixes>

<histogram_suffixes name="IPv6_Probe" separator="_">
  <suffix name="IPv6_probe_done"
      label="with IPv6 probed for and possibly disabled"/>
  <suffix name="IPv6_probe_skipped"
      label="with IPv6 not probed, and default OS settings used"/>
  <affected-histogram name="DNS.PrefetchResolution"/>
</histogram_suffixes>

<histogram_suffixes name="JSDialogs.DialogType" separator=".">
  <suffix name="Alert" label="window.alert() dialog"/>
  <suffix name="BeforeUnload" label="dialog caused by window.onbeforeunload"/>
  <suffix name="Confirm" label="window.confirm() dialog"/>
  <suffix name="Prompt" label="window.prompt() dialog"/>
  <affected-histogram name="JSDialogs.DismissalCause"/>
  <affected-histogram name="JSDialogs.IsForemost"/>
  <affected-histogram name="JSDialogs.OriginRelationship"/>
  <affected-histogram name="JSDialogs.Scheme"/>
  <affected-histogram name="JSDialogs.SiteEngagementOfDialogs"/>
</histogram_suffixes>

<histogram_suffixes name="JSDialogs.EngagementList" separator=".">
  <obsolete>
    Deprecated 2017-10.
  </obsolete>
  <suffix name="EngagementHigher" label="site engagement &gt;= 5"/>
  <suffix name="EngagementLessThanOne" label="site engagement &lt; 1"/>
  <suffix name="EngagementNone" label="site engagement = 0"/>
  <suffix name="EngagementOneToFive" label="site engagement &gt;= 1, &lt; 5"/>
  <affected-histogram name="JSDialogs.CharacterCount"/>
</histogram_suffixes>

<histogram_suffixes name="JSDialogs.FrameType" separator=".">
  <suffix name="MainFrame" label="dialog spawned by the main frame"/>
  <suffix name="Subframe" label="dialog spawned by a subframe"/>
  <affected-histogram name="JSDialogs.CharacterCount"/>
</histogram_suffixes>

<histogram_suffixes name="JSDialogs.LeaveStay" separator=".">
  <obsolete>
    Deprecated 2017-10.
  </obsolete>
  <suffix name="Leave" label="user opted to leave the page"/>
  <suffix name="Stay" label="user opted to stay on the page"/>
  <affected-histogram name="JSDialogs.SiteEngagementOfBeforeUnload"/>
</histogram_suffixes>

<histogram_suffixes name="JSDialogs.UserGestureSinceLoad" separator=".">
  <suffix name="NoUserGestureSinceLoad"/>
  <suffix name="UserGestureSinceLoad"/>
  <affected-histogram name="JSDialogs.CharacterCount"/>
</histogram_suffixes>

<histogram_suffixes name="KeySystemPrefix" separator="." ordering="prefix,2">
  <suffix name="ClearKey" label="Clear Key key system"/>
  <suffix name="Unknown" label="Unknown key system"/>
  <suffix name="Widevine" label="Widevine key system"/>
  <affected-histogram name="Media.EME.addKey"/>
  <affected-histogram name="Media.EME.cancelKeyRequest"/>
  <affected-histogram name="Media.EME.CreateCdm"/>
  <affected-histogram name="Media.EME.CreateCdmTime"/>
  <affected-histogram name="Media.EME.generateKeyRequest"/>
  <affected-histogram name="Media.EME.KeyAdded"/>
  <affected-histogram name="Media.EME.KeyError"/>
  <affected-histogram name="Media.EME.KeyStatusSystemCode"/>
  <affected-histogram name="Media.EME.LibraryCdmAvailable"/>
  <affected-histogram name="Media.EME.SystemCode"/>
  <affected-histogram name="Media.EME.TimeTo"/>
</histogram_suffixes>

<histogram_suffixes name="KeySystemSuffix" separator=".">
  <suffix name="ClearKey" label="Clear Key key system"/>
  <suffix name="Unknown" label="Unknown key system"/>
  <suffix name="Widevine" label="Widevine key system"/>
  <affected-histogram name="Media.EME"/>
</histogram_suffixes>

<histogram_suffixes name="LateBindingExperiment" separator="_">
  <suffix name="disable_late_binding" label="socket late binding is disabled"/>
  <suffix name="enable_late_binding" label="socket late binding is enabled"/>
  <affected-histogram name="Net.SocketIdleTimeBeforeNextUse_ReusedSocket"/>
  <affected-histogram name="Net.SocketIdleTimeBeforeNextUse_UnusedSocket"/>
  <affected-histogram name="Net.SocketIdleTimeOnIOError2_ReusedSocket"/>
  <affected-histogram name="Net.SocketIdleTimeOnIOError2_UnusedSocket"/>
  <affected-histogram name="Net.TCPSocketType"/>
  <affected-histogram name="Net.Transaction_Connected"/>
  <affected-histogram name="Net.Transaction_Connected_Under_10"/>
  <affected-histogram name="Net.TransportSocketRequestTime"/>
  <affected-histogram name="Renderer4.BeginToFinish_LinkLoad"/>
  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadNormal"/>
  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadReload"/>
  <affected-histogram name="Renderer4.BeginToFinish_NormalLoad"/>
  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoad"/>
  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoadNormal"/>
  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoadReload"/>
  <affected-histogram name="Renderer4.BeginToFinishDoc_NormalLoad"/>
  <affected-histogram name="Renderer4.RequestToFinish"/>
  <affected-histogram name="Renderer4.StartToFinish"/>
</histogram_suffixes>

<histogram_suffixes name="LevelDBBFEMethods" separator=".">
  <owner>cmumford@chromium.org</owner>
  <suffix name="CreateDir" label="ChromiumEnv::CreateDir"/>
  <suffix name="DeleteDir" label="ChromiumEnv::DeleteDir"/>
  <suffix name="DeleteFile" label="ChromiumEnv::DeleteFile"/>
  <suffix name="GetChildren" label="ChromiumEnv::GetChildren"/>
  <suffix name="GetFileSize" label="ChromiumEnv::GetFileSize"/>
  <suffix name="GetTestDirectory" label="ChromiumEnv::GetTestDirectory"/>
  <suffix name="LockFile" label="ChromiumEnv::LockFile"/>
  <suffix name="NewAppendableFile" label="ChromiumEnv::NewAppendableFile"/>
  <suffix name="NewLogger" label="ChromiumEnv::NewLogger"/>
  <suffix name="NewRandomAccessFile" label="ChromiumEnv::NewRandomAccessFile"/>
  <suffix name="NewSequentialFile" label="ChromiumEnv::NewSequentialFile"/>
  <suffix name="NewWritableFile" label="ChromiumEnv::NewWritableFile"/>
  <suffix name="RandomAccessFileRead" label="ChromiumRandomAccessFile::Read"/>
  <suffix name="RenameFile" label="ChromiumEnv::RenameFile"/>
  <suffix name="SequentialFileRead" label="ChromiumSequentialFile::Read"/>
  <suffix name="SequentialFileSkip" label="ChromiumSequentialFile::Skip"/>
  <suffix name="SyncParent" label="ChromiumWritableFile::SyncParent"/>
  <suffix name="UnlockFile" label="ChromiumEnv::UnlockFile"/>
  <suffix name="WritableFileAppend" label="ChromiumWritableFile::Append"/>
  <suffix name="WritableFileClose" label="ChromiumWritableFile::Close"/>
  <suffix name="WritableFileFlush" label="ChromiumWritableFile::Flush"/>
  <suffix name="WritableFileSync" label="ChromiumWritableFile::Sync"/>
  <affected-histogram name="LevelDBEnv.IDB.IOError.BFE"/>
  <affected-histogram name="LevelDBEnv.IOError.BFE"/>
  <affected-histogram name="LevelDBEnv.ServiceWorker.IOError.BFE"/>
  <affected-histogram name="MojoLevelDBEnv.IOError.BFE"/>
  <affected-histogram name="WebCore.IndexedDB.LevelDBOpenErrors.BFE"/>
  <affected-histogram name="WebCore.IndexedDB.LevelDBReadErrors.BFE"/>
  <affected-histogram name="WebCore.IndexedDB.LevelDBWriteErrors.BFE"/>
</histogram_suffixes>

<histogram_suffixes name="LevelDBEnvBackupRestore" separator="">
  <obsolete>
    Deprecated 08/2016.
  </obsolete>
  <suffix name="Backup" label="Backing up an ldb file."/>
  <suffix name="Restore" label="Restoring an ldb file."/>
  <affected-histogram name="LevelDBEnv.IDB.Table"/>
  <affected-histogram name="LevelDBEnv.ServiceWorker.Table"/>
  <affected-histogram name="LevelDBEnv.Table"/>
</histogram_suffixes>

<histogram_suffixes name="LevelDBEnvMaxFDs" separator=".">
  <obsolete>
    Deprecated as of September 20, 2017.
  </obsolete>
  <suffix name="OtherError"
      label="This histogram shows the limit when open failed for reasons
             other than exceeding the limit."/>
  <suffix name="Success"
      label="This histogram shows the limit when open succeeded."/>
  <suffix name="TooManyOpened"
      label="This histogram shows the limit when open failed because the
             limit had been reached."/>
  <affected-histogram name="LevelDBEnv.IDB.MaxFDs"/>
  <affected-histogram name="LevelDBEnv.MaxFDs"/>
  <affected-histogram name="LevelDBEnv.ServiceWorker.MaxFDs"/>
</histogram_suffixes>

<histogram_suffixes name="LevelDBEnvPlatformFileErrors" separator="">
  <suffix name="CreateDir" label="ChromiumEnv::CreateDir"/>
  <suffix name="GetChildren" label="ChromiumEnv::GetChildren"/>
  <suffix name="LockFile" label="ChromiumEnv::LockFile"/>
  <suffix name="NewRandomAccessFile" label="ChromiumEnv::NewRandomAccessFile"/>
  <suffix name="RenameFile" label="ChromiumEnv::RenameFile"/>
  <affected-histogram name="LevelDBEnv.IDB.IOError."/>
  <affected-histogram name="LevelDBEnv.IOError."/>
  <affected-histogram name="LevelDBEnv.ServiceWorker.IOError."/>
</histogram_suffixes>

<histogram_suffixes name="LevelDBEnvRetry" separator="">
  <suffix name="CreateDir" label="CreateDir"/>
  <suffix name="LockFile" label="LockFile"/>
  <suffix name="RenameFile" label="RenameFile"/>
  <affected-histogram name="LevelDBEnv.IDB.RetryRecoveredFromErrorIn"/>
  <affected-histogram name="LevelDBEnv.IDB.TimeUntilSuccessFor"/>
  <affected-histogram name="LevelDBEnv.RetryRecoveredFromErrorIn"/>
  <affected-histogram
      name="LevelDBEnv.ServiceWorker.RetryRecoveredFromErrorIn"/>
  <affected-histogram name="LevelDBEnv.ServiceWorker.TimeUntilSuccessFor"/>
  <affected-histogram name="LevelDBEnv.TimeUntilSuccessFor"/>
  <affected-histogram name="MojoLevelDBEnv.RetryRecoveredFromErrorIn"/>
  <affected-histogram name="MojoLevelDBEnv.TimeUntilSuccessFor"/>
</histogram_suffixes>

<histogram_suffixes name="LevelDBEnvRetryTimes" separator="">
  <obsolete>
    Deprecated 2013-04 in favor of LevelDBEnvRetry.
  </obsolete>
  <suffix name="LockFile" label="LockFile"/>
  <suffix name="Rename" label="RenameFile"/>
  <affected-histogram name="LevelDBEnv.IDB.TimeTo"/>
  <affected-histogram name="LevelDBEnv.TimeTo"/>
</histogram_suffixes>

<histogram_suffixes name="LevelDBEnvTypes" separator="." ordering="prefix">
  <suffix name="IDB" label="Restricted to IndexedDB LevelDB environments"/>
  <suffix name="ServiceWorker"
      label="Restricted to ServiceWorker LevelDB environments"/>
  <affected-histogram name="LevelDBEnv.IOError"/>
  <affected-histogram name="LevelDBEnv.IOError."/>
  <affected-histogram name="LevelDBEnv.IOError.BFE"/>
  <affected-histogram name="LevelDBEnv.IOError.NewLogger"/>
  <affected-histogram name="LevelDBEnv.IOError.NewSequentialFile"/>
  <affected-histogram name="LevelDBEnv.IOError.RandomAccessFile"/>
  <affected-histogram name="LevelDBEnv.IOError.WritableFileAppend"/>
  <affected-histogram name="LevelDBEnv.IOError.WritableFileFlush"/>
  <affected-histogram name="LevelDBEnv.LockFileAncestorsNotFound"/>
  <affected-histogram name="LevelDBEnv.MaxFDs"/>
  <affected-histogram name="LevelDBEnv.MissingFiles"/>
  <affected-histogram name="LevelDBEnv.RetryRecoveredFromErrorIn"/>
  <affected-histogram name="LevelDBEnv.Table"/>
  <affected-histogram name="LevelDBEnv.TimeTo"/>
  <affected-histogram name="LevelDBEnv.TimeUntilSuccessFor"/>
</histogram_suffixes>

<histogram_suffixes name="LevelDBOpenResults" separator=".">
  <suffix name="BudgetManager"
      label="Database for storing budget information for origins."/>
  <suffix name="DomDistillerStore" label="Databases for DomDistillerStore"/>
  <suffix name="FeatureEngagementTrackerAvailabilityStore"
      label="Database for FeatureEngagementTracker feature availability."/>
  <suffix name="FeatureEngagementTrackerEventStore"
      label="Database for FeatureEngagementTracker events."/>
  <suffix name="FeedImageDatabase" label="Databases for Feed Image Loader."/>
  <suffix name="FeedStorageDatabase" label="Databases for Feed Storage."/>
  <suffix name="GCMKeyStore" label="Databases for GCMKeyStore"/>
  <suffix name="ImageManager" label="Databases for ImageManager"/>
  <suffix name="OfflinePageMetadataStore"
      label="Databases for OfflinePageMetadataStore"/>
  <suffix name="UsageReportsBufferBackend"
      label="The result of the first attempt to open the usage reports buffer
             backend database."/>
  <affected-histogram name="LevelDB.Open"/>
</histogram_suffixes>

<histogram_suffixes name="LevelDBSharedCache" separator=".">
  <owner>cmumford@chromium.org</owner>
  <suffix name="Browser"
      label="Cache shared databases whose access pattern is dictated by
             browser code."/>
  <suffix name="InMemory" label="Cache shared all in-memory databases."/>
  <suffix name="Unified" label="Cache shared by both web and browser."/>
  <suffix name="Web"
      label="whose access pattern is directly influenced by Web APIs, like
             Indexed DB, etc."/>
  <affected-histogram name="LevelDB.SharedCache.BytesUsed"/>
  <affected-histogram name="LevelDB.SharedCache.DBCount"/>
  <affected-histogram name="LevelDB.SharedCache.KBUsed"/>
</histogram_suffixes>

<histogram_suffixes name="LocalNetReqsLocalhostResources" separator=".">
  <suffix base="true" name="Localhost.DbRequests"
      label="Requests made to localhost on a database server port."/>
  <suffix base="true" name="Localhost.DevRequests"
      label="Requests made to localhost on a development server port."/>
  <suffix base="true" name="Localhost.OtherRequests"
      label="Requests made to localhost on any port not otherwise monitored
             by the other local network request metrics."/>
  <suffix base="true" name="Localhost.PrinterRequests"
      label="Requests made to localhost on a printer server port."/>
  <suffix base="true" name="Localhost.WebRequests"
      label="Requests made to localhost on a web server port."/>
  <affected-histogram name="LocalNetworkRequests.PrivatePage"/>
  <affected-histogram name="LocalNetworkRequests.PublicPage"/>
</histogram_suffixes>

<histogram_suffixes name="LocalNetReqsPrivatePage" separator=".">
  <suffix base="true" name="DifferentSubnetRequests"
      label="Requests made to local resources on a different subnet."/>
  <suffix base="true" name="PublicRequests"
      label="Requests made to public resources."/>
  <suffix base="true" name="SameSubnetRequests"
      label="Requests made to local resources on the same reserved IP space
             as the page."/>
  <affected-histogram name="LocalNetworkRequests.PrivatePage"/>
</histogram_suffixes>

<histogram_suffixes name="LocalNetReqsPublicPage" separator=".">
  <suffix base="true" name="PrivateRequests"
      label="Requests made to private resources."/>
  <suffix base="true" name="RouterRequests"
      label="Requests made to resources likely to be routers."/>
  <affected-histogram name="LocalNetworkRequests.PublicPage"/>
</histogram_suffixes>

<histogram_suffixes name="LocalNetReqsStatuses" separator=".">
  <suffix name="Failed" label="Failed requests."/>
  <suffix name="Successful" label="Successful requests."/>
  <affected-histogram
      name="LocalNetworkRequests.PrivatePage.DifferentSubnetRequests"/>
  <affected-histogram
      name="LocalNetworkRequests.PrivatePage.Localhost.DbRequests"/>
  <affected-histogram
      name="LocalNetworkRequests.PrivatePage.Localhost.DevRequests"/>
  <affected-histogram
      name="LocalNetworkRequests.PrivatePage.Localhost.OtherRequests"/>
  <affected-histogram
      name="LocalNetworkRequests.PrivatePage.Localhost.PrinterRequests"/>
  <affected-histogram
      name="LocalNetworkRequests.PrivatePage.Localhost.WebRequests"/>
  <affected-histogram name="LocalNetworkRequests.PrivatePage.PublicRequests"/>
  <affected-histogram
      name="LocalNetworkRequests.PrivatePage.SameSubnetRequests"/>
  <affected-histogram
      name="LocalNetworkRequests.PublicPage.Localhost.DbRequests"/>
  <affected-histogram
      name="LocalNetworkRequests.PublicPage.Localhost.DevRequests"/>
  <affected-histogram
      name="LocalNetworkRequests.PublicPage.Localhost.OtherRequests"/>
  <affected-histogram
      name="LocalNetworkRequests.PublicPage.Localhost.PrinterRequests"/>
  <affected-histogram
      name="LocalNetworkRequests.PublicPage.Localhost.WebRequests"/>
  <affected-histogram name="LocalNetworkRequests.PublicPage.PrivateRequests"/>
  <affected-histogram name="LocalNetworkRequests.PublicPage.RouterRequests"/>
</histogram_suffixes>

<histogram_suffixes name="LocalSiteCharacteristicsFeatures" separator=".">
  <suffix name="AudioUsageInBackground"
      label="A tab played some audio while it was in background."/>
  <suffix name="FaviconUpdateInBackground"
      label="A tab changed its favicon while it was in background."/>
  <suffix name="NotificationsUsageInBackground"
      label="A tab triggered a non-persistent notification while it was in
             background."/>
  <suffix name="TitleUpdateInBackground"
      label="A tab changed its title while it was in background."/>
  <affected-histogram
      name="ResourceCoordinator.LocalDB.ObservationTimeBeforeFirstUse"/>
</histogram_suffixes>

<histogram_suffixes name="LocalStorageContextOpenReasons" separator="">
  <suffix name="CommitErrors" label="After too many commit errors."/>
  <suffix name="InvalidVersion" label="After an invalid version was read."/>
  <suffix name="OpenFailed" label="After opening the DB failed."/>
  <suffix name="ReadVersionError"
      label="After reading the schema version failed."/>
  <affected-histogram name="LocalStorageContext.OpenResultAfter"/>
</histogram_suffixes>

<histogram_suffixes name="LocalStorageSizes" separator="">
  <suffix name="1MBTo5MB" label="DB size between 1MB and 5MB"/>
  <suffix name="100KBTo1MB" label="DB size between 100KB and 1MB"/>
  <suffix name="Under100KB" label="DB size under 100KB"/>
  <affected-histogram name="LocalStorage.BrowserTimeToPrimeLocalStorage"/>
  <affected-histogram name="LocalStorage.MojoTimeToPrimeFor"/>
  <affected-histogram name="LocalStorage.RendererTimeToPrimeLocalStorage"/>
</histogram_suffixes>

<histogram_suffixes name="LocationAttachedStatus" separator=".">
  <suffix name="LocationAttached"
      label="This histogram is for when the location was successfully
             attached to the request."/>
  <suffix name="LocationNotAttached"
      label="This histogram is for when the location was not attached to the
             request. A location may not be attached if it is too old or if
             the permissions do not allow it."/>
  <affected-histogram name="Geolocation.Header.TimeListening.BatterySaving"/>
  <affected-histogram name="Geolocation.Header.TimeListening.GpsOnly"/>
  <affected-histogram name="Geolocation.Header.TimeListening.HighAccuracy"/>
</histogram_suffixes>

<histogram_suffixes name="LocationMode" separator=".">
  <suffix name="BatterySaving"
      label="This histogram is for location mode Battery Saving."/>
  <suffix name="GpsOnly" label="This histogram is for location mode GPS Only."/>
  <suffix name="HighAccuracy"
      label="This histogram is for location mode High Accuracy."/>
  <affected-histogram name="Geolocation.Header.LocationAge"/>
  <affected-histogram name="Geolocation.Header.TimeListening"/>
</histogram_suffixes>

<histogram_suffixes name="LockExistingCachedImage" separator=".">
  <suffix name="Software.EVENTUALLY" label="Eventually bin for software"/>
  <suffix name="Software.NOW" label="Now bin for software"/>
  <suffix name="Software.SOON" label="Soon bin for software"/>
  <affected-histogram name="Renderer4.LockExistingCachedImage"/>
</histogram_suffixes>

<histogram_suffixes name="LockScreenAppDataItemOperation" separator=".">
  <suffix name="DeleteItem"/>
  <suffix name="GetRegisteredItems"/>
  <suffix name="ReadItem"/>
  <suffix name="RegisterItem"/>
  <suffix name="WriteItem"/>
  <affected-histogram
      name="Apps.LockScreen.DataItemStorage.FailedOperationDuration"/>
  <affected-histogram name="Apps.LockScreen.DataItemStorage.OperationDuration"/>
  <affected-histogram name="Apps.LockScreen.DataItemStorage.OperationResult"/>
</histogram_suffixes>

<histogram_suffixes name="LockScreenNoteTakingAppWindowState" separator=".">
  <suffix name="Background"
      label="The app window is in background (behind the lock screen)"/>
  <suffix name="Foreground"
      label="The app window is in foreground (on top of the lock screen)"/>
  <suffix name="TotalActive"
      label="The total amount of time an app window was active on lock screen"/>
  <affected-histogram name="Apps.LockScreen.NoteTakingApp.AppWindowLifeTime"/>
</histogram_suffixes>

<histogram_suffixes name="LowMemoryMargin" separator="_">
  <obsolete>
    Deprecated 12/2017. The low memory margin is a per-platform constant.
  </obsolete>
  <suffix name="0mb" label="Low memory margin set to 0MB"/>
  <suffix name="25mb" label="Low memory margin set to 25MB"/>
  <suffix name="50mb" label="Low memory margin set to 50MB"/>
  <suffix name="100mb" label="Low memory margin set to 100MB"/>
  <suffix name="200mb" label="Low memory margin set to 200MB"/>
  <suffix name="default" label="Low memory margin set to the system default"/>
  <suffix name="off" label="Low memory notification disabled"/>
  <affected-histogram name="Tabs.Discard.DiscardCount"/>
  <affected-histogram name="Tabs.Discard.InitialTime2"/>
  <affected-histogram name="Tabs.Discard.IntervalTime2"/>
  <affected-histogram name="Tabs.Discard.MemAnonymousMB"/>
  <affected-histogram name="Tabs.Discard.MemAvailableMB"/>
  <affected-histogram name="Tabs.Discard.TabCount"/>
  <affected-histogram name="Tabs.SadTab.CrashCreated"/>
  <affected-histogram name="Tabs.SadTab.KillCreated"/>
</histogram_suffixes>

<histogram_suffixes name="MacAudioInputVariants" separator="_">
  <suffix name="HighLatency"
      label="Measures the standard Mac audio driver (i.e. not low-latency)."/>
  <affected-histogram name="Media.Audio.InputStartupSuccessMac"/>
</histogram_suffixes>

<histogram_suffixes name="MainFrameNavigation" separator="_">
  <suffix name="MainFrame" label="Main frame navigation."/>
  <affected-histogram name="ServiceWorker.NavPreload.ConcurrentTime"/>
  <affected-histogram name="ServiceWorker.NavPreload.FinishedFirst"/>
  <affected-histogram name="ServiceWorker.NavPreload.ResponseTime"/>
  <affected-histogram name="ServiceWorker.NavPreload.WorkerPreparationType"/>
  <affected-histogram name="ServiceWorker.NavPreload.WorkerWaitTime"/>
</histogram_suffixes>

<histogram_suffixes name="ManifestProperties" separator=".">
  <suffix name="display"/>
  <suffix name="gcm_sender_id"/>
  <suffix name="icons"/>
  <suffix name="name"/>
  <suffix name="orientation"/>
  <suffix name="short_name"/>
  <suffix name="start_url"/>
  <affected-histogram name="Manifest.HasProperty"/>
</histogram_suffixes>

<histogram_suffixes name="MediaAudioInputControllerTime" separator=".">
  <suffix name="CloseTime" label="Measures the time taken for DoClose()."/>
  <suffix name="CreateTime" label="Measures the time taken for DoCreate()."/>
  <suffix name="RecordTime" label="Measures the time taken for DoRecord()."/>
  <affected-histogram name="Media.AudioInputController"/>
</histogram_suffixes>

<histogram_suffixes name="MediaAudioInputDeviceManagerTime" separator=".">
  <suffix name="EnumerateOnDeviceThreadTime"
      label="Measures the time taken for EnumerateOnDeviceThread()."/>
  <suffix name="OpenOnDeviceThreadTime"
      label="Measures the time taken for OpenOnDeviceThread()."/>
  <affected-histogram name="Media.AudioInputDeviceManager"/>
</histogram_suffixes>

<histogram_suffixes name="MediaAudioOutputControllerTime" separator=".">
  <suffix name="CloseTime" label="Measures the time taken for DoClose()."/>
  <suffix name="CreateTime" label="Measures the time taken for DoCreate()."/>
  <suffix name="DeviceChangeTime"
      label="Measures the time taken for OnDeviceChange()."/>
  <suffix name="PauseTime" label="Measures the time taken for DoPause()."/>
  <suffix name="PlayTime"
      label="Measures the time taken for DoPlay(). Technically only the
             worker method AudioOutputController::PollAndStartIfDataReady()."/>
  <affected-histogram name="Media.AudioOutputController"/>
</histogram_suffixes>

<histogram_suffixes name="MediaControlsElements" separator=".">
  <suffix name="CastButton" label="Cast button"/>
  <suffix name="CastOverflowButton" label="Cast overflow button"/>
  <suffix name="CastOverlayButton" label="Cast overlay button"/>
  <suffix name="ClosedCaptionButton" label="Closed caption button"/>
  <suffix name="ClosedCaptionOverflowButton"
      label="Closed caption overflow button"/>
  <suffix name="DownloadButton" label="Download button"/>
  <suffix name="DownloadOverflowButton" label="Download overflow button"/>
  <suffix name="FullscreenButton" label="Fullscreen button"/>
  <suffix name="FullscreenOverflowButton" label="Fullscreen overflow button"/>
  <suffix name="MuteButton" label="Mute button"/>
  <suffix name="MuteOverflowButton" label="Mute overflow button"/>
  <suffix name="OverflowButton" label="Overflow button"/>
  <suffix name="PictureInPictureButton" label="Picture-in-Picture button"/>
  <suffix name="PictureInPictureOverflowButton"
      label="Picture-in-Picture overflow button"/>
  <suffix name="PlayOverlayButton" label="Play overlay button"/>
  <suffix name="PlayPauseButton" label="Play/pause button"/>
  <suffix name="PlayPauseOverflowButton" label="Play/pause overflow button"/>
  <suffix name="TimelineSlider" label="Timeline slider"/>
  <suffix name="VolumeSlider" label="Volume slider"/>
  <affected-histogram name="Media.Controls.CTR"/>
</histogram_suffixes>

<histogram_suffixes name="MediaElementConfigurations" separator=".">
  <suffix name="FullscreenLandscape"/>
  <suffix name="FullscreenPortrait"/>
  <suffix name="InlineLandscape"/>
  <suffix name="InlinePortrait"/>
  <affected-histogram name="Media.Timeline.Width"/>
</histogram_suffixes>

<histogram_suffixes name="MediaPipelineStatusForStreams" separator=".">
  <suffix name="AudioOnly" label="PipelineStatus for Audio-only streams."/>
  <suffix name="AudioVideo.H264.DDS.HW"
      label="PipelineStatus for AV streams with H264 hardware decoder and
             that go through the DecryptingDemuxerStream (DDS)."/>
  <suffix name="AudioVideo.H264.DDS.SW"
      label="PipelineStatus for AV streams with H264 software decoder and
             that go through the DecryptingDemuxerStream (DDS)."/>
  <suffix name="AudioVideo.H264.DVD"
      label="PipelineStatus for AV streams with H264 decoder and that go
             through the DecryptingVideoDecoder (DVD)."/>
  <suffix name="AudioVideo.H264.HW"
      label="PipelineStatus for hardware decoded AV streams with H264
             decoder."/>
  <suffix name="AudioVideo.H264.SW"
      label="PipelineStatus for software decoded AV streams with H264
             decoder."/>
  <suffix name="AudioVideo.Other"
      label="PipelineStatus for the codecs that dont have an explicit metric."/>
  <suffix name="AudioVideo.VP8.DDS.HW"
      label="PipelineStatus for AV streams with VP8 hardware codec and that
             go through the DecryptingDemuxerStream (DDS)."/>
  <suffix name="AudioVideo.VP8.DDS.SW"
      label="PipelineStatus for AV streams with VP8 software codec and that
             go through the DecryptingDemuxerStream (DDS)."/>
  <suffix name="AudioVideo.VP8.DVD"
      label="PipelineStatus for AV streams with VP8 codec and that go through
             the DecryptingVideoDecoder (DVD)."/>
  <suffix name="AudioVideo.VP8.HW"
      label="PipelineStatus for AV streams with VP8 hardware decoder."/>
  <suffix name="AudioVideo.VP8.SW"
      label="PipelineStatus for AV streams with VP8 software decoder."/>
  <suffix name="AudioVideo.VP9.DDS.HW"
      label="PipelineStatus for AV streams with VP9 hardware codec and that
             go through the DecryptingDemuxerStream (DDS)."/>
  <suffix name="AudioVideo.VP9.DDS.SW"
      label="PipelineStatus for AV streams with VP9 codec and that go through
             the DecryptingDemuxerStream (DDS)."/>
  <suffix name="AudioVideo.VP9.DVD"
      label="PipelineStatus for AV streams with VP9 software codec and that
             go through the DecryptingVideoDecoder (DVD)."/>
  <suffix name="AudioVideo.VP9.HW"
      label="PipelineStatus for AV streams with VP9 hardware decoder."/>
  <suffix name="AudioVideo.VP9.SW"
      label="PipelineStatus for AV streams with VP9 software decoder."/>
  <suffix name="Unsupported" label="PipelineStatus for unsupported streams."/>
  <suffix name="VideoOnly" label="PipelineStatus for Video-only streams."/>
  <affected-histogram name="Media.PipelineStatus"/>
</histogram_suffixes>

<histogram_suffixes name="MediaRebufferingCategories" separator=".">
  <suffix name="Audio.EME" label="Metric for EME media with an audio track."/>
  <suffix name="Audio.MSE" label="Metric for MSE media with an audio track."/>
  <suffix name="Audio.SRC" label="Metric for SRC media with an audio track."/>
  <suffix name="AudioVideo.EME"
      label="Metric for EME media with both an audio and video track."/>
  <suffix name="AudioVideo.MSE"
      label="Metric for MSE media with both an audio and video track."/>
  <suffix name="AudioVideo.SRC"
      label="Metric for SRC media with both an audio and video track."/>
  <affected-histogram name="Media.MeanTimeBetweenRebuffers"/>
  <affected-histogram name="Media.RebuffersCount"/>
</histogram_suffixes>

<histogram_suffixes name="MediaRouterSuccess" separator=".">
  <suffix name="Failure" label="Failure"/>
  <suffix name="Success" label="Success"/>
  <affected-histogram name="MediaRouter.Cast.App.Availability"/>
</histogram_suffixes>

<histogram_suffixes name="MediaTimelineWidths" separator=".">
  <suffix name="32_47"/>
  <suffix name="48_79"/>
  <suffix name="80_127"/>
  <suffix name="128_255"/>
  <suffix name="256_511"/>
  <suffix name="512_inf"/>
  <affected-histogram name="Media.Timeline.DragGestureDuration"/>
  <affected-histogram name="Media.Timeline.DragPercent"/>
  <affected-histogram name="Media.Timeline.DragSumAbsTimeDelta"/>
  <affected-histogram name="Media.Timeline.DragTimeDelta"/>
  <affected-histogram name="Media.Timeline.SeekType"/>
</histogram_suffixes>

<histogram_suffixes name="MediaVideoCaptureManagerTime" separator=".">
  <suffix name="GetAvailableDevicesInfoOnDeviceThreadTime"
      label="Measures the time taken to enumerate devices and their
             capabilities, between EnumerateDevices() and
             OnDevicesInfoEnumerated()."/>
  <suffix name="StartDeviceTime"
      label="Measures the time taken for DoStartDeviceOnDeviceThread()."/>
  <suffix name="StopDeviceTime"
      label="Measures the time taken for DoStopDeviceOnDeviceThread()."/>
  <affected-histogram name="Media.VideoCaptureManager"/>
</histogram_suffixes>

<histogram_suffixes name="MediaVideoCategories" separator=".">
  <suffix name="All" label="All media with a video track."/>
  <suffix name="EME" label="EME media with a video track."/>
  <suffix name="MSE" label="MSE media with a video track."/>
  <suffix name="SRC" label="SRC media with a video track."/>
  <affected-histogram name="Media.VideoHeight.Initial"/>
</histogram_suffixes>

<histogram_suffixes name="MediaWatchTimeCategories" separator=".">
  <suffix name="Audio.AC"
      label="Watch time for all media with only an audio track on AC power."/>
  <suffix name="Audio.All"
      label="Watch time for all media with only an audio track."/>
  <suffix name="Audio.Background.AC"
      label="Background watch time for all media with only an audio track on
             AC power."/>
  <suffix name="Audio.Background.All"
      label="Background watch time for all media with only an audio track."/>
  <suffix name="Audio.Background.Battery"
      label="Background watch time for all media with only an audio track on
             battery power."/>
  <suffix name="Audio.Background.EmbeddedExperience"
      label="Background watch time for downloaded media on Android with only
             an audio track."/>
  <suffix name="Audio.Background.EME"
      label="Background watch time for EME media with only an audio track."/>
  <suffix name="Audio.Background.MSE"
      label="Background watch time for MSE media with only an audio track."/>
  <suffix name="Audio.Background.SRC"
      label="Background watch time for SRC media with only an audio track."/>
  <suffix name="Audio.Battery"
      label="Watch time for all media with only an audio track on battery
             power."/>
  <suffix name="Audio.Discarded.EME"
      label="Watch time less than 7 seconds for EME media with only an audio
             track."/>
  <suffix name="Audio.Discarded.MSE"
      label="Watch time less than 7 seconds for MSE media with only an audio
             track."/>
  <suffix name="Audio.Discarded.SRC"
      label="Watch time less than 7 seconds for SRC media with only an audio
             track."/>
  <suffix name="Audio.EmbeddedExperience"
      label="Watch time for downloaded media on Android with only an audio
             track."/>
  <suffix name="Audio.EME"
      label="Watch time for EME media with only an audio track."/>
  <suffix name="Audio.MSE"
      label="Watch time for MSE media with only an audio track."/>
  <suffix name="Audio.NativeControlsOff"
      label="Watch time for all media with only an audio track not using
             native controls."/>
  <suffix name="Audio.NativeControlsOn"
      label="Watch time for all media with only an audio track using native
             controls."/>
  <suffix name="Audio.SRC"
      label="Watch time for SRC media with only an audio track."/>
  <suffix name="AudioVideo.AC"
      label="Watch time for all media with both an audio and video track on
             AC power."/>
  <suffix name="AudioVideo.All"
      label="Watch time for all media with both an audio and video track."/>
  <suffix name="AudioVideo.Background.AC"
      label="Background watch time for all media with both an audio and video
             track on AC power."/>
  <suffix name="AudioVideo.Background.All"
      label="Background watch time for all media with both an audio and video
             track."/>
  <suffix name="AudioVideo.Background.Battery"
      label="Background watch time for all media with both an audio and video
             track on battery power."/>
  <suffix name="AudioVideo.Background.EmbeddedExperience"
      label="Background watch time for downloaded media on Android with both
             an audio and video track."/>
  <suffix name="AudioVideo.Background.EME"
      label="Background watch time for EME media with both an audio and video
             track."/>
  <suffix name="AudioVideo.Background.MSE"
      label="Background watch time for MSE media with both an audio and video
             track."/>
  <suffix name="AudioVideo.Background.SRC"
      label="Background watch time for SRC media with both an audio and video
             track."/>
  <suffix name="AudioVideo.Battery"
      label="Watch time for all media with both an audio and video track on
             battery power."/>
  <suffix name="AudioVideo.Discarded.EME"
      label="Watch time less than 7 seconds for EME media with only with both
             an audio and video track."/>
  <suffix name="AudioVideo.Discarded.MSE"
      label="Watch time less than 7 seconds for MSE media with only with both
             an audio and video track."/>
  <suffix name="AudioVideo.Discarded.SRC"
      label="Watch time less than 7 seconds for SRC media with with both an
             audio and video track."/>
  <suffix name="AudioVideo.DisplayFullscreen"
      label="Watch time for all media with both an audio and video track
             displayed in fullscreen."/>
  <suffix name="AudioVideo.DisplayInline"
      label="Watch time for all media with both an audio and video track
             displayed inline."/>
  <suffix name="AudioVideo.DisplayPictureInPicture"
      label="Watch time for all media with both an audio and video track
             displayed in picture-in-picture."/>
  <suffix name="AudioVideo.EmbeddedExperience"
      label="Watch time for downloaded media on Android with both an audio
             and video track."/>
  <suffix name="AudioVideo.EME"
      label="Watch time for EME media with both an audio and video track."/>
  <suffix name="AudioVideo.MSE"
      label="Watch time for MSE media with both an audio and video track."/>
  <suffix name="AudioVideo.Muted.All"
      label="Muted watch time for all media with both an audio and video
             track."/>
  <suffix name="AudioVideo.Muted.EME"
      label="Muted watch time for EME media with both an audio and video
             track."/>
  <suffix name="AudioVideo.Muted.MSE"
      label="Muted watch time for MSE media with both an audio and video
             track."/>
  <suffix name="AudioVideo.Muted.SRC"
      label="Muted watch time for SRC media with both an audio and video
             track."/>
  <suffix name="AudioVideo.NativeControlsOff"
      label="Watch time for all media with both an audio and video track not
             using native controls."/>
  <suffix name="AudioVideo.NativeControlsOn"
      label="Watch time for all media with both an audio and video track
             using native controls."/>
  <suffix name="AudioVideo.SRC"
      label="Watch time for SRC media with both an audio and video track."/>
  <affected-histogram name="Media.WatchTime"/>
</histogram_suffixes>

<histogram_suffixes name="MediaWMPIMemoryUsage" separator=".">
  <suffix name="Audio"/>
  <suffix name="DataSource"/>
  <suffix name="Demuxer"/>
  <suffix name="Video"/>
  <affected-histogram name="Media.WebMediaPlayerImpl.Memory"/>
</histogram_suffixes>

<histogram_suffixes name="MemoryFDsAllProcesses" separator="."
    ordering="prefix">
  <suffix name="Browser" label="Browser process"/>
  <suffix name="Chrome" label="chrome:// renderer process"/>
  <suffix name="Extension" label="Extension process"/>
  <suffix name="Gpu" label="GPU process"/>
  <suffix name="NativeClient" label="Native client process"/>
  <suffix name="NativeClientBroker" label="Native client broker process"/>
  <suffix name="PeperPlugin" label="Pepper plugin process"/>
  <suffix name="PepperPluginBroker" label="Pepper plugin broker process"/>
  <suffix name="Renderer" label="Renderer process"/>
  <suffix name="RendererAll" label="Renderer process"/>
  <suffix name="SandboxHelper" label="Sandbox helper process"/>
  <suffix name="Utility" label="Utility process"/>
  <suffix name="Zygote" label="Zygot process"/>
  <affected-histogram name="Memory.OpenFDs"/>
</histogram_suffixes>

<histogram_suffixes name="MemoryFDsBroswerGpuAndRendererProcess" separator="."
    ordering="prefix">
  <suffix name="Browser" label="Browser process"/>
  <suffix name="Gpu" label="GPU process"/>
  <suffix name="RendererAll" label="Renderer process"/>
  <affected-histogram name="Memory.OpenFDsSoftLimit"/>
</histogram_suffixes>

<histogram_suffixes name="MemoryStateTransition" separator=".">
  <suffix name="NormalToSuspended"/>
  <suffix name="NormalToThrottled"/>
  <suffix name="SuspendedToNormal"/>
  <suffix name="SuspendedToThrottled"/>
  <suffix name="ThrottledToNormal"/>
  <suffix name="ThrottledToSuspended"/>
  <affected-histogram name="Memory.Coordinator.StateDuration"/>
  <affected-histogram name="Memory.Coordinator.TotalPrivate"/>
</histogram_suffixes>

<histogram_suffixes name="Mobile.DefaultBrowser.SystemDefaultBrowser.Type"
    separator=".">
  <suffix name="ChromeNotSystem"
      label="Chrome is not a system installed browser."/>
  <suffix name="ChromeSystem" label="Chrome is a system installed browser."/>
  <affected-histogram name="Mobile.DefaultBrowser.SystemBrowserCount"/>
</histogram_suffixes>

<histogram_suffixes name="Mobile.DefaultBrowser.Type" separator=".">
  <suffix name="ChromeDefault" label="Chrome is the default browser."/>
  <suffix name="NoDefault" label="There is no default browser."/>
  <suffix name="OtherDefault" label="Another browser is the default browser."/>
  <affected-histogram name="Mobile.DefaultBrowser.BrowserCount"/>
</histogram_suffixes>

<histogram_suffixes name="MobileDownloadBytesDownloadedTypes" separator=".">
  <suffix name="ChromeNetworkStack.Failure"/>
  <suffix name="ChromeNetworkStack.Success"/>
  <suffix name="DownloadManager.Failure"/>
  <suffix name="DownloadManager.Success"/>
  <affected-histogram name="MobileDownload.BytesDownloaded"/>
</histogram_suffixes>

<histogram_suffixes name="MobileDownloadBytesWastedTypes" separator=".">
  <suffix name="Cancel" label="Recorded upon download Cancel."/>
  <suffix name="Failure" label="Recorded upon download failure."/>
  <suffix name="Success" label="Recorded upon download success."/>
  <affected-histogram name="MobileDownload.BytesWasted.ChromeNetworkStack"/>
</histogram_suffixes>

<histogram_suffixes name="MobileDownloadDownloadTimeTypes" separator=".">
  <suffix name="ChromeNetworkStack.Cancel"/>
  <suffix name="ChromeNetworkStack.Failure"/>
  <suffix name="ChromeNetworkStack.Success"/>
  <suffix name="DownloadManager.Failure"/>
  <suffix name="DownloadManager.Success"/>
  <affected-histogram name="MobileDownload.DownloadTime"/>
</histogram_suffixes>

<histogram_suffixes name="MobileDownloadInterruptionsCountTypes" separator=".">
  <suffix name="ChromeNetworkStack.Cancel"/>
  <suffix name="ChromeNetworkStack.Failure"/>
  <suffix name="ChromeNetworkStack.Success"/>
  <affected-histogram name="MobileDownload.InterruptionsCount"/>
</histogram_suffixes>

<histogram_suffixes name="MobileDownloadResumptionsCountTypes" separator=".">
  <suffix name="Automatic"/>
  <suffix name="Manual"/>
  <suffix name="Total"/>
  <affected-histogram name="MobileDownload.ResumptionsCount"/>
</histogram_suffixes>

<histogram_suffixes name="MobileFreEntryType" separator=".">
  <suffix name="MainIntent" label="Icon click"/>
  <suffix name="ViewIntent" label="VIEW intent"/>
  <affected-histogram name="MobileFre.Progress"/>
</histogram_suffixes>

<histogram_suffixes name="MobileFreSignInChoiceEntryType" separator=".">
  <obsolete>
    Removed from code as of 08/2016.
  </obsolete>
  <suffix name="MainIntent" label="Icon click"/>
  <suffix name="ViewIntent" label="VIEW intent"/>
  <affected-histogram name="MobileFre.SignInChoice"/>
</histogram_suffixes>

<histogram_suffixes name="MobileFreSignInChoiceNumberOfAccounts" separator=".">
  <obsolete>
    Removed from code as of 08/2016.
  </obsolete>
  <suffix name="ManyAccounts" label="Two or more accounts"/>
  <suffix name="OneAccount" label="One account"/>
  <suffix name="ZeroAccounts" label="Zero accounts"/>
  <affected-histogram name="MobileFre.SignInChoice.MainIntent"/>
  <affected-histogram name="MobileFre.SignInChoice.ViewIntent"/>
</histogram_suffixes>

<histogram_suffixes name="ModuleIntegrityVerificationType" separator=".">
  <suffix name="WithByteSet"
      label="The version of the Module Integrity Verifier that uses a hash set
             to track relocations.">
    <obsolete>
      Deprecated and removed from code as of 05/2015.
    </obsolete>
  </suffix>
  <suffix name="WithoutByteSet"
      label="The version of the Module Integrity Verifier that doesn't use a
             hash set to track relocations."/>
  <affected-histogram name="ModuleIntegrityVerification.BytesModified"/>
  <affected-histogram name="ModuleIntegrityVerification.Difference"/>
</histogram_suffixes>

<histogram_suffixes name="MultiTabLoading" separator=".">
  <obsolete>
    Removed from code as of 03/2018.
  </obsolete>
  <suffix name="MultiTabLoading" label="There were multiple loading tabs."/>
  <affected-histogram
      name="Net.ResourceDispatcherHost.PeakOutstandingRequests"/>
</histogram_suffixes>

<histogram_suffixes name="NativeWindowVisibility" separator=".">
  <suffix name="Hidden"
      label="The native window is not visible because it is in a minimized
             window"/>
  <suffix name="Occluded"
      label="The native window is fully covered by other windows"/>
  <suffix name="Visible"
      label="The native window is visible or partially visible."/>
  <affected-histogram name="Windows.NativeWindowVisibility"/>
</histogram_suffixes>

<histogram_suffixes name="NatType" separator=".">
  <suffix name="NoNAT"/>
  <suffix name="NonSymNAT"/>
  <suffix name="SymNAT"/>
  <suffix name="UnknownNAT"/>
  <affected-histogram name="WebRTC.Stun.BatchSuccessPercent"/>
  <affected-histogram name="WebRTC.Stun.ResponseLatency"/>
  <affected-histogram name="WebRTC.Stun.SuccessPercent"/>
</histogram_suffixes>

<histogram_suffixes name="NavigationCharacteristic" separator="_">
  <suffix name="ExistingRenderer_BeforeUnloadDiscounted"
      label="Navigation reused an existing renderer process. Time spent in
             beforeunload subtracted."/>
  <suffix name="NewRenderer_BeforeUnloadDiscounted"
      label="Navigation spawned a new renderer process. Time spent in
             beforeunload subtracted."/>
  <suffix name="SessionRestored"
      label="Navigation caused by restoring a tab from a previous session
             (whether from a crash or a continued session) either spawning or
             reusing a renderer. Time spent in beforeunload subtracted.">
    <obsolete>
      Replaced by the likely named entry. It had a misleading name as it also
      has the before-unload time discounted.
    </obsolete>
  </suffix>
  <suffix name="SessionRestored_BeforeUnloadDiscounted"
      label="Navigation caused by restoring a tab from a previous session
             (whether from a crash or a continued session) either spawning or
             reusing a renderer. Time spent in beforeunload subtracted."/>
  <affected-histogram name="Navigation.TimeToCommit"/>
  <affected-histogram name="Navigation.TimeToURLJobStart"/>
</histogram_suffixes>

<histogram_suffixes name="NavigationFrameType" separator=".">
  <suffix name="MainFrame" label="Navigation in the main frame."/>
  <suffix name="Subframe" label="Navigation in a subframe."/>
  <affected-histogram name="Navigation.StartToCommit"/>
  <affected-histogram name="Navigation.StartToCommit.CrossProcess"/>
  <affected-histogram name="Navigation.StartToCommit.SameProcess"/>
  <affected-histogram name="Navigation.TimeToReadyToCommit"/>
</histogram_suffixes>

<histogram_suffixes name="NavigationPreloadEnabled" separator="_">
  <suffix name="NavigationPreloadEnabled" label="Navigation preload occurred."/>
  <affected-histogram
      name="ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time"/>
  <affected-histogram
      name="ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time_StartWorkerExistingProcess">
    <obsolete>
      Deprecated as of June 2017, in favor of
      ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time_WorkerStartOccurred_NavigationPreloadEnabled.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time_WorkerStartOccurred"/>
  <affected-histogram
      name="ServiceWorker.ActivatedWorkerPreparationForMainFrame.Type"/>
</histogram_suffixes>

<histogram_suffixes name="NavigationPreloadOrWorkerFirst" separator="_">
  <obsolete>
    Deprecated as of June 2017.
  </obsolete>
  <suffix name="NavPreloadFirst"
      label="The navigation preload response arrived before the service
             worker finished preparing."/>
  <suffix name="SWStartFirst"
      label="The service worker finished preparing before the navigation
             preload response arrived."/>
  <affected-histogram name="ServiceWorker.NavigationPreload.ConcurrentTime"/>
</histogram_suffixes>

<histogram_suffixes name="NavigationProcessType" separator=".">
  <suffix name="CrossProcess" label="Cross process navigation."/>
  <suffix name="SameProcess" label="Same process navigation."/>
  <affected-histogram name="Navigation.StartToCommit"/>
  <affected-histogram name="Navigation.TimeToReadyToCommit"/>
</histogram_suffixes>

<histogram_suffixes name="NavigationType" separator=".">
  <suffix name="ExistingPageBrowserInitiated"
      label="existing page browser-initiated navigation"/>
  <suffix name="ExistingPageDifferentDocumentIntendedAsNew"
      label="existing page navigation which is intended as new"/>
  <suffix name="ExistingPageDifferentDocumentRendererInitiated"
      label="existing page renderer-initiated navigation"/>
  <suffix name="ExistingPageRestoredBrowserInitiated"
      label="existing page browser-initiated navigation which is restored"/>
  <suffix name="ExistingPageSameDocumentBrowserInitiated"
      label="in-document existing page browser-initiated navigation"/>
  <suffix name="ExistingPageSameDocumentIntendedAsNew"
      label="in-document existing page navigation which is intended as new"/>
  <suffix name="ExistingPageSameDocumentRendererInitiated"
      label="in-document existing page renderer-initiated navigation"/>
  <suffix name="ExistingPageSameDocumentRestoredBrowserInitiated"
      label="in-document existing page browser-initiated navigation which is
             restored"/>
  <suffix name="NewPageInPage" label="in-document new page navigation"/>
  <suffix name="NewPageInPageOriginMismatch"
      label="in-document new page navigation with a non-matching origin"/>
  <suffix name="NewPageNoMatchingEntry"
      label="new page navigation with no matching entry"/>
  <suffix name="NewPagePendingEntryMatches"
      label="new page navigation which found a pending entry"/>
  <suffix name="NewSubFrame" label="new subframe navigation"/>
  <suffix name="SamePage" label="same page navigation"/>
  <affected-histogram name="Navigation.SecureSchemeHasSSLStatus"/>
</histogram_suffixes>

<histogram_suffixes name="NavigationTypeTiming" separator=".">
  <suffix name="BackForward" label="History (back/forward) navigation"/>
  <suffix name="NewNavigation" label="New navigation"/>
  <suffix name="Reload" label="Reload"/>
  <affected-histogram name="Navigation.IsSameProcess"/>
  <affected-histogram name="Navigation.ReadyToCommitUntilCommit"/>
  <affected-histogram name="Navigation.Renderer.ReadyToCommitUntilCommit"/>
  <affected-histogram name="Navigation.StartToCommit"/>
  <affected-histogram name="Navigation.StartToCommit.CrossProcess"/>
  <affected-histogram name="Navigation.StartToCommit.CrossProcess.MainFrame"/>
  <affected-histogram name="Navigation.StartToCommit.CrossProcess.Subframe"/>
  <affected-histogram name="Navigation.StartToCommit.MainFrame"/>
  <affected-histogram name="Navigation.StartToCommit.SameProcess"/>
  <affected-histogram name="Navigation.StartToCommit.SameProcess.MainFrame"/>
  <affected-histogram name="Navigation.StartToCommit.SameProcess.Subframe"/>
  <affected-histogram name="Navigation.StartToCommit.Subframe"/>
  <affected-histogram name="Navigation.TimeToReadyToCommit"/>
  <affected-histogram name="Navigation.TimeToReadyToCommit.CrossProcess"/>
  <affected-histogram name="Navigation.TimeToReadyToCommit.MainFrame"/>
  <affected-histogram name="Navigation.TimeToReadyToCommit.SameProcess"/>
  <affected-histogram name="Navigation.TimeToReadyToCommit.Subframe"/>
</histogram_suffixes>

<histogram_suffixes name="Net.BidirectionalStreamExperiment" separator=".">
  <suffix name="HTTP2" label="Bidirectional stream that use HTTP2 protocol"/>
  <owner>xunjieli@chromium.org</owner>
  <suffix name="QUIC" label="Bidirectional streams that use QUIC protocol"/>
  <affected-histogram name="Net.BidirectionalStream.ReceivedBytes"/>
  <affected-histogram name="Net.BidirectionalStream.SentBytes"/>
  <affected-histogram name="Net.BidirectionalStream.TimeToReadEnd"/>
  <affected-histogram name="Net.BidirectionalStream.TimeToReadStart"/>
  <affected-histogram name="Net.BidirectionalStream.TimeToSendEnd"/>
  <affected-histogram name="Net.BidirectionalStream.TimeToSendStart"/>
</histogram_suffixes>

<histogram_suffixes name="Net.DNS.AddressFamily" separator=".">
  <suffix name="IPV4" label="Requests for ADDRESS_FAMILY_IPV4."/>
  <suffix name="IPV6" label="Requests for ADDRESS_FAMILY_IPV6."/>
  <suffix name="UNSPEC" label="Requests for ADDRESS_FAMILY_UNSPEC."/>
  <affected-histogram name="Net.DNS.ResolveFailureTime"/>
  <affected-histogram name="Net.DNS.ResolveSuccessTime"/>
</histogram_suffixes>

<histogram_suffixes name="Net.DNS.Priorities" separator=".">
  <suffix name="HIGHEST" label="Jobs with priority HIGHEST."/>
  <suffix name="IDLE" label="Jobs with priority IDLE."/>
  <suffix name="LOW" label="Jobs with priority LOW."/>
  <suffix name="LOWEST" label="Jobs with priority LOWEST."/>
  <suffix name="MEDIUM" label="Jobs with priority MEDIUM."/>
  <suffix name="THROTTLED" label="Jobs with priority THROTTLED."/>
  <affected-histogram name="Net.DNS.JobQueueTime"/>
  <affected-histogram name="Net.DNS.JobQueueTimeAfterChange"/>
</histogram_suffixes>

<histogram_suffixes name="Net.DNS.Speculative" separator=".">
  <obsolete>
    Deprecated 02/2018.
  </obsolete>
  <suffix name="Speculative" label="Speculative resolutions only."/>
  <affected-histogram name="Net.DNS.ResolveFailureTime"/>
  <affected-histogram name="Net.DNS.ResolveSuccessTime"/>
  <affected-histogram name="Net.DNS.TotalTime"/>
  <affected-histogram name="Net.DNS.TotalTimeNotCached"/>
</histogram_suffixes>

<histogram_suffixes name="Net.HttpJob.TotalTimeSuccess.Priorities"
    separator=".">
  <suffix name="Priority0" label="THROTTLED or MINIMUM_PRIORITY"/>
  <suffix name="Priority1" label="IDLE"/>
  <suffix name="Priority2" label="LOWEST or DEFAULT_PRIORITY"/>
  <suffix name="Priority3" label="LOW"/>
  <suffix name="Priority4" label="MEDIUM"/>
  <suffix name="Priority5" label="HIGHEST or MAXIMUM_PRIORITY"/>
  <affected-histogram name="Net.HttpJob.TotalTimeSuccess"/>
</histogram_suffixes>

<histogram_suffixes name="Net.QuicClientHelloRejectReasons.QuicIsSecureOrNot"
    separator=".">
  <owner>rch@chromium.org</owner>
  <suffix name="Insecure" label="for insecure QUIC.">
    <obsolete>
      Deprecated and removed from code as of 10/2015.
    </obsolete>
  </suffix>
  <suffix name="Secure" label="for secure QUIC."/>
  <suffix name="TooMany"
      label="for secure QUIC when there were too many rejects."/>
  <affected-histogram name="Net.QuicClientHelloRejectReasons"/>
</histogram_suffixes>

<histogram_suffixes name="Net.QuicSession.21CumulativePackets" separator="_">
  <owner>rch@chromium.org</owner>
  <suffix name="First21"
      label="Only the first group of 21 packets in a connection via"/>
  <suffix name="Some21s"
      label="After the first 21, this records data for some groups of 21
             consecutive sequence nmubers, arriving via."/>
  <affected-histogram name="Net.QuicSession.21CumulativePacketsReceived"/>
</histogram_suffixes>

<histogram_suffixes name="Net.QuicSession.6PacketPatterns" separator="_">
  <owner>rch@chromium.org</owner>
  <suffix name="First6"
      label="Only the first group of 6 packets in a connection via"/>
  <suffix name="Some6s"
      label="After the first 6, this records patterns for some groups of 6
             consecutive sequence numbers, arriving via."/>
  <affected-histogram name="Net.QuicSession.6PacketsPatternsReceived"/>
</histogram_suffixes>

<histogram_suffixes name="Net.QuicSession.PacketReceived" separator="_">
  <owner>rch@chromium.org</owner>
  <suffix name="Ack"
      label="Only packets that were received by Chrome as well being part of
             connections via"/>
  <suffix name="IsAnAck"
      label="Only packets that were probably solo ACK packets when recieved
             by Chrome as well being part of connections via"/>
  <suffix name="IsNotAck"
      label="Only packets that were probably NOT solo ACK packets when
             recieved by Chrome as well being part of connections via"/>
  <suffix name="Nack"
      label="Only packets that were missed by Chrome as well being part of
             connections via"/>
  <affected-histogram name="Net.QuicSession.PacketReceived"/>
</histogram_suffixes>

<histogram_suffixes name="Net.QuicSession.PacketReceived_CONNECTION_TYPE"
    separator="_">
  <suffix name="CONNECTION_2G" label="mobile 2G are tallied."/>
  <suffix name="CONNECTION_3G" label="mobile 3G are tallied."/>
  <suffix name="CONNECTION_4G" label="mobile 4G are tallied."/>
  <suffix name="CONNECTION_BLUETOOTH"
      label="Bluetooth are tallied, but this may include connections to a
             mobile hotspot."/>
  <suffix name="CONNECTION_ETHERNET"
      label="ethernet are tallied, but this may include connections to a WiFi
             bridge."/>
  <suffix name="CONNECTION_NONE"
      label="NO(?) network are tallied (should be empty)."/>
  <owner>rch@chromium.org</owner>
  <suffix name="CONNECTION_UNKNOWN" label="WiFi are tallied."/>
  <suffix name="CONNECTION_WIFI"
      label="WiFi are tallied, but this may include connections to a mobile
             hotspot. Also check similar histograms that end in WIFI_802.11*
             for more details on some platforms."/>
  <suffix name="CONNECTION_WIFI_802.11a" label="802.11a are tallied."/>
  <suffix name="CONNECTION_WIFI_802.11b" label="802.11b are tallied."/>
  <suffix name="CONNECTION_WIFI_802.11g" label="802.11g are tallied."/>
  <suffix name="CONNECTION_WIFI_802.11n" label="802.11n are tallied."/>
  <suffix name="CONNECTION_WIFI_ANCIENT"
      label="802.11 that are no longer standard are tallied."/>
  <affected-histogram
      name="Net.QuicSession.21CumulativePacketsReceived_First21"/>
  <affected-histogram
      name="Net.QuicSession.21CumulativePacketsReceived_Some21s"/>
  <affected-histogram name="Net.QuicSession.6PacketsPatternsReceived_First6"/>
  <affected-histogram name="Net.QuicSession.6PacketsPatternsReceived_Some6s"/>
  <affected-histogram name="Net.QuicSession.PacketLossRate"/>
  <affected-histogram name="Net.QuicSession.PacketReceived_Ack"/>
  <affected-histogram name="Net.QuicSession.PacketReceived_IsAnAck"/>
  <affected-histogram name="Net.QuicSession.PacketReceived_IsNotAck"/>
  <affected-histogram name="Net.QuicSession.PacketReceived_Nack"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity" separator=".">
  <suffix name="53.1K" label="1K bytes of data on port 53."/>
  <suffix name="53.1K.NoProxy"
      label="1K bytes of data on port 53 with no proxy."/>
  <suffix name="53.1K.RTT" label="1K bytes of data on port 53 successfully."/>
  <suffix name="53.1K.RTT.NoProxy"
      label="1K bytes of data on port 53 successfully with no proxy."/>
  <suffix name="53.100B" label="100 bytes of data on port 53."/>
  <suffix name="53.100B.NoProxy"
      label="100 bytes of data on port 53 with no proxy."/>
  <suffix name="53.100B.RTT"
      label="100 bytes of data on port 53 successfully."/>
  <suffix name="53.100B.RTT.NoProxy"
      label="100 bytes of data on port 53 successfully with no proxy."/>
  <suffix name="80.1K" label="1K bytes of data on port 80."/>
  <suffix name="80.1K.NoProxy"
      label="1K bytes of data on port 80 with no proxy."/>
  <suffix name="80.1K.RTT" label="1K bytes of data on port 80 successfully."/>
  <suffix name="80.1K.RTT.NoProxy"
      label="1K bytes of data on port 80 successfully with no proxy."/>
  <suffix name="80.100B" label="100 bytes of data on port 80."/>
  <suffix name="80.100B.NoProxy"
      label="100 bytes of data on port 80 with no proxy."/>
  <suffix name="80.100B.RTT"
      label="100 bytes of data on port 80 successfully."/>
  <suffix name="80.100B.RTT.NoProxy"
      label="100 bytes of data on port 80 successfully with no proxy."/>
  <suffix name="587.1K" label="1K bytes of data on port 587."/>
  <suffix name="587.1K.NoProxy"
      label="1K bytes of data on port 587 with no proxy."/>
  <suffix name="587.1K.RTT" label="1K bytes of data on port 587 successfully."/>
  <suffix name="587.1K.RTT.NoProxy"
      label="1K bytes of data on port 587 successfully with no proxy."/>
  <suffix name="587.100B" label="100 bytes of data on port 587."/>
  <suffix name="587.100B.NoProxy"
      label="100 bytes of data on port 587 with no proxy."/>
  <suffix name="587.100B.RTT"
      label="100 bytes of data on port 587 successfully."/>
  <suffix name="587.100B.RTT.NoProxy"
      label="100 bytes of data on port 587 successfully with no proxy."/>
  <suffix name="6121.1K" label="1K bytes of data on port 6121."/>
  <suffix name="6121.1K.NoProxy"
      label="1K bytes of data on port 6121 with no proxy."/>
  <suffix name="6121.1K.RTT"
      label="1K bytes of data on port 6121 successfully."/>
  <suffix name="6121.1K.RTT.NoProxy"
      label="1K bytes of data on port 6121 successfully with no proxy."/>
  <suffix name="6121.100B" label="100 bytes of data on port 6121."/>
  <suffix name="6121.100B.NoProxy"
      label="100 bytes of data on port 6121 with no proxy."/>
  <suffix name="6121.100B.RTT"
      label="100 bytes of data on port 6121 successfully."/>
  <suffix name="6121.100B.RTT.NoProxy"
      label="100 bytes of data on port 6121 successfully with no proxy."/>
  <suffix name="8080.1K" label="1K bytes of data on port 8080."/>
  <suffix name="8080.1K.NoProxy"
      label="1K bytes of data on port 8080 with no proxy."/>
  <suffix name="8080.1K.RTT"
      label="1K bytes of data on port 8080 successfully."/>
  <suffix name="8080.1K.RTT.NoProxy"
      label="1K bytes of data on port 8080 successfully with no proxy."/>
  <suffix name="8080.100B" label="100 bytes of data on port 8080."/>
  <suffix name="8080.100B.NoProxy"
      label="100 bytes of data on port 8080 with no proxy."/>
  <suffix name="8080.100B.RTT"
      label="100 bytes of data on port 8080 successfully."/>
  <suffix name="8080.100B.RTT.NoProxy"
      label="100 bytes of data on port 8080 successfully with no proxy."/>
  <affected-histogram name="NetConnectivity.TCP.Status"/>
  <affected-histogram name="NetConnectivity.TCP.Success"/>
  <affected-histogram name="NetConnectivity.UDP.PacketLoss"/>
  <affected-histogram name="NetConnectivity.UDP.PacketLoss6"/>
  <affected-histogram name="NetConnectivity.UDP.Status"/>
  <affected-histogram name="NetConnectivity.UDP.Success"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity2" separator=".">
  <suffix name="AcksReceivedFromFirst2Packets" label="2 packets."/>
  <suffix name="AcksReceivedFromFirst3Packets" label="3 packets."/>
  <suffix name="AcksReceivedFromFirst4Packets" label="4 packets."/>
  <suffix name="AcksReceivedFromFirst5Packets" label="5 packets."/>
  <suffix name="AcksReceivedFromFirst6Packets" label="6 packets."/>
  <suffix name="AcksReceivedFromFirst7Packets" label="7 packets."/>
  <suffix name="AcksReceivedFromFirst8Packets" label="8 packets."/>
  <suffix name="AcksReceivedFromFirst9Packets" label="9 packets."/>
  <suffix name="AcksReceivedFromFirst10Packets" label="10 packets."/>
  <suffix name="AcksReceivedFromFirst11Packets" label="11 packets."/>
  <suffix name="AcksReceivedFromFirst12Packets" label="12 packets."/>
  <suffix name="AcksReceivedFromFirst13Packets" label="13 packets."/>
  <suffix name="AcksReceivedFromFirst14Packets" label="14 packets."/>
  <suffix name="AcksReceivedFromFirst15Packets" label="15 packets."/>
  <suffix name="AcksReceivedFromFirst16Packets" label="16 packets."/>
  <suffix name="AcksReceivedFromFirst17Packets" label="17 packets."/>
  <suffix name="AcksReceivedFromFirst18Packets" label="18 packets."/>
  <suffix name="AcksReceivedFromFirst19Packets" label="19 packets."/>
  <suffix name="AcksReceivedFromFirst20Packets" label="20 packets."/>
  <suffix name="AcksReceivedFromFirst21Packets" label="21 packets."/>
  <affected-histogram name="NetConnectivity.Sent21"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity2a" separator=".">
  <suffix name="6121.1K" label="1K bytes of data is sent on port 6121."/>
  <suffix name="6121.100B" label="100 bytes of data is sent on port 6121."/>
  <suffix name="6121.500B" label="500 bytes of data is sent on port 6121."/>
  <affected-histogram name="NetConnectivity2.Sent21.AckReceivedForNthPacket"/>
  <affected-histogram name="NetConnectivity2.Sent21.GotAnAck"/>
  <affected-histogram name="NetConnectivity2.Sent21.PacketsSent"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity2b" separator=".">
  <suffix name="AcksReceivedFromFirst2Packets.6121.100B"
      label="2 packets. 100 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst3Packets.6121.100B"
      label="3 packets. 100 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst4Packets.6121.100B"
      label="4 packets. 100 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst5Packets.6121.100B"
      label="5 packets. 100 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst6Packets.6121.100B"
      label="6 packets. 100 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst7Packets.6121.100B"
      label="7 packets. 100 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst8Packets.6121.100B"
      label="8 packets. 100 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst9Packets.6121.100B"
      label="9 packets. 100 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst10Packets.6121.100B"
      label="10 packets. 100 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst11Packets.6121.100B"
      label="11 packets. 100 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst12Packets.6121.100B"
      label="12 packets. 100 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst13Packets.6121.100B"
      label="13 packets. 100 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst14Packets.6121.100B"
      label="14 packets. 100 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst15Packets.6121.100B"
      label="15 packets. 100 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst16Packets.6121.100B"
      label="16 packets. 100 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst17Packets.6121.100B"
      label="17 packets. 100 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst18Packets.6121.100B"
      label="18 packets. 100 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst19Packets.6121.100B"
      label="19 packets. 100 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst20Packets.6121.100B"
      label="20 packets. 100 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst21Packets.6121.100B"
      label="21 packets. 100 bytes of data is sent on port 6121."/>
  <affected-histogram name="NetConnectivity2.Sent21"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity2c" separator=".">
  <suffix name="6121.1K" label="1K bytes of data is sent on port 6121."/>
  <suffix name="6121.1K.NoProxy"
      label="1K bytes of data is sent on port 6121 with no proxy."/>
  <suffix name="6121.100B" label="100 bytes of data is sent on port 6121."/>
  <suffix name="6121.100B.NoProxy"
      label="100 bytes of data is sent on port 6121 with no proxy."/>
  <suffix name="6121.500B" label="500 bytes of data is sent on port 6121."/>
  <suffix name="6121.500B.NoProxy"
      label="500 bytes of data is sent on port 6121 with no proxy."/>
  <affected-histogram name="NetConnectivity2.Send6.PacketsSent"/>
  <affected-histogram name="NetConnectivity2.Send6.SeriesAcked"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity2d" separator=".">
  <suffix name="AcksReceivedFromFirst2Packets.6121.500B"
      label="2 packets. 500 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst3Packets.6121.500B"
      label="3 packets. 500 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst4Packets.6121.500B"
      label="4 packets. 500 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst5Packets.6121.500B"
      label="5 packets. 500 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst6Packets.6121.500B"
      label="6 packets. 500 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst7Packets.6121.500B"
      label="7 packets. 500 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst8Packets.6121.500B"
      label="8 packets. 500 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst9Packets.6121.500B"
      label="9 packets. 500 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst10Packets.6121.500B"
      label="10 packets. 500 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst11Packets.6121.500B"
      label="11 packets. 500 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst12Packets.6121.500B"
      label="12 packets. 500 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst13Packets.6121.500B"
      label="13 packets. 500 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst14Packets.6121.500B"
      label="14 packets. 500 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst15Packets.6121.500B"
      label="15 packets. 500 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst16Packets.6121.500B"
      label="16 packets. 500 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst17Packets.6121.500B"
      label="17 packets. 500 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst18Packets.6121.500B"
      label="18 packets. 500 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst19Packets.6121.500B"
      label="19 packets. 500 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst20Packets.6121.500B"
      label="20 packets. 500 bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst21Packets.6121.500B"
      label="21 packets. 500 bytes of data is sent on port 6121."/>
  <affected-histogram name="NetConnectivity2.Sent21"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity2e" separator=".">
  <suffix name="AcksReceivedFromFirst2Packets.6121.1K"
      label="2 packets. 1K bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst3Packets.6121.1K"
      label="3 packets. 1K bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst4Packets.6121.1K"
      label="4 packets. 1K bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst5Packets.6121.1K"
      label="5 packets. 1K bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst6Packets.6121.1K"
      label="6 packets. 1K bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst7Packets.6121.1K"
      label="7 packets. 1K bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst8Packets.6121.1K"
      label="8 packets. 1K bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst9Packets.6121.1K"
      label="9 packets. 1K bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst10Packets.6121.1K"
      label="10 packets. 1K bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst11Packets.6121.1K"
      label="11 packets. 1K bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst12Packets.6121.1K"
      label="12 packets. 1K bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst13Packets.6121.1K"
      label="13 packets. 1K bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst14Packets.6121.1K"
      label="14 packets. 1K bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst15Packets.6121.1K"
      label="15 packets. 1K bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst16Packets.6121.1K"
      label="16 packets. 1K bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst17Packets.6121.1K"
      label="17 packets. 1K bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst18Packets.6121.1K"
      label="18 packets. 1K bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst19Packets.6121.1K"
      label="19 packets. 1K bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst20Packets.6121.1K"
      label="20 packets. 1K bytes of data is sent on port 6121."/>
  <suffix name="AcksReceivedFromFirst21Packets.6121.1K"
      label="21 packets. 1K bytes of data is sent on port 6121."/>
  <affected-histogram name="NetConnectivity2.Sent21"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity3a" separator=".">
  <suffix name="NonPacedPacket"
      label="In this histogram results are only shown if at least two packets
             were ACKed in the Startup Test. Packets were sent as rapidly as
             possible."/>
  <suffix name="PacedPacket"
      label="In this histogram results are only shown if at least two packets
             were ACKed in the Startup Test. Packets are sent at equal
             intervals. The interval is selected to match the bandwidth
             discovered during the StartPacket test."/>
  <suffix name="StartPacket"
      label="Packets are sent as rapidly as possible, just after successfully
             sending an UMA upload. Each packet was numbered, as was its ACK
             sent back by Google. If no packets (of the 21) were ever ACKed,
             then the port is assumed to be blocked, and no data is recorded
             in this histogram."/>
  <affected-histogram name="NetConnectivity3"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity3aa" separator=".">
  <suffix name="Sent21"
      label="This histogram shows the number of echo responses received from
             the first"/>
  <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
  <affected-histogram name="NetConnectivity3.PacedPacket"/>
  <affected-histogram name="NetConnectivity3.StartPacket"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity3AckReceivedForNthPacket"
    separator=".">
  <suffix name="Sent21.AckReceivedForNthPacket"
      label="Each packet was numbered, as was its ACK sent back by Google.
             This histogram records, for each packet number, how often we
             received an ACK for that packet."/>
  <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
  <affected-histogram name="NetConnectivity3.PacedPacket"/>
  <affected-histogram name="NetConnectivity3.StartPacket"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity3AcksReceivedFromFirst" separator=".">
  <suffix name="AcksReceivedFromFirst02Packets" label="2 packets."/>
  <suffix name="AcksReceivedFromFirst03Packets" label="3 packets."/>
  <suffix name="AcksReceivedFromFirst04Packets" label="4 packets."/>
  <suffix name="AcksReceivedFromFirst05Packets" label="5 packets."/>
  <suffix name="AcksReceivedFromFirst06Packets" label="6 packets."/>
  <suffix name="AcksReceivedFromFirst07Packets" label="7 packets."/>
  <suffix name="AcksReceivedFromFirst08Packets" label="8 packets."/>
  <suffix name="AcksReceivedFromFirst09Packets" label="9 packets."/>
  <suffix name="AcksReceivedFromFirst10Packets" label="10 packets."/>
  <suffix name="AcksReceivedFromFirst11Packets" label="11 packets."/>
  <suffix name="AcksReceivedFromFirst12Packets" label="12 packets."/>
  <suffix name="AcksReceivedFromFirst13Packets" label="13 packets."/>
  <suffix name="AcksReceivedFromFirst14Packets" label="14 packets."/>
  <suffix name="AcksReceivedFromFirst15Packets" label="15 packets."/>
  <suffix name="AcksReceivedFromFirst16Packets" label="16 packets."/>
  <suffix name="AcksReceivedFromFirst17Packets" label="17 packets."/>
  <suffix name="AcksReceivedFromFirst18Packets" label="18 packets."/>
  <suffix name="AcksReceivedFromFirst19Packets" label="19 packets."/>
  <suffix name="AcksReceivedFromFirst20Packets" label="20 packets."/>
  <suffix name="AcksReceivedFromFirst21Packets" label="21 packets."/>
  <affected-histogram name="NetConnectivity3.NonPacedPacket.Sent21"/>
  <affected-histogram name="NetConnectivity3.PacedPacket.Sent21"/>
  <affected-histogram name="NetConnectivity3.StartPacket.Sent21"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity3GotAnAck" separator=".">
  <suffix name="Sent21.GotAnAck"
      label="The histogram shows if we ever got an ACK for a packet in our
             series of 21."/>
  <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
  <affected-histogram name="NetConnectivity3.PacedPacket"/>
  <affected-histogram name="NetConnectivity3.StartPacket"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity3PacketDelay1" separator=".">
  <suffix name="Sent21.443"
      label="This histogram shows the difference between the time when we
             have received 1st byte from the server and the last time when we
             have received data from the server on port 443."/>
  <suffix name="Sent21.6121"
      label="This histogram shows the difference between the time when we
             have received 1st byte from the server and the last time when we
             have received data from the server on port 6121."/>
  <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
  <affected-histogram name="NetConnectivity3.PacedPacket"/>
  <affected-histogram name="NetConnectivity3.StartPacket"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity3PacketDelay2" separator=".">
  <suffix name="443.100B.PacketDelay"
      label="100 bytes of data is sent on port 443."/>
  <suffix name="443.500B.PacketDelay"
      label="500 bytes of data is sent on port 443."/>
  <suffix name="443.1200B.PacketDelay"
      label="1200 bytes of data is sent on port 443."/>
  <suffix name="6121.100B.PacketDelay"
      label="100 bytes of data is sent on port 6121."/>
  <suffix name="6121.500B.PacketDelay"
      label="500 bytes of data is sent on port 6121."/>
  <suffix name="6121.1200B.PacketDelay"
      label="1200 bytes of data is sent on port 6121."/>
  <affected-histogram name="NetConnectivity3.NonPacedPacket.Sent21"/>
  <affected-histogram name="NetConnectivity3.PacedPacket.Sent21"/>
  <affected-histogram name="NetConnectivity3.StartPacket.Sent21"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity3PacketRTT" separator=".">
  <suffix name="Sent21.Success.RTT" label="The histogram shows the RTT for"/>
  <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
  <affected-histogram name="NetConnectivity3.PacedPacket"/>
  <affected-histogram name="NetConnectivity3.StartPacket"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity3Packets" separator=".">
  <suffix name="Packet01" label="1st packet."/>
  <suffix name="Packet02" label="2nd packet."/>
  <suffix name="Packet03" label="3rd packet."/>
  <suffix name="Packet10" label="10th packet."/>
  <suffix name="Packet20" label="20th packet."/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT"/>
  <affected-histogram name="NetConnectivity3.PacedPacket.Sent21.Success.RTT"/>
  <affected-histogram name="NetConnectivity3.StartPacket.Sent21.Success.RTT"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity3PacketsSent" separator=".">
  <suffix name="Send6.SeriesAcked"
      label="Chrome sends 6 UDP packets in a row to test to see if there is a
             probabalistic dependency in packet loss for consecutive packets.
             We record a bit vector of packets received, where the least
             significant bit is a 1 if the first packet was received, etc.
             For example, if all packets other than packet 2 and 4 are
             responded to, then we'd have a sample (in binary) of 110101B, or
             53."/>
  <suffix name="Sent21.PacketsSent"
      label="This histogram records how many packets (out of 21 attempted)
             were sent to the server via UDP."/>
  <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
  <affected-histogram name="NetConnectivity3.PacedPacket"/>
  <affected-histogram name="NetConnectivity3.StartPacket"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity3PacketsSentBytes" separator=".">
  <suffix name="443.100B" label="100 bytes of data is sent on port 443."/>
  <suffix name="443.500B" label="500 bytes of data is sent on port 443."/>
  <suffix name="443.1200B" label="1200 bytes of data is sent on port 443."/>
  <suffix name="6121.100B" label="100 bytes of data is sent on port 6121."/>
  <suffix name="6121.500B" label="500 bytes of data is sent on port 6121."/>
  <suffix name="6121.1200B" label="1200 bytes of data is sent on port 6121."/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.AckReceivedForNthPacket"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst02Packets"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst03Packets"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst04Packets"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst05Packets"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst06Packets"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst07Packets"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst08Packets"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst09Packets"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst10Packets"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst11Packets"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst12Packets"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst13Packets"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst14Packets"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst15Packets"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst16Packets"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst17Packets"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst18Packets"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst19Packets"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst20Packets"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst21Packets"/>
  <affected-histogram name="NetConnectivity3.NonPacedPacket.Sent21.GotAnAck"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.PacketsSent"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT.Packet01"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT.Packet02"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT.Packet03"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT.Packet10"/>
  <affected-histogram
      name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT.Packet20"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.AckReceivedForNthPacket"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst02Packets"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst03Packets"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst04Packets"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst05Packets"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst06Packets"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst07Packets"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst08Packets"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst09Packets"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst10Packets"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst11Packets"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst12Packets"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst13Packets"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst14Packets"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst15Packets"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst16Packets"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst17Packets"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst18Packets"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst19Packets"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst20Packets"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst21Packets"/>
  <affected-histogram name="NetConnectivity3.PacedPacket.Sent21.GotAnAck"/>
  <affected-histogram name="NetConnectivity3.PacedPacket.Sent21.PacketsSent"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.Success.RTT.Packet01"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.Success.RTT.Packet02"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.Success.RTT.Packet03"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.Success.RTT.Packet10"/>
  <affected-histogram
      name="NetConnectivity3.PacedPacket.Sent21.Success.RTT.Packet20"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.AckReceivedForNthPacket"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst02Packets"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst03Packets"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst04Packets"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst05Packets"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst06Packets"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst07Packets"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst08Packets"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst09Packets"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst10Packets"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst11Packets"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst12Packets"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst13Packets"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst14Packets"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst15Packets"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst16Packets"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst17Packets"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst18Packets"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst19Packets"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst20Packets"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst21Packets"/>
  <affected-histogram name="NetConnectivity3.StartPacket.Sent21.GotAnAck"/>
  <affected-histogram name="NetConnectivity3.StartPacket.Sent21.PacketsSent"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.Success.RTT.Packet01"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.Success.RTT.Packet02"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.Success.RTT.Packet03"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.Success.RTT.Packet10"/>
  <affected-histogram
      name="NetConnectivity3.StartPacket.Sent21.Success.RTT.Packet20"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity3Send6Acked" separator=".">
  <suffix name="443.100B" label="100 bytes of data is sent on port 443."/>
  <suffix name="443.100B.NoProxy"
      label="100 bytes of data is sent on port 443 with no proxy."/>
  <suffix name="443.500B" label="500 bytes of data is sent on port 443."/>
  <suffix name="443.500B.NoProxy"
      label="500 bytes of data is sent on port 443 with no proxy."/>
  <suffix name="443.1200B" label="1200 bytes of data is sent on port 443."/>
  <suffix name="443.1200B.NoProxy"
      label="1200 bytes of data is sent on port 443 with no proxy."/>
  <suffix name="6121.100B" label="100 bytes of data is sent on port 6121."/>
  <suffix name="6121.100B.NoProxy"
      label="100 bytes of data is sent on port 6121 with no proxy."/>
  <suffix name="6121.500B" label="500 bytes of data is sent on port 6121."/>
  <suffix name="6121.500B.NoProxy"
      label="500 bytes of data is sent on port 6121 with no proxy."/>
  <suffix name="6121.1200B" label="1200 bytes of data is sent on port 6121."/>
  <suffix name="6121.1200B.NoProxy"
      label="1200 bytes of data is sent on port 6121 with no proxy."/>
  <affected-histogram name="NetConnectivity3.NonPacedPacket.Send6.SeriesAcked"/>
  <affected-histogram name="NetConnectivity3.PacedPacket.Send6.SeriesAcked"/>
  <affected-histogram name="NetConnectivity3.StartPacket.Send6.PacketsSent"/>
  <affected-histogram name="NetConnectivity3.StartPacket.Send6.SeriesAcked"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity4a" separator=".">
  <suffix name="NATBind.Sent2"
      label="Two packets were sent spreading over a random period, to test if
             the NAT dropped the binding. Afterwords, an extra (short) packet
             was sent with renewed NAT binding to test whether the network
             that was used to deliver the first packet is still connected.
             Results are only shown in this histogram if at least ten packets
             were received in the StartPacket test."/>
  <suffix name="NonPacedPacket"
      label="21 Packets were sent as rapidly as possible. Results are only
             shown in this histogram if at least two packets were received in
             the StartPacket Test."/>
  <suffix name="PacedPacket"
      label="21 Packets were sent at equal intervals, which were selected to
             match the bandwidth discovered during the StartPacket test.
             Results are only shown in this histogram if at least two packets
             were received in the StartPacket Test."/>
  <suffix name="StartPacket"
      label="21 Packets were sent as rapidly as possible, just after the
             client successfully sent a UMA upload. Each packet was numbered
             when it was sent by Google."/>
  <affected-histogram name="NetConnectivity4"/>
  <affected-histogram name="NetConnectivity5"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity4NATBindPacketReceives" separator=".">
  <suffix name="Bind.Failure"
      label="Only when the second packet never arrived (we wait for 10 extra
             seconds) and the first and the extra (short) packets arrived did
             we record the duration in seconds between the sendings of the
             first two packets in this histogram."/>
  <suffix name="Bind.Success"
      label="Only when all three packets including the extra (short) packet
             arrived did we record the duration in seconds between the
             sendings of the first two packets in this histogram."/>
  <suffix name="Connectivity.Failure"
      label="Only when the extra (short) packet (with renewed NAT binding)
             never arrived (we wait for 10 extra seconds) did we record the
             duration in seconds between the sendings of the first two
             packets in this histogram."/>
  <suffix name="Connectivity.Success"
      label="Only when the extra (short) packet arrived did we record the
             duration in seconds between the sendings of the first two
             packets in this histogram."/>
  <suffix name="SendToLastRecvDelay"
      label="This histogram records the time duration (in milliseconds)
             between the client sending the request and the receiving of the
             second packet sent from the server, excluding the idle time
             between sendings of the first two packets. Results are only
             shown if the first two packets are both received."/>
  <affected-histogram name="NetConnectivity4.NATBind.Sent2"/>
  <affected-histogram name="NetConnectivity5.NATBind.Sent2"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity4PacketFirst6" separator=".">
  <suffix name="First6.SeriesRecv"
      label="This histogram records a bit vector of the first 6 packets sent,
             where the least significant bit is a 1 if the first packet was
             received, etc. For example, if all packets other than packet 2
             and 4 are received, then we'd have a sample (in binary) of
             110101B, or 53."/>
  <suffix name="Sent21"
      label="This histogram shows the number of packets received from the
             first"/>
  <affected-histogram name="NetConnectivity4.NonPacedPacket"/>
  <affected-histogram name="NetConnectivity4.PacedPacket"/>
  <affected-histogram name="NetConnectivity4.StartPacket"/>
  <affected-histogram name="NetConnectivity5.NonPacedPacket"/>
  <affected-histogram name="NetConnectivity5.PacedPacket"/>
  <affected-histogram name="NetConnectivity5.StartPacket"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity4PacketReceives" separator=".">
  <suffix name="NumRecvFromFirst01Packets" label="1 packet."/>
  <suffix name="NumRecvFromFirst02Packets" label="2 packets."/>
  <suffix name="NumRecvFromFirst03Packets" label="3 packets."/>
  <suffix name="NumRecvFromFirst04Packets" label="4 packets."/>
  <suffix name="NumRecvFromFirst05Packets" label="5 packets."/>
  <suffix name="NumRecvFromFirst06Packets" label="6 packets."/>
  <suffix name="NumRecvFromFirst07Packets" label="7 packets."/>
  <suffix name="NumRecvFromFirst08Packets" label="8 packets."/>
  <suffix name="NumRecvFromFirst09Packets" label="9 packets."/>
  <suffix name="NumRecvFromFirst10Packets" label="10 packets."/>
  <suffix name="NumRecvFromFirst11Packets" label="11 packets."/>
  <suffix name="NumRecvFromFirst12Packets" label="12 packets."/>
  <suffix name="NumRecvFromFirst13Packets" label="13 packets."/>
  <suffix name="NumRecvFromFirst14Packets" label="14 packets."/>
  <suffix name="NumRecvFromFirst15Packets" label="15 packets."/>
  <suffix name="NumRecvFromFirst16Packets" label="16 packets."/>
  <suffix name="NumRecvFromFirst17Packets" label="17 packets."/>
  <suffix name="NumRecvFromFirst18Packets" label="18 packets."/>
  <suffix name="NumRecvFromFirst19Packets" label="19 packets."/>
  <suffix name="NumRecvFromFirst20Packets" label="20 packets."/>
  <suffix name="NumRecvFromFirst21Packets" label="21 packets."/>
  <affected-histogram name="NetConnectivity4.NonPacedPacket.Sent21"/>
  <affected-histogram name="NetConnectivity4.PacedPacket.Sent21"/>
  <affected-histogram name="NetConnectivity4.StartPacket.Sent21"/>
  <affected-histogram name="NetConnectivity5.NonPacedPacket.Sent21"/>
  <affected-histogram name="NetConnectivity5.PacedPacket.Sent21"/>
  <affected-histogram name="NetConnectivity5.StartPacket.Sent21"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity4PacketRTT" separator=".">
  <suffix name="Sent21.GotAPacket"
      label="The histogram shows if we ever got at least one packet in our
             series of 21."/>
  <suffix name="Sent21.PacketDelay"
      label="The histogram shows the average inter-arrival time between every
             two consecutive packets we receive in our series of 21
             multiplied by 20 (so this is essentially the time duration
             between the first and the last received packets)."/>
  <suffix name="Sent21.PacketsRecv"
      label="The histogram shows how many packets we receive in our series of
             21."/>
  <suffix name="Sent21.RecvNthPacket"
      label="Each packet was numbered when it was sent by Google. This
             histogram records, for each packet number, how often we received
             that packet."/>
  <suffix name="Sent21.SendToLastRecvDelay"
      label="This histogram records the time duration between the client
             sending the request and the receiving of the last packet sent
             from the server, excluding the total pacing time requested by
             the client. Results are only shown if at least two packets are
             received."/>
  <suffix name="Sent21.Success.RTT"
      label="The histogram shows the RTT for the"/>
  <affected-histogram name="NetConnectivity4.NonPacedPacket"/>
  <affected-histogram name="NetConnectivity4.PacedPacket"/>
  <affected-histogram name="NetConnectivity4.StartPacket"/>
  <affected-histogram name="NetConnectivity5.NonPacedPacket"/>
  <affected-histogram name="NetConnectivity5.PacedPacket"/>
  <affected-histogram name="NetConnectivity5.StartPacket"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity4PacketRTTSeries" separator=".">
  <suffix name="Packet01" label="1st packet."/>
  <suffix name="Packet02" label="2nd packet."/>
  <suffix name="Packet03" label="3rd packet."/>
  <suffix name="Packet10" label="10th packet."/>
  <suffix name="Packet20" label="20th packet."/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT"/>
  <affected-histogram name="NetConnectivity4.PacedPacket.Sent21.Success.RTT"/>
  <affected-histogram name="NetConnectivity4.StartPacket.Sent21.Success.RTT"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT"/>
  <affected-histogram name="NetConnectivity5.PacedPacket.Sent21.Success.RTT"/>
  <affected-histogram name="NetConnectivity5.StartPacket.Sent21.Success.RTT"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity4PacketsAll" separator=".">
  <suffix name="80.100B" label="100 bytes of data is sent on port 80."/>
  <suffix name="80.500B" label="500 bytes of data is sent on port 80."/>
  <suffix name="80.1200B" label="1200 bytes of data is sent on port 80."/>
  <suffix name="443.100B" label="100 bytes of data is sent on port 443."/>
  <suffix name="443.500B" label="500 bytes of data is sent on port 443."/>
  <suffix name="443.1200B" label="1200 bytes of data is sent on port 443."/>
  <affected-histogram name="NetConnectivity4.NATBind.Sent2.Bind.Failure"/>
  <affected-histogram name="NetConnectivity4.NATBind.Sent2.Bind.Success"/>
  <affected-histogram
      name="NetConnectivity4.NATBind.Sent2.Connectivity.Failure"/>
  <affected-histogram
      name="NetConnectivity4.NATBind.Sent2.Connectivity.Success"/>
  <affected-histogram
      name="NetConnectivity4.NATBind.Sent2.SendToLastRecvDelay"/>
  <affected-histogram name="NetConnectivity4.NonPacedPacket.Sent21.GotAPacket"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst01Packets"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst02Packets"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst03Packets"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst04Packets"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst05Packets"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst06Packets"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst07Packets"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst08Packets"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst09Packets"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst10Packets"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst11Packets"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst12Packets"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst13Packets"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst14Packets"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst15Packets"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst16Packets"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst17Packets"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst18Packets"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst19Packets"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst20Packets"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst21Packets"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.PacketDelay"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.PacketsRecv"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.RecvNthPacket"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.SendToLastRecvDelay"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT.Packet01"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT.Packet02"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT.Packet03"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT.Packet10"/>
  <affected-histogram
      name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT.Packet20"/>
  <affected-histogram name="NetConnectivity4.PacedPacket.Sent21.GotAPacket"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst01Packets"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst02Packets"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst03Packets"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst04Packets"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst05Packets"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst06Packets"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst07Packets"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst08Packets"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst09Packets"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst10Packets"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst11Packets"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst12Packets"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst13Packets"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst14Packets"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst15Packets"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst16Packets"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst17Packets"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst18Packets"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst19Packets"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst20Packets"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst21Packets"/>
  <affected-histogram name="NetConnectivity4.PacedPacket.Sent21.PacketDelay"/>
  <affected-histogram name="NetConnectivity4.PacedPacket.Sent21.PacketsRecv"/>
  <affected-histogram name="NetConnectivity4.PacedPacket.Sent21.RecvNthPacket"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.SendToLastRecvDelay"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.Success.RTT.Packet01"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.Success.RTT.Packet02"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.Success.RTT.Packet03"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.Success.RTT.Packet10"/>
  <affected-histogram
      name="NetConnectivity4.PacedPacket.Sent21.Success.RTT.Packet20"/>
  <affected-histogram name="NetConnectivity4.StartPacket.Sent21.GotAPacket"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst01Packets"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst02Packets"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst03Packets"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst04Packets"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst05Packets"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst06Packets"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst07Packets"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst08Packets"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst09Packets"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst10Packets"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst11Packets"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst12Packets"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst13Packets"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst14Packets"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst15Packets"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst16Packets"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst17Packets"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst18Packets"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst19Packets"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst20Packets"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst21Packets"/>
  <affected-histogram name="NetConnectivity4.StartPacket.Sent21.PacketDelay"/>
  <affected-histogram name="NetConnectivity4.StartPacket.Sent21.PacketsRecv"/>
  <affected-histogram name="NetConnectivity4.StartPacket.Sent21.RecvNthPacket"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.SendToLastRecvDelay"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.Success.RTT.Packet01"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.Success.RTT.Packet02"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.Success.RTT.Packet03"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.Success.RTT.Packet10"/>
  <affected-histogram
      name="NetConnectivity4.StartPacket.Sent21.Success.RTT.Packet20"/>
  <affected-histogram name="NetConnectivity5.NATBind.Sent2.Bind.Failure"/>
  <affected-histogram name="NetConnectivity5.NATBind.Sent2.Bind.Success"/>
  <affected-histogram
      name="NetConnectivity5.NATBind.Sent2.Connectivity.Failure"/>
  <affected-histogram
      name="NetConnectivity5.NATBind.Sent2.Connectivity.Success"/>
  <affected-histogram
      name="NetConnectivity5.NATBind.Sent2.SendToLastRecvDelay"/>
  <affected-histogram name="NetConnectivity5.NonPacedPacket.Sent21.GotAPacket"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst01Packets"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst02Packets"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst03Packets"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst04Packets"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst05Packets"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst06Packets"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst07Packets"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst08Packets"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst09Packets"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst10Packets"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst11Packets"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst12Packets"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst13Packets"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst14Packets"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst15Packets"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst16Packets"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst17Packets"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst18Packets"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst19Packets"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst20Packets"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst21Packets"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.PacketDelay"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.PacketsRecv"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.RecvNthPacket"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.SendToLastRecvDelay"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT.Packet01"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT.Packet02"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT.Packet03"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT.Packet10"/>
  <affected-histogram
      name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT.Packet20"/>
  <affected-histogram name="NetConnectivity5.PacedPacket.Sent21.GotAPacket"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst01Packets"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst02Packets"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst03Packets"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst04Packets"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst05Packets"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst06Packets"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst07Packets"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst08Packets"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst09Packets"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst10Packets"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst11Packets"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst12Packets"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst13Packets"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst14Packets"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst15Packets"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst16Packets"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst17Packets"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst18Packets"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst19Packets"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst20Packets"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst21Packets"/>
  <affected-histogram name="NetConnectivity5.PacedPacket.Sent21.PacketDelay"/>
  <affected-histogram name="NetConnectivity5.PacedPacket.Sent21.PacketsRecv"/>
  <affected-histogram name="NetConnectivity5.PacedPacket.Sent21.RecvNthPacket"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.SendToLastRecvDelay"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.Success.RTT.Packet01"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.Success.RTT.Packet02"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.Success.RTT.Packet03"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.Success.RTT.Packet10"/>
  <affected-histogram
      name="NetConnectivity5.PacedPacket.Sent21.Success.RTT.Packet20"/>
  <affected-histogram name="NetConnectivity5.StartPacket.Sent21.GotAPacket"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst01Packets"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst02Packets"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst03Packets"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst04Packets"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst05Packets"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst06Packets"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst07Packets"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst08Packets"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst09Packets"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst10Packets"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst11Packets"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst12Packets"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst13Packets"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst14Packets"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst15Packets"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst16Packets"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst17Packets"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst18Packets"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst19Packets"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst20Packets"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst21Packets"/>
  <affected-histogram name="NetConnectivity5.StartPacket.Sent21.PacketDelay"/>
  <affected-histogram name="NetConnectivity5.StartPacket.Sent21.PacketsRecv"/>
  <affected-histogram name="NetConnectivity5.StartPacket.Sent21.RecvNthPacket"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.SendToLastRecvDelay"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.Success.RTT.Packet01"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.Success.RTT.Packet02"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.Success.RTT.Packet03"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.Success.RTT.Packet10"/>
  <affected-histogram
      name="NetConnectivity5.StartPacket.Sent21.Success.RTT.Packet20"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity4PacketSizeTest" separator=".">
  <suffix name="PacketSizeTest.Connectivity.Failure"
      label="This histogram records the size of the packet size that was not
             received from the server."/>
  <suffix name="PacketSizeTest.Connectivity.Success"
      label="This histogram records the size of the packet size that was
             received from the server."/>
  <affected-histogram name="NetConnectivity4"/>
  <affected-histogram name="NetConnectivity5"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity4PacketSizeTestPort" separator=".">
  <suffix name="80" label="Packet is sent on port 80."/>
  <suffix name="443" label="Packet is sent on port 443."/>
  <affected-histogram
      name="NetConnectivity4.PacketSizeTest.Connectivity.Failure"/>
  <affected-histogram
      name="NetConnectivity4.PacketSizeTest.Connectivity.Success"/>
  <affected-histogram
      name="NetConnectivity5.PacketSizeTest.Connectivity.Failure"/>
  <affected-histogram
      name="NetConnectivity5.PacketSizeTest.Connectivity.Success"/>
</histogram_suffixes>

<histogram_suffixes name="NetConnectivity4SeriesRecv" separator=".">
  <suffix name="80.100B" label="100 bytes of data is sent on port 80."/>
  <suffix name="80.100B.NoProxy"
      label="100 bytes of data is sent on port 80 with no proxy."/>
  <suffix name="80.500B" label="500 bytes of data is sent on port 80."/>
  <suffix name="80.500B.NoProxy"
      label="500 bytes of data is sent on port 80 with no proxy."/>
  <suffix name="80.1200B" label="1200 bytes of data is sent on port 80."/>
  <suffix name="80.1200B.NoProxy"
      label="1200 bytes of data is sent on port 80 with no proxy."/>
  <suffix name="443.100B" label="100 bytes of data is sent on port 443."/>
  <suffix name="443.100B.NoProxy"
      label="100 bytes of data is sent on port 443 with no proxy."/>
  <suffix name="443.500B" label="500 bytes of data is sent on port 443."/>
  <suffix name="443.500B.NoProxy"
      label="500 bytes of data is sent on port 443 with no proxy."/>
  <suffix name="443.1200B" label="1200 bytes of data is sent on port 443."/>
  <suffix name="443.1200B.NoProxy"
      label="1200 bytes of data is sent on port 443 with no proxy."/>
  <affected-histogram name="NetConnectivity4.NonPacedPacket.First6.SeriesRecv"/>
  <affected-histogram name="NetConnectivity4.PacedPacket.First6.SeriesRecv"/>
  <affected-histogram name="NetConnectivity4.StartPacket.First6.SeriesRecv"/>
  <affected-histogram name="NetConnectivity5.NonPacedPacket.First6.SeriesRecv"/>
  <affected-histogram name="NetConnectivity5.PacedPacket.First6.SeriesRecv"/>
  <affected-histogram name="NetConnectivity5.StartPacket.First6.SeriesRecv"/>
</histogram_suffixes>

<histogram_suffixes name="NetErrorCodeSubtype" separator="." ordering="prefix">
  <owner>csharrison@chromium.org</owner>
  <suffix name="NTP.Google" label="The Google web NTP"/>
  <suffix name="NTP.Local" label="The local NTP"/>
  <suffix name="NTP.ThirdParty"
      label="The NTP served by a third party (e.g. Bing)"/>
  <affected-histogram name="Net.RequestTime2.ErrAborted"/>
  <affected-histogram name="Net.RequestTime2.Success"/>
</histogram_suffixes>

<histogram_suffixes name="NetHttpContentLengthType" separator=".">
  <suffix name="Http"/>
  <suffix name="Https"/>
  <suffix name="Video"/>
  <affected-histogram name="Net.HttpContentLength"/>
  <affected-histogram name="Net.HttpContentLengthV2"/>
  <affected-histogram name="Net.HttpOriginalContentLength"/>
  <affected-histogram name="Net.HttpOriginalContentLengthV2"/>
</histogram_suffixes>

<histogram_suffixes name="NetHttpContentLengthType2" separator=".">
  <suffix name="BypassedDRP"
      label="Bytes of traffic that bypassed the Data Reduction Proxy"/>
  <suffix name="Direct"
      label="Bytes of traffic that were ineligible for the Data Reduction
             Proxy"/>
  <suffix name="Other"
      label="Bytes of traffic that don't fit into the other categories of
             Net.HttpContentLength"/>
  <suffix name="ViaDRP"
      label="Bytes of traffic that passed through the Data Reduction Proxy"/>
  <affected-histogram name="Net.HttpContentLength.Http"/>
  <affected-histogram name="Net.HttpContentLength.Https"/>
  <affected-histogram name="Net.HttpContentLengthV2.Http"/>
  <affected-histogram name="Net.HttpContentLengthV2.Https"/>
  <affected-histogram name="Net.HttpOriginalContentLength.Http"/>
  <affected-histogram name="Net.HttpOriginalContentLength.Https"/>
  <affected-histogram name="Net.HttpOriginalContentLengthV2.Http"/>
  <affected-histogram name="Net.HttpOriginalContentLengthV2.Https"/>
</histogram_suffixes>

<histogram_suffixes name="NetHttpContentLengthType3" separator=".">
  <suffix name="Video" label="Bytes of video traffic"/>
  <affected-histogram name="Net.HttpContentLength.Http.BypassedDRP"/>
  <affected-histogram name="Net.HttpContentLength.Http.Direct"/>
  <affected-histogram name="Net.HttpContentLength.Http.Other"/>
  <affected-histogram name="Net.HttpContentLength.Http.ViaDRP"/>
  <affected-histogram name="Net.HttpContentLength.Https.BypassedDRP"/>
  <affected-histogram name="Net.HttpContentLength.Https.Direct"/>
  <affected-histogram name="Net.HttpContentLength.Https.Other"/>
  <affected-histogram name="Net.HttpContentLength.Https.ViaDRP"/>
  <affected-histogram name="Net.HttpContentLengthV2.Http.BypassedDRP"/>
  <affected-histogram name="Net.HttpContentLengthV2.Http.Direct"/>
  <affected-histogram name="Net.HttpContentLengthV2.Http.Other"/>
  <affected-histogram name="Net.HttpContentLengthV2.Http.ViaDRP"/>
  <affected-histogram name="Net.HttpContentLengthV2.Https.BypassedDRP"/>
  <affected-histogram name="Net.HttpContentLengthV2.Https.Direct"/>
  <affected-histogram name="Net.HttpContentLengthV2.Https.Other"/>
  <affected-histogram name="Net.HttpContentLengthV2.Https.ViaDRP"/>
  <affected-histogram name="Net.HttpOriginalContentLength.Http.BypassedDRP"/>
  <affected-histogram name="Net.HttpOriginalContentLength.Http.Direct"/>
  <affected-histogram name="Net.HttpOriginalContentLength.Http.Other"/>
  <affected-histogram name="Net.HttpOriginalContentLength.Http.ViaDRP"/>
  <affected-histogram name="Net.HttpOriginalContentLength.Https.BypassedDRP"/>
  <affected-histogram name="Net.HttpOriginalContentLength.Https.Direct"/>
  <affected-histogram name="Net.HttpOriginalContentLength.Https.Other"/>
  <affected-histogram name="Net.HttpOriginalContentLength.Https.ViaDRP"/>
  <affected-histogram name="Net.HttpOriginalContentLengthV2.Http.BypassedDRP"/>
  <affected-histogram name="Net.HttpOriginalContentLengthV2.Http.Direct"/>
  <affected-histogram name="Net.HttpOriginalContentLengthV2.Http.Other"/>
  <affected-histogram name="Net.HttpOriginalContentLengthV2.Http.ViaDRP"/>
  <affected-histogram name="Net.HttpOriginalContentLengthV2.Https.BypassedDRP"/>
  <affected-histogram name="Net.HttpOriginalContentLengthV2.Https.Direct"/>
  <affected-histogram name="Net.HttpOriginalContentLengthV2.Https.Other"/>
  <affected-histogram name="Net.HttpOriginalContentLengthV2.Https.ViaDRP"/>
</histogram_suffixes>

<histogram_suffixes name="NetHttpProxyConnectLatencySecure" separator=".">
  <owner>tbansal@chromium.org</owner>
  <suffix name="Insecure" label="Insecure proxy"/>
  <suffix name="Secure" label="Secure proxy"/>
  <affected-histogram name="Net.HttpProxy.ConnectLatency"/>
</histogram_suffixes>

<histogram_suffixes name="NetHttpProxyConnectLatencySuccess" separator=".">
  <owner>tbansal@chromium.org</owner>
  <suffix name="Error" label="Connection to proxy resulted in an error"/>
  <suffix name="Success" label="Connection to proxy was successful"/>
  <suffix name="TimedOut" label="Connection to proxy timed out"/>
  <affected-histogram name="Net.HttpProxy.ConnectLatency.Insecure"/>
  <affected-histogram name="Net.HttpProxy.ConnectLatency.Secure"/>
</histogram_suffixes>

<histogram_suffixes name="NetProxyResolverExecutionTime" separator="_">
  <suffix name="UrlOver2K" label="URL length was over 2K"/>
  <suffix name="UrlOver4K" label="URL length was over 4K"/>
  <suffix name="UrlOver8K" label="URL length was over 8K"/>
  <suffix name="UrlOver128K" label="URL length was over 128K"/>
  <affected-histogram name="Net.ProxyResolver.ExecutionTime"/>
</histogram_suffixes>

<histogram_suffixes name="NetQuicDiskCacheBackend" separator=".">
  <suffix name="DiskCache" label="DiskCache backend is using disk cache."/>
  <suffix name="MemoryCache" label="DiskCache backend is using memory cache."/>
  <owner>rch@chromium.org</owner>
  <suffix name="NoBackend" label="DiskCache didn't have a backend"/>
  <suffix name="PropertiesBasedCache" label="Preferences based cache is used."/>
  <suffix name="WaitForDataReady"
      label="Tracks the last failure reason until WaitForDataReady or its
             callback is executed. This is recorded when data is ready in
             WaitForDataReady or when the callback is executed"/>
  <affected-histogram name="Net.QuicDiskCache.APICall"/>
  <affected-histogram name="Net.QuicDiskCache.FailureReason"/>
</histogram_suffixes>

<histogram_suffixes name="NetRequestTime" separator=".">
  <suffix name="ErrAborted" label="Request aborted"/>
  <suffix name="ErrConnectionReset" label="Connection reset"/>
  <suffix name="ErrConnectionTimedOut" label="Request connection timed out"/>
  <suffix name="ErrInternetDisconnected" label="Internet disconnected"/>
  <suffix name="ErrNameNotResolved" label="Request domain not resolved"/>
  <suffix name="ErrTimedOut" label="Request timed out"/>
  <suffix name="MiscError" label="Uncategorized error"/>
  <suffix name="Success" label="Success"/>
  <affected-histogram name="Net.RequestTime"/>
  <affected-histogram name="Net.RequestTime2"/>
</histogram_suffixes>

<histogram_suffixes name="NetworkErrors" separator=".">
  <suffix name="AuthExtTimeout" label="with the last error AuthExtTimeout"/>
  <suffix name="Offline" label="with the last error Offline"/>
  <suffix name="Portal" label="with the last error Portal"/>
  <suffix name="Proxy" label="with the last error Proxy"/>
  <affected-histogram name="OOBE.ErrorScreensTime.Enrollment"/>
  <affected-histogram name="OOBE.ErrorScreensTime.Signin"/>
  <affected-histogram name="OOBE.ErrorScreensTime.Supervised"/>
  <affected-histogram name="OOBE.ErrorScreensTime.Update"/>
</histogram_suffixes>

<histogram_suffixes name="NewTabPage.BackgroundService.RequestLatency"
    separator=".">
  <suffix name="Failure" label="Failed to fetch data from background service"/>
  <suffix name="Success" label="Successfully fetched from background service"/>
  <affected-histogram
      name="NewTabPage.BackgroundService.Collections.RequestLatency"/>
  <affected-histogram
      name="NewTabPage.BackgroundService.Images.RequestLatency"/>
</histogram_suffixes>

<histogram_suffixes name="NewTabPage.OneGoogleBar.RequestLatency" separator=".">
  <suffix name="Failure" label="Failed to fetch OneGoogleBar"/>
  <suffix name="Success" label="Successfully fetched OneGoogleBar"/>
  <affected-histogram name="NewTabPage.OneGoogleBar.RequestLatency"/>
</histogram_suffixes>

<histogram_suffixes name="NewTabPageIconTypes" separator=".">
  <suffix name="IconsColor"
      label="Icons using a fallback color (favicon resolution too low)."/>
  <suffix name="IconsGray"
      label="Icons using a gray color (no favicon available)."/>
  <suffix name="IconsReal"
      label="Icons using an actual icon published by the site."/>
  <suffix name="Thumbnail"
      label="Not an icon but a thumbnail/screenshot of the page."/>
  <suffix name="ThumbnailFailed"
      label="Default gray box in place of a thumbnail/screenshot."/>
  <affected-histogram name="NewTabPage.MostVisited"/>
  <affected-histogram name="NewTabPage.SuggestionsImpression"/>
  <affected-histogram name="NewTabPage.TileFaviconType"/>
  <affected-histogram name="NewTabPage.TileFaviconTypeClicked"/>
</histogram_suffixes>

<histogram_suffixes name="NewTabPageLogoShownFromCache" separator=".">
  <suffix name="Fresh" label="Fresh logo from network."/>
  <suffix name="FromCache" label="Logo from cache."/>
  <affected-histogram name="NewTabPage.LogoShown"/>
</histogram_suffixes>

<histogram_suffixes name="NewTabPageProviders" separator=".">
  <suffix name="client" label="Suggestions coming from the client."/>
  <suffix name="client0">
    <obsolete>
      Hasn't been used for a while, as of 2016-07.
    </obsolete>
  </suffix>
  <suffix name="custom_links" label="User customized links."/>
  <suffix name="homepage" label="The currently set home page."/>
<!-- TODO(fhorschig): Add <obsolete> tag as soon as M-62 is rolled out. -->

  <suffix name="popular"
      label="Deprecated with M-62! Non-personalized, popular suggestions."/>
  <suffix name="popular_baked_in" label="Baked-in, popular suggestions."/>
  <suffix name="popular_fetched"
      label="Non-personalized, popular suggestions (fetched from the server)."/>
  <suffix name="server" label="Suggestions coming from the server."/>
  <suffix name="server0">
    <obsolete>
      Hasn't been used for a while, as of 2016-07.
    </obsolete>
  </suffix>
  <suffix name="server8">
    <obsolete>
      Not used anymore as of 2016-07.
    </obsolete>
  </suffix>
  <suffix name="server9">
    <obsolete>
      Has never been used.
    </obsolete>
  </suffix>
  <suffix name="server10">
    <obsolete>
      Has never been used.
    </obsolete>
  </suffix>
  <suffix name="server11">
    <obsolete>
      Has never been used.
    </obsolete>
  </suffix>
  <suffix name="whitelist"
      label="Installed whitelist entry point suggestions."/>
  <affected-histogram name="NewTabPage.MostVisited"/>
  <affected-histogram name="NewTabPage.MostVisitedAge"/>
  <affected-histogram name="NewTabPage.SuggestionsImpression"/>
  <affected-histogram name="NewTabPage.SuggestionsImpressionAge"/>
  <affected-histogram name="NewTabPage.TileTitle"/>
  <affected-histogram name="NewTabPage.TileTitleClicked"/>
  <affected-histogram name="NewTabPage.TileType"/>
  <affected-histogram name="NewTabPage.TileTypeClicked"/>
</histogram_suffixes>

<histogram_suffixes name="NewTabPageTimings" separator=".">
  <suffix name="LocalNTP" label="Loaded local NTP."/>
  <suffix name="MostLikely" label="Loaded server-side suggestions."/>
  <suffix name="MostVisited" label="Loaded client-side suggestions."/>
  <suffix name="NewTab" label="NTP loaded on a new tab."/>
  <suffix name="Startup" label="NTP loaded during browser startup."/>
  <suffix name="Web" label="Loaded server-side NTP."/>
  <affected-histogram name="NewTabPage.LoadTime"/>
  <affected-histogram name="NewTabPage.TilesReceivedTime"/>
</histogram_suffixes>

<histogram_suffixes name="NewTabPageTimingsIsGoogle" separator=".">
  <suffix name="Google" label="Default search provider is Google."/>
  <suffix name="Other" label="Default search provider is not Google."/>
  <affected-histogram name="NewTabPage.LoadTime.LocalNTP"/>
  <affected-histogram name="NewTabPage.LoadTime.Web"/>
</histogram_suffixes>

<histogram_suffixes name="NextTabState" separator="_">
  <suffix name="Active"
      label="For a tab active which is shown foreground in a browser window."/>
  <suffix name="Closed" label="For a tab that is about to be closed."/>
  <suffix name="Detached"
      label="For a tab that is being dragged by user to outside of the
             browser window."/>
  <suffix name="Inactive"
      label="For tabs in background and not shown to user."/>
  <affected-histogram name="Tabs.StateTransfer.Time_Active"/>
  <affected-histogram name="Tabs.StateTransfer.Time_Detached"/>
  <affected-histogram name="Tabs.StateTransfer.Time_Inactive"/>
</histogram_suffixes>

<histogram_suffixes name="NotificationDisplayExperiment" separator="_">
  <obsolete>
    Deprecated October 2017 (feature enabled by default).
  </obsolete>
  <suffix name="Fullscreen.Shown"
      label="A notification sent by a fullscreen app or webpage that is
             displayed."/>
  <suffix name="Fullscreen.Suppressed"
      label="A notification sent by a fullscreen app or webpage that is not
             displayed."/>
  <suffix name="Windowed"
      label="A notification sent by a non-fullscreen app or webpage."/>
  <affected-histogram name="Notifications.Display"/>
</histogram_suffixes>

<histogram_suffixes name="NotificationImageTypes" separator=".">
  <suffix name="ActionIcon"/>
  <suffix name="Badge"/>
  <suffix name="Icon"/>
  <suffix name="Image"/>
  <affected-histogram name="Notifications.LoadFailTime"/>
  <affected-histogram name="Notifications.LoadFileSize"/>
  <affected-histogram name="Notifications.LoadFinishTime"/>
  <affected-histogram name="Notifications.LoadScaleDownTime"/>
</histogram_suffixes>

<histogram_suffixes name="NQE.Accuracy.Metric.Accuracy.DiffPositiveOrNegative"
    separator=".">
  <suffix name="Negative"
      label="Estimate of the metric was lower than observed metric"/>
  <suffix name="Positive"
      label="Estimate of the metric was higher than observed metric"/>
  <affected-histogram
      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff"/>
  <affected-histogram
      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff"/>
  <affected-histogram name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff"/>
  <affected-histogram name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff"/>
  <affected-histogram
      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff"/>
  <affected-histogram
      name="NQE.UnweightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff"/>
  <affected-histogram
      name="NQE.WeightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff"/>
</histogram_suffixes>

<histogram_suffixes name="NQE.Accuracy.Metric.AccuracyRecordingIntervals"
    separator=".">
  <suffix name="15"
      label="Recorded approximately 15 seconds after navigation start"/>
  <suffix name="30"
      label="Recorded approximately 30 seconds after navigation start">
    <obsolete>
      Deprecated as of 01/2017.
    </obsolete>
  </suffix>
  <suffix name="60"
      label="Recorded approximately 60 seconds after navigation start">
    <obsolete>
      Deprecated as of 01/2017.
    </obsolete>
  </suffix>
  <affected-histogram
      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Negative"/>
  <affected-histogram
      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Positive"/>
  <affected-histogram
      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Negative"/>
  <affected-histogram
      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Positive"/>
  <affected-histogram
      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Negative"/>
  <affected-histogram
      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Positive"/>
  <affected-histogram
      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Negative"/>
  <affected-histogram
      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Positive"/>
  <affected-histogram
      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Negative"/>
  <affected-histogram
      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Positive"/>
  <affected-histogram
      name="NQE.UnweightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff.Negative"/>
  <affected-histogram
      name="NQE.UnweightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff.Positive"/>
  <affected-histogram
      name="NQE.WeightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff.Negative"/>
  <affected-histogram
      name="NQE.WeightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff.Positive"/>
</histogram_suffixes>

<histogram_suffixes
    name="NQE.Accuracy.Metric.EffectiveConnectionType.ObservedIntervals"
    separator=".">
  <suffix name="2G" label="Observed effective connection type was 2G"/>
  <suffix name="3G" label="Observed effective connection type was 3G"/>
  <suffix name="4G" label="Observed effective connection type was 4G"/>
  <suffix name="Broadband"
      label="Observed effective connection type was Broadband"/>
  <suffix name="Offline"
      label="Observed effective connection type was Offline"/>
  <suffix name="Slow2G" label="Observed effective connection type was Slow2G"/>
  <suffix name="Unknown"
      label="Observed effective connection type was Unknown"/>
  <affected-histogram
      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Negative.15"/>
  <affected-histogram
      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Negative.30">
    <obsolete>
      Deprecated 01/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Negative.60">
    <obsolete>
      Deprecated 01/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Positive.15"/>
  <affected-histogram
      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Positive.30">
    <obsolete>
      Deprecated 01/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Positive.60">
    <obsolete>
      Deprecated 01/2017.
    </obsolete>
  </affected-histogram>
</histogram_suffixes>

<histogram_suffixes name="NQE.Accuracy.RTT.ObservedIntervals" separator=".">
  <suffix name="0_20"
      label="Observed metric was between 0 and 20 (inclusive) units"/>
  <suffix name="20_60"
      label="Observed metric was between 20 and 60 (inclusive) units"/>
  <suffix name="60_140"
      label="Observed metric was between 60 and 140 (inclusive) units"/>
  <suffix name="140_300"
      label="Observed metric was between 140 and 300 (inclusive) units"/>
  <suffix name="300_620"
      label="Observed metric was between 300 and 620 (inclusive) units"/>
  <suffix name="620_1260"
      label="Observed metric was between 620 and 1260 (inclusive) units"/>
  <suffix name="1260_2540"
      label="Observed metric was between 1260 and 2540 (inclusive) units"/>
  <suffix name="2540_5100"
      label="Observed metric was between 2540 and 51000 (inclusive) units"/>
  <suffix name="5100_Infinity"
      label="Observed metric was greater than 5100 (inclusive) units"/>
  <affected-histogram
      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Negative.15"/>
  <affected-histogram
      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Negative.30">
    <obsolete>
      Deprecated 01/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Negative.60">
    <obsolete>
      Deprecated 01/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Positive.15"/>
  <affected-histogram
      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Positive.30">
    <obsolete>
      Deprecated 01/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Positive.60">
    <obsolete>
      Deprecated 01/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Negative.15"/>
  <affected-histogram
      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Negative.30">
    <obsolete>
      Deprecated 01/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Negative.60">
    <obsolete>
      Deprecated 01/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Positive.15"/>
  <affected-histogram
      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Positive.30">
    <obsolete>
      Deprecated 01/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Positive.60">
    <obsolete>
      Deprecated 01/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Negative.15"/>
  <affected-histogram
      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Negative.30">
    <obsolete>
      Deprecated 01/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Negative.60">
    <obsolete>
      Deprecated 01/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Positive.15"/>
  <affected-histogram
      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Positive.30">
    <obsolete>
      Deprecated 01/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Positive.60">
    <obsolete>
      Deprecated 01/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Negative.15"/>
  <affected-histogram
      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Negative.30">
    <obsolete>
      Deprecated 01/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Negative.60">
    <obsolete>
      Deprecated 01/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Positive.15"/>
  <affected-histogram
      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Positive.30">
    <obsolete>
      Deprecated 01/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Positive.60">
    <obsolete>
      Deprecated 01/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="NQE.UnweightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff.Negative.15"/>
  <affected-histogram
      name="NQE.UnweightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff.Positive.15"/>
  <affected-histogram
      name="NQE.WeightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff.Negative.15"/>
  <affected-histogram
      name="NQE.WeightedAverage.Accuracy.HttpRTT.EstimatedObservedDiff.Positive.15"/>
</histogram_suffixes>

<histogram_suffixes name="NQE.DifferentPercentiles" separator=".">
  <obsolete>
    Deprecated 01/2018.
  </obsolete>
  <suffix name="Percentile0" label="0th percentile"/>
  <suffix name="Percentile10" label="10th percentile"/>
  <suffix name="Percentile50" label="50th percentile"/>
  <suffix name="Percentile90" label="90th percentile"/>
  <suffix name="Percentile100" label="100th percentile"/>
  <affected-histogram name="NQE.RTT"/>
  <affected-histogram name="NQE.TransportRTT"/>
</histogram_suffixes>

<histogram_suffixes name="NQE.DifferentPercentiles" separator=".">
  <suffix name="Percentile50" label="50th percentile"/>
  <affected-histogram name="NQE.MainFrame.Kbps"/>
  <affected-histogram name="NQE.MainFrame.RTT"/>
  <affected-histogram name="NQE.MainFrame.TransportRTT"/>
</histogram_suffixes>

<histogram_suffixes name="NQE.EstimateAvailable.MainFrame.Histograms"
    separator=".">
  <suffix name="Kbps"
      label="Records availability of the downstream throughput estimate."/>
  <suffix name="RTT" label="Records availability of the HTTP RTT estimate."/>
  <suffix name="TransportRTT"
      label="Records availability of the transport RTT estimate."/>
  <affected-histogram name="NQE.EstimateAvailable.MainFrame"/>
</histogram_suffixes>

<histogram_suffixes name="NQE.NetworkTypes" separator=".">
  <obsolete>
    Deprecated 01/2018.
  </obsolete>
  <suffix name="2G" label="On 2G network"/>
  <suffix name="3G" label="On 3G Network"/>
  <suffix name="4G" label="On 4G network"/>
  <suffix name="Bluetooth" label="On Bluetooth network"/>
  <suffix name="Ethernet" label="On Ethernet network"/>
  <suffix name="None" label="With no detected network"/>
  <suffix name="Unknown" label="On Unknown network"/>
  <suffix name="WiFi" label="On WiFi network"/>
  <affected-histogram name="NQE.FastestRTT"/>
  <affected-histogram name="NQE.MainFrame.EffectiveConnectionType">
    <obsolete>
      Deprecated 08/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="NQE.MainFrame.Kbps.Percentile50">
    <obsolete>
      Deprecated 08/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="NQE.MainFrame.RTT.Percentile50">
    <obsolete>
      Deprecated 08/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="NQE.MainFrame.TransportRTT.Percentile50">
    <obsolete>
      Deprecated 08/2017.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="NQE.PeakKbps"/>
  <affected-histogram name="NQE.RTT.Percentile0">
    <obsolete>
      Deprecated 01/2018.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="NQE.RTT.Percentile10">
    <obsolete>
      Deprecated 01/2018.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="NQE.RTT.Percentile100">
    <obsolete>
      Deprecated 01/2018.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="NQE.RTT.Percentile50">
    <obsolete>
      Deprecated 01/2018.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="NQE.RTT.Percentile90">
    <obsolete>
      Deprecated 01/2018.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="NQE.TransportRTT.Percentile0">
    <obsolete>
      Deprecated 01/2018.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="NQE.TransportRTT.Percentile10">
    <obsolete>
      Deprecated 01/2018.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="NQE.TransportRTT.Percentile100">
    <obsolete>
      Deprecated 01/2018.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="NQE.TransportRTT.Percentile50">
    <obsolete>
      Deprecated 01/2018.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="NQE.TransportRTT.Percentile90">
    <obsolete>
      Deprecated 01/2018.
    </obsolete>
  </affected-histogram>
</histogram_suffixes>

<histogram_suffixes name="NQE.ObservationSources" separator=".">
  <suffix name="Http" label="Observed from HTTP requests"/>
  <suffix name="HttpCachedEstimate" label="Cached HTTP layer observation"/>
  <suffix name="HttpExternalEstimate" label="From external estimate provider"/>
  <suffix name="HttpPlatform" label="Synthetic HTTP layer observation"/>
  <suffix name="Quic" label="Observed from QUIC"/>
  <suffix name="Tcp" label="Observed from TCP sockets"/>
  <suffix name="TransportCachedEstimate"
      label="Cached transport layer observation"/>
  <suffix name="TransportPlatform"
      label="Synthetic transport layer observation"/>
  <affected-histogram name="NQE.Kbps.RawObservation"/>
  <affected-histogram name="NQE.RTT.RawObservation"/>
</histogram_suffixes>

<histogram_suffixes name="NumLayersBucket" separator=".">
  <obsolete>
    Deprecated 2018-07 as the non bucketed metrics are enough for future
    reference.
  </obsolete>
  <suffix name="0" label="Layer count bucket [0, 10)"/>
  <suffix name="1" label="Layer count bucket [10, 30)"/>
  <suffix name="2" label="Layer count bucket [30, 70)"/>
  <suffix name="3" label="Layer count bucket [70, 150)"/>
  <suffix name="4" label="Layer count bucket [150, infinity)"/>
  <affected-histogram name="Compositing.Browser.LayersUpdateTime"/>
  <affected-histogram name="Compositing.Renderer.LayersUpdateTime"/>
</histogram_suffixes>

<histogram_suffixes name="OffDomainInclusionAbortReason" separator=".">
  <obsolete>
    Deprecated 2016-05 as the OffDomainInclusionDetector was removed.
  </obsolete>
  <suffix name="EmptyMainFrameURL" label="The main frame URL was empty."/>
  <suffix name="HistoryLookupFailed"
      label="The lookup to the HistoryService failed."/>
  <suffix name="Incognito"
      label="The profile associated with the frame under analysis is an
             incognito profile."/>
  <suffix name="NoHistoryService"
      label="There was no HistoryService associated with the profile of the
             frame under analysis (this can happen seldomly on startup for
             early net requests, or on shutdown by the asynchronous nature of
             the analysis, but shouldn't be common)."/>
  <suffix name="NoProfile"
      label="The profile associated with the frame under analysis couldn't be
             resolved (expected to happen at a low frequency by the
             asynchronous nature of the analysis)."/>
  <affected-histogram name="SBOffDomainInclusion.Abort"/>
  <affected-histogram name="SBOffDomainInclusion2.Abort"/>
</histogram_suffixes>

<histogram_suffixes name="OfflineItemsSource" separator=".">
  <suffix name="Downloads" label="Downloads"/>
  <suffix name="OfflinePages" label="Offline pages"/>
  <affected-histogram name="Android.OfflineItems.StateAtCancel"/>
</histogram_suffixes>

<histogram_suffixes name="OfflinePagesArchiveDirectoryType" separator=".">
  <suffix name="Persistent" label="Persistent archive directory"/>
  <suffix name="Temporary" label="Temporary archive directory"/>
  <affected-histogram
      name="OfflinePages.ArchiveManager.ArchiveDirsCreationResult2"/>
</histogram_suffixes>

<histogram_suffixes name="OfflinePagesNamespace" separator=".">
  <suffix name="async_loading" label="Offline async loaded pages"/>
  <suffix name="bookmark" label="Offline bookmark cache"/>
  <suffix name="browser_actions" label="Offline Browser Actions pages"/>
  <suffix name="custom_tabs" label="Offline custom tabs"/>
  <suffix name="download" label="Offline downloaded pages"/>
  <suffix name="last_n" label="Offline recent pages"/>
  <suffix name="ntp_suggestions" label="NTP suggestions offlined by the user"/>
  <suffix name="suggested_articles" label="Prefetched NTP suggestions"/>
  <affected-histogram name="OfflinePages.AccessEntryPoint"/>
  <affected-histogram
      name="OfflinePages.Background.BackgroundLoadingFailedCode"/>
  <affected-histogram
      name="OfflinePages.Background.EffectiveConnectionType.OffliningStartType"/>
  <affected-histogram
      name="OfflinePages.Background.EffectiveConnectionType.SavePageLater"/>
  <affected-histogram name="OfflinePages.Background.FinalSavePageResult"/>
  <affected-histogram name="OfflinePages.Background.LoadingErrorStatusCode"/>
  <affected-histogram name="OfflinePages.Background.OfflinerRequestStatus"/>
  <affected-histogram name="OfflinePages.Background.OffliningPreviewStatus"/>
  <affected-histogram name="OfflinePages.Background.SavePageFromCCT"/>
  <affected-histogram name="OfflinePages.Background.TimeToCanceled"/>
  <affected-histogram name="OfflinePages.Background.TimeToSaved"/>
  <affected-histogram name="OfflinePages.Background.TimeToStart"/>
  <affected-histogram name="OfflinePages.Background.TimeToStart.Svelte"/>
  <affected-histogram name="OfflinePages.ClearStoragePreRunUsage"/>
  <affected-histogram name="OfflinePages.ClearStoragePreRunUsage2"/>
  <affected-histogram name="OfflinePages.DeletePage.AccessCount"/>
  <affected-histogram name="OfflinePages.DeletePage.LastOpenToCreated"/>
  <affected-histogram name="OfflinePages.DeletePage.PageSize"/>
  <affected-histogram name="OfflinePages.DeletePage.TimeSinceLastOpen"/>
  <affected-histogram name="OfflinePages.ExpirePage.PageLifetime"/>
  <affected-histogram name="OfflinePages.ExpirePage.TimeSinceLastAccess"/>
  <affected-histogram name="OfflinePages.FirstOpenSinceCreated"/>
  <affected-histogram name="OfflinePages.OpenSinceLastOpen"/>
  <affected-histogram name="OfflinePages.PageAccessInterval"/>
  <affected-histogram name="OfflinePages.PageLifetime"/>
  <affected-histogram name="OfflinePages.PageSize"/>
  <affected-histogram name="OfflinePages.PageSizeOnAccess.Offline"/>
  <affected-histogram name="OfflinePages.PageSizeOnAccess.Online"/>
  <affected-histogram name="OfflinePages.SavePageResult"/>
  <affected-histogram name="OfflinePages.SavePageTime"/>
</histogram_suffixes>

<histogram_suffixes name="OfflinePrefechItemFinalOutcome" separator=".">
  <suffix name="Failed"
      label="For items that failed being prefetched for any reason."/>
  <suffix name="Successful" label="For items that were completed sucessfully."/>
  <affected-histogram name="OfflinePages.Prefetching.ItemLifetime"/>
</histogram_suffixes>

<histogram_suffixes name="OfflinePrefechRetriableAction" separator=".">
  <suffix name="DownloadInitiation"
      label="Action: start downloading an archive."/>
  <suffix name="GeneratePageBundle"
      label="Action: GeneratePageBundle request."/>
  <suffix name="GetOperation" label="Action: GetOperation request."/>
  <affected-histogram name="OfflinePages.Prefetching.ActionAttempts"/>
  <affected-histogram name="OfflinePages.Prefetching.ActionRetryAttempts"/>
</histogram_suffixes>

<histogram_suffixes name="OffTheRecordType" separator=".">
  <suffix name="NonOTR" label="Non off-the-record profile"/>
  <suffix name="OTR" label="Off-the-record profile"/>
  <affected-histogram name="Tab.TabUnderAction"/>
</histogram_suffixes>

<histogram_suffixes name="OmniboxPageContext" separator=".">
  <suffix name="APP_HOME" label="home screen"/>
  <suffix name="APP_MAPS" label="maps app"/>
  <suffix name="APP_SEARCH" label="search app"/>
  <suffix name="BLANK" label="about:blank"/>
  <suffix name="HOME_PAGE" label="the user's home page"/>
  <suffix name="INSTANT_NTP_WITH_FAKEBOX_AS_STARTING_FOCUS"
      label="new tab page with fakebox as starting focus"/>
  <suffix name="INSTANT_NTP_WITH_OMNIBOX_AS_STARTING_FOCUS"
      label="new tab page with omnibox as starting focus"/>
  <suffix name="INVALID_SPEC" label="invalid spec; shouldn't happen"/>
  <suffix name="NTP"
      label="extension-replaced new tab page OR obsolete new tab page"/>
  <suffix name="OBSOLETE_INSTANT_NTP" label="obsolete: instant new tab page"/>
  <suffix name="OBSOLETE_SEARCH_RESULT_PAGE_DOING_SEARCH_TERM_REPLACEMENT"
      label="obsolete: search results page with search term replacement"/>
  <suffix name="OTHER"
      label="other (typically an arbitrary URL, not a search results page,
             new tab page, etc.)"/>
  <suffix name="SEARCH_BUTTON_AS_STARTING_FOCUS"
      label="interaction starting with the search button"/>
  <suffix name="SEARCH_RESULT_PAGE_NO_SEARCH_TERM_REPLACEMENT"
      label="search results page without search term replacement"/>
  <affected-histogram name="Omnibox.SuggestionUsed.Provider.ByPageContext"/>
  <affected-histogram
      name="Omnibox.SuggestionUsed.ProviderAndResultType.ByPageContext"/>
  <affected-histogram name="Omnibox.SuggestionUsed.SearchVsUrl.ByPageContext"/>
</histogram_suffixes>

<histogram_suffixes name="OmniboxProviderTime" separator=".">
  <suffix name="Bookmark"/>
  <suffix name="Builtin"/>
  <suffix name="Contact"/>
  <suffix name="ExtensionApp"/>
  <suffix name="HistoryContents"/>
  <suffix name="HistoryQuick"/>
  <suffix name="HistoryURL"/>
  <suffix name="Keyword"/>
  <suffix name="Search"/>
  <suffix name="Shortcuts"/>
  <suffix name="ZeroSuggest"/>
  <affected-histogram name="Omnibox.ProviderTime"/>
  <affected-histogram name="Omnibox.ProviderTime2"/>
</histogram_suffixes>

<histogram_suffixes name="OobeScreenName" separator=".">
  <suffix name="Eula"/>
  <suffix name="Hid-detection"/>
  <suffix name="Image"/>
  <suffix name="Network"/>
  <suffix name="Update"/>
  <suffix name="Wrong-hwid"/>
  <affected-histogram name="OOBE.StepCompletionTime"/>
</histogram_suffixes>

<histogram_suffixes name="OtherActivityProcesses" separator=".">
  <suffix name="gpu-process"/>
  <suffix name="ppapi"/>
  <suffix name="renderer"/>
  <suffix name="setup"/>
  <suffix name="utility"/>
  <affected-histogram name="UMA.Histograms.Activity"/>
</histogram_suffixes>

<histogram_suffixes name="OutOfRaster" separator=".">
  <suffix name="OutOfRaster"
      label="Task was not performed as part of a raster task."/>
  <affected-histogram name="Renderer4.GpuImageDecodeState.FirstLockWasted"/>
  <affected-histogram
      name="Renderer4.SoftwareImageDecodeState.FirstLockWasted"/>
</histogram_suffixes>

<histogram_suffixes name="OverlappedReadImpact" separator="_">
  <obsolete>
    Experiments no longer active.
  </obsolete>
  <suffix name="OverlappedReadDisabled" label="Non-blocking reads"/>
  <suffix name="OverlappedReadEnabled" label="Default, async reads"/>
  <affected-histogram name="Net.HttpJob.TotalTime"/>
  <affected-histogram name="Net.HttpJob.TotalTimeCached"/>
  <affected-histogram name="Net.HttpJob.TotalTimeCancel"/>
  <affected-histogram name="Net.HttpJob.TotalTimeNotCached"/>
  <affected-histogram name="Net.HttpJob.TotalTimeSuccess"/>
  <affected-histogram name="PLT.Abandoned"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
  <affected-histogram name="PLT.LoadType"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadBackgrounded" separator=".">
  <obsolete>
    Deprecated in favor of PageLoadBackgrounded2.
  </obsolete>
  <suffix name="BG"
      label="Event occurred at least partially in the background"/>
  <affected-histogram
      name="PageLoad.Timing2.NavigationToDOMContentLoadedEventFired"/>
  <affected-histogram name="PageLoad.Timing2.NavigationToFirstLayout"/>
  <affected-histogram name="PageLoad.Timing2.NavigationToFirstTextPaint"/>
  <affected-histogram name="PageLoad.Timing2.NavigationToLoadEventFired"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadBackgrounded2" separator=".">
  <suffix name="Background"
      label="The page was backgrounded at least once from navigation start to
             this event."/>
  <affected-histogram
      name="PageLoad.Clients.DocWrite.Block.ParseTiming.ParseBlockedOnScriptLoad"/>
  <affected-histogram
      name="PageLoad.Clients.DocWrite.Block.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite"/>
  <affected-histogram
      name="PageLoad.Clients.DocWrite.Block.ParseTiming.ParseDuration"/>
  <affected-histogram
      name="PageLoad.Clients.DocWrite.Block.Timing2.ParseBlockedOnScriptLoad"/>
  <affected-histogram
      name="PageLoad.Clients.DocWrite.Block.Timing2.ParseBlockedOnScriptLoad.ParseComplete"/>
  <affected-histogram
      name="PageLoad.Clients.DocWrite.Block.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite"/>
  <affected-histogram
      name="PageLoad.Clients.DocWrite.Block.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite.ParseComplete"/>
  <affected-histogram
      name="PageLoad.Clients.DocWrite.Block.Timing2.ParseDuration"/>
  <affected-histogram
      name="PageLoad.Clients.MultiTabLoading.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
  <affected-histogram
      name="PageLoad.Clients.MultiTabLoading.DocumentTiming.NavigationToLoadEventFired"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker.ParseTiming.NavigationToParseStart"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker.Timing2.NavigationToFirstContentfulPaint">
    <obsolete>
      Deprecated in favor of PaintTiming equivalent.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker2.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker2.ParseTiming.NavigationToParseStart"/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
  <affected-histogram name="PageLoad.DocumentTiming.NavigationToFirstLayout"/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
  <affected-histogram name="PageLoad.Events.Committed"/>
  <affected-histogram name="PageLoad.Events.Provisional"/>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstImagePaint"/>
  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstPaint"/>
  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstTextPaint"/>
  <affected-histogram
      name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
  <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/>
  <affected-histogram
      name="PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite"/>
  <affected-histogram name="PageLoad.ParseTiming.ParseDuration"/>
  <affected-histogram name="PageLoad.Timing2.NavigationToCommit"/>
  <affected-histogram
      name="PageLoad.Timing2.NavigationToDOMContentLoadedEventFired"/>
  <affected-histogram name="PageLoad.Timing2.NavigationToFirstContentfulPaint"/>
  <affected-histogram name="PageLoad.Timing2.NavigationToFirstImagePaint"/>
  <affected-histogram name="PageLoad.Timing2.NavigationToFirstLayout"/>
  <affected-histogram name="PageLoad.Timing2.NavigationToFirstPaint"/>
  <affected-histogram name="PageLoad.Timing2.NavigationToFirstTextPaint"/>
  <affected-histogram name="PageLoad.Timing2.NavigationToLoadEventFired"/>
  <affected-histogram name="PageLoad.Timing2.ParseBlockedOnScriptLoad"/>
  <affected-histogram
      name="PageLoad.Timing2.ParseBlockedOnScriptLoad.ParseComplete"/>
  <affected-histogram
      name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite"/>
  <affected-histogram
      name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite.ParseComplete"/>
  <affected-histogram name="PageLoad.Timing2.ParseDuration"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadEventConditions" separator=".">
  <suffix name="AfterCommit.BeforePaint"/>
  <suffix base="true" name="AfterPaint.Before1sDelayedInteraction"/>
  <suffix base="true" name="AfterPaint.BeforeInteraction"/>
  <suffix name="BeforeCommit"/>
  <suffix name="DuringParse"/>
  <affected-histogram name="PageLoad.AbortTiming.Background"/>
  <affected-histogram name="PageLoad.AbortTiming.ClientRedirect"/>
  <affected-histogram name="PageLoad.AbortTiming.Close"/>
  <affected-histogram name="PageLoad.AbortTiming.ForwardBackNavigation"/>
  <affected-histogram name="PageLoad.AbortTiming.NewNavigation"/>
  <affected-histogram name="PageLoad.AbortTiming.Other"/>
  <affected-histogram name="PageLoad.AbortTiming.Reload"/>
  <affected-histogram name="PageLoad.AbortTiming.Stop"/>
  <affected-histogram name="PageLoad.AbortTiming.UnknownNavigation"/>
  <affected-histogram name="PageLoad.Experimental.AbortTiming.Background"/>
  <affected-histogram name="PageLoad.Experimental.AbortTiming.ClientRedirect"/>
  <affected-histogram name="PageLoad.Experimental.AbortTiming.Close"/>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.ForwardBackNavigation"/>
  <affected-histogram name="PageLoad.Experimental.AbortTiming.NewNavigation"/>
  <affected-histogram name="PageLoad.Experimental.AbortTiming.Other"/>
  <affected-histogram name="PageLoad.Experimental.AbortTiming.Reload"/>
  <affected-histogram name="PageLoad.Experimental.AbortTiming.Stop"/>
  <affected-histogram name="PageLoad.Timing2.NavigationToFirstBackground">
    <obsolete>
      deprecated in favor of PageLoad.AbortTiming.Background.*
    </obsolete>
  </affected-histogram>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsAfterBuffering" separator=".">
  <suffix name="AfterBuffering"
      label="Recorded after buffering of timing updates in the browser
             process has completed."/>
  <affected-histogram name="PageLoad.Internal.OutOfOrderInterFrameTiming"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsAfterPaint" separator=".">
  <suffix name="AfterPaint"
      label="Limited to the duration of time starting after first paint, for
             page loads that reached first paint."/>
  <affected-histogram
      name="PageLoad.Clients.FromGoogleSearch.PageTiming.ForegroundDuration"/>
  <affected-histogram
      name="PageLoad.Clients.SubresourceFilter.PageTiming.ForegroundDuration"/>
  <affected-histogram name="PageLoad.PageTiming.ForegroundDuration"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsAfterRedirectToNonAmpPage"
    separator=".">
  <suffix name="RedirectToNonAmpPage"
      label="Limited to redirects to non-AMP pages."/>
  <affected-histogram
      name="PageLoad.Clients.AMP.AmpCache.ParseTiming.NavigationToParseStart"/>
  <affected-histogram
      name="PageLoad.Clients.AMP.GoogleNews.ParseTiming.NavigationToParseStart"/>
  <affected-histogram
      name="PageLoad.Clients.AMP.GoogleSearch.ParseTiming.NavigationToParseStart"/>
  <affected-histogram
      name="PageLoad.Clients.AMP.ParseTiming.NavigationToParseStart"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsAtTimingCallbackDispatch"
    separator=".">
  <suffix name="AtTimingCallbackDispatch"
      label="Evaluated at the time timing update calls are dispatched to
             observers."/>
  <affected-histogram name="PageLoad.Internal.PageLoadTimingStatus"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsCacheInfo" separator=".">
  <suffix name="NoStore" label="Main resource had cache-control: no-store"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker.PaintTiming.NavigationToFirstContentfulPaint.LoadType.ForwardBackNavigation"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker.ParseTiming.NavigationToParseStart.LoadType.ForwardBackNavigation"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker2.PaintTiming.NavigationToFirstContentfulPaint.LoadType.ForwardBackNavigation"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker2.ParseTiming.NavigationToParseStart.LoadType.ForwardBackNavigation"/>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType.ForwardBackNavigation"/>
  <affected-histogram
      name="PageLoad.ParseTiming.NavigationToParseStart.LoadType.ForwardBackNavigation"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsAmp" separator="."
    ordering="prefix">
  <suffix name="Clients.AMP"
      label="AMP page load. Same page navigations are not tracked."/>
  <suffix name="Clients.AMP.AmpCache"
      label="AMP page load from the AMP cache CDN."/>
  <suffix name="Clients.AMP.GoogleNews"
      label="AMP page load in the Google News AMP viewer. Same page
             navigations are not tracked."/>
  <suffix name="Clients.AMP.GoogleSearch"
      label="AMP page load in the Google Search AMP viewer. Same page
             navigations are not tracked."/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
  <affected-histogram name="PageLoad.DocumentTiming.NavigationToFirstLayout"/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsAmpCachePages" separator="."
    ordering="prefix">
  <obsolete>
    Deprecated in favor of PageLoad.Clients.AMPCache2.*.
  </obsolete>
  <suffix name="Clients.AMPCache"
      label="PageLoadMetrics that are a result of a navigations to an AMP
             cache page. Same page navigations are not tracked."/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
  <affected-histogram name="PageLoad.DocumentTiming.NavigationToFirstLayout"/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsAmpCachePages2" separator="."
    ordering="prefix">
  <obsolete>
    Deprecated in favor of PageLoad.Clients.AMP.*.
  </obsolete>
  <suffix name="Clients.AMPCache2"
      label="PageLoadMetrics that are a result of a navigations to an AMP
             cache page. Same page navigations are not tracked."/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
  <affected-histogram name="PageLoad.DocumentTiming.NavigationToFirstLayout"/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsCssScanner" separator="."
    ordering="prefix">
  <suffix name="Clients.CssScanner"
      label="Metrics from pages scanned by the preload scanner for @import
             CSS rules"/>
  <affected-histogram
      name="PageLoad.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"/>
  <affected-histogram
      name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsDataReductionProxy"
    separator="." ordering="prefix">
  <suffix name="Clients.DataReductionProxy"
      label="PageLoadMetrics that are a result of a navigation through the
             data reduction proxy."/>
  <suffix name="Clients.DataReductionProxy.LoFiOn"
      label="PageLoadMetrics that are a result of a navigation through the
             data reduction proxy with session in LoFi enabled or control
             field trial, and when the connection was slow.">
    <obsolete>
      Deprecated 05/2018.
    </obsolete>
  </suffix>
  <suffix name="Clients.Previews.LitePages"
      label="PageLoadMetrics that are a result of a navigation through the
             data reduction proxy where a lite page response was received."/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
  <affected-histogram name="PageLoad.DocumentTiming.NavigationToFirstLayout"/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
  <affected-histogram name="PageLoad.Experimental.Bytes.Network"/>
  <affected-histogram name="PageLoad.Experimental.CompletedResources.Network"/>
  <affected-histogram
      name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstImagePaint"/>
  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstPaint"/>
  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstTextPaint"/>
  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
  <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/>
  <affected-histogram name="PageLoad.ParseTiming.ParseDuration"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsDataReductionProxyResources"
    separator=".">
  <suffix name="NonProxied"
      label="Resources not loaded through data reduction proxy."/>
  <suffix name="Proxied"
      label="Resources loaded through data reduction proxy."/>
  <affected-histogram
      name="PageLoad.Clients.DataReductionProxy.Experimental.CompletedResources.Network"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsDocWrite" separator="."
    ordering="prefix">
  <suffix name="Clients.DocWrite.Block"
      label="PageLoadMetrics from a page that has synchronous, cross-origin
             document.written scripts that could be blocked if the
             document.write script blocking feature is enabled."/>
  <affected-histogram
      name="PageLoad.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"/>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram
      name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
  <affected-histogram
      name="PageLoad.ParseTiming.ParseBlockedOnScriptExecution"/>
  <affected-histogram
      name="PageLoad.ParseTiming.ParseBlockedOnScriptExecutionFromDocumentWrite"/>
  <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/>
  <affected-histogram
      name="PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite"/>
  <affected-histogram name="PageLoad.ParseTiming.ParseDuration"/>
  <affected-histogram name="PageLoad.Timing2.NavigationToFirstContentfulPaint"/>
  <affected-histogram name="PageLoad.Timing2.ParseBlockedOnScriptLoad"/>
  <affected-histogram
      name="PageLoad.Timing2.ParseBlockedOnScriptLoad.ParseComplete"/>
  <affected-histogram
      name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite"/>
  <affected-histogram
      name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite.ParseComplete"/>
  <affected-histogram name="PageLoad.Timing2.ParseDuration"/>
  <affected-histogram name="PageLoad.Timing2.ParseStartToFirstContentfulPaint"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsFromGoogleSearch" separator="."
    ordering="prefix">
  <suffix name="Clients.FromGoogleSearch"
      label="PageLoadMetrics that are a result of a navigation from a Google
             web search"/>
  <suffix name="Clients.FromGWS"
      label="PageLoadMetrics that are a result of a navigation from a Google
             web search">
    <obsolete>
      Deprecated in favor of Clients.FromGoogleSearch.
    </obsolete>
  </suffix>
  <suffix name="Clients.FromGWS2"
      label="PageLoadMetrics that are a result of a navigation from a Google
             web search">
    <obsolete>
      Deprecated in favor of Clients.FromGoogleSearch.
    </obsolete>
  </suffix>
  <affected-histogram
      name="PageLoad.AbortTiming.Close.AfterCommit.BeforePaint"/>
  <affected-histogram
      name="PageLoad.AbortTiming.Close.AfterPaint.BeforeInteraction"/>
  <affected-histogram name="PageLoad.AbortTiming.Close.BeforeCommit"/>
  <affected-histogram
      name="PageLoad.AbortTiming.ForwardBackNavigation.AfterCommit.BeforePaint"/>
  <affected-histogram
      name="PageLoad.AbortTiming.ForwardBackNavigation.AfterPaint.Before1sDelayedInteraction"/>
  <affected-histogram
      name="PageLoad.AbortTiming.NewNavigation.AfterCommit.BeforePaint"/>
  <affected-histogram
      name="PageLoad.AbortTiming.NewNavigation.AfterPaint.BeforeInteraction"/>
  <affected-histogram name="PageLoad.AbortTiming.Other.BeforeCommit"/>
  <affected-histogram
      name="PageLoad.AbortTiming.Reload.AfterCommit.BeforePaint"/>
  <affected-histogram
      name="PageLoad.AbortTiming.Reload.AfterPaint.Before1sDelayedInteraction"/>
  <affected-histogram name="PageLoad.AbortTiming.Stop.AfterCommit.BeforePaint"/>
  <affected-histogram
      name="PageLoad.AbortTiming.Stop.AfterPaint.BeforeInteraction"/>
  <affected-histogram name="PageLoad.AbortTiming.Stop.BeforeCommit"/>
  <affected-histogram
      name="PageLoad.AbortTiming.UnknownNavigation.BeforeCommit"/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.Close.AfterCommit.BeforePaint"/>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.Close.AfterPaint.BeforeInteraction"/>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.Close.BeforeCommit"/>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.ForwardBackNavigation.AfterCommit.BeforePaint"/>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.ForwardBackNavigation.AfterPaint.Before1sDelayedInteraction"/>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.NewNavigation.AfterCommit.BeforePaint"/>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.NewNavigation.AfterPaint.BeforeInteraction"/>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.Other.BeforeCommit"/>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.Reload.AfterCommit.BeforePaint"/>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.Reload.AfterPaint.Before1sDelayedInteraction"/>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.Stop.AfterCommit.BeforePaint"/>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.Stop.AfterPaint.BeforeInteraction"/>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.Stop.BeforeCommit"/>
  <affected-histogram name="PageLoad.PageTiming.ForegroundDuration"/>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstImagePaint"/>
  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstPaint"/>
  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstTextPaint"/>
  <affected-histogram
      name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
  <affected-histogram name="PageLoad.ParseTiming.ParseDuration"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsLoadingPredictor" separator="."
    ordering="prefix">
  <suffix base="true" name="Clients.LoadingPredictor"
      label="PageLoadMetrics with enabled LoadingPredictor"/>
  <affected-histogram
      name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsLoadingPredictorPredictionType"
    separator=".">
  <suffix name="Preconnectable"
      label="The predictor database contained origins for preconnecting for a
             page"/>
  <affected-histogram
      name="PageLoad.Clients.LoadingPredictor.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
  <affected-histogram
      name="PageLoad.Clients.LoadingPredictor.PaintTiming.NavigationToFirstContentfulPaint"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsLoFi" separator="."
    ordering="prefix">
  <suffix name="Clients.LoFi"
      label="PageLoadMetrics that are a result of a navigation that displayed
             a LoFi image."/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
  <affected-histogram name="PageLoad.Experimental.Bytes.Network"/>
  <affected-histogram name="PageLoad.Experimental.CompletedResources.Network"/>
  <affected-histogram
      name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstImagePaint"/>
  <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/>
  <affected-histogram name="PageLoad.ParseTiming.ParseDuration"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsMedia" separator="."
    ordering="prefix">
  <suffix name="Clients.MediaPageLoad"
      label="PageLoadMetrics for page loads that involved playing a media
             element."/>
  <affected-histogram name="PageLoad.Experimental.Bytes.Cache"/>
  <affected-histogram name="PageLoad.Experimental.Bytes.Network"/>
  <affected-histogram name="PageLoad.Experimental.Bytes.Total"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsMultiTabLoading" separator="."
    ordering="prefix">
  <suffix name="Clients.MultiTabLoading"
      label="PageLoadMetrics for page loads that started while there are
             other loading tabs."/>
  <suffix name="Clients.MultiTabLoading.2OrMore"
      label="PageLoadMetrics for page loads that started while there are 2 or
             more other loading tabs."/>
  <suffix name="Clients.MultiTabLoading.5OrMore"
      label="PageLoadMetrics for page loads that started while there are 5 or
             more other loading tabs."/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
  <affected-histogram
      name="PageLoad.Experimental.PaintTiming.ForegroundToFirstMeaningfulPaint"/>
  <affected-histogram
      name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
  <affected-histogram
      name="PageLoad.PaintTiming.ForegroundToFirstContentfulPaint"/>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsNoScriptPreview" separator="."
    ordering="prefix">
  <suffix name="Clients.NoScriptPreview"
      label="PageLoadMetrics that are a result of a navigation that tirggered
             the NoScript Preview intervention."/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
  <affected-histogram name="PageLoad.Experimental.Bytes.Network"/>
  <affected-histogram name="PageLoad.Experimental.CompletedResources.Network"/>
  <affected-histogram
      name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/>
  <affected-histogram name="PageLoad.ParseTiming.ParseDuration"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsNoServiceWorkerSpecialApps"
    separator=".">
  <suffix name="search"
      label="Custom histogram for the Google Search results page."/>
  <affected-histogram
      name="PageLoad.Clients.NoServiceWorker.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
  <affected-histogram
      name="PageLoad.Clients.NoServiceWorker.DocumentTiming.NavigationToLoadEventFired"/>
  <affected-histogram
      name="PageLoad.Clients.NoServiceWorker.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
  <affected-histogram
      name="PageLoad.Clients.NoServiceWorker.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"/>
  <affected-histogram
      name="PageLoad.Clients.NoServiceWorker.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram
      name="PageLoad.Clients.NoServiceWorker.PaintTiming.ParseStartToFirstContentfulPaint"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsOfflinePages" separator="."
    ordering="prefix">
  <suffix name="Clients.Previews.OfflinePages"
      label="PageLoadMetrics that are a result of a navigation that shows
             users an offline page preview. Offline page previews are shown
             when a user's effective connection type is prohibitively slow."/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
  <affected-histogram name="PageLoad.DocumentTiming.NavigationToFirstLayout"/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsProtocol" separator="."
    ordering="prefix">
  <suffix name="Clients.Protocol.H1"
      label="PageLoadMetrics that are a result of a navigation to main
             resource over HTTP/1.1">
    <obsolete>
      Renamed to Clients.Protocol.H11
    </obsolete>
  </suffix>
  <suffix name="Clients.Protocol.H2"
      label="PageLoadMetrics that are a result of a navigation to main
             resource over HTTP/2"/>
  <suffix name="Clients.Protocol.H11"
      label="PageLoadMetrics that are a result of a navigation to main
             resource over HTTP/1.1"/>
  <suffix name="Clients.Protocol.QUIC"
      label="PageLoadMetrics that are a result of a navigation to main
             resource over QUIC"/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
  <affected-histogram
      name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
  <affected-histogram
      name="PageLoad.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"/>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram
      name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsReload" separator="."
    ordering="prefix">
  <obsolete>
    Deprecated at M53 in favor of LoadType.Reload.
  </obsolete>
  <suffix name="Clients.Reload"
      label="PageLoadMetrics from a page that is reloaded"/>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsResourcePrefetchPredictor"
    separator="." ordering="prefix">
  <obsolete>
    Deprecated at M66. No longer recorded.
  </obsolete>
  <suffix base="true" name="Clients.ResourcePrefetchPredictor"
      label="PageLoadMetrics with enabled ResourcePrefetchPredictor"/>
  <affected-histogram
      name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
</histogram_suffixes>

<histogram_suffixes
    name="PageLoadMetricsClientsResourcePrefetchPredictorPrefetchingType"
    separator=".">
  <obsolete>
    Deprecated at M66. No longer recorded.
  </obsolete>
  <suffix name="Prefetchable"
      label="The predictor database contained subresources for prediction for
             a page"/>
  <affected-histogram
      name="PageLoad.Clients.ResourcePrefetchPredictor.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
  <affected-histogram
      name="PageLoad.Clients.ResourcePrefetchPredictor.PaintTiming.NavigationToFirstContentfulPaint"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsScheme" separator="."
    ordering="prefix">
  <suffix name="Clients.Scheme.HTTP"
      label="PageLoadMetrics that are a result of a navigation to a main
             resource where the committed URL is HTTP."/>
  <suffix name="Clients.Scheme.HTTPS"
      label="PageLoadMetrics that are a result of a navigation to a main
             resource where the committed URL is HTTPS."/>
  <affected-histogram
      name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsServiceWorker" separator="."
    ordering="prefix">
  <suffix name="Clients.NoServiceWorker"
      label="PageLoadMetrics from a page that is not controlled by a Service
             Worker. This is intended to understand the performance impact of
             service workers on special apps using Clients.ServiceWorker">
    <obsolete>
      Deprecated on June 2018 (M69) in favor of Clients.NoServiceWorker2.
    </obsolete>
  </suffix>
  <suffix name="Clients.NoServiceWorker2"
      label="PageLoadMetrics from a page that is either not controlled by a
             service worker or is controlled by a service worker without a
             fetch event handler. This should NOT be compared to
             Clients.ServiceWorker2, see https://goo.gl/EdaGQn.">

  </suffix>
  <suffix name="Clients.ServiceWorker"
      label="PageLoadMetrics from a page that is controlled by a Service
             Worker.">
    <obsolete>
      Deprecated on June 2018 (M69) in favor of Clients.ServiceWorker2.
    </obsolete>
  </suffix>
  <suffix name="Clients.ServiceWorker2"
      label="PageLoadMetrics from a page that is controlled by a service
             worker that has a fetch event handler."/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
  <affected-histogram
      name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
  <affected-histogram
      name="PageLoad.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"/>
  <affected-histogram name="PageLoad.InteractiveTiming.FirstInputDelay"/>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstPaint"/>
  <affected-histogram
      name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
  <affected-histogram name="PageLoad.Timing2.NavigationToFirstContentfulPaint">
    <obsolete>
      Deprecated in favor of PaintTiming equivalent.
    </obsolete>
  </affected-histogram>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsServiceWorkerSpecialApps"
    separator=".">
  <suffix name="inbox" label="Custom histogram for Inbox"/>
  <suffix name="search"
      label="Custom histogram for the Google Search results page"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker.DocumentTiming.NavigationToLoadEventFired"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker.PaintTiming.ParseStartToFirstContentfulPaint"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker.ParseTiming.NavigationToParseStart"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker2.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker2.DocumentTiming.NavigationToLoadEventFired"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker2.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker2.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker2.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker2.PaintTiming.ParseStartToFirstContentfulPaint"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker2.ParseTiming.NavigationToParseStart"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsSubresourceFilter"
    separator="." ordering="prefix">
  <obsolete>
    Deprecated May 2018 (M68)
  </obsolete>
  <suffix name="Clients.SubresourceFilter"
      label="For pages with filtered subresources. Includes dryrun matches."/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
  <affected-histogram
      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
  <affected-histogram name="PageLoad.Experimental.Bytes.Cache"/>
  <affected-histogram name="PageLoad.Experimental.Bytes.Network"/>
  <affected-histogram name="PageLoad.Experimental.Bytes.Total"/>
  <affected-histogram name="PageLoad.Experimental.CompletedResources.Cache"/>
  <affected-histogram name="PageLoad.Experimental.CompletedResources.Network"/>
  <affected-histogram name="PageLoad.Experimental.CompletedResources.Total"/>
  <affected-histogram
      name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
  <affected-histogram
      name="PageLoad.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"/>
  <affected-histogram name="PageLoad.PageTiming.ForegroundDuration"/>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram
      name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
  <affected-histogram
      name="PageLoad.ParseTiming.ParseBlockedOnScriptExecution"/>
  <affected-histogram
      name="PageLoad.ParseTiming.ParseBlockedOnScriptExecutionFromDocumentWrite"/>
  <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/>
  <affected-histogram
      name="PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite"/>
  <affected-histogram name="PageLoad.ParseTiming.ParseDuration"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsClientsTabRestore" separator="."
    ordering="prefix">
  <suffix name="Clients.TabRestore"
      label="PageLoadMetrics that are a result of a navigation caused by a
             tab restore."/>
  <affected-histogram name="PageLoad.Experimental.Bytes.Cache"/>
  <affected-histogram name="PageLoad.Experimental.Bytes.Network"/>
  <affected-histogram name="PageLoad.Experimental.Bytes.Total"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsLoadType" separator=".">
  <suffix name="LoadType.ForwardBackNavigation"
      label="Restricted to forward/back navigations."/>
  <suffix name="LoadType.NewNavigation"
      label="Restricted to new navigations (link clicks, URLs typed into the
             URL box, etc)."/>
  <suffix name="LoadType.Reload" label="Restricted to reloaded pages."/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker.ParseTiming.NavigationToParseStart"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker2.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram
      name="PageLoad.Clients.ServiceWorker2.ParseTiming.NavigationToParseStart"/>
  <affected-histogram
      name="PageLoad.Clients.SubresourceFilter.ActivationDecision"/>
  <affected-histogram name="PageLoad.Experimental.Bytes.Cache"/>
  <affected-histogram name="PageLoad.Experimental.Bytes.Network"/>
  <affected-histogram name="PageLoad.Experimental.Bytes.Total"/>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsMediaPlayed" separator=".">
  <obsolete>
    Deprecated May 2018 (M68)
  </obsolete>
  <suffix name="MediaPlayed" label="Limited to pages where media was played."/>
  <affected-histogram
      name="PageLoad.Clients.SubresourceFilter.Experimental.Bytes.Cache"/>
  <affected-histogram
      name="PageLoad.Clients.SubresourceFilter.Experimental.Bytes.Network"/>
  <affected-histogram
      name="PageLoad.Clients.SubresourceFilter.Experimental.Bytes.Total"/>
  <affected-histogram
      name="PageLoad.Clients.SubresourceFilter.Experimental.CompletedResources.Cache"/>
  <affected-histogram
      name="PageLoad.Clients.SubresourceFilter.Experimental.CompletedResources.Network"/>
  <affected-histogram
      name="PageLoad.Clients.SubresourceFilter.Experimental.CompletedResources.Total"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsNoCommit" separator=".">
  <suffix name="NoCommit" label="Limited to page loads that did not commit."/>
  <affected-histogram
      name="PageLoad.Clients.FromGoogleSearch.PageTiming.ForegroundDuration"/>
  <affected-histogram name="PageLoad.PageTiming.ForegroundDuration"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsNoEndTime" separator=".">
  <suffix name="NoEndTime"
      label="The page load had no recorded end time, so an end time was
             synthesized at the time the page end notification was processed."/>
  <affected-histogram
      name="PageLoad.Experimental.PageTiming.FirstPaintToPageEnd"/>
  <affected-histogram
      name="PageLoad.Experimental.PageTiming.NavigationToPageEnd"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsNoMediaPlayed" separator=".">
  <obsolete>
    Deprecated May 2018 (M68)
  </obsolete>
  <suffix name="NoMediaPlayed"
      label="Limited to pages where no media was played."/>
  <affected-histogram
      name="PageLoad.Clients.SubresourceFilter.Experimental.Bytes.Cache"/>
  <affected-histogram
      name="PageLoad.Clients.SubresourceFilter.Experimental.Bytes.Network"/>
  <affected-histogram
      name="PageLoad.Clients.SubresourceFilter.Experimental.Bytes.Total"/>
  <affected-histogram
      name="PageLoad.Clients.SubresourceFilter.Experimental.CompletedResources.Cache"/>
  <affected-histogram
      name="PageLoad.Clients.SubresourceFilter.Experimental.CompletedResources.Network"/>
  <affected-histogram
      name="PageLoad.Clients.SubresourceFilter.Experimental.CompletedResources.Total"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsPaintInfo" separator=".">
  <suffix name="WithoutPaint"
      label="The foreground duration for page loads did not reach first
             paint."/>
  <suffix name="WithPaint"
      label="The foreground duration for page loads reached first paint."/>
  <affected-histogram
      name="PageLoad.Clients.FromGoogleSearch.PageTiming.ForegroundDuration"/>
  <affected-histogram name="PageLoad.PageTiming.ForegroundDuration"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsUserGesture" separator=".">
  <suffix name="UserGesture"
      label="Restricted to pages loaded via a user gesture."/>
  <affected-histogram
      name="PageLoad.Clients.Reload.PaintTiming.NavigationToFirstContentfulPaint">
    <obsolete>
      Deprecated in favor of
      PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType.Reload.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType.Reload"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsUserInitiated" separator=".">
  <suffix name="UserInitiated"
      label="(experimental) Page load metric that is approximately user
             initiated"/>
  <affected-histogram
      name="PageLoad.AbortTiming.ForwardBackNavigation.BeforeCommit"/>
  <affected-histogram name="PageLoad.AbortTiming.NewNavigation.BeforeCommit"/>
  <affected-histogram name="PageLoad.AbortTiming.Reload.BeforeCommit"/>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.ForwardBackNavigation.BeforeCommit">
    <obsolete>
      Deprecated in favor of UserGesture/UserInputEvent/BrowserInitiated.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.NewNavigation.BeforeCommit">
    <obsolete>
      Deprecated in favor of UserGesture/UserInputEvent/BrowserInitiated.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.Reload.BeforeCommit">
    <obsolete>
      Deprecated in favor of UserGesture/UserInputEvent/BrowserInitiated.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadMetricsUserInitiated2" separator=".">
  <suffix name="BrowserInitiated"
      label="(experimental) Page load that was initiated from the browser
             process"/>
  <suffix name="UserGesture"
      label="(experimental) Page load that has a user gesture"/>
  <suffix name="UserInputEvent"
      label="(experimental) Page load that has a user input event"/>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.ForwardBackNavigation.AfterCommit.BeforePaint"/>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.ForwardBackNavigation.BeforeCommit"/>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.NewNavigation.AfterCommit.BeforePaint"/>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.NewNavigation.BeforeCommit"/>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.Reload.AfterCommit.BeforePaint"/>
  <affected-histogram
      name="PageLoad.Experimental.AbortTiming.Reload.BeforeCommit"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadType" separator="_">
  <suffix name="HistoryLoad"
      label="but only for user pressing back or forward"/>
  <suffix name="LinkLoad"
      label="deprecated - see LinkLoadReload, LinkLoadNormal,
             LinkLoadStaleOk, LinkLoadCacheOnly; content initiated, commonly
             back to a posted page"/>
  <suffix name="LinkLoadCacheOnly"
      label="content initiated, commonly back to a posted page, where browser
             must ONLY use cache"/>
  <suffix name="LinkLoadNormal"
      label="content initiated, ordinary link traversal or post"/>
  <suffix name="LinkLoadReload" label="content initiated, calling reload()"/>
  <suffix name="LinkLoadStaleOk"
      label="content initiated, commonly forward or back where stale cached
             data is very acceptable"/>
  <suffix name="NormalLoad"
      label="but only for user entered URL or omnibox search"/>
  <suffix name="Reload" label="but only for user pressed reload"/>
  <suffix name="UndefLoad"
      label="should never happen... as it is only for an client-code error
             case which should not exist"/>
  <affected-histogram name="PLT.BeginToFinish"/>
  <affected-histogram name="PLT.BeginToFinishDoc"/>
  <affected-histogram name="PLT.StartToCommit">
    <with-suffix name="LinkLoadNormal"/>
    <with-suffix name="NormalLoad"/>
  </affected-histogram>
  <affected-histogram name="PLT.StartToFinish">
    <with-suffix name="LinkLoadNormal"/>
    <with-suffix name="NormalLoad"/>
  </affected-histogram>
  <affected-histogram name="Renderer4.BeginToFinish"/>
  <affected-histogram name="Renderer4.BeginToFinishDoc"/>
</histogram_suffixes>

<histogram_suffixes name="PageLoadType" separator="_">
  <suffix name="HistoryLoad"
      label="but only for user pressing back or forward"/>
  <suffix name="LinkLoad"
      label="deprecated - see LinkLoadReload, LinkLoadNormal,
             LinkLoadStaleOk, LinkLoadCacheOnly; content initiated, commonly
             back to a posted page"/>
  <suffix name="LinkLoadCacheOnly"
      label="content initiated, commonly back to a posted page, where browser
             must ONLY use cache"/>
  <suffix name="LinkLoadNormal"
      label="content initiated, ordinary link traversal or post"/>
  <suffix name="LinkLoadReload" label="content initiated, calling reload()"/>
  <suffix name="LinkLoadStaleOk"
      label="content initiated, commonly forward or back where stale cached
             data is very acceptable"/>
  <suffix name="NormalLoad"
      label="but only for user entered URL or omnibox search"/>
  <suffix name="Reload" label="but only for user pressed reload"/>
  <suffix name="UndefLoad"
      label="should never happen... as it is only for an client-code error
             case which should not exist"/>
  <affected-histogram name="PLT.BeginToFinish"/>
  <affected-histogram name="PLT.BeginToFinishDoc"/>
  <affected-histogram name="PLT.StartToCommit">
    <with-suffix name="LinkLoadNormal"/>
    <with-suffix name="NormalLoad"/>
  </affected-histogram>
  <affected-histogram name="PLT.StartToFinish">
    <with-suffix name="LinkLoadNormal"/>
    <with-suffix name="NormalLoad"/>
  </affected-histogram>
  <affected-histogram name="Renderer4.BeginToFinish"/>
  <affected-histogram name="Renderer4.BeginToFinishDoc"/>
</histogram_suffixes>

<histogram_suffixes name="ParallelDownload" separator=".">
  <suffix name="ParallelDownload"
      label="Download that uses parallel requests."/>
  <affected-histogram name="Download.Counts"/>
  <affected-histogram name="Download.InterruptedAtEndReason"/>
  <affected-histogram name="Download.InterruptedOverrunBytes"/>
  <affected-histogram name="Download.InterruptedReason"/>
  <affected-histogram name="Download.InterruptedReceivedSizeK"/>
  <affected-histogram name="Download.InterruptedTotalSizeK"/>
  <affected-histogram name="Download.InterruptedUnderrunBytes"/>
</histogram_suffixes>

<histogram_suffixes name="ParallelizableDownload" separator=".">
  <suffix name="ParallelizableDownload"
      label="Download that supports but doesn't use parallel requests."/>
  <affected-histogram name="Download.Counts"/>
</histogram_suffixes>

<histogram_suffixes name="ParallelizableDownloadBandwidth" separator=".">
  <suffix name="WithoutParallelRequests"
      label="Bandwidth without using parallel requests."/>
  <suffix name="WithParallelRequestsMultipleStreams"
      label="Bandwidth when multiple streams are active while using parallel
             requests."/>
  <suffix name="WithParallelRequestsSingleStream"
      label="Bandwidth when only a single stream is active while using
             parallel requests. Other streams are either finished or haven't
             started."/>
  <affected-histogram name="Download.ParallelizableDownloadBandwidth"/>
</histogram_suffixes>

<histogram_suffixes name="PasswordCustomPassphrase" separator=".">
  <suffix name="WithCustomPassphrase"/>
  <suffix name="WithoutCustomPassphrase"/>
  <affected-histogram name="PasswordManager.AccountsPerSite"/>
  <affected-histogram name="PasswordManager.AccountsPerSite.AutoGenerated"/>
  <affected-histogram name="PasswordManager.AccountsPerSite.UserCreated"/>
  <affected-histogram name="PasswordManager.BlacklistedSites"/>
  <affected-histogram name="PasswordManager.TimesGeneratedPasswordUsed"/>
  <affected-histogram name="PasswordManager.TimesPasswordUsed.AutoGenerated"/>
  <affected-histogram name="PasswordManager.TimesPasswordUsed.UserCreated"/>
  <affected-histogram name="PasswordManager.TotalAccounts.AutoGenerated"/>
  <affected-histogram name="PasswordManager.TotalAccounts.UserCreated"/>
</histogram_suffixes>

<histogram_suffixes name="PasswordGenerated" separator=".">
  <suffix name="AutoGenerated"/>
  <suffix name="UserCreated"/>
  <affected-histogram name="PasswordManager.AccountsPerSite"/>
  <affected-histogram name="PasswordManager.TimesPasswordUsed"/>
  <affected-histogram name="PasswordManager.TotalAccounts"/>
</histogram_suffixes>

<histogram_suffixes name="PasswordManagerMonitor" separator="_">
  <obsolete>
    Deprecated as of 03/2016.
  </obsolete>
  <suffix name="" label=""/>
  <suffix name="group_1" label="group 1"/>
  <suffix name="group_2" label="group 2"/>
  <suffix name="group_3" label="group 3"/>
  <suffix name="group_4" label="group 4"/>
  <suffix name="group_5" label="group 5"/>
  <suffix name="group_6" label="group 6"/>
  <suffix name="group_7" label="group 7"/>
  <suffix name="group_8" label="group 8"/>
  <suffix name="group_9" label="group 9"/>
  <suffix name="group_10" label="group 10"/>
  <suffix name="group_11" label="group 11"/>
  <suffix name="group_12" label="group 12"/>
  <suffix name="group_13" label="group 13"/>
  <suffix name="group_14" label="group 14"/>
  <suffix name="group_15" label="group 15"/>
  <suffix name="group_16" label="group 16"/>
  <suffix name="group_17" label="group 17"/>
  <suffix name="group_18" label="group 18"/>
  <suffix name="group_19" label="group 19"/>
  <suffix name="group_20" label="group 20"/>
  <affected-histogram name="PasswordManager.LinuxBackendStatistics"/>
  <affected-histogram name="PasswordManager.ProvisionalSaveFailure"/>
  <affected-histogram
      name="PasswordManager.SavePasswordPromptDisappearedQuickly"/>
  <affected-histogram name="PasswordManager.SavePasswordPromptDisplayed"/>
  <affected-histogram name="PasswordManager.SavePasswordPromptResponse"/>
</histogram_suffixes>

<histogram_suffixes name="PasswordManagerSuppressedAccountReason" separator=".">
  <suffix name="HTTPSNotHTTP"
      label="The credential was suppressed because it was for an HTTPS origin
             whereas the observed form was for an HTTP origin."/>
  <suffix name="PSLMatching"
      label="The credential was suppressed and not auto-filled because it was
             a PSL-match."/>
  <suffix name="SameOrganizationName"
      label="The credential was suppressed because it was for an HTTP/HTTPS
             origin that was neither an exact nor PSL-match to that of the
             observed form. Its origin had, however, the same
             organization-identifying name."/>
  <affected-histogram name="PasswordManager.SuppressedAccount.Generated"/>
  <affected-histogram name="PasswordManager.SuppressedAccount.Manual"/>
</histogram_suffixes>

<histogram_suffixes name="PasswordManagerSuppressedAccountType" separator=".">
  <suffix name="Generated" label="The password was originally auto-generated."/>
  <suffix name="Manual"
      label="The password was originally typed in by the user."/>
  <affected-histogram name="PasswordManager.SuppressedAccount"/>
</histogram_suffixes>

<histogram_suffixes name="PasswordProtectionTrigger" separator=".">
  <suffix name="AnyPasswordEntry"
      label="Password protection triggered by entering a password that
             matches either/both the sync password or a saved password This
             is a superset (and should be equal to or larger than)
             SyncPasswordEntry and ProtectedPasswordEntry"/>
  <suffix name="GSuiteSyncPasswordEntry"
      label="Password protection triggered by entering the sync password that
             is associated with a GSuite account. This is a subset of
             SyncPasswordEntry. Note that GSuite sync password reuse
             detection is only triggered if configured appropriate enterprise
             policy."/>
  <suffix name="NonGaiaEnterprisePasswordEntry"
      label="Password protection triggered by entering a password that
             matches a non-Gaia enterprise password. Note that non-Gaia
             enterprise password reuse detection is only triggered if
             configured appropriate enterprise policy."/>
  <suffix name="PasswordFieldOnFocus"
      label="Password protection triggered by password field on focus event."/>
  <suffix name="ProtectedPasswordEntry"
      label="Password protection triggered by entering a saved password that
             does NOT match the sync password. (TODO(nparker): Rename this to
             NonSyncPasswordEntry)"/>
  <suffix name="SyncPasswordEntry"
      label="Password protection triggered by entering the sync password,
             which may or may not also match a saved password. (This was
             called SyncProtectedPasswordEntry before M62)"/>
  <suffix name="SyncProtectedPasswordEntry"
      label="This was renamed by SyncPasswordEntry in M62 (it was misspelled
             in the code) . Password protection triggered by entering the sync
             password, which may or may not also match a saved password.">
    <obsolete>
      Replaced by ProtectedPasswordEntry in M62.
    </obsolete>
  </suffix>
  <affected-histogram name="PasswordProtection.ChromeSettingsAction"/>
  <affected-histogram name="PasswordProtection.InterstitialAction"/>
  <affected-histogram name="PasswordProtection.ModalWarningDialogAction"/>
  <affected-histogram
      name="PasswordProtection.NumberOfCachedVerdictBeforeShutdown"/>
  <affected-histogram name="PasswordProtection.PageInfoAction"/>
  <affected-histogram name="PasswordProtection.PasswordAlertModeOutcome"/>
  <affected-histogram name="PasswordProtection.RequestOutcome"/>
  <affected-histogram
      name="PasswordProtection.UserClickedThroughSafeBrowsingInterstitial"/>
  <affected-histogram name="PasswordProtection.Verdict"/>
</histogram_suffixes>

<histogram_suffixes name="PasswordProtectionVerdict" separator=".">
  <suffix name="LowReputation"
      label="Password protection reponse with low reputation verdict"/>
  <suffix name="Phishing"
      label="Password protection response with phishing verdict"/>
  <suffix name="Safe" label="Password protection response with safe verdict"/>
  <affected-histogram name="PasswordProtection.ReferrerChainSize"/>
</histogram_suffixes>

<histogram_suffixes name="PasswordReuseSourceRealm" separator=".">
  <suffix name="FromHttpRealm"
      label="The account in question was saved on an HTTP site."/>
  <suffix name="FromHttpsRealm"
      label="The account in question was saved on a HTTPS site (including
             those with certificate issues)."/>
  <affected-histogram name="PasswordManager.AccountsReusingPassword"/>
</histogram_suffixes>

<histogram_suffixes name="PasswordReuseTargetRealm" separator=".">
  <suffix name="OnAnyRealmWithDifferentHost"
      label="The number of other accounts whose realms have different hosts
             than the account in question, and their scheme is either HTTP or
             HTTPS."/>
  <suffix name="OnHttpRealmWithDifferentHost"
      label="The number of other accounts whose realms have HTTP scheme and
             different hosts than the account in question."/>
  <suffix name="OnHttpRealmWithSameHost"
      label="The number of other accounts whose realms have HTTP scheme and
             the same host as the account in question."/>
  <suffix name="OnHttpsRealmWithDifferentHost"
      label="The number of other accounts whose realms have HTTPS scheme and
             different hosts than the account in question."/>
  <suffix name="OnHttpsRealmWithSameHost"
      label="The number of other accounts whose realms have HTTPS scheme and
             the same host as the account in question."/>
  <suffix name="OnPSLMatchingRealm"
      label="The number of other accounts whose realms are public suffix
             matches to that of the account in question (the scheme is always
             the same in these cases)."/>
  <affected-histogram
      name="PasswordManager.AccountsReusingPassword.FromHttpRealm"/>
  <affected-histogram
      name="PasswordManager.AccountsReusingPassword.FromHttpsRealm"/>
</histogram_suffixes>

<histogram_suffixes name="PasswordScheme" separator=".">
  <suffix name="Android" label="The password is for an Android app."/>
  <suffix name="Ftp" label="The scheme of the origin is FTP."/>
  <suffix name="Http" label="The scheme of the origin is HTTP."/>
  <suffix name="Https" label="The scheme of the origin is HTTPS."/>
  <suffix name="Other" label="The scheme of the origin is something else."/>
  <affected-histogram name="PasswordManager.TotalAccountsHiRes.WithScheme"/>
</histogram_suffixes>

<histogram_suffixes name="PaymentRequestOutcome" separator=".">
  <suffix name="Completed" label="The Payment Request was completed"/>
  <suffix name="OtherAborted"
      label="The Payment Request was aborted but not but the user"/>
  <suffix name="UserAborted"
      label="The Payment Request was aborted by the user"/>
  <affected-histogram name="PaymentRequest.NumberOfSelectionAdds.ContactInfo"/>
  <affected-histogram
      name="PaymentRequest.NumberOfSelectionAdds.PaymentMethod"/>
  <affected-histogram
      name="PaymentRequest.NumberOfSelectionAdds.ShippingAddress"/>
  <affected-histogram
      name="PaymentRequest.NumberOfSelectionChanges.ContactInfo"/>
  <affected-histogram
      name="PaymentRequest.NumberOfSelectionChanges.PaymentMethod"/>
  <affected-histogram
      name="PaymentRequest.NumberOfSelectionChanges.ShippingAddress"/>
  <affected-histogram name="PaymentRequest.NumberOfSelectionEdits.ContactInfo"/>
  <affected-histogram
      name="PaymentRequest.NumberOfSelectionEdits.PaymentMethod"/>
  <affected-histogram
      name="PaymentRequest.NumberOfSelectionEdits.ShippingAddress"/>
  <affected-histogram
      name="PaymentRequest.NumberOfSuggestionsShown.ContactInfo"/>
  <affected-histogram
      name="PaymentRequest.NumberOfSuggestionsShown.PaymentMethod"/>
  <affected-histogram
      name="PaymentRequest.NumberOfSuggestionsShown.ShippingAddress"/>
</histogram_suffixes>

<histogram_suffixes name="PaymentRequestSection" separator=".">
  <suffix name="ContactInfo"
      label="For the contact info section of a Payment Request"/>
  <suffix name="CreditCards"
      label="For the payment method section of a Payment Request">
    <obsolete>
      Renamed to PaymentMethod.
    </obsolete>
  </suffix>
  <suffix name="PaymentMethod"
      label="For the payment method section of a Payment Request"/>
  <suffix name="ShippingAddress"
      label="For the shipping address section of a Payment Request"/>
  <affected-histogram name="PaymentRequest.NumberOfSelectionAdds"/>
  <affected-histogram name="PaymentRequest.NumberOfSelectionChanges"/>
  <affected-histogram name="PaymentRequest.NumberOfSelectionEdits"/>
  <affected-histogram name="PaymentRequest.NumberOfSuggestionsShown"/>
</histogram_suffixes>

<histogram_suffixes name="PerformanceMonitor" separator=".">
  <suffix name="BrowserProcess"/>
  <suffix name="GPUProcess"/>
  <suffix name="PluginProcess"/>
  <suffix name="PPAPIFlashProcess"/>
  <suffix name="PPAPIProcess"/>
  <suffix name="RendererExtensionEventProcess"/>
  <suffix name="RendererExtensionPersistentProcess"/>
  <suffix name="RendererProcess"/>
  <suffix name="WorkerProcess"/>
  <affected-histogram name="PerformanceMonitor.AverageCPU"/>
  <affected-histogram name="PerformanceMonitor.HighCPU"/>
  <affected-histogram name="PerformanceMonitor.IdleWakeups"/>
  <affected-histogram name="PerformanceMonitor.PackageExitIdleWakeups"/>
</histogram_suffixes>

<histogram_suffixes name="PermissionRequestGesture" separator=".">
  <suffix name="Gesture" label="With user gesture"/>
  <suffix name="NoGesture" label="Without user gesture"/>
  <affected-histogram name="Permissions.Prompt.Accepted"/>
  <affected-histogram name="Permissions.Prompt.Denied"/>
  <affected-histogram name="Permissions.Prompt.Shown"/>
</histogram_suffixes>

<histogram_suffixes name="PermissionRequestTypes" separator=".">
  <suffix name="AudioAndVideoCapture" label="Mic+Camera permission"/>
  <suffix name="AudioCapture" label="Microphone permission"/>
  <suffix name="Flash" label="Flash permission"/>
  <suffix name="Geolocation" label="Geolocation permission"/>
  <suffix name="MidiSysEx" label="Midi SysEx permission"/>
  <suffix name="MultipleDownload" label="Multiple downloads permission"/>
  <suffix name="Notifications" label="Notification permission"/>
  <suffix name="ProtectedMedia" label="Protected media permission"/>
  <suffix name="PushMessaging" label="Push messaging permission"/>
  <suffix name="Quota" label="Quota permission"/>
  <suffix name="RegisterProtocolHandler"
      label="registerProtocolHandler permission"/>
  <suffix name="SecurityKeyAttestation" label="Security Key attestation"/>
  <suffix name="VideoCapture" label="Camera permission"/>
  <affected-histogram name="Permissions.Engagement.Accepted"/>
  <affected-histogram name="Permissions.Engagement.Denied"/>
  <affected-histogram name="Permissions.Engagement.Dismissed"/>
  <affected-histogram name="Permissions.Engagement.Ignored"/>
</histogram_suffixes>

<histogram_suffixes name="PermissionTypes" separator=".">
  <suffix name="AudioCapture" label="Microphone permission actions"/>
  <suffix name="Flash" label="Flash permission actions"/>
  <suffix name="Geolocation" label="Geolocation permission actions"/>
  <suffix name="MidiSysEx" label="Midi SysEx permsision actions"/>
  <suffix name="Notifications" label="Notification permission actions"/>
  <suffix name="ProtectedMedia" label="Protected media permission actions"/>
  <suffix name="PushMessaging" label="Push messaging permission actions"/>
  <suffix name="VideoCapture" label="Camera permission actions"/>
  <affected-histogram name="ContentSettings.PermissionActions"/>
  <affected-histogram name="ContentSettings.PermissionActionsInsecureOrigin"/>
  <affected-histogram name="ContentSettings.PermissionActionsSecureOrigin"/>
  <affected-histogram name="Permissions.Action"/>
  <affected-histogram name="Permissions.Action.InsecureOrigin"/>
  <affected-histogram name="Permissions.Action.SecureOrigin"/>
  <affected-histogram name="Permissions.Prompt.Accepted.Persisted"/>
  <affected-histogram name="Permissions.Prompt.Accepted.PriorDismissCount"/>
  <affected-histogram name="Permissions.Prompt.Accepted.PriorIgnoreCount"/>
  <affected-histogram name="Permissions.Prompt.Denied.Persisted"/>
  <affected-histogram name="Permissions.Prompt.Denied.PriorDismissCount"/>
  <affected-histogram name="Permissions.Prompt.Denied.PriorIgnoreCount"/>
  <affected-histogram name="Permissions.Prompt.Dismissed.PriorDismissCount"/>
  <affected-histogram name="Permissions.Prompt.Dismissed.PriorIgnoreCount"/>
  <affected-histogram name="Permissions.Prompt.Ignored.PriorDismissCount"/>
  <affected-histogram name="Permissions.Prompt.Ignored.PriorIgnoreCount"/>
  <affected-histogram name="Permissions.Requested.CrossOrigin"/>
</histogram_suffixes>

<histogram_suffixes name="PersistentMemoryAllocs" separator="."
    ordering="prefix,2">
  <obsolete>
    Deprecated 2/2017 for Issue 689315 which indicated they weren't being used.
  </obsolete>
  <suffix name="BrowserMetrics" label="For browser process metrics."/>
  <suffix name="FieldTrialAllocator" label="For field-trial allocator."/>
  <suffix name="GpuMetrics" label="For GPU process metrics."/>
  <suffix name="NotificationHelperMetrics"
      label="For notification_helper process metrics."/>
  <suffix name="PpapiBrokerMetrics"
      label="For &quot;PPAPI broker&quot; process metrics."/>
  <suffix name="PpapiPluginMetrics"
      label="For &quot;PPAPI plugin&quot; process metrics."/>
  <suffix name="RendererMetrics" label="For renderer process metrics."/>
  <suffix name="SandboxHelperMetrics"
      label="For &quot;sandbox helper&quot; process metrics."/>
  <suffix name="SetupMetrics" label="For setup metrics."/>
  <suffix name="UtilityMetrics"
      label="For &quot;utility&quot; process metrics."/>
  <suffix name="ZygoteMetrics" label="For &quot;zygote&quot; process metrics."/>
  <affected-histogram name="UMA.PersistentAllocator.Allocs"/>
</histogram_suffixes>

<histogram_suffixes name="PersistentMemoryErrors" separator="."
    ordering="prefix,2">
  <suffix name="BrowserMetrics" label="For browser process metrics."/>
  <suffix name="CrashpadMetrics" label="For metrics from Crashpad."/>
  <suffix name="FieldTrialAllocator" label="For field-trial allocator."/>
  <suffix name="GpuMetrics" label="For GPU process metrics."/>
  <suffix name="NotificationHelperMetrics"
      label="For notification_helper process metrics."/>
  <suffix name="PpapiBrokerMetrics"
      label="For &quot;PPAPI broker&quot; process metrics."/>
  <suffix name="PpapiPluginMetrics"
      label="For &quot;PPAPI plugin&quot; process metrics."/>
  <suffix name="RendererMetrics" label="For renderer process metrics."/>
  <suffix name="SandboxHelperMetrics"
      label="For &quot;sandbox helper&quot; process metrics."/>
  <suffix name="SetupMetrics" label="For setup metrics."/>
  <suffix name="UtilityMetrics"
      label="For &quot;utility&quot; process metrics."/>
  <suffix name="ZygoteMetrics" label="For &quot;zygote&quot; process metrics."/>
  <affected-histogram name="UMA.PersistentAllocator.Errors"/>
</histogram_suffixes>

<histogram_suffixes name="PersistentMemoryUsedPct" separator="."
    ordering="prefix,2">
  <suffix name="BrowserMetrics" label="For browser process metrics."/>
  <suffix name="FieldTrialAllocator" label="For field-trial allocator."/>
  <suffix name="GpuMetrics" label="For GPU process metrics."/>
  <suffix name="NotificationHelperMetrics"
      label="For notification_helper process metrics."/>
  <suffix name="PpapiBrokerMetrics"
      label="For &quot;PPAPI broker&quot; process metrics."/>
  <suffix name="PpapiPluginMetrics"
      label="For &quot;PPAPI plugin&quot; process metrics."/>
  <suffix name="RendererMetrics" label="For renderer process metrics."/>
  <suffix name="SandboxHelperMetrics"
      label="For &quot;sandbox helper&quot; process metrics."/>
  <suffix name="SetupMetrics" label="For setup metrics."/>
  <suffix name="UtilityMetrics"
      label="For &quot;utility&quot; process metrics."/>
  <suffix name="ZygoteMetrics" label="For &quot;zygote&quot; process metrics."/>
  <affected-histogram name="UMA.PersistentAllocator.UsedPct"/>
</histogram_suffixes>

<histogram_suffixes name="PhysicalWebDebugActions" separator=".">
  <suffix name="ChromeStart" label="when Chrome first starts up"/>
  <suffix name="LaunchFromDiagnostics"
      label="when the user launches the ListUrlActivity from the Physical Web
             diagnostics page"/>
  <suffix name="LaunchFromPreferences"
      label="when the user launches the ListUrlActivity from the Physical Web
             preferencs screen"/>
  <affected-histogram name="PhysicalWeb.State.Bluetooth"/>
  <affected-histogram name="PhysicalWeb.State.DataConnectionActive"/>
  <affected-histogram name="PhysicalWeb.State.LocationPermission"/>
  <affected-histogram name="PhysicalWeb.State.LocationServices"/>
  <affected-histogram name="PhysicalWeb.State.Preference"/>
</histogram_suffixes>

<histogram_suffixes name="Platform.FirmwareType" separator=".">
  <suffix name="EC" label="Embedded Controller firmware"/>
  <suffix name="Main" label="Main processor firmware"/>
  <suffix name="PD" label="USB Power Delivery controller firmware"/>
  <affected-histogram name="Platform.BootMode.FirmwareWriteProtect"/>
</histogram_suffixes>

<histogram_suffixes name="PlatformEmmcLifeUsed" separator=".">
  <suffix name="TypeA" label="Memory Type A"/>
  <suffix name="TypeB" label="Memory Type B"/>
  <affected-histogram name="Platform.Emmc.LifeUsed"/>
</histogram_suffixes>

<histogram_suffixes name="PlatformFileSystem" separator="_" ordering="prefix,2">
  <suffix name="EncStateful" label="Encrypted Stateful filesystem"/>
  <suffix name="Stateful" label="Stateful filesystem /mnt/stateful"/>
  <affected-histogram name="Platform.FileSystem.ErrorCount"/>
  <affected-histogram name="Platform.FileSystem.FsckNeeded"/>
  <affected-histogram name="Platform.FileSystem.RecoveryNeeded"/>
</histogram_suffixes>

<histogram_suffixes name="PlatformMeminfoPercentage" separator="">
  <suffix name="infoActive" label="Active memory."/>
  <suffix name="infoActiveAnon"
      label="Active anonymous memory (data segments)."/>
  <suffix name="infoActiveFile"
      label="Active file-backed memory (executables, ...)."/>
  <suffix name="infoAnonPages" label="Anonymous memory (executables, ...)."/>
  <suffix name="infoBuffers" label="Buffer cache (executables, ...)."/>
  <suffix name="infoCached"
      label="size of file-backed memory minus swap and buffer cache."/>
  <suffix name="infoInactive" label="Inactive memory."/>
  <suffix name="infoInactiveAnon"
      label="Inactive anonymous memory (data segments)."/>
  <suffix name="infoInactiveFile" label="Inactive file-backed memory."/>
  <suffix name="infoMapped" label="Mapped memory."/>
  <suffix name="infoMemFree" label="Free memory."/>
  <suffix name="infoSwapUsedPercent" label="Used swap memory."/>
  <affected-histogram name="Platform.Mem"/>
</histogram_suffixes>

<histogram_suffixes name="PlatformMeminfoSize" separator="">
  <suffix name="MemFreeDerived" label="Size derived from free+buffers+cached."/>
  <suffix name="MemTotal" label="Size of total installed memory."/>
  <suffix name="MemUsedDerived"
      label="Size of &quot;Total - FreeDerived&quot; memory."/>
  <suffix name="Shmem" label="Size of shared memory."/>
  <suffix name="Slab" label="Size of slab memory."/>
  <suffix name="SwapUsed" label="Size of used swap memory."/>
  <suffix name="Unevictable" label="Size of unevictable memory."/>
  <affected-histogram name="Platform.Meminfo"/>
</histogram_suffixes>

<histogram_suffixes name="PluginFlashEngagement" separator=".">
  <obsolete>
    Deprecated 12/2017 in Issue 781644.
  </obsolete>
  <suffix name="ContentSettingAllowed" label="Engagement when Flash allowed."/>
  <suffix name="ContentSettingBlocked" label="Engagement when Flash blocked."/>
  <suffix name="NoSetting" label="Engagement when no content setting set."/>
  <affected-histogram name="Plugin.Flash.Engagement"/>
</histogram_suffixes>

<histogram_suffixes name="PNaClTranslatorTypes" separator=".">
  <suffix name="" label="All translator types"/>
  <suffix name="LLC" label="LLC-based translator"/>
  <suffix name="Subzero" label="Subzero-based translator"/>
  <affected-histogram name="NaCl.Options.PNaCl.OptLevel"/>
  <affected-histogram name="NaCl.Perf.PNaClCache.IsHit"/>
  <affected-histogram name="NaCl.Perf.PNaClLoadTime.CompileKBPerSec"/>
  <affected-histogram name="NaCl.Perf.PNaClLoadTime.CompileTime"/>
  <affected-histogram name="NaCl.Perf.PNaClLoadTime.LoadCompiler"/>
  <affected-histogram
      name="NaCl.Perf.PNaClLoadTime.PctCompiledWhenFullyDownloaded"/>
  <affected-histogram name="NaCl.Perf.PNaClLoadTime.TotalUncachedKBPerSec"/>
  <affected-histogram name="NaCl.Perf.PNaClLoadTime.TotalUncachedTime"/>
  <affected-histogram name="NaCl.Perf.Size.PexeNexeSizePct"/>
  <affected-histogram name="NaCl.Perf.Size.PNaClTranslatedNexe"/>
</histogram_suffixes>

<histogram_suffixes name="PositionVariants" separator="_">
  <suffix name="0_0" label="Only snippets on position 0"/>
  <suffix name="1_2" label="Only snippets on position 1-2"/>
  <suffix name="3_4" label="Only snippets on position 3-4"/>
  <suffix name="5_9" label="Only snippets on position 5-9"/>
  <affected-histogram name="NewTabPage.Snippets.CardClickedAge"/>
  <affected-histogram name="NewTabPage.Snippets.CardClickedScore"/>
  <affected-histogram name="NewTabPage.Snippets.CardClickedScoreNew"/>
  <affected-histogram name="NewTabPage.Snippets.CardLongPressedAge"/>
  <affected-histogram name="NewTabPage.Snippets.CardLongPressedScoreNew"/>
  <affected-histogram name="NewTabPage.Snippets.CardShownAge"/>
  <affected-histogram name="NewTabPage.Snippets.CardShownScore"/>
  <affected-histogram name="NewTabPage.Snippets.CardShownScoreNew"/>
</histogram_suffixes>

<histogram_suffixes name="PpapiPluginName" separator="_">
  <suffix name="libpepflashplayer.so" label="Flash player on Linux or Cros"/>
  <suffix name="libwidevinecdmadapter.so" label="Widevine CDM on Linux or Cros">
    <obsolete>
      Deprecated March 2018
    </obsolete>
  </suffix>
  <suffix name="pepflashplayer.dll" label="Flash player on Windows"/>
  <suffix name="PepperFlashPlayer.plugin" label="Flash player on Mac"/>
  <suffix name="widevinecdmadapter.dll" label="Widevine CDM on Windows">
    <obsolete>
      Deprecated March 2018
    </obsolete>
  </suffix>
  <suffix name="widevinecdmadapter.plugin" label="Widevine CDM on Mac">
    <obsolete>
      Deprecated March 2018
    </obsolete>
  </suffix>
  <affected-histogram name="Plugin.PpapiBrokerLoadErrorCode"/>
  <affected-histogram name="Plugin.PpapiBrokerLoadResult"/>
  <affected-histogram name="Plugin.PpapiBrokerLoadTime"/>
  <affected-histogram name="Plugin.PpapiPluginLoadErrorCode"/>
  <affected-histogram name="Plugin.PpapiPluginLoadResult"/>
  <affected-histogram name="Plugin.PpapiPluginLoadTime"/>
</histogram_suffixes>

<histogram_suffixes name="PrecacheCellular" separator=".">
  <obsolete>
    Deprecated July 11 2017.
  </obsolete>
  <suffix name="Cellular"
      label="covers fetches when connected to cellular networks"/>
  <affected-histogram name="Precache.DownloadedNonPrecache"/>
  <affected-histogram name="Precache.Saved"/>
</histogram_suffixes>

<histogram_suffixes name="PreferenceFileNames" separator=".">
  <suffix name="Local_State" label="Local State file"/>
  <suffix name="Preferences" label="Preferences file"/>
  <suffix name="Secure_Preferences" label="Secure Preferences file"/>
  <affected-histogram name="Settings.JsonDataReadSizeKilobytes"/>
  <affected-histogram name="Settings.JsonDataSizeKilobytes"/>
  <affected-histogram name="Settings.JsonDataWriteCount"/>
</histogram_suffixes>

<histogram_suffixes name="Prefetch" separator="_">
  <suffix name="ContentPrefetchPrefetchOff"
      label="Prefetch is completely disabled."/>
  <suffix name="ContentPrefetchPrefetchOn"
      label="prefetch is enabled but prerender is disabled."/>
  <affected-histogram name="HttpCache.EntryLockWait"/>
  <affected-histogram name="Net.HttpTimeToFirstByte"/>
  <affected-histogram name="PLT.Abandoned"/>
  <affected-histogram name="PLT.BeginToFinish"/>
  <affected-histogram name="PLT.BeginToFinish_ContentPrefetcher"/>
  <affected-histogram name="PLT.BeginToFinish_ContentPrefetcherReferrer"/>
  <affected-histogram name="PLT.BeginToFinishDoc"/>
  <affected-histogram name="PLT.BeginToFinishDoc_ContentPrefetcher"/>
  <affected-histogram name="PLT.BeginToFinishDoc_ContentPrefetcherReferrer"/>
  <affected-histogram name="PLT.PerceivedLoadTime"/>
  <affected-histogram name="PLT.PerceivedLoadTime_PrerenderLoad"/>
</histogram_suffixes>

<histogram_suffixes name="Prerender" separator="_">
  <obsolete>
    Deprecated August 2016
  </obsolete>
  <suffix name="Prerender5minTTL"
      label="prerender is enabled, and the TTL is extended to 5 minutes."/>
  <suffix name="PrerenderControl" label="prerender is disabled."/>
  <suffix name="PrerenderEnabled" label="prerender is enabled."/>
  <suffix name="PrerenderMatchComplete"
      label="prerender is enabled, and match complete replacements are used
             to gather extended statistics."/>
  <suffix name="PrerenderMulti"
      label="prerender is enabled with multiple simultanious prerenders."/>
  <suffix name="PrerenderNoUse"
      label="prerender is enabled, but pages are not swapped in."/>
  <affected-histogram name="HttpCache.EntryLockWait"/>
  <affected-histogram name="Net.HttpTimeToFirstByte"/>
  <affected-histogram name="PLT.Abandoned"/>
  <affected-histogram name="PLT.BeginToFinish"/>
  <affected-histogram name="PLT.BeginToFinish_ContentPrefetcher"/>
  <affected-histogram name="PLT.BeginToFinish_ContentPrefetcherReferrer"/>
  <affected-histogram name="PLT.BeginToFinishDoc"/>
  <affected-histogram name="PLT.BeginToFinishDoc_ContentPrefetcher"/>
  <affected-histogram name="PLT.BeginToFinishDoc_ContentPrefetcherReferrer"/>
  <affected-histogram name="PLT.PerceivedLoadTime"/>
  <affected-histogram name="PLT.PerceivedLoadTime_PrerenderLoad"/>
  <affected-histogram name="Prerender.FinalStatus"/>
  <affected-histogram name="Prerender.FinalStatusMatchComplete"/>
  <affected-histogram name="Prerender.FractionPixelsFinalAtSwapin"/>
  <affected-histogram name="Prerender.LocalPredictorEvent"/>
  <affected-histogram name="Prerender.PerceivedPLT"/>
  <affected-histogram name="Prerender.PerceivedPLTFirstAfterMiss"/>
  <affected-histogram name="Prerender.PerceivedPLTFirstAfterMissAnyOnly"/>
  <affected-histogram name="Prerender.PerceivedPLTFirstAfterMissBoth"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly"/>
  <affected-histogram name="Prerender.PerceivedPLTMatched"/>
  <affected-histogram name="Prerender.PerceivedPLTMatchedComplete"/>
  <affected-histogram name="Prerender.PerceivedPLTWindowed"/>
  <affected-histogram name="Prerender.PerceivedPLTWindowNotMatched"/>
  <affected-histogram name="Prerender.PercentLoadDoneAtSwapin"/>
  <affected-histogram name="Prerender.PrerenderNotSwappedInPLT"/>
  <affected-histogram name="Prerender.RendererIdleTime"/>
  <affected-histogram name="Prerender.RendererPerceivedPLT"/>
  <affected-histogram name="Prerender.RendererPerceivedPLTMatched"/>
  <affected-histogram name="Prerender.RendererTimeUntilDisplay"/>
  <affected-histogram name="Prerender.SimulatedLocalBrowsingBaselinePLT"/>
  <affected-histogram name="Prerender.SimulatedLocalBrowsingPLT"/>
</histogram_suffixes>

<histogram_suffixes name="PrerenderHoverType" separator="_" ordering="prefix">
  <obsolete>
    deprecated May 10 2012
  </obsolete>
  <suffix name="HoverStats_50" label="Hover stats @ threshold 50 ms."/>
  <suffix name="HoverStats_75" label="Hover stats @ threshold 75 ms."/>
  <suffix name="HoverStats_100" label="Hover stats @ threshold 100 ms."/>
  <suffix name="HoverStats_150" label="Hover stats @ threshold 150 ms."/>
  <suffix name="HoverStats_200" label="Hover stats @ threshold 200 ms."/>
  <suffix name="HoverStats_250" label="Hover stats @ threshold 250 ms."/>
  <suffix name="HoverStats_300" label="Hover stats @ threshold 300 ms."/>
  <suffix name="HoverStats_400" label="Hover stats @ threshold 400 ms."/>
  <suffix name="HoverStats_500" label="Hover stats @ threshold 500 ms."/>
  <suffix name="HoverStats_750" label="Hover stats @ threshold 750 ms."/>
  <suffix name="HoverStats_1000" label="Hover stats @ threshold 1000 ms."/>
  <suffix name="HoverStats_1500" label="Hover stats @ threshold 1500 ms."/>
  <suffix name="HoverStats_2000" label="Hover stats @ threshold 2000 ms."/>
  <suffix name="HoverStats_3000" label="Hover stats @ threshold 3000 ms."/>
  <suffix name="HoverStats_4000" label="Hover stats @ threshold 4000 ms."/>
  <suffix name="HoverStats_5000" label="Hover stats @ threshold 5000 ms."/>
  <affected-histogram name="Prerender.Events"/>
  <affected-histogram name="Prerender.TimeToClick"/>
</histogram_suffixes>

<histogram_suffixes name="PrerenderModeType" separator="_">
  <obsolete>
    Deprecated August 2016
  </obsolete>
  <suffix name="_15MinTTL" label="PRERENDER_MODE_EXPERIMENT_15MIN_TTL_GROUP"/>
  <suffix name="_Control" label="PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP"/>
  <suffix name="_Disabled" label="PRERENDER_MODE_DISABLED"/>
  <suffix name="_Enabled" label="PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP"/>
  <suffix name="_Multi"
      label="PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP"/>
  <suffix name="_NoUse" label="PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP"/>
  <affected-histogram name="Prerender.OmniboxNavigationsCouldPrerender"/>
  <affected-histogram name="Prerender.OmniboxNavigationsUsedPrerenderCount"/>
  <affected-histogram name="Prerender.OmniboxPrerenderCount"/>
</histogram_suffixes>

<histogram_suffixes name="PrerenderPrefetchAge" separator=".">
  <suffix name="Cold" label="Prefetch too old to skip revalidation."/>
  <suffix name="Reference"
      label="No prefetch. Warning: do not compare with the load times of
             prefetched pages (bias)."/>
  <suffix name="Warm" label="Prefetch skips revalidation."/>
  <affected-histogram name="Prerender.PrefetchTTFCP"/>
</histogram_suffixes>

<histogram_suffixes name="PrerenderPrefetchMainResourceType" separator=".">
  <suffix name="Cacheable" label="Main resource cacheable."/>
  <suffix name="NoStore" label="Main resource no-store."/>
  <affected-histogram name="Prerender.PrefetchTTFCP.Cold"/>
  <affected-histogram name="Prerender.PrefetchTTFCP.Reference"/>
  <affected-histogram name="Prerender.PrefetchTTFCP.Warm"/>
</histogram_suffixes>

<histogram_suffixes name="PrerenderPrefetchPaintVisibility" separator=".">
  <suffix name="Hidden" label="Page was hidden during rendering."/>
  <suffix name="Visible" label="Page visible for all of rendering."/>
  <affected-histogram name="Prerender.PerceivedTTFCPRecorded"/>
  <affected-histogram name="Prerender.PrefetchTTFCP.Cold.Cacheable"/>
  <affected-histogram name="Prerender.PrefetchTTFCP.Cold.NoStore"/>
  <affected-histogram name="Prerender.PrefetchTTFCP.Reference.Cacheable"/>
  <affected-histogram name="Prerender.PrefetchTTFCP.Reference.NoStore"/>
  <affected-histogram name="Prerender.PrefetchTTFCP.Warm.Cacheable"/>
  <affected-histogram name="Prerender.PrefetchTTFCP.Warm.NoStore"/>
</histogram_suffixes>

<histogram_suffixes name="PrerenderSource" separator="_" ordering="prefix">
  <suffix name="" label="All prerenders."/>
  <suffix name="externalrequest" label="Externally triggered prerender."/>
  <suffix name="externalrequestforced"
      label="Forced prerender regardless of network."/>
  <suffix name="gws" label="GWS triggered prerender."/>
  <suffix name="Instant" label="Instant search prerender.">
    <obsolete>
      Deprecated October 2017
    </obsolete>
  </suffix>
  <suffix name="none"
      label="No origin; in the case of prefetch TTFCP this is when no
             prefetch was involved."/>
  <suffix name="offline"
      label="Prerender triggered for saving a page for offline use.">
    <obsolete>
      Deprecated October 2017
    </obsolete>
  </suffix>
  <suffix name="omnibox" label="Triggered from the omnibox."/>
  <suffix name="wash" label="Multiple sources could have triggered.">
    <obsolete>
      Deprecated April 2017
    </obsolete>
  </suffix>
  <suffix name="web" label="Link triggered prerender."/>
  <suffix name="webcross"
      label="Link triggered prerender, rel=prerender, cross domain."/>
  <suffix name="webnext" label="Link triggered prerender, rel=next."/>
  <suffix name="websame"
      label="Link triggered prerender, rel=prerender, same domain."/>
  <affected-histogram name="Prerender.AbandonTimeUntilUsed"/>
  <affected-histogram name="Prerender.CookieSendType"/>
  <affected-histogram name="Prerender.CookieStatus"/>
  <affected-histogram name="Prerender.Event"/>
  <affected-histogram name="Prerender.FinalStatus"/>
  <affected-histogram name="Prerender.FractionPixelsFinalAtSwapin"/>
  <affected-histogram name="Prerender.LocalPredictorEvent"/>
  <affected-histogram name="Prerender.LocalPredictorTimeUntilUsed"/>
  <affected-histogram name="Prerender.NetworkBytesUsed"/>
  <affected-histogram name="Prerender.NetworkBytesWasted"/>
  <affected-histogram name="Prerender.NoStatePrefetchAge"/>
  <affected-histogram name="Prerender.NoStatePrefetchMainResourceRedirects"/>
  <affected-histogram name="Prerender.NoStatePrefetchResponseTypes"/>
  <affected-histogram name="Prerender.NoStatePrefetchSubResourceRedirects"/>
  <affected-histogram name="Prerender.PageVisitedStatus"/>
  <affected-histogram name="Prerender.PerceivedPLT"/>
  <affected-histogram name="Prerender.PerceivedPLTFirstAfterMiss"/>
  <affected-histogram name="Prerender.PerceivedPLTFirstAfterMissAnyOnly"/>
  <affected-histogram name="Prerender.PerceivedPLTFirstAfterMissBoth"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping"/>
  <affected-histogram
      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly"/>
  <affected-histogram name="Prerender.PerceivedPLTMatched"/>
  <affected-histogram name="Prerender.PerceivedPLTMatchedComplete"/>
  <affected-histogram name="Prerender.PerceivedPLTWindowed"/>
  <affected-histogram name="Prerender.PerceivedPLTWindowNotMatched"/>
  <affected-histogram name="Prerender.PerceivedTTFCPRecorded.Hidden"/>
  <affected-histogram name="Prerender.PerceivedTTFCPRecorded.Visible"/>
  <affected-histogram name="Prerender.PercentLoadDoneAtSwapin"/>
  <affected-histogram name="Prerender.PrefetchAge"/>
  <affected-histogram name="Prerender.PrefetchTTFCP.Cold.Cacheable.Hidden"/>
  <affected-histogram name="Prerender.PrefetchTTFCP.Cold.Cacheable.Visible"/>
  <affected-histogram name="Prerender.PrefetchTTFCP.Cold.NoStore.Hidden"/>
  <affected-histogram name="Prerender.PrefetchTTFCP.Cold.NoStore.Visible"/>
  <affected-histogram
      name="Prerender.PrefetchTTFCP.Reference.Cacheable.Hidden"/>
  <affected-histogram
      name="Prerender.PrefetchTTFCP.Reference.Cacheable.Visible"/>
  <affected-histogram name="Prerender.PrefetchTTFCP.Reference.NoStore.Hidden"/>
  <affected-histogram name="Prerender.PrefetchTTFCP.Reference.NoStore.Visible"/>
  <affected-histogram name="Prerender.PrefetchTTFCP.Warm.Cacheable.Hidden"/>
  <affected-histogram name="Prerender.PrefetchTTFCP.Warm.Cacheable.Visible"/>
  <affected-histogram name="Prerender.PrefetchTTFCP.Warm.NoStore.Hidden"/>
  <affected-histogram name="Prerender.PrefetchTTFCP.Warm.NoStore.Visible"/>
  <affected-histogram name="Prerender.PrerenderNotSwappedInPLT"/>
  <affected-histogram name="Prerender.PrerendersPerSessionCount"/>
  <affected-histogram name="Prerender.SimulatedLocalBrowsingBaselinePLT"/>
  <affected-histogram name="Prerender.SimulatedLocalBrowsingPLT"/>
  <affected-histogram name="Prerender.TimeBetweenPrerenderRequests"/>
  <affected-histogram name="Prerender.TimeSinceLastRecentVisit"/>
  <affected-histogram name="Prerender.TimeUntilUsed2"/>
</histogram_suffixes>

<histogram_suffixes name="Previews.Types" separator=".">
  <suffix name="AMPRedirection" label="AMP Redirection previews"/>
  <suffix name="LitePage" label="Lite page previews"/>
  <suffix name="LoFi" label="LoFi previews"/>
  <suffix name="NoScript" label="NoScript previews"/>
  <suffix name="Offline" label="Offline previews"/>
  <suffix name="ResourceLoadingHints"
      label="Resource loading hints based previews"/>
  <affected-histogram name="Previews.EligibilityReason"/>
  <affected-histogram name="Previews.InfoBarAction"/>
  <affected-histogram name="Previews.OptOut.UserOptedOut"/>
</histogram_suffixes>

<histogram_suffixes name="ProcessMemoryAllocator2" separator=".">
  <suffix name="BlinkGC" label="Only counting Blink GC memory."/>
  <suffix name="BlinkGC.AllocatedObjects"
      label="Only counting objects allocated using Blink GC."/>
  <suffix name="CommandBuffer"
      label="Only counting memory used by GL command buffers."/>
  <suffix name="Discardable"
      label="Only counting memory used by Discardable manager."/>
  <suffix name="Extensions.ValueStore"
      label="Only counting memory used by Extension value store database."/>
  <suffix name="JavaHeap"
      label="Only counting memory used by Java heap in Android."/>
  <suffix name="Malloc" label="Constrained to malloc allocator."/>
  <suffix name="PartitionAlloc"
      label="Only counting memory used by Partition allocator."/>
  <suffix name="PartitionAlloc.AllocatedObjects"
      label="Only counting objects allocated using Partition allocator."/>
  <suffix name="PartitionAlloc.Partitions.ArrayBuffer"
      label="Only counting memory used by Array buffer partition."/>
  <suffix name="PartitionAlloc.Partitions.Buffer"
      label="Only counting memory used by Buffer partition."/>
  <suffix name="PartitionAlloc.Partitions.FastMalloc"
      label="Only counting memory used by Fast Malloc partition."/>
  <suffix name="PartitionAlloc.Partitions.Layout"
      label="Only counting memory used by Layout partition."/>
  <suffix name="PrivateMemoryFootprint"
      label="Only counting private resident + swapped/compressed memory."/>
  <suffix name="Resident" label="Only counting resident memory."/>
  <suffix name="SharedMemoryFootprint" label="Only counting shared memory."/>
  <suffix name="SiteStorage"
      label="Only counting memory used by Web storage API."/>
  <suffix name="SiteStorage.BlobStorage"
      label="Only counting memory used by in-memory blob files."/>
  <suffix name="Skia" label="Only counting memory used by Skia caches."/>
  <suffix name="Skia.SkGlyphCache"
      label="Only counting memory used by Skia glyph cache."/>
  <suffix name="Skia.SkResourceCache"
      label="Only counting memory used by Skia bitmap resource cache."/>
  <suffix name="Sync" label="Only counting memory used by Sync storage."/>
  <suffix name="V8" label="Only counting memory used by V8 javascript engine."/>
  <suffix name="V8.AllocatedObjects"
      label="Only counting objects allocated by V8 javascript engine."/>
  <affected-histogram name="Memory.Experimental.Browser2"/>
  <affected-histogram name="Memory.Experimental.Extension2"/>
  <affected-histogram name="Memory.Experimental.Gpu2"/>
  <affected-histogram name="Memory.Experimental.Renderer2"/>
</histogram_suffixes>

<histogram_suffixes name="ProcessMemoryAllocatorSmall2" separator=".">
  <suffix name="DownloadService"
      label="Only counting memory used by Download service."/>
  <suffix name="FontCaches" label="Only counting memory used by font caches."/>
  <suffix name="History" label="Only counting memory used by History service."/>
  <suffix name="LevelDatabase"
      label="Only counting memory used by Level databases."/>
  <suffix name="Net"
      label="Only counting memory used by Networking sockets and caches."/>
  <suffix name="Net.UrlRequestContext"
      label="Only counting memory used by URL requests and associated http
             cache."/>
  <suffix name="OmniboxSuggestions"
      label="Only counting memory used by Omnibox suggestions provider."/>
  <suffix name="SiteStorage.IndexDB"
      label="Only counting memory used by IndexedDB API."/>
  <suffix name="SiteStorage.LocalStorage"
      label="Only counting memory used by Local storage API."/>
  <suffix name="SiteStorage.SessionStorage"
      label="Only counting memory used by Session storage API."/>
  <suffix name="Sqlite" label="Only counting memory used by Sqlite databases."/>
  <suffix name="TabRestore"
      label="Only counting memory used by tab restore page states."/>
  <suffix name="UI" label="Only counting memory used by Android UI bitmaps."/>
  <suffix name="WebCache"
      label="Only counting memory used by all resources in Blink Web Cache."/>
  <suffix name="WebCache.CSSStylesheetResources"
      label="Only counting memory used by CSS Stylesheet resources in Blink
             Web Cache."/>
  <suffix name="WebCache.FontResources"
      label="Only counting memory used by Font resources in Blink Web Cache."/>
  <suffix name="WebCache.ImageResources"
      label="Only counting memory used by Image resources in Blink Web Cache."/>
  <suffix name="WebCache.OtherResources"
      label="Only counting memory used by other resources in Blink Web Cache."/>
  <suffix name="WebCache.ScriptResources"
      label="Only counting memory used by Script resources in Blink Web
             Cache."/>
  <suffix name="WebCache.XSLStylesheetResources"
      label="Only counting memory used by XSL Stylesheet resources in Blink
             Web Cache."/>
  <affected-histogram name="Memory.Experimental.Browser2.Small"/>
  <affected-histogram name="Memory.Experimental.Extension2.Small"/>
  <affected-histogram name="Memory.Experimental.Gpu2.Small"/>
  <affected-histogram name="Memory.Experimental.Renderer2.Small"/>
</histogram_suffixes>

<histogram_suffixes name="ProcessType" separator=".">
  <suffix name="BrowserProcess" label="Browser Process"/>
  <suffix name="ExtensionProcess" label="Extension Process"/>
  <suffix name="RendererProcess"
      label="Renderer Process (not an extension process)"/>
  <affected-histogram name="Extensions.ExtensionCreationTime"/>
</histogram_suffixes>

<histogram_suffixes name="ProfileMenuGAIASource" separator=".">
  <suffix name="GAIAAddSession"
      label="GAIA-initiated interaction indicating a service type of Add a
             Session"/>
  <suffix name="GAIADefault"
      label="GAIA-initiated interaction indicating the default service type"/>
  <suffix name="GAIAIncognito"
      label="GAIA-initiated interaction indicating a service type of
             Incognito (used for DesktopMenu)"/>
  <suffix name="GAIAReAuth"
      label="GAIA-initiated interaction indicating a service type of
             Reauthenticate this user"/>
  <suffix name="GAIASignout"
      label="GAIA-initiated interaction indicating a service type of Signout"/>
  <suffix name="GAIASignoutIncognito"
      label="GAIA-initiated interaction indicating a service type of Signout
             and go Incognito (used for AndroidAccountManagementMenu)"/>
  <suffix name="GAIASignup"
      label="GAIA-initiated interaction indicating a service type of Add an
             account"/>
  <suffix name="NonGAIA" label="Interaction was not initiated from GAIA"/>
  <affected-histogram name="Profile.AndroidAccountManagementMenu"/>
  <affected-histogram name="Profile.DesktopMenu"/>
</histogram_suffixes>

<histogram_suffixes name="ProfileOpenState" separator=".">
  <suffix name="ToOpenedProfile"
      label="The profile being switched to was already loaded and had at
             least one open browser"/>
  <suffix name="ToOpenedProfileWithoutBrowser"
      label="The profile being switched to was already opened and had no
             active browsers"/>
  <suffix name="ToUnopenedProfile"
      label="The profile being switched to had not yet been loaded this
             Chrome session"/>
  <affected-histogram name="Profile.OpenMethod"/>
</histogram_suffixes>

<histogram_suffixes name="ProfilePictureDownload" separator=".">
  <suffix name="Default.LoggedIn" label="default picture, after login"/>
  <suffix name="Default.OOBE" label="default picture, in OOBE"/>
  <suffix name="Default.Preferences" label="default picture, in Prefs"/>
  <suffix name="Failure.LoggedIn" label="download has failed, after login"/>
  <suffix name="Failure.OOBE" label="download has failed, in OOBE"/>
  <suffix name="Failure.Preferences" label="download has failed, in Prefs"/>
  <suffix name="Success.LoggedIn" label="download was successful, after login"/>
  <suffix name="Success.OOBE" label="download was successful, in OOBE"/>
  <suffix name="Success.Preferences" label="download was successful, in Prefs"/>
  <affected-histogram name="UserImage.ProfileDownloadTime"/>
</histogram_suffixes>

<histogram_suffixes name="ProgressiveScan" separator="_">
  <suffix name="33Percent_4MinMax"
      label="Progressive scan @ 33%, 4 frequency bins."/>
  <suffix name="50Percent_4MinMax"
      label="Progressive scan @ 50%, 4 frequency bins."/>
  <suffix name="50Percent_8MinMax"
      label="Progressive scan @ 50%, 8 frequency bins."/>
  <suffix name="100Percent_1Min_4Max"
      label="Progressive scan @ 100%, minimum 1/maximum 4 frequencies."/>
  <suffix name="100Percent_1MinSeen_A"
      label="Progressive scan @ all previously seen frequencies (A)."/>
  <suffix name="100Percent_1MinSeen_B"
      label="Progressive scan @ all previously seen frequencies (B)."/>
  <suffix name="100Percent_8MinMax"
      label="Progressive scan @ 100%, 8 frequency bins."/>
  <suffix name="FullScan" label="Using WPA_supplicant to scan."/>
  <affected-histogram name="Network.Shill.TimeToDrop"/>
  <affected-histogram name="Network.Shill.WiFi.ScanResult"/>
  <affected-histogram name="Network.Shill.Wifi.TimeToConnect"/>
  <affected-histogram name="Network.Shill.Wifi.TimeToJoin"/>
  <affected-histogram name="Network.Shill.Wifi.TimeToScan"/>
  <affected-histogram name="Network.Shill.Wifi.TimeToScanAndConnect"/>
</histogram_suffixes>

<histogram_suffixes name="ProtectorSettingChange" separator=".">
  <obsolete>
    Deprecated 8/2013. No longer tracked.
  </obsolete>
  <suffix name="Applied" label="change has been accepted by user"/>
  <suffix name="Corrupt" label="possibly hijacked, backup invalid"/>
  <suffix name="Discarded" label="change has been reverted by user"/>
  <suffix name="Fallback" label="fallback provider used (no backup available)"/>
  <suffix name="Hijacked" label="hijacked, with a valid backup"/>
  <suffix name="Missing" label="fallback provider missing, added"/>
  <suffix name="New" label="(obsolete, was sum of Corrupt+Hijacked)"/>
  <suffix name="Restored"
      label="search provider restored by Protector before showing the bubble"/>
  <suffix name="Timeout" label="change has been ignored by user (timed out)"/>
  <affected-histogram name="Protector.SearchProvider"/>
  <affected-histogram name="Protector.StartupSettings"/>
</histogram_suffixes>

<histogram_suffixes name="ProviderPermissionType" separator=".">
  <suffix name="READ_HISTORY_BOOKMARKS"/>
  <suffix name="WRITE_HISTORY_BOOKMARKS"/>
  <affected-histogram name="Android.ChromeBrowserProvider.CallerHasPermission"/>
  <affected-histogram name="Android.ChromeBrowserProvider.SignaturePassed"/>
</histogram_suffixes>

<histogram_suffixes name="ProxyConnectionImpact" separator="_">
  <suffix name="proxy_connections_8"
      label="with 8 connections per proxy server"/>
  <suffix name="proxy_connections_16"
      label="with 16 connections per proxy server"/>
  <suffix name="proxy_connections_32"
      label="with 32 connections per proxy server"/>
  <suffix name="proxy_connections_64"
      label="with 64 connections per proxy server"/>
  <affected-histogram name="Net.HttpProxySocketRequestTime"/>
  <affected-histogram name="Net.SocksSocketRequestTime"/>
  <affected-histogram name="PLT.Abandoned"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
</histogram_suffixes>

<histogram_suffixes name="PurgeAndSuspendExperiment" separator=".">
  <suffix base="true" name="BlinkGCKB"
      label="Constrained to the BlinkGC allocator"/>
  <suffix base="true" name="DiscardableKB"
      label="Constrained to discardable memory usage"/>
  <suffix base="true" name="MallocKB" label="Constrained to malloc usage"/>
  <suffix base="true" name="PartitionAllocKB"
      label="Constrained to the ParitionAlloc allocator"/>
  <suffix base="true" name="TotalAllocatedKB"
      label="Summed over the PartitionAlloc, malloc, discardable memory,
             mainThreadIsolate() and BlinkGC allocators"/>
  <suffix base="true" name="V8MainThreadIsolateKB"
      label="Constrained to memory usage by mainThreadIsolate()"/>
  <affected-histogram name="PurgeAndSuspend.Experimental.MemoryGrowth"/>
</histogram_suffixes>

<histogram_suffixes name="PurgeAndSuspendExperimentPerHalfHour" separator=".">
  <suffix name="30min"
      label="Constrained to each allocator 30min after purging"/>
  <suffix name="60min"
      label="Constrained to each allocator 60min after purging"/>
  <suffix name="90min"
      label="Constrained to each allocator 90min after purging"/>
  <affected-histogram
      name="PurgeAndSuspend.Experimental.MemoryGrowth.BlinkGCKB"/>
  <affected-histogram
      name="PurgeAndSuspend.Experimental.MemoryGrowth.DiscardableKB"/>
  <affected-histogram
      name="PurgeAndSuspend.Experimental.MemoryGrowth.MallocKB"/>
  <affected-histogram
      name="PurgeAndSuspend.Experimental.MemoryGrowth.PartitionAllocKB"/>
  <affected-histogram
      name="PurgeAndSuspend.Experimental.MemoryGrowth.TotalAllocatedKB"/>
  <affected-histogram
      name="PurgeAndSuspend.Experimental.MemoryGrowth.V8MainThreadIsolateKB"/>
</histogram_suffixes>

<histogram_suffixes name="QueryTimeSuffix" separator=".">
  <suffix name="0" label="N = 0"/>
  <suffix name="1" label="N = 1"/>
  <suffix name="2" label="N = 2"/>
  <suffix name="3" label="N = 3"/>
  <suffix name="4" label="N = 4"/>
  <suffix name="5" label="N = 5"/>
  <affected-histogram name="Omnibox.QueryTime"/>
  <affected-histogram name="Omnibox.QueryTime2"/>
  <affected-histogram name="ShortcutsProvider.QueryIndexTime"/>
</histogram_suffixes>

<histogram_suffixes name="QueueingTimeThreshold" separator="_">
  <obsolete>
    Deprecated 04/2018.
  </obsolete>
  <suffix name="GreaterThan.10ms" label="Queueing Time greater than 10ms."/>
  <suffix name="GreaterThan.150ms" label="Queueing Time greater than 150ms."/>
  <suffix name="GreaterThan.300ms" label="Queueing Time greater than 300ms."/>
  <suffix name="GreaterThan.450ms" label="Queueing Time greater than 450ms."/>
  <suffix name="LessThan.10ms" label="Queueing Time less than 10ms."/>
  <suffix name="LessThan.150ms" label="Queueing Time less than 150ms."/>
  <suffix name="LessThan.300ms" label="Queueing Time less than 300ms."/>
  <suffix name="LessThan.450ms" label="Queueing Time less than 450ms."/>
  <affected-histogram
      name="RendererScheduler.ExpectedQueueingTimeWhenQueueingTime"/>
</histogram_suffixes>

<histogram_suffixes name="QuicConnectionType" separator="">
  <owner>rch@chromium.org</owner>
  <suffix name="ForHTTP" label="Only insecure HTTP connections are counted.">
    <obsolete>
      Deprecated 10/2015.
    </obsolete>
  </suffix>
  <suffix name="ForHTTPS" label="Only secure HTTPS connections are counted."/>
  <affected-histogram name="Net.QuicSession.ConnectRandomPort"/>
  <affected-histogram
      name="Net.QuicSession.ConnectRandomPortRequiringConfirmation"/>
  <affected-histogram name="Net.QuicSession.ConnectSelectPort">
    <obsolete>
      Deprecated 04/2016.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="Net.QuicSession.HandshakeRoundTrips"/>
</histogram_suffixes>

<histogram_suffixes name="QuicPortSelection" separator="">
  <suffix name="RandomPort"
      label="The operating system randomly selected a source port for the
             connection."/>
  <owner>rch@chromium.org</owner>
  <suffix name="SelectPort"
      label="An effort was mode to (try to) consistently connect using the
             same source port for the given server IP/port."/>
  <affected-histogram name="Net.QuicSession.Connect"/>
</histogram_suffixes>

<histogram_suffixes name="QuicSessionVerifyProofTime" separator=".">
  <suffix name="" label="Verification time for a server."/>
  <suffix name="CachedServerConfig"
      label="Verification time for a server when server config from cache is
             used."/>
  <suffix name="google" label="Verification time for www.google.com server."/>
  <affected-histogram name="Net.QuicSession.VerifyProofTime"/>
</histogram_suffixes>

<histogram_suffixes name="RasterBufferProvider" separator=".">
  <suffix name="Gpu" label="The GpuRasterBufferProvider was in use."/>
  <suffix name="OneCopy" label="The OneCopyRasterBufferProvider was in use."/>
  <affected-histogram name="Renderer4.Browser.PartialRasterPercentageSaved"/>
  <affected-histogram name="Renderer4.Renderer.PartialRasterPercentageSaved"/>
</histogram_suffixes>

<histogram_suffixes name="RasterTaskType" separator=".">
  <suffix name="" label="This metric includes both gpu and software raster.">
    <obsolete>
      Deprecated as of 02/2018. Using suffix Gpu and Software instead.
    </obsolete>
  </suffix>
  <suffix name="Gpu" label="This metric is for only gpu raster."/>
  <suffix name="Software" label="This metric is for only software raster."/>
  <affected-histogram name="Compositing.Browser.CachedImagesCount"/>
  <affected-histogram name="Compositing.Browser.RasterTask.RasterPixelsPerMs"/>
  <affected-histogram name="Compositing.Browser.RasterTask.RasterPixelsPerMs2"/>
  <affected-histogram name="Compositing.Browser.RasterTask.RasterUs"/>
  <affected-histogram name="Compositing.Renderer.CachedImagesCount"/>
  <affected-histogram name="Compositing.Renderer.RasterTask.RasterPixelsPerMs"/>
  <affected-histogram
      name="Compositing.Renderer.RasterTask.RasterPixelsPerMs2"/>
  <affected-histogram name="Compositing.Renderer.RasterTask.RasterUs"/>
  <affected-histogram name="Renderer4.ImageDecodeTaskDurationUs"/>
  <affected-histogram name="Renderer4.ImageDecodeTaskDurationUs.OutOfRaster"/>
</histogram_suffixes>

<histogram_suffixes name="ReadErrorSourceNetwork" separator=".">
  <suffix name="AnyNetwork"/>
  <suffix name="CurrentNetwork"
      label="This metric is for current network only."/>
  <suffix name="OtherNetworks"
      label="This metric is for old networks or networks to be migrated to
             only."/>
  <affected-histogram name="Net.QuicSession.ReadError"/>
</histogram_suffixes>

<histogram_suffixes name="ReferrerAttribution" separator=".">
  <suffix name="DownloadAttribution" label="Download referrer attribution."/>
  <suffix name="MalwareInterstitialAttribution"
      label="Malware interstitial referrer attribution."/>
  <suffix name="PasswordEventAttribution"/>
  <suffix name="PhishingInterstitialAttribution"
      label="Phishing interstitial referrer attribution."/>
  <suffix name="PPAPIDownloadAttribution"
      label="PPAPI download referrer attribution."/>
  <suffix name="UwsInterstitialAttribution"
      label="UwS interstitial referrer attribution."/>
  <affected-histogram name="SafeBrowsing.ReferrerAttributionResult"/>
  <affected-histogram name="SafeBrowsing.ReferrerHasInvalidTabID"/>
  <affected-histogram name="SafeBrowsing.ReferrerURLChainSize"/>
</histogram_suffixes>

<histogram_suffixes name="RelaunchNotificationStyle" separator=".">
  <suffix name="Recommended" label="The relaunch recommended bubble."/>
  <suffix name="Required" label="The relaunch required dialog."/>
  <affected-histogram name="RelaunchNotification.ShowResult"/>
</histogram_suffixes>

<histogram_suffixes name="RemoteProcessWarmStartFast" separator="">
  <suffix name="" label="Normal start."/>
  <suffix name="Fast"
      label="Fast start by skipping normal chrome.dll startup."/>
  <affected-histogram name="Startup.WarmStartTimeFromRemoteProcessStart"/>
</histogram_suffixes>

<histogram_suffixes name="RemotingSessionDuration" separator=".">
  <suffix name="Duration0To100MilliSec"
      label="remoting sessions have duration in (0, 0.1] seconds"/>
  <suffix name="Duration1To3Sec"
      label="remoting sessions have duration in (1, 3] seconds"/>
  <suffix name="Duration3To5Sec"
      label="remoting sessions have duration in (3, 5] seconds"/>
  <suffix name="Duration5To10Sec"
      label="remoting sessions have duration in (5, 10] seconds"/>
  <suffix name="Duration10To15Sec"
      label="remoting sessions have duration in (10, 15] seconds"/>
  <suffix name="Duration100MilliSecTo1Sec"
      label="remoting sessions have duration in (0.1, 1] seconds"/>
  <affected-histogram name="Media.Remoting.SessionStopTrigger"/>
</histogram_suffixes>

<histogram_suffixes name="RendererEventLatency" separator=".">
  <suffix name="Char" label="The Char event occurs on textual keyboard input."/>
  <suffix name="ContextMenu" label="For ContextMenu event."/>
  <suffix name="GestureDoubleTap"
      label="A GestureDoubleTap occurs when the user double taps on a
             touchscreen."/>
  <suffix name="GestureFlingCancel"
      label="A GestureFlingCancel is sent to the renderer to cancel any
             active flings."/>
  <suffix name="GestureFlingStart"
      label="A GestureFlingStart is sent when the user quickly flicks on a
             touchscreen."/>
  <suffix name="GestureLongPress"
      label="A GestureLongPress is sent when the user taps down and holds
             their finger on a touchscreen."/>
  <suffix name="GestureLongTap"
      label="A GestureLongTap is sent when the user taps down on a
             touchscreen, holds their finger for a while, then releases."/>
  <suffix name="GesturePinchBegin"
      label="A GesturePinchBegin is sent when a user starts a pinch zoom
             motion on a touchscreen."/>
  <suffix name="GesturePinchEnd"
      label="A GesturePinchEnd is sent when the user releases their fingers
             from the touchscreen after performing a pinch zoom motion."/>
  <suffix name="GesturePinchUpdate"
      label="GesturePinchUpdate events are sent while the user is performing
             a pinch zoom motion on a touch screen. GesturePinchUpdate events
             are sent as the user changes the distance between their fingers."/>
  <suffix name="GestureScrollBegin"
      label="A GestureScrollBegin is sent at the beginning of a gesture
             scroll on a touchscreen."/>
  <suffix name="GestureScrollEnd"
      label="A GestureScrollEnd is sent when the user releases their finger
             after a gesture scroll on a touchscreen."/>
  <suffix name="GestureScrollUpdate"
      label="GestureScrollUpdate events are sent as the user drags their
             finger along the touchscreen during a gesture scroll."/>
  <suffix name="GestureScrollUpdateWithoutPropagation"
      label="GestureScrollUpdateWithoutPropagation events are scroll updates
             that shouldn't bubble, generated by a gesture fling."/>
  <suffix name="GestureShowPress"
      label="A GestureShowPress event is sent when the user presses down on
             the touchscreen but before a GestureTapDown."/>
  <suffix name="GestureTap"
      label="A GestureTap is sent when the user presses down and releases on
             a touchscreen."/>
  <suffix name="GestureTapCancel"
      label="A GestureTapCancel is sent to cancel a pending GestureTap event.
             For example, if the user taps down but drags their finger
             instead of releasing it."/>
  <suffix name="GestureTapDown"
      label="A GestureTapDown is sent when the user presses on the
             touchscreen in what could potentially be a full GestureTap
             event."/>
  <suffix name="GestureTapUnconfirmed"
      label="A GestureTapUnconfirmed is sent when the user taps the
             touchscreen but, due to a delay, the GestureTap isn't sent yet."/>
  <suffix name="GestureTwoFingerTap"
      label="A GestureTwoFingerTap is sent when the user presses down a
             releases on a touchscreen with two fingers."/>
  <suffix name="KeyDown"
      label="A KeyDown event is sent when a keyboard key is pressed down."/>
  <suffix name="KeyUp"
      label="A KeyUp event is sent when a depressed keyboard key is released."/>
  <suffix name="MouseDown"
      label="A MouseDown event is sent when the user click down a mouse
             button."/>
  <suffix name="MouseEnter"
      label="A MouseEnter event is sent when the mouse cursor enters the
             renderer area."/>
  <suffix name="MouseLeave"
      label="A MouseLeave event is sent when the mouse cursor leaves the
             renderer area."/>
  <suffix name="MouseMove"
      label="A MouseMove event is sent when the mouse cursor moves within the
             renderer area."/>
  <suffix name="MouseUp"
      label="A MouseUp event is sent when a depressed mouse button is
             released."/>
  <suffix name="MouseWheel"
      label="A MouseWheel event is sent when the user scrolls using the mouse
             wheel within the renderer area."/>
  <suffix name="RawKeyDown"
      label="A RawKeyDown event is a wrapper around a native key event."/>
  <suffix name="TouchCancel"
      label="A TouchCancel is used to cancel an existing touch point. For
             example, if the user drags a finger outside the bounds of the
             renderer."/>
  <suffix name="TouchEnd"
      label="A TouchEnd is send when the user lifts a finger from the
             touchscreen."/>
  <suffix name="TouchMove"
      label="A TouchMove is sent when the user moves a finger along the
             touchscreen."/>
  <suffix name="TouchStart"
      label="A TouchStart is sent when the user first touches a finger to the
             touchscreen."/>
  <suffix name="Undefined" label="For unknown or undefined events."/>
  <affected-histogram name="Event.Latency.Renderer"/>
  <affected-histogram name="Event.Latency.Renderer2"/>
  <affected-histogram name="Event.Latency.RendererImpl"/>
</histogram_suffixes>

<histogram_suffixes name="RendererMemoryAllocator" separator=".">
  <suffix base="true" name="BlinkGC"
      label="Constrained to the BlinkGC allocator"/>
  <suffix base="true" name="Discardable"
      label="Constrained to discardable memory usage"/>
  <suffix base="true" name="Malloc" label="Constrained to malloc usage"/>
  <suffix base="true" name="NonDiscardableTotalAllocated"
      label="Summed over the PartitionAlloc, malloc, mainThreadIsolate() and
             BlinkGC allocators"/>
  <suffix base="true" name="PartitionAlloc"
      label="Constrained to the PartitionAlloc allocator"/>
  <suffix base="true" name="TotalAllocated"
      label="Summed over the PartitionAlloc, malloc, discardable memory,
             mainThreadIsolate() and BlinkGC allocators"/>
  <suffix base="true" name="TotalAllocatedPerRenderView"
      label="TotalAllocated divided by the number of RenderViews"/>
  <suffix base="true" name="V8MainThreadIsolate"
      label="Constrained to memory usage by mainThreadIsolate()"/>
  <affected-histogram name="Memory.Experimental.Renderer"/>
</histogram_suffixes>

<histogram_suffixes name="RendererMemoryTiming" separator=".">
  <suffix name="AfterBackgrounded.5min"
      label="Recorded 5 minutes after backgrounded."/>
  <suffix name="AfterBackgrounded.10min"
      label="Recorded 10 minutes after backgrounded."/>
  <suffix name="AfterBackgrounded.15min"
      label="Recorded 15 minutes after backgrounded."/>
  <suffix name="DidFinishLoad"
      label="Recorded each time DidFinishLoad is called for *any* frame
             within the page."/>
  <suffix name="MainFrame.PeakDuringLoad"
      label="In the main frame, polled each time CreateURLLoader is called,
             and the maximum value is recorded when DidFinishLoad is called.">
    <obsolete>
      Deprecated as of 04/2018. No longer recorded.
    </obsolete>
  </suffix>
  <suffix name="MainFrameDidFinishLoad"
      label="Recorded when DidFinishLoad is called for the main frame."/>
  <suffix name="PeakDuringLoad"
      label="Polled each time CreateURLLoader is called, and the maximum value
             is recorded when DidFinishLoad is called.">
    <obsolete>
      Deprecated as of 04/2018. No longer recorded.
    </obsolete>
  </suffix>
  <suffix name="ServiceWorkerControlledMainFrame.PeakDuringLoad"
      label="In the main frame which is controlled by a service worker, polled
             each time CreateURLLoader is called, and the maximum value is
             recorded when DidFinishLoad is called.">
    <obsolete>
      Deprecated as of 04/2018. No longer recorded.
    </obsolete>
  </suffix>
  <suffix name="ServiceWorkerControlledMainFrameDidFinishLoad"
      label="Recorded when DidFinishLoad is called for the main frame which is
             controlled by a service worker.">
    <obsolete>
      Deprecated as of June 2018. No longer recorded. This was also being
      recorded when the page had a controller with no fetch event, which usually
      means the service worker was not running.
    </obsolete>
  </suffix>
  <affected-histogram name="Memory.Experimental.Renderer.BlinkGC"/>
  <affected-histogram name="Memory.Experimental.Renderer.Discardable"/>
  <affected-histogram name="Memory.Experimental.Renderer.Malloc"/>
  <affected-histogram
      name="Memory.Experimental.Renderer.NonDiscardableTotalAllocated"/>
  <affected-histogram name="Memory.Experimental.Renderer.PartitionAlloc"/>
  <affected-histogram name="Memory.Experimental.Renderer.TotalAllocated"/>
  <affected-histogram
      name="Memory.Experimental.Renderer.TotalAllocatedPerRenderView"/>
  <affected-histogram name="Memory.Experimental.Renderer.V8MainThreadIsolate"/>
</histogram_suffixes>

<histogram_suffixes name="RendererScheduler.AfterNthMinuteInBackgroundSplit"
    separator=".">
  <suffix name="Background.AfterFifthMinute"
      label="Time spent in tasks of a particular task type starting from the
             sixth minute after backgrounding the renderer. The renderer is
             expected to be mostly idle during this period."/>
  <suffix name="Background.AfterTenthMinute"
      label="Time spent in tasks of a particular task type starting from the
             eleventh minute after backgrounding the renderer. The renderer
             is expected to be mostly idle during this period."/>
  <affected-histogram name="RendererScheduler.TaskDurationPerTaskType2"/>
</histogram_suffixes>

<histogram_suffixes name="RendererScheduler.ExpectedQueueingTime.FrameSplit"
    separator=".">
  <suffix name="CrossOriginBackground"
      label="Expected Queueing Time from cross-origin backgrounded frames."/>
  <suffix name="CrossOriginHidden"
      label="Expected Queueing Time from cross-origin offscreen frames."/>
  <suffix name="CrossOriginVisible"
      label="Expected Queueing Time from cross-origin onscreen frames."/>
  <suffix name="MainFrameBackground"
      label="Expected Queueing Time from backgrounded main frames."/>
  <suffix name="MainFrameHidden"
      label="Expected Queueing Time from offscreen main frames."/>
  <suffix name="MainFrameVisible"
      label="Expected Queueing Time from onscreen main frames."/>
  <suffix name="Other"
      label="Expected Queueing Time from events with detached or nonexistent
             frames."/>
  <suffix name="SameOriginBackground"
      label="Expected Queueing Time from same-origin backgrounded frames."/>
  <suffix name="SameOriginHidden"
      label="Expected Queueing Time from same-origin offscreen frames."/>
  <suffix name="SameOriginVisible"
      label="Expected Queueing Time from same-origin onscreen frames."/>
  <affected-histogram
      name="RendererScheduler.ExpectedQueueingTimeByFrameStatus"/>
  <affected-histogram
      name="RendererScheduler.ExpectedQueueingTimeByFrameStatus2"/>
</histogram_suffixes>

<histogram_suffixes
    name="RendererScheduler.ExpectedQueueingTime.TaskQueueSplit" separator=".">
  <suffix name="Compositor"
      label="Expected Queueing Time from the compositor task queue."/>
  <suffix name="Default"
      label="Expected Queueing Time from the default task queue."/>
  <suffix name="DefaultLoading"
      label="Expected Queueing Time from the default loading task queue."/>
  <suffix name="FrameLoading"
      label="Expected Queueing Time from the frame loading task queue."/>
  <suffix name="FramePausable"
      label="Expected Queueing Time from the frame pausable task queue."/>
  <suffix name="FrameThrottleable"
      label="Expected Queueing Time from the frame throttleable task queue."/>
  <suffix name="Other"
      label="Expected Queueing Time from events in any other task queue."/>
  <suffix name="Unthrottled"
      label="Expected Queueing Time from the unthrottled task queue."/>
  <affected-histogram name="RendererScheduler.ExpectedQueueingTimeByTaskQueue"/>
  <affected-histogram
      name="RendererScheduler.ExpectedQueueingTimeByTaskQueue2"/>
</histogram_suffixes>

<histogram_suffixes name="RendererScheduler.MainThreadLoadSplit" separator=".">
  <suffix name="Background"
      label="Main thread load when the renderer is backgrounded. This does
             not include extension renderers."/>
  <suffix name="Background.AfterFifthMinute"
      label="Main thread load when the renderer is backgrounded for longer
             than five minutes. This does not include extension renderers."/>
  <suffix name="Background.AfterFirstMinute"
      label="Main thread load when the renderer is backgrounded for longer
             than one minute. Most of loading tasks are expected to complete
             by then. This does not include extension renderers."/>
  <suffix name="Background.AfterTenthMinute"
      label="Main thread load when the renderer is backgrounded for longer
             than ten minutes. This does not include extension renderers."/>
  <suffix name="Extension" label="This only includes extension renderers"/>
  <suffix name="Extension.Background"
      label="Main thread load when the renderer is backgrounded. This only
             includes extension renderers."/>
  <suffix name="Extension.Foreground"
      label="Main thread load when the renderer is foregrounded. This only
             includes extension renderers."/>
  <suffix name="Foreground"
      label="Main thread load when the renderer is foregrounded. This does
             not include extension renderers."/>
  <suffix name="Foreground.AfterFirstMinute"
      label="Main thread load when the renderer is foregrounded for longer
             than one minute. Most of loading tasks are expected to complete
             by then. This does not include extension renderers."/>
  <affected-histogram name="RendererScheduler.RendererMainThreadLoad5"/>
</histogram_suffixes>

<histogram_suffixes name="RendererScheduler.ProcessVisibilityStateSplit"
    separator=".">
  <suffix name="Background"/>
  <suffix name="Foreground"/>
  <affected-histogram name="RendererScheduler.TaskCPUDurationPerThreadType2"/>
  <affected-histogram name="RendererScheduler.TaskDurationPerTaskType2"/>
  <affected-histogram name="RendererScheduler.TaskDurationPerThreadType2"/>
</histogram_suffixes>

<histogram_suffixes name="RendererScheduler.TaskCountPerTaskLength"
    separator=".">
  <suffix name="LongerThan1s"/>
  <suffix name="LongerThan16ms"/>
  <suffix name="LongerThan50ms"/>
  <suffix name="LongerThan100ms"/>
  <suffix name="LongerThan150ms"/>
  <affected-histogram name="RendererScheduler.TaskCountPerFrameType"/>
  <affected-histogram name="RendererScheduler.TaskCountPerQueueType"/>
</histogram_suffixes>

<histogram_suffixes
    name="RendererScheduler.TaskDurationPerFrameOriginTypeSplit" separator=".">
  <suffix name="DedicatedWorker"/>
  <suffix name="DedicatedWorker.Background"/>
  <affected-histogram name="RendererScheduler.TaskDurationPerFrameOriginType"/>
</histogram_suffixes>

<histogram_suffixes name="RendererScheduler.TaskDurationPerQueueTypeSplit"
    separator=".">
  <suffix name="Background"
      label="Time spent in tasks of a particular queue type when the renderer
             is in the background."/>
  <suffix name="Background.AfterFifthMinute"
      label="Time spent in tasks of a particular queue type starting from the
             sixth minute after backgrounding the renderer. The renderer is
             expected to be mostly idle during this period."/>
  <suffix name="Background.AfterTenthMinute"
      label="Time spent in tasks of a particular type starting from the
             eleventh minute after backgrounding the renderer. The renderer
             is expected to be mostly idle during this period."/>
  <suffix name="Background.FifthMinute"
      label="Time spent in tasks of a particular queue type during the fifth
             minute after backgrounding the renderer."/>
  <suffix name="Background.FirstMinute"
      label="Time spent in tasks of a particular queue type during the first
             minute after backgrounding the renderer. A large amount of
             loading tasks are expected during this period."/>
  <suffix name="Background.FourthMinute"
      label="Time spent in tasks of a particular queue type during the fourth
             minute after backgrounding the renderer."/>
  <suffix name="Background.KeepAlive.AfterFifthMinute"
      label="Time spent in tasks of a particular queue type starting from the
             sixth minute after backgrounding the renderer when keep-alive
             signal is present."/>
  <suffix name="Background.KeepAlive.AfterTenthMinute"
      label="Time spent in tasks of a particular queue type starting from the
             eleventh minute after backgrounding the renderer when keep-alive
             signal is present."/>
  <suffix name="Background.SecondMinute"
      label="Time spent in tasks of a particular queue type during the second
             minute after backgrounding the renderer."/>
  <suffix name="Background.ThirdMinute"
      label="Time spent in tasks of a particular queue type during the third
             minute after backgrounding the renderer."/>
  <suffix name="Foreground"
      label="Time spent in tasks of a particular queue type when the renderer
             is in the foreground. Please note that individual tabs in this
             renderer can be backgrounded."/>
  <suffix name="Foreground.AfterThirdMinute"
      label="Time spent in tasks of a particular queue type starting from the
             fourth minute after foregrounding the renderer."/>
  <suffix name="Foreground.FirstMinute"
      label="Time spent in tasks of a particular queue type during the first
             minute after foregrounding the renderer."/>
  <suffix name="Foreground.SecondMinute"
      label="Time spent in tasks of a particular queue type during the second
             minute after foregrounding the renderer."/>
  <suffix name="Foreground.ThirdMinute"
      label="Time spent in tasks of a particular queue type during the third
             minute after foregrounding the renderer."/>
  <suffix name="Hidden"
      label="Time spent in tasks of a particular queue type when the renderer
             is hidden."/>
  <suffix name="HiddenMusic"
      label="Time spent in tasks of a particular queue type when the renderer
             is hidden and is playing audible sound."/>
  <suffix name="Visible"
      label="Time spent in tasks of a particular queue type when the renderer
             is visible."/>
  <affected-histogram name="RendererScheduler.TaskDurationPerQueueType3"/>
</histogram_suffixes>

<histogram_suffixes name="RendererScheduler.TaskDurationPerTaskTypeSplit"
    separator=".">
  <suffix name="UseCaseInputHandling"/>
  <suffix name="UseCaseLoading"/>
  <suffix name="UseCaseNone"/>
  <affected-histogram name="RendererScheduler.TaskDurationPerTaskType2"/>
</histogram_suffixes>

<histogram_suffixes name="RendererThreadType" separator=".">
  <suffix name="Compositor"
      label="Measurement taken on the compositor thread."/>
  <suffix name="Main" label="Measurement taken on the main/render thread."/>
  <affected-histogram name="AnimatedImage.NumOfFramesSkipped"/>
</histogram_suffixes>

<histogram_suffixes name="RequestMediaKeySystemAccessKeySystems" separator=".">
  <suffix name="ClearKey" label="Requests for the Clear Key key system."/>
  <suffix name="Unknown"
      label="Requests for an unknown or unsupported key system."/>
  <suffix name="Widevine" label="Requests for the Widevine key system."/>
  <affected-histogram name="Media.EME.RequestMediaKeySystemAccess"/>
</histogram_suffixes>

<histogram_suffixes name="RequestThrottlerTypes" separator="_">
  <suffix name="SuggestionFetcher"
      label="Fetcher for content suggestions on mobile NTP">
    <obsolete>
      Deprecated in 10/2016.
    </obsolete>
  </suffix>
  <suffix name="SuggestionFetcherActiveNTPUser"
      label="Fetcher for content suggestions on mobile NTP - active NTP users"/>
  <suffix name="SuggestionFetcherActiveSuggestionsConsumer"
      label="Fetcher for content suggestions on mobile NTP - active
             suggestions consumers"/>
  <suffix name="SuggestionFetcherRareNTPUser"
      label="Fetcher for content suggestions on mobile NTP - rare NTP users"/>
  <suffix name="SuggestionThumbnailFetcher"
      label="Fetcher for article thumbnails on mobile NTP"/>
  <affected-histogram name="NewTabPage.RequestThrottler.PerDay"/>
  <affected-histogram name="NewTabPage.RequestThrottler.PerDayInteractive"/>
  <affected-histogram name="NewTabPage.RequestThrottler.RequestStatus"/>
</histogram_suffixes>

<histogram_suffixes name="ResourceLoaderSizeSlice" separator=".">
  <suffix name="InliningApplicable"
      label="Resources that the chunk inlining is applicable.">
    <obsolete>
      This experiment was turned down, see https://crbug.com/703188.
    </obsolete>
  </suffix>
  <suffix name="LT_2kB" label="Sliced for resources smaller than 2kB."/>
  <suffix name="LT_32kB"
      label="Sliced for resources smaller than 32kB and larger than 2kB."/>
  <suffix name="LT_512kB"
      label="Sliced for resources smaller than 512kB and larger than 32kB."/>
  <suffix name="Over_512kB" label="Sliced for resources larger than 512kB."/>
  <affected-histogram name="Net.ResourceLoader.ResponseStartToEnd"/>
</histogram_suffixes>

<histogram_suffixes name="ResourceLoadScheduler.FrameType" separator=".">
  <suffix name="MainframeNotThrottled" label="Main frame, not throttled"/>
  <suffix name="MainframePartiallyThrottled"
      label="Main frame, partially throttled">
    <obsolete>
      This experiment was turned down, see https://crbug.com/768325.
    </obsolete>
  </suffix>
  <suffix name="MainframeThrottled" label="Main frame, throttled"/>
  <suffix name="SubframeNotThrottled" label="Sub frame, not throttled"/>
  <suffix name="SubframePartiallyThrottled"
      label="Sub frame, partially throttled">
    <obsolete>
      This experiment was turned down, see https://crbug.com/768325.
    </obsolete>
  </suffix>
  <suffix name="SubframeThrottled" label="Sub frame, throttled"/>
  <affected-histogram name="Blink.ResourceLoadScheduler.DecodedBytes"/>
  <affected-histogram name="Blink.ResourceLoadScheduler.PeakRequests"/>
  <affected-histogram name="Blink.ResourceLoadScheduler.TotalDecodedBytes"/>
  <affected-histogram name="Blink.ResourceLoadScheduler.TotalRequestCount"/>
  <affected-histogram name="Blink.ResourceLoadScheduler.TotalTrafficBytes"/>
  <affected-histogram name="Blink.ResourceLoadScheduler.TrafficBytes"/>
</histogram_suffixes>

<histogram_suffixes name="ResourcePrefetchPredictorNetworkTypePrefetch"
    separator=".">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <suffix name="NotPrefetched"
      label="Number of non-prefetched pages on each type of network."/>
  <suffix name="Prefetched"
      label="Number of prefetched pages on each type of network."/>
  <affected-histogram name="ResourcePrefetchPredictor.NetworkType"/>
</histogram_suffixes>

<histogram_suffixes name="ResourcePrefetchPredictorPLTNetworkTypes"
    separator="_">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <suffix name="2G" label="Page load time in 2G network."/>
  <suffix name="3G" label="Page load time in 3G network."/>
  <suffix name="4G" label="Page load time in 4G network."/>
  <suffix name="Bluetooth" label="Page load time in bluetooth network."/>
  <suffix name="Cellular" label="Page load time in cellular network."/>
  <suffix name="Ethernet" label="Page load time in Ethernet."/>
  <suffix name="None" label="Page load time without network connection."/>
  <suffix name="Unknown" label="Page load time in unknown type of network."/>
  <suffix name="WiFi" label="Page load time in WiFi network."/>
  <affected-histogram name="ResourcePrefetchPredictor.PLT"/>
  <affected-histogram name="ResourcePrefetchPredictor.PLT.NotPrefetched"/>
  <affected-histogram name="ResourcePrefetchPredictor.PLT.Prefetched"/>
  <affected-histogram name="ResourcePrefetchPredictor.PLT.Prefetched.Host"/>
  <affected-histogram name="ResourcePrefetchPredictor.PLT.Prefetched.Url"/>
</histogram_suffixes>

<histogram_suffixes name="ResourcePrefetchPredictorPLTPrefetch" separator=".">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <suffix name="NotPrefetched"
      label="Page load time for non-prefetched pages."/>
  <suffix name="Prefetched" label="Page load time for prefetched pages."/>
  <affected-histogram name="ResourcePrefetchPredictor.PLT"/>
</histogram_suffixes>

<histogram_suffixes name="ResourcePrefetchPredictorPLTPrefetchType"
    separator=".">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <suffix name="Host"
      label="Page load time for prefetched pages based on main frame host."/>
  <suffix name="Url"
      label="Page load time for prefetched pages based on main frame URL."/>
  <affected-histogram name="ResourcePrefetchPredictor.PLT.Prefetched"/>
</histogram_suffixes>

<histogram_suffixes name="ResourcePrefetchPredictorPredictedStatsVariedMax"
    separator="_">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <suffix name="25"
      label="Covers statistics when the maximum subresources that can be
             prefetched is set to 25."/>
  <suffix name="50"
      label="Covers statistics when the maximum subresources that can be
             prefetched is set to 50."/>
  <affected-histogram
      name="ResourcePrefetchPredictor.Host.PredictedPrefetchCount"/>
  <affected-histogram
      name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromCache_Count"/>
  <affected-histogram
      name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromCache_PercentOfTotalPrefetched"/>
  <affected-histogram
      name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetwork_Count"/>
  <affected-histogram
      name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetwork_PercentOfTotalPrefetched"/>
  <affected-histogram
      name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetworkPercentOfTotalFromNetwork"/>
  <affected-histogram
      name="ResourcePrefetchPredictor.Host.PredictedPrefetchMisses_Count"/>
  <affected-histogram
      name="ResourcePrefetchPredictor.Host.PredictedPrefetchMisses_PercentOfTotalPrefetched"/>
  <affected-histogram
      name="ResourcePrefetchPredictor.Url.PredictedPrefetchCount"/>
  <affected-histogram
      name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromCache_Count"/>
  <affected-histogram
      name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromCache_PercentOfTotalPrefetched"/>
  <affected-histogram
      name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetwork_Count"/>
  <affected-histogram
      name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetwork_PercentOfTotalPrefetched"/>
  <affected-histogram
      name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetworkPercentOfTotalFromNetwork"/>
  <affected-histogram
      name="ResourcePrefetchPredictor.Url.PredictedPrefetchMisses_Count"/>
  <affected-histogram
      name="ResourcePrefetchPredictor.Url.PredictedPrefetchMisses_PercentOfTotalPrefetched"/>
</histogram_suffixes>

<histogram_suffixes name="ResourcePrefetchPredictorPredictedStatTypes"
    separator="_">
  <obsolete>
    Deprecated September 2016. No longer recorded.
  </obsolete>
  <suffix name="Count" label="Predicted accuracy stats as the raw numbers."/>
  <suffix name="PercentOfTotalPrefetched"
      label="Predicted accuracy stats as percent of total resources
             prefetched."/>
  <affected-histogram
      name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromCache"/>
  <affected-histogram
      name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetwork"/>
  <affected-histogram
      name="ResourcePrefetchPredictor.Host.PredictedPrefetchMisses"/>
  <affected-histogram
      name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromCache"/>
  <affected-histogram
      name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetwork"/>
  <affected-histogram
      name="ResourcePrefetchPredictor.Url.PredictedPrefetchMisses"/>
</histogram_suffixes>

<histogram_suffixes name="ResourceSchedulerClientBreakDown" separator="_">
  <obsolete>
    Deprecated 1/2016
  </obsolete>
  <suffix name="1Client" label="One Client in the ResourceScheduler."/>
  <suffix name="Max5Clients"
      label="Two to five Clients in the ResourceScheduler."/>
  <suffix name="Max15Clients"
      label="Six to fifteen Clients in the ResourceScheduler."/>
  <suffix name="Max30Clients"
      label="Sixteen to thirty Clients in the ResourceScheduler."/>
  <suffix name="Over30Clients"
      label="Over thirty Clients in the ResourceScheduler."/>
  <affected-histogram name="ResourceScheduler.ClientLoadedTime.Active"/>
  <affected-histogram name="ResourceScheduler.ClientLoadedTime.Background"/>
  <affected-histogram name="ResourceScheduler.ClientLoadedTime.Other"/>
  <affected-histogram
      name="ResourceScheduler.ClientLoadedTime.Other.SwitchedToActive"/>
</histogram_suffixes>

<histogram_suffixes name="ResourceSchedulerPeakDelayableRequestsInFlight"
    separator=".">
  <suffix name="LayoutBlocking"
      label="Records the highest number of delayable requests that were
             in-flight at the same time when a layout blocking request was
             in-flight. Recorded every time a layout blocking request
             finishes."/>
  <suffix name="NonDelayable"
      label="Records the highest number of delayable requests that were
             in-flight at the same time when a non-delayable request was
             in-flight. Recorded every time a non-delayable request finishes."/>
  <affected-histogram name="ResourceScheduler.PeakDelayableRequestsInFlight"/>
</histogram_suffixes>

<histogram_suffixes name="ResourceSchedulerRequestsCount" separator=".">
  <suffix name="All" label="All requests in-flight were counted."/>
  <suffix name="Delayable" label="Delayable requests in-flight were counted."/>
  <suffix name="NonDelayable"
      label="Non-delayable requests in-flight were counted."/>
  <suffix name="TotalLayoutBlocking"
      label="Layout blocking requests in-flight were counted."/>
  <affected-histogram name="ResourceScheduler.RequestsCount"/>
</histogram_suffixes>

<histogram_suffixes name="ResourceType" separator=".">
  <suffix name="CSSStyleSheet"/>
  <suffix name="Font"/>
  <suffix name="Image"/>
  <suffix name="ImportResource"/>
  <suffix name="LinkPrefetch"/>
  <suffix name="LinkSubresource"/>
  <suffix name="MainResource"/>
  <suffix name="Manifest"/>
  <suffix name="Media"/>
  <suffix name="Raw"/>
  <suffix name="Script"/>
  <suffix name="SVGDocument"/>
  <suffix name="TextTrack"/>
  <suffix name="XSLStyleSheet"/>
  <affected-histogram name="Blink.MemoryCache.RevalidationPolicy"/>
  <affected-histogram name="Blink.MemoryCache.RevalidationPolicy.Dead"/>
  <affected-histogram name="Blink.MemoryCache.RevalidationPolicy.Preload"/>
  <affected-histogram name="PreloadScanner.Counts"/>
  <affected-histogram name="PreloadScanner.Counts.Miss"/>
  <affected-histogram name="PreloadScanner.Counts2"/>
  <affected-histogram name="PreloadScanner.Counts2.Miss"/>
</histogram_suffixes>

<histogram_suffixes name="RoamSecurityType" separator=".">
  <suffix name="EAP"
      label="Records roams in a network using 802.1X authentication without
             Fast Transition"/>
  <suffix name="FTEAP"
      label="Records roams in a network using 802.1X authentication with Fast
             Transition"/>
  <suffix name="FTPSK"
      label="Records roams in a network using PSK authentication with Fast
             Transition"/>
  <suffix name="PSK"
      label="Records roams in a network using PSK authentication without Fast
             Transition"/>
  <affected-histogram name="Network.Shill.WiFi.RoamComplete"/>
  <affected-histogram name="Network.Shill.WiFi.RoamTime"/>
  <affected-histogram name="Network.Shill.WiFi.SessionLength"/>
</histogram_suffixes>

<histogram_suffixes name="SafeBrowsing.V4Store.Metrics" separator=".">
  <suffix name="AnyIpMalware" label="(Obsolete, not recorded)"/>
  <suffix name="CertCsdDownloadWhitelist"/>
  <suffix name="ChromeExtMalware"/>
  <suffix name="ChromeFilenameClientIncident" label="(Obsolete, not recorded)"/>
  <suffix name="ChromeUrlClientIncident"/>
  <suffix name="IpMalware"/>
  <suffix name="UrlCsdDownloadWhitelist"/>
  <suffix name="UrlCsdWhitelist"/>
  <suffix name="UrlMalBin"/>
  <suffix name="UrlMalware"/>
  <suffix name="UrlSoceng"/>
  <suffix name="UrlSubresourceFilter"/>
  <suffix name="UrlSuspiciousSite"/>
  <suffix name="UrlSuspiciousSiteId" label="(Obsolete, UrlSuspiciousSite)"/>
  <suffix name="UrlUws"/>
  <affected-histogram name="SafeBrowsing.V4Database.Size"/>
  <affected-histogram
      name="SafeBrowsing.V4ProcessFullUpdate.ApplyUpdate.Result"/>
  <affected-histogram name="SafeBrowsing.V4ProcessFullUpdate.ApplyUpdate.Time"/>
  <affected-histogram
      name="SafeBrowsing.V4ProcessFullUpdate.DecodeAdditions.Result"/>
  <affected-histogram
      name="SafeBrowsing.V4ProcessFullUpdate.DecodeAdditions.Time"/>
  <affected-histogram name="SafeBrowsing.V4ProcessFullUpdate.MergeUpdate.Time"/>
  <affected-histogram
      name="SafeBrowsing.V4ProcessPartialUpdate.ApplyUpdate.Result"/>
  <affected-histogram
      name="SafeBrowsing.V4ProcessPartialUpdate.ApplyUpdate.Time"/>
  <affected-histogram
      name="SafeBrowsing.V4ProcessPartialUpdate.DecodeAdditions.Result"/>
  <affected-histogram
      name="SafeBrowsing.V4ProcessPartialUpdate.DecodeAdditions.Time"/>
  <affected-histogram
      name="SafeBrowsing.V4ProcessPartialUpdate.DecodeRemovals.Result"/>
  <affected-histogram
      name="SafeBrowsing.V4ProcessPartialUpdate.DecodeRemovals.Time"/>
  <affected-histogram
      name="SafeBrowsing.V4ProcessPartialUpdate.MergeUpdate.Time"/>
  <affected-histogram name="SafeBrowsing.V4ReadFromDisk.ApplyUpdate.Result"/>
  <affected-histogram name="SafeBrowsing.V4ReadFromDisk.ApplyUpdate.Time"/>
  <affected-histogram
      name="SafeBrowsing.V4ReadFromDisk.DecodeAdditions.Result"/>
  <affected-histogram name="SafeBrowsing.V4ReadFromDisk.DecodeAdditions.Time"/>
  <affected-histogram name="SafeBrowsing.V4ReadFromDisk.MergeUpdate.Time"/>
  <affected-histogram name="SafeBrowsing.V4UnusedStoreFileExists"/>
</histogram_suffixes>

<histogram_suffixes name="SafeBrowsing.V4Store.V3.Metrics" separator=".">
  <suffix name="Bloom"/>
  <suffix name="BloomPrefixSet"/>
  <suffix name="CsdWhitelist"/>
  <suffix name="Download"/>
  <suffix name="DownloadWhitelist"/>
  <suffix name="ExtensionBlacklist"/>
  <suffix name="InclusionWhitelist"/>
  <suffix name="IPBlacklist"/>
  <suffix name="ModuleWhitelist"/>
  <suffix name="ResourceBlacklist"/>
  <suffix name="Side-EffectFreeWhitelist"/>
  <suffix name="UwSList"/>
  <suffix name="UwSListPrefixSet"/>
  <affected-histogram name="SafeBrowsing.V4UnusedStoreFileExists.V3"/>
</histogram_suffixes>

<histogram_suffixes name="SafeBrowsingLists" separator=".">
  <suffix name="Browse" label="Browse"/>
  <suffix name="CsdWhitelist" label="CsdWhitelist"/>
  <suffix name="Download" label="Download"/>
  <suffix name="DownloadWhitelist" label="DownloadWhitelist"/>
  <suffix name="ExtensionBlacklist" label="ExtensionBlacklist"/>
  <suffix name="InclusionWhitelist" label="InclusionWhitelist"/>
  <suffix name="IPBlacklist" label="IPBlacklist"/>
  <suffix name="ResourceBlacklist" label="ResourceBlacklist"/>
  <suffix name="SideEffectFreeWhitelist" label="SideEffectFreeWhitelist">
    <obsolete>
      Deprecated 4/2015.
    </obsolete>
  </suffix>
  <suffix name="UnwantedSoftware" label="UnwantedSoftware"/>
  <affected-histogram name="SB2.DatabaseSizeKilobytes"/>
  <affected-histogram name="SB2.PrefixSetSizeKilobytes"/>
</histogram_suffixes>

<histogram_suffixes name="SafeBrowsingScoutGroupValues" separator=".">
  <suffix name="NoScoutGroup"
      label="User sees the legacy Extended Reporting opt-in"/>
  <suffix name="ScoutGroup"
      label="User sees the new Extended Reporting opt-in"/>
  <affected-histogram name="SafeBrowsing.Pref.Scout"/>
</histogram_suffixes>

<histogram_suffixes name="SafeBrowsingScoutInterstitialDecisions" separator=".">
  <suffix name="First_Disabled"
      label="User saw opt-in for first time and disabled it"/>
  <suffix name="First_Enabled"
      label="User saw opt-in for first time and enabled it"/>
  <suffix name="First_LeftUnchecked"
      label="User saw opt-in for first time and left it unchecked"/>
  <suffix name="Repeat_Disabled"
      label="User saw opt-in again and changed it to disabled"/>
  <suffix name="Repeat_Enabled"
      label="User saw opt-in again and changed it to enabled"/>
  <suffix name="Repeat_LeftDisabled"
      label="User saw opt-in again and left it disabled"/>
  <suffix name="Repeat_LeftEnabled"
      label="User saw opt-in again and left it enabled"/>
  <affected-histogram name="SafeBrowsing.Pref.Scout.Decision"/>
</histogram_suffixes>

<histogram_suffixes name="SafeBrowsingScoutOptInLocations" separator=".">
  <suffix name="AndroidSettings" label="The settings UI on Android"/>
  <suffix name="ChromeSettings" label="The settings UI on Desktop"/>
  <suffix name="DownloadPopup" label="The Download Feedback popup"/>
  <suffix name="SecurityInterstitial"
      label="One of the Security Interstitials (malware, SSL, etc)"/>
  <affected-histogram name="SafeBrowsing.Pref.Scout.SetPref.SBER1Pref"/>
  <affected-histogram name="SafeBrowsing.Pref.Scout.SetPref.SBER2Pref"/>
</histogram_suffixes>

<histogram_suffixes name="SafeBrowsingScoutPrefValues" separator=".">
  <suffix name="SBER1Pref" label="Value of the legacy Extended Reporting pref"/>
  <suffix name="SBER2Pref" label="Value of the new Extended Reporting pref"/>
  <affected-histogram name="SafeBrowsing.Pref.SawInterstitial"/>
  <affected-histogram name="SafeBrowsing.Pref.Scout.NoScoutGroup"/>
  <affected-histogram name="SafeBrowsing.Pref.Scout.ScoutGroup"/>
  <affected-histogram name="SafeBrowsing.Pref.Scout.SetPref"/>
</histogram_suffixes>

<histogram_suffixes name="SafeBrowsingWebSocketElapsed" separator=".">
  <suffix name="Abandoned"
      label="Connection abandoned, or interstitial displayed and user did not
             proceed to site"/>
  <suffix name="Blocked" label="Failed SafeBrowsing check and blocked"/>
  <suffix name="Safe"
      label="Passed SafeBrowsing check, or blocked and interstitial clicked
             through"/>
  <affected-histogram name="SafeBrowsing.WebSocket.Elapsed"/>
</histogram_suffixes>

<histogram_suffixes name="SameVersionStartupCounts" separator=".">
  <suffix name="1" label="1st startup with same version"/>
  <suffix name="2" label="2nd startup with same version"/>
  <suffix name="3" label="3rd startup with same version"/>
  <suffix name="4" label="4th startup with same version"/>
  <suffix name="5" label="5th startup with same version"/>
  <suffix name="6" label="6th startup with same version"/>
  <suffix name="7" label="7th startup with same version"/>
  <suffix name="8" label="8th startup with same version"/>
  <suffix name="9" label="9th startup with same version"/>
  <suffix name="Over" label="&gt; 9th startup with same version"/>
  <affected-histogram name="Startup.BrowserMainToRendererMain"/>
  <affected-histogram name="Startup.BrowserMessageLoopStartHardFaultCount"/>
  <affected-histogram name="Startup.BrowserMessageLoopStartTime"/>
  <affected-histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry"/>
  <affected-histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry2"/>
  <affected-histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry3"/>
  <affected-histogram name="Startup.BrowserOpenTabs"/>
  <affected-histogram name="Startup.BrowserWindowDisplay"/>
  <affected-histogram name="Startup.FirstWebContents.MainFrameLoad2"/>
  <affected-histogram name="Startup.FirstWebContents.MainNavigationFinished"/>
  <affected-histogram name="Startup.FirstWebContents.MainNavigationStart"/>
  <affected-histogram name="Startup.FirstWebContents.NonEmptyPaint2"/>
  <affected-histogram name="Startup.LoadTime.ExeMainToDllMain"/>
  <affected-histogram name="Startup.LoadTime.ExeMainToDllMain2"/>
  <affected-histogram name="Startup.LoadTime.ProcessCreateToDllMain"/>
  <affected-histogram name="Startup.LoadTime.ProcessCreateToDllMain2"/>
  <affected-histogram name="Startup.LoadTime.ProcessCreateToExeMain"/>
  <affected-histogram name="Startup.LoadTime.ProcessCreateToExeMain2"/>
  <affected-histogram name="Startup.SystemUptime"/>
  <affected-histogram name="Startup.Temperature"/>
  <affected-histogram name="Startup.TimeSinceLastStartup"/>
</histogram_suffixes>

<histogram_suffixes name="SB2ResourceTypes" separator=".">
  <suffix name="Checked"
      label="Resources that were checked. Logged before the resource starts
             loading and again for each redirect."/>
  <suffix name="Safe"
      label="Resources that were checked and deemed safe. Logged when the URL
             check is completed.">
    <obsolete>
      Deprecated in 9/2016.
    </obsolete>
  </suffix>
  <suffix name="Skipped"
      label="Resources that were not checked because they are not active-ish
             content types. Only used on mobile. Logged before the resource
             request starts."/>
  <suffix name="Unsafe"
      label="Resources that were checked and classified as unsafe. Logged
             when the URL check is completed."/>
  <suffix name="UnsafePrefetchCanceled"
      label="Pre-fetched resources that were checked and classified as
             unsafe. Logged as the request is canceled."/>
  <affected-histogram name="SB2.ResourceTypes"/>
  <affected-histogram name="SB2.ResourceTypes2"/>
</histogram_suffixes>

<histogram_suffixes name="SBInterstitial" separator="_">
  <obsolete>
    deprecated November 10 2012 crrev.com/167056
  </obsolete>
  <suffix name="V1" label="version 1 interstitial"/>
  <suffix name="V2" label="version 2 interstitial"/>
  <affected-histogram name="SB2.InterstitialAction"/>
  <affected-histogram name="SB2.MalwareInterstitialTimeClosed"/>
  <affected-histogram name="SB2.MalwareInterstitialTimeDiagnostic"/>
  <affected-histogram name="SB2.MalwareInterstitialTimeLearnMore"/>
  <affected-histogram name="SB2.MalwareInterstitialTimePrivacyPolicy"/>
  <affected-histogram name="SB2.MalwareInterstitialTimeProceed"/>
  <affected-histogram name="SB2.MalwareInterstitialTimeTakeMeBack"/>
</histogram_suffixes>

<histogram_suffixes name="SchedulerDarkMatterMetrics" separator=".">
  <suffix name="Tracked"
      label="Total duration of all tasks managed by the scheduler."/>
  <suffix name="Untracked"
      label="Total execution time unaccounted for by the scheduler.
             Calculated as the difference between total thread time and the
             sum of all tasks managed by the scheduler."/>
  <affected-histogram name="Scheduler.Experimental.Renderer.CPUTimePerThread"/>
</histogram_suffixes>

<histogram_suffixes name="SchedulerTotalDurationHistograms" separator=".">
  <suffix name="Negative"/>
  <suffix name="Positive"/>
  <affected-histogram
      name="Scheduler.Experimental.Renderer.TotalTime.Wall.MainThread"/>
</histogram_suffixes>

<histogram_suffixes name="ScreenshareLayerStats" separator=".">
  <suffix name="FrameRate"
      label="Frames per second sent, in fps. The value is reported when a
             stream is removed and is calculated as the total number of
             frames in this layer, divided by the duration of the call."/>
  <suffix name="Qp"
      label="Average quantizer (qp) of frames sent. The value is reported
             when a stream is removed and is calculated, for this layer, as
             the sum of all qp values divided the number of frames."/>
  <suffix name="TargetBitrate"
      label="Average target bitrate in kbps. The value is reported when a
             stream is removed and is calculated as the sum of all target
             bitrates for this layer (sampled after frame has been encoded)
             divided by the total number of frames for this layer."/>
  <affected-histogram name="WebRTC.Video.Screenshare.Layer0"/>
  <affected-histogram name="WebRTC.Video.Screenshare.Layer1"/>
</histogram_suffixes>

<histogram_suffixes name="ScrollUpdateHandledThread" separator="_">
  <suffix name="Impl" label="ScrollUpdate handled on impl thread"/>
  <suffix name="Main" label="ScrollUpdate handled on main thread"/>
  <affected-histogram name="Event.Latency.Scroll.Wheel.TimeToHandled2"/>
  <affected-histogram
      name="Event.Latency.ScrollBegin.Touch.HandledToRendererSwap2"/>
  <affected-histogram name="Event.Latency.ScrollBegin.Touch.TimeToHandled2"/>
  <affected-histogram
      name="Event.Latency.ScrollBegin.Wheel.HandledToRendererSwap2"/>
  <affected-histogram name="Event.Latency.ScrollBegin.Wheel.TimeToHandled2"/>
  <affected-histogram
      name="Event.Latency.ScrollInertial.Touch.HandledToRendererSwap2"/>
  <affected-histogram name="Event.Latency.ScrollInertial.Touch.TimeToHandled2"/>
  <affected-histogram name="Event.Latency.ScrollUpdate.HandledToRendererSwap"/>
  <affected-histogram
      name="Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2"/>
  <affected-histogram name="Event.Latency.ScrollUpdate.Touch.TimeToHandled2"/>
  <affected-histogram name="Event.Latency.ScrollUpdate.TouchToHandled"/>
  <affected-histogram
      name="Event.Latency.ScrollUpdate.Wheel.HandledToRendererSwap2"/>
  <affected-histogram name="Event.Latency.ScrollUpdate.Wheel.TimeToHandled2"/>
</histogram_suffixes>

<histogram_suffixes name="SearchEnginePromoDeviceType" separator=".">
  <suffix name="ExistingDevice"/>
  <suffix name="NewDevice"/>
  <affected-histogram name="Search.SearchEngineListedInPromoDialog"/>
  <affected-histogram name="Search.SearchEngineSelectionInPromoDialog"/>
</histogram_suffixes>

<histogram_suffixes name="SearchEnginePromoOrdering" separator="."
    ordering="prefix,2">
  <suffix name="First"/>
  <suffix name="Second"/>
  <suffix name="Third"/>
  <affected-histogram
      name="Search.SearchEngineListedInPromoDialog.ExistingDevice"/>
  <affected-histogram name="Search.SearchEngineListedInPromoDialog.NewDevice"/>
</histogram_suffixes>

<histogram_suffixes name="SecurityInterstitialSBType" separator="."
    ordering="prefix">
  <suffix name="harmful"/>
  <suffix name="harmful_subresource"/>
  <suffix name="malware"/>
  <suffix name="malware_subresource"/>
  <suffix name="phishing"/>
  <suffix name="phishing_subresource"/>
  <suffix name="social_engineering_ads"/>
  <suffix name="social_engineering_ads_subresource"/>
  <suffix name="social_engineering_landing"/>
  <suffix name="social_engineering_landing_subresource"/>
  <affected-histogram name="interstitial.decision"/>
  <affected-histogram name="interstitial.decision.repeat_visit"/>
  <affected-histogram name="interstitial.interaction"/>
</histogram_suffixes>

<histogram_suffixes name="SecurityInterstitialSBWithSourceType" separator=".">
  <suffix name="from_client_side_detection"
      label="Interstitial for a resource classified as unsafe by the client
             side detection."/>
  <suffix name="from_data_saver"
      label="Interstitial for a resource classified as unsafe by the Data
             Saver service."/>
  <suffix name="from_device"
      label="Interstitial for a resource classified as unsafe by the Safe
             Browsing database via either
             {Local,Remote}SafeBrowsingDatabaseManager."/>
  <suffix name="from_device_v4"
      label="Interstitial for a resource classified as unsafe by the Safe
             Browsing database version 4 via either
             {Local,Remote}SafeBrowsingDatabaseManager."/>
  <affected-histogram name="interstitial.harmful.decision"/>
  <affected-histogram name="interstitial.harmful.decision.repeat_visit"/>
  <affected-histogram name="interstitial.harmful.interaction"/>
  <affected-histogram name="interstitial.harmful_subresource.decision"/>
  <affected-histogram
      name="interstitial.harmful_subresource.decision.repeat_visit"/>
  <affected-histogram name="interstitial.harmful_subresource.interaction"/>
  <affected-histogram name="interstitial.malware.decision"/>
  <affected-histogram name="interstitial.malware.decision.repeat_visit"/>
  <affected-histogram name="interstitial.malware.interaction"/>
  <affected-histogram name="interstitial.malware_subresource.decision"/>
  <affected-histogram
      name="interstitial.malware_subresource.decision.repeat_visit"/>
  <affected-histogram name="interstitial.malware_subresource.interaction"/>
  <affected-histogram name="interstitial.phishing.decision"/>
  <affected-histogram name="interstitial.phishing.decision.repeat_visit"/>
  <affected-histogram name="interstitial.phishing.interaction"/>
  <affected-histogram name="interstitial.phishing_subresource.decision"/>
  <affected-histogram
      name="interstitial.phishing_subresource.decision.repeat_visit"/>
  <affected-histogram name="interstitial.phishing_subresource.interaction"/>
  <affected-histogram name="interstitial.social_engineering_ads.decision"/>
  <affected-histogram
      name="interstitial.social_engineering_ads.decision.repeat_visit"/>
  <affected-histogram name="interstitial.social_engineering_ads.interaction"/>
  <affected-histogram
      name="interstitial.social_engineering_ads_subresource.decision"/>
  <affected-histogram
      name="interstitial.social_engineering_ads_subresource.decision.repeat_visit"/>
  <affected-histogram
      name="interstitial.social_engineering_ads_subresource.interaction"/>
  <affected-histogram name="interstitial.social_engineering_landing.decision"/>
  <affected-histogram
      name="interstitial.social_engineering_landing.decision.repeat_visit"/>
  <affected-histogram
      name="interstitial.social_engineering_landing.interaction"/>
  <affected-histogram
      name="interstitial.social_engineering_landing_subresource.decision"/>
  <affected-histogram
      name="interstitial.social_engineering_landing_subresource.decision.repeat_visit"/>
  <affected-histogram
      name="interstitial.social_engineering_landing_subresource.interaction"/>
</histogram_suffixes>

<histogram_suffixes name="SecurityInterstitialSSLType" separator="."
    ordering="prefix">
  <suffix name="bad_clock"/>
  <suffix name="ssl_nonoverridable"/>
  <suffix name="ssl_overridable"/>
  <affected-histogram name="interstitial.decision"/>
  <affected-histogram name="interstitial.decision.repeat_visit"/>
  <affected-histogram name="interstitial.interaction"/>
</histogram_suffixes>

<histogram_suffixes name="SecurityLevel" separator=".">
  <owner>cthomp@chromium.org</owner>
  <owner>estark@chromium.org</owner>
  <suffix name="DANGEROUS" label="SecurityLevel is DANGEROUS."/>
  <suffix name="EV_SECURE" label="SecurityLevel is EV_SECURE."/>
  <suffix name="HTTP_SHOW_WARNING" label="SecurityLevel is HTTP_SHOW_WARNING."/>
  <suffix name="NONE" label="SecurityLevel is NONE."/>
  <suffix name="OTHER" label="Unknown SecurityLevel."/>
  <suffix name="SECURE" label="SecurityLevel is SECURE."/>
  <suffix name="SECURE_WITH_POLICY_INSTALLED_CERT"
      label="SecurityLevel is SECURE_WITH_POLICY_INSTALLED_CERT."/>
  <affected-histogram name="Autofill.SaveCreditCardPrompt.Local"/>
  <affected-histogram name="Autofill.SaveCreditCardPrompt.Upload"/>
  <affected-histogram name="Autofill.UserHappiness.Address"/>
  <affected-histogram name="Autofill.UserHappiness.CreditCard"/>
  <affected-histogram name="Autofill.UserHappiness.Password"/>
  <affected-histogram name="Autofill.UserHappiness.Unknown"/>
  <affected-histogram name="Security.PageEndReason"/>
  <affected-histogram name="Security.PageInfo.TimeOpen"/>
  <affected-histogram name="Security.PageInfo.TimeOpen.Action"/>
  <affected-histogram name="Security.PageInfo.TimeOpen.NoAction"/>
  <affected-histogram name="Security.SiteEngagement"/>
  <affected-histogram name="Security.SiteEngagementDelta"/>
  <affected-histogram name="Security.TimeOnPage"/>
</histogram_suffixes>

<histogram_suffixes name="ServiceWorker.ContextRequestType" separator=".">
  <suffix name="InstalledWorker.ImportedScript"
      label="Imported script for an installed worker"/>
  <suffix name="InstalledWorker.MainScript"
      label="Main script for an installed worker"/>
  <suffix name="NewWorker.ImportedScript"
      label="Imported script for new (not installed) worker"/>
  <suffix name="NewWorker.MainScript"
      label="Main script for a new (not installed) worker"/>
  <affected-histogram name="ServiceWorker.ContextRequestHandlerStatus"/>
</histogram_suffixes>

<histogram_suffixes name="ServiceWorker.EventType" separator="_">
  <suffix name="ACTIVATE" label="ACTIVATE"/>
  <suffix name="COOKIE_CHANGE" label="COOKIE_CHANGE"/>
  <suffix name="FETCH_MAIN_FRAME" label="FETCH_MAIN_FRAME"/>
  <suffix name="FETCH_SHARED_WORKER" label="FETCH_SHARED_WORKER"/>
  <suffix name="FETCH_SUB_FRAME" label="FETCH_SUB_FRAME"/>
  <suffix name="FETCH_SUB_RESOURCE" label="FETCH_SUB_RESOURCE"/>
  <suffix name="FOREIGN_FETCH" label="FOREIGN_FETCH"/>
  <suffix name="GEOFENCING" label="GEOFENCING">
    <obsolete>
      Deprecated as of 5/2016 because geofencing got removed.
    </obsolete>
  </suffix>
  <suffix name="INSTALL" label="INSTALL"/>
  <suffix name="MESSAGE" label="MESSAGE"/>
  <suffix name="NAVIGATION_HINT" label="NAVIGATION_HINT"/>
  <suffix name="NAVIGATION_HINT_LINK_MOUSE_DOWN"
      label="NAVIGATION_HINT_LINK_MOUSE_DOWN">
    <obsolete>
      This experiment was turned down, see https://crbug.com/616502.
    </obsolete>
  </suffix>
  <suffix name="NAVIGATION_HINT_LINK_TAP_DOWN"
      label="NAVIGATION_HINT_LINK_TAP_DOWN">
    <obsolete>
      This experiment was turned down, see https://crbug.com/616502.
    </obsolete>
  </suffix>
  <suffix name="NAVIGATION_HINT_LINK_TAP_UNCONFIRMED"
      label="NAVIGATION_HINT_LINK_TAP_UNCONFIRMED">
    <obsolete>
      This experiment was turned down, see https://crbug.com/616502.
    </obsolete>
  </suffix>
  <suffix name="NOTIFICATION_CLICK" label="NOTIFICATION_CLICK"/>
  <suffix name="NOTIFICATION_CLOSE" label="NOTIFICATION_CLOSE"/>
  <suffix name="PUSH" label="PUSH"/>
  <suffix name="SYNC" label="SYNC"/>
  <suffix name="UNKNOWN" label="UNKNOWN"/>
  <affected-histogram name="ServiceWorker.EventDispatchingDelay"/>
  <affected-histogram name="ServiceWorker.StartWorker.StatusByPurpose"/>
  <affected-histogram name="ServiceWorker.StartWorker.Time_DuringStartup"/>
  <affected-histogram
      name="ServiceWorker.StartWorker.Time_ExistingReadyProcess"/>
  <affected-histogram
      name="ServiceWorker.StartWorker.Time_ExistingUnreadyProcess"/>
  <affected-histogram name="ServiceWorker.StartWorker.Time_NewProcess"/>
</histogram_suffixes>

<histogram_suffixes name="ServiceWorker.FailureStreak" separator="_">
  <suffix name="1" label="Failed one time."/>
  <suffix name="2" label="Failed two times."/>
  <suffix name="3" label="Failed three times."/>
  <affected-histogram name="ServiceWorker.StartWorker.AfterFailureStreak"/>
</histogram_suffixes>

<histogram_suffixes name="ServiceWorker.NavigationHint" separator=".">
  <obsolete>
    This experiment was turned down, see https://crbug.com/616502.
  </obsolete>
  <suffix name="LINK_MOUSE_DOWN" label="LINK_MOUSE_DOWN"/>
  <suffix name="LINK_TAP_DOWN" label="LINK_TAP_DOWN"/>
  <suffix name="LINK_TAP_UNCONFIRMED" label="LINK_TAP_UNCONFIRMED"/>
  <affected-histogram name="ServiceWorker.NavigationHintPrecision"/>
</histogram_suffixes>

<histogram_suffixes name="ServiceWorker.NavigationHintLatency" separator="_">
  <suffix name="IsRunningNavigationHintTask"
      label="Starting a service worker for a navigation hint.">
    <obsolete>
      This experiment was turned down, see https://crbug.com/616502.
    </obsolete>
  </suffix>
  <affected-histogram name="Event.Latency.TouchToFirstScrollUpdateSwapBegin"/>
  <affected-histogram name="Event.Latency.TouchToScrollUpdateSwapBegin"/>
</histogram_suffixes>

<histogram_suffixes name="ServiceWorker.ShutdownStatus" separator="_">
  <suffix name="InShutdown" label="Browser shutdown started."/>
  <suffix name="NotInShutdown" label="Browser shutdown has not started."/>
  <affected-histogram name="ServiceWorker.ActivateEventStatus"/>
</histogram_suffixes>

<histogram_suffixes name="ServiceWorker.StartSituation2" separator=".">
  <suffix name="DuringStartup"
      label="The worker started up during browser startup."/>
  <suffix name="ExistingReadyProcess"
      label="An existing ready process was used for the worker."/>
  <suffix name="ExistingUnreadyProcess"
      label="An existing unready process was used for the worker."/>
  <suffix name="NewProcess" label="A new process was created for the worker."/>
  <affected-histogram name="ServiceWorker.StartTiming.ClockConsistency"/>
  <affected-histogram name="ServiceWorker.StartTiming.Duration"/>
</histogram_suffixes>

<histogram_suffixes name="ServiceWorker.StartSituationDoNotUse" separator="_">
<!-- Use ServiceWorker.StartSituation instead, which uses standard "." separator. -->

  <suffix name="DuringStartup"
      label="The worker started up during browser startup."/>
  <suffix name="ExistingProcess">
    <obsolete>
      Deprecated as of 07/2017. Replaced by ExistingUnreadyProcess and
      ExistingReadyProcess.
    </obsolete>
  </suffix>
  <suffix name="ExistingReadyProcess"
      label="An existing ready process was used for the worker."/>
  <suffix name="ExistingUnreadyProcess"
      label="An existing unready process was used for the worker."/>
  <suffix name="NewProcess" label="A new process was created for the worker."/>
  <affected-histogram name="EmbeddedWorkerInstance.Start.StartMessageLatency"/>
  <affected-histogram name="EmbeddedWorkerInstance.Start.TimeToEvaluateScript"/>
  <affected-histogram name="EmbeddedWorkerInstance.Start.TimeToLoad.HttpCache"/>
  <affected-histogram
      name="EmbeddedWorkerInstance.Start.TimeToLoad.InstalledScript"/>
  <affected-histogram name="EmbeddedWorkerInstance.Start.TimeToLoad.Network"/>
  <affected-histogram
      name="EmbeddedWorkerInstance.Start.TimeToSendStartWorker"/>
  <affected-histogram name="EmbeddedWorkerInstance.Start.TimeToStartThread"/>
  <affected-histogram name="EmbeddedWorkerInstance.Start.TimeToURLJob"/>
  <affected-histogram name="ServiceWorker.StartWorker.Time"/>
</histogram_suffixes>

<histogram_suffixes name="ServiceWorker.WorkerPreparationMode" separator="_">
  <suffix name="RunningWorker"
      label="The activated worker was already running."/>
  <suffix name="StartingWorker"
      label="The activated worker was already starting up."/>
  <suffix name="StartWorkerDuringStartup"
      label="Started a worker during browser startup."/>
  <suffix name="StartWorkerExistingProcess">
    <obsolete>
      Deprecated as of 07/2017. Replaced by StartWorkerExistingUnreadyProcess
      and StartWorkerExistingReadyProcess.
    </obsolete>
  </suffix>
  <suffix name="StartWorkerExistingReadyProcess"
      label="Started a worker in an existing ready process."/>
  <suffix name="StartWorkerExistingUnreadyProcess"
      label="Started a worker in an existing unready process."/>
  <suffix name="StartWorkerNewProcess"
      label="Started a worker in a new process."/>
  <suffix name="StoppingWorker" label="The activated worker was stopping."/>
  <affected-histogram
      name="ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time"/>
</histogram_suffixes>

<histogram_suffixes name="ServiceWorkerCache.Cache" separator=".">
  <suffix name="Batch"
      label="The time to perform the 'batch' operation on a ServiceWorker
             Cache, which batches other basic operations."/>
  <suffix name="Keys"
      label="The time to perform the 'keys' operation on a ServiceWorker
             Cache, which returns all of the keys in the cache."/>
  <suffix name="Match"
      label="The time to perform the 'match' operation on a ServiceWorker
             Cache, which does a lookup."/>
  <suffix name="MatchAll"
      label="The time to perform the 'matchAll' operation on a ServiceWorker
             Cache, which does a mass cache lookup."/>
  <affected-histogram name="ServiceWorkerCache.Cache"/>
</histogram_suffixes>

<histogram_suffixes name="ServiceWorkerCache.CacheStorage" separator=".">
  <suffix name="Delete"
      label="The time to perform the 'delete' operation on a ServiceWorker
             CacheStorage, which deletes a cache."/>
  <suffix name="Has"
      label="The time to perform the 'has' operation on a ServiceWorker
             CacheStorage, which returns if the cache exists."/>
  <suffix name="Keys"
      label="The time to perform the 'keys' operation on a ServiceWorker
             CacheStorage, which returns all of the cache names."/>
  <suffix name="Match"
      label="The time to perform the 'match' operation on a ServiceWorker
             CacheStorage, which does a shortcut cache lookup."/>
  <suffix name="Open"
      label="The time to perform the 'open' operation on a ServiceWorker
             CacheStorage, which gets or creates a cache."/>
  <affected-histogram name="ServiceWorkerCache.CacheStorage"/>
</histogram_suffixes>

<histogram_suffixes name="ServiceWorkerScheduler" separator="."
    ordering="prefix">
  <suffix name="BackgroundSyncManager"
      label="Collected from a BackgroundSyncManager instance"/>
  <suffix name="Cache" label="Collected from a CacheStorageCache instance"/>
  <suffix name="CacheStorage" label="Collected from a CacheStorage instance"/>
  <affected-histogram name="ServiceWorkerCache.Scheduler.IsOperationSlow"/>
  <affected-histogram name="ServiceWorkerCache.Scheduler.OperationDuration"/>
  <affected-histogram name="ServiceWorkerCache.Scheduler.QueueDuration"/>
  <affected-histogram name="ServiceWorkerCache.Scheduler.QueueLength"/>
</histogram_suffixes>

<histogram_suffixes name="ServiceWorkerSpecialAppsForEventDispatchingDelay"
    separator=".">
  <obsolete>
    Removed June 2018 (M69).
  </obsolete>
  <suffix name="docs" label="Custom histogram for Google Docs and Drive"/>
  <suffix name="gmail" label="Custom histogram for GMail"/>
  <suffix name="inbox" label="Custom histogram for Inbox"/>
  <suffix name="ntp" label="Custom histogram for New Tab Page"/>
  <suffix name="plus" label="Custom histogram for Google+"/>
  <affected-histogram name="ServiceWorker.EventDispatchingDelay_ACTIVATE"/>
  <affected-histogram name="ServiceWorker.EventDispatchingDelay_COOKIE_CHANGE"/>
  <affected-histogram
      name="ServiceWorker.EventDispatchingDelay_FETCH_MAIN_FRAME"/>
  <affected-histogram
      name="ServiceWorker.EventDispatchingDelay_FETCH_SHARED_WORKER"/>
  <affected-histogram
      name="ServiceWorker.EventDispatchingDelay_FETCH_SUB_FRAME"/>
  <affected-histogram
      name="ServiceWorker.EventDispatchingDelay_FETCH_SUB_RESOURCE"/>
  <affected-histogram name="ServiceWorker.EventDispatchingDelay_FOREIGN_FETCH"/>
  <affected-histogram name="ServiceWorker.EventDispatchingDelay_GEOFENCING"/>
  <affected-histogram name="ServiceWorker.EventDispatchingDelay_INSTALL"/>
  <affected-histogram name="ServiceWorker.EventDispatchingDelay_MESSAGE"/>
  <affected-histogram
      name="ServiceWorker.EventDispatchingDelay_NAVIGATION_HINT_LINK_MOUSE_DOWN"/>
  <affected-histogram
      name="ServiceWorker.EventDispatchingDelay_NAVIGATION_HINT_LINK_TAP_DOWN"/>
  <affected-histogram
      name="ServiceWorker.EventDispatchingDelay_NAVIGATION_HINT_LINK_TAP_UNCONFIRMED"/>
  <affected-histogram
      name="ServiceWorker.EventDispatchingDelay_NOTIFICATION_CLICK"/>
  <affected-histogram
      name="ServiceWorker.EventDispatchingDelay_NOTIFICATION_CLOSE"/>
  <affected-histogram name="ServiceWorker.EventDispatchingDelay_PUSH"/>
  <affected-histogram name="ServiceWorker.EventDispatchingDelay_SYNC"/>
  <affected-histogram name="ServiceWorker.EventDispatchingDelay_UNKNOWN"/>
</histogram_suffixes>

<histogram_suffixes name="ServiceWorkerStartOccurred" separator="_">
  <suffix name="WorkerStartOccurred"
      label="The worker was not already running. Worker startup occurred."/>
  <affected-histogram
      name="ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time"/>
  <affected-histogram name="ServiceWorker.NavPreload.ConcurrentTime_MainFrame"/>
  <affected-histogram name="ServiceWorker.NavPreload.FinishedFirst_MainFrame"/>
  <affected-histogram name="ServiceWorker.NavPreload.ResponseTime_MainFrame"/>
  <affected-histogram name="ServiceWorker.NavPreload.WorkerWaitTime_MainFrame"/>
</histogram_suffixes>

<histogram_suffixes name="SessionRestoreTabCountMemoryPressure" separator="_">
  <suffix name="MemoryPressure"
      label="Total tabs involved in session restore that encountered memory
             pressure."/>
  <suffix name="MemoryPressure_Deferred"
      label="Tabs deferred by memory pressure."/>
  <suffix name="MemoryPressure_Loaded"
      label="Tabs fully loaded before memory pressure."/>
  <suffix name="MemoryPressure_LoadStarted"
      label="Tabs started to load before memory pressure."/>
  <suffix name="NoMemoryPressure"
      label="Total tabs involved in a session restore that did not encounter
             memory pressure."/>
  <suffix name="NoMemoryPressure_Loaded"
      label="Tabs fully loaded in a session restore that did not encounter
             memory pressure."/>
  <suffix name="NoMemoryPressure_LoadStarted"
      label="Tabs started to load in a session restore that did not encounter
             memory pressure."/>
  <affected-histogram name="SessionRestore.TabCount"/>
</histogram_suffixes>

<histogram_suffixes name="SessionRestoreTabCounts" separator="_">
  <suffix name="1" label="1 tab present"/>
  <suffix name="2" label="2 tabs present"/>
  <suffix name="3" label="3 tabs present"/>
  <suffix name="4" label="4 tabs present"/>
  <suffix name="5" label="5 tabs present"/>
  <suffix name="6" label="6 tabs present"/>
  <suffix name="7" label="7 tabs present"/>
  <suffix name="8" label="8 tabs present"/>
  <suffix name="9" label="9 tabs present"/>
  <suffix name="10" label="10 tabs present"/>
  <suffix name="11" label="11 tab present"/>
  <suffix name="12" label="12 tabs present"/>
  <suffix name="13" label="13 tabs present"/>
  <suffix name="14" label="14 tabs present"/>
  <suffix name="15" label="15 tabs present"/>
  <suffix name="16" label="16 tabs present"/>
  <suffix name="17" label="17 tabs present"/>
  <suffix name="18" label="18 tabs present"/>
  <suffix name="19" label="19 tabs present"/>
  <suffix name="20" label="20 tabs present"/>
  <affected-histogram name="SessionRestore.AllTabsLoaded"/>
  <affected-histogram name="SessionRestore.FirstTabPainted"/>
  <affected-histogram name="SessionRestore.ForegroundTabFirstLoaded"/>
  <affected-histogram name="SessionRestore.ForegroundTabFirstPaint"/>
  <affected-histogram name="SessionRestore.ForegroundTabFirstPaint2"/>
  <affected-histogram name="SessionRestore.ForegroundTabFirstPaint3"/>
</histogram_suffixes>

<histogram_suffixes name="SessionStorageContextOpenReasons" separator="">
  <suffix name="CommitErrors" label="After too many commit errors."/>
  <suffix name="InvalidVersion" label="After an invalid version was read."/>
  <suffix name="OpenFailed" label="After opening the DB failed."/>
  <suffix name="ReadNamespacesError"
      label="After reading the namespaces failed."/>
  <suffix name="ReadNextMapIdError" label="After reading the map id failed."/>
  <suffix name="ReadVersionError"
      label="After reading the schema version failed."/>
  <affected-histogram name="SessionStorageContext.OpenResultAfter"/>
</histogram_suffixes>

<histogram_suffixes name="SettingsResetPromptSettingType" separator="_">
  <suffix name="DefaultSearch" label="Reset state for default search engine."/>
  <suffix name="Homepage" label="Reset state for homepage."/>
  <suffix name="StartupUrls" label="Reset state for startup URLs."/>
  <affected-histogram name="SettingsResetPrompt.ResetState"/>
</histogram_suffixes>

<histogram_suffixes name="SetupInstallTimes" separator=".">
  <suffix name="background" label="Background; lowered priority."/>
  <affected-histogram name="Setup.Install.ApplyArchivePatchTime"/>
  <affected-histogram name="Setup.Install.HasArchivePatch"/>
  <affected-histogram name="Setup.Install.UncompressArchivePatchTime"/>
  <affected-histogram name="Setup.Install.UncompressFullArchiveTime"/>
  <affected-histogram name="Setup.Install.UnpackFullArchiveTime"/>
</histogram_suffixes>

<histogram_suffixes name="ShillWiFiRememberedNetworkSecurityMode" separator=".">
  <suffix name="802_1x" label="Network is secured with 802.1x"/>
  <suffix name="none" label="Network is not secured"/>
  <suffix name="psk" label="Network is security with WPA or WPA-2 (aka RSN)"/>
  <suffix name="wep" label="Network employs WEP (Wired Equivalent Privacy)"/>
  <affected-histogram name="Network.Shill.WiFi.RememberedSystemNetworkCount"/>
  <affected-histogram name="Network.Shill.WiFi.RememberedUserNetworkCount"/>
</histogram_suffixes>

<histogram_suffixes name="ShowAppListWarmStartFast" separator="">
  <suffix name="" label="Normal start."/>
  <suffix name="Fast"
      label="Fast start by skipping normal chrome.dll startup."/>
  <affected-histogram name="Startup.ShowAppListWarmStart"/>
</histogram_suffixes>

<histogram_suffixes name="SideloadWipeout" separator="_">
  <suffix name="Disabled" label="Control group."/>
  <suffix name="Enabled" label="Sideload Wipeout Active."/>
  <affected-histogram name="DisabledExtension.ExtensionWipedStatus"/>
  <affected-histogram name="DisabledExtension.SideloadWipeoutCount"/>
  <affected-histogram name="DisabledExtension.SideloadWipeoutNeeded"/>
  <affected-histogram name="DisabledExtension.UserSelection"/>
  <affected-histogram name="Extensions.ExternalExtensionEvent"/>
  <affected-histogram name="Extensions.InstallSource"/>
  <affected-histogram name="Extensions.UpdateSource"/>
</histogram_suffixes>

<histogram_suffixes name="Signin.Actions" separator=".">
  <suffix name="AllAccessPointActions"/>
  <suffix name="AndroidAccountConsistencyFirstRunActions"
      label="Signin Flow shown on android after Account Consistency flag was
             enabled."/>
  <affected-histogram name="Signin"/>
</histogram_suffixes>

<histogram_suffixes name="Signin.ForceSigninVerificationResult" separator=".">
  <suffix name="Failure"
      label="The authenticaion token can not be verified due to persisten
             error"/>
  <suffix name="Success" label="The authenticaion token is valid"/>
  <affected-histogram name="Signin.ForceSigninVerificationTime"/>
</histogram_suffixes>

<histogram_suffixes name="Signin.ObsoleteActions" separator=".">
  <obsolete>
    Deprecated as of 12/2014.
  </obsolete>
  <suffix name="AppLauncherActions"/>
  <suffix name="ExtensionInstallBubbleActions"/>
  <suffix name="MenuActions"/>
  <suffix name="NTPLinkActions"/>
  <suffix name="OneClickActions"/>
  <suffix name="SettingsActions"/>
  <suffix name="StartPageActions"/>
  <suffix name="UnknownActions"/>
  <affected-histogram name="Signin"/>
</histogram_suffixes>

<histogram_suffixes name="Signin.Reconciler" separator=".">
  <suffix name="FirstRun"
      label="First execution of the reconciler after the profile was loaded
             or the new_profile_management flag was toggled."/>
  <suffix name="SubsequentRun"
      label="Execution of the reconciler triggered by some other change of
             state."/>
  <affected-histogram name="Signin.Reconciler.AddedToChrome"/>
  <affected-histogram name="Signin.Reconciler.AddedToCookieJar"/>
  <affected-histogram name="Signin.Reconciler.DifferentPrimaryAccounts"/>
  <affected-histogram name="Signin.Reconciler.RemovedFromCookieJar"/>
</histogram_suffixes>

<histogram_suffixes name="Signin.Reconciler.Duration" separator=".">
  <suffix name="Failure" label="Failed execution of reconciler"/>
  <suffix name="Success" label="Successful execution of reconciler"/>
  <affected-histogram name="Signin.Reconciler.Duration"/>
</histogram_suffixes>

<histogram_suffixes name="SigninAccountStatus" separator=".">
  <suffix name="NewAccount" label="Using a new account, in the sign-in promo.">
    <obsolete>
      Deprecated as of 2018-8.
    </obsolete>
  </suffix>
  <suffix name="NewAccountExistingAccount"
      label="Using a new account, in the sign-in promo, while Chrome knows
             about other accounts."/>
  <suffix name="NewAccountNoExistingAccount"
      label="Using a new account, in the sign-in promo, while Chrome does not
             know about other accounts."/>
  <suffix name="NewAccountPreDice"
      label="Using a new account on Desktop, pre-Dice."/>
  <suffix name="NotDefault"
      label="Using not the default account, in the sign-in promo."/>
  <suffix name="WithDefault"
      label="Using the default account, in the sign-in promo."/>
  <affected-histogram name="Signin.SigninCompletedAccessPoint"/>
  <affected-histogram name="Signin.SigninStartedAccessPoint"/>
</histogram_suffixes>

<histogram_suffixes name="SimpleCacheWithOrWithoutIndex" separator="_">
  <suffix name="WithIndex" label="The Simple Cache index was loaded."/>
  <suffix name="WithoutIndex"
      label="The Simple Cache index was not yet loaded."/>
  <affected-histogram name="SimpleCache.SyncCreatePlatformFileError"/>
  <affected-histogram name="SimpleCache.SyncCreateResult"/>
  <affected-histogram name="SimpleCache.SyncOpenPlatformFileError"/>
  <affected-histogram name="SimpleCache.SyncOpenResult"/>
</histogram_suffixes>

<histogram_suffixes name="SiteIsolation.XSD.MIME" separator=".">
  <suffix name="HTML" label="Classified as HTML MIME type."/>
  <suffix name="JSON" label="Classified as JSON MIME type."/>
  <suffix name="Others" label="Classified as other MIME types."/>
  <suffix name="Plain" label="Classified as plain text MIME type."/>
  <suffix name="XML" label="Classified as XML MIME type."/>
  <affected-histogram name="SiteIsolation.XSD.Browser.Blocked"/>
</histogram_suffixes>

<histogram_suffixes name="Size" separator=".">
  <suffix name="Height"/>
  <suffix name="Width"/>
  <affected-histogram name="BrowserWindow.Resize.StepBoundsChange"/>
</histogram_suffixes>

<histogram_suffixes name="SkiaDrawScaleFactorFilterQuality" separator=".">
  <suffix name="AnyFilterQuality" label="Any filter quality was used."/>
  <suffix name="HighFilterQuality" label="High filter quality was used."/>
  <suffix name="LowFilterQuality" label="Low filter quality was used."/>
  <suffix name="MediumFilterQuality" label="Medium filter quality was used."/>
  <suffix name="NoneFilterQuality" label="None filter quality was used."/>
  <affected-histogram name="Skia.DrawScaleFactor"/>
</histogram_suffixes>

<histogram_suffixes name="SocketOperation" separator=".">
  <suffix name="Connect"/>
  <suffix name="Read"/>
  <suffix name="Write"/>
  <affected-histogram name="Net.SSLProtocolErrorCipher"/>
  <affected-histogram name="Net.SSLProtocolErrorReason"/>
</histogram_suffixes>

<histogram_suffixes name="SocketType" separator="_">
  <obsolete>
    Deprecated as of 03/2015.
  </obsolete>
  <suffix name="HTTPProxy" label="HTTP proxy socket"/>
  <suffix name="SOCK" label="SOCKS socket"/>
  <suffix name="SSL" label="(Obsolete, SSL socket)"/>
  <suffix name="SSL2" label="SSL2 socket"/>
  <suffix name="SSLforHTTPSProxy"
      label="SSLClientSocket wrapping the TCPClient socket eventually used
             for connection to an HTTPS proxy"/>
  <suffix name="SSLForProxies"
      label="SSLClientSocket wrapping the TCPClient socket eventually used
             for connection to a proxy"/>
  <suffix name="TCP" label="plain, no proxy, no SSL socket"/>
  <suffix name="TCPforHTTPProxy"
      label="TCPClientSocket eventually used for connection to an HTTP proxy"/>
  <suffix name="TCPforHTTPSProxy"
      label="TCPClientSocket eventually used for connection to an HTTPS proxy"/>
  <suffix name="TCPforSOCKS"
      label="TCPClientSocket eventually used for connection to a SOCKS proxy"/>
  <affected-histogram name="Net.SocketIdleTimeBeforeNextUse_ReusedSocket"/>
  <affected-histogram name="Net.SocketIdleTimeBeforeNextUse_UnusedSocket"/>
  <affected-histogram name="Net.SocketInitErrorCodes"/>
  <affected-histogram name="Net.SocketRequestTime"/>
  <affected-histogram name="Net.SocketType"/>
</histogram_suffixes>

<histogram_suffixes name="SoftwareReporterEngine" separator="_">
  <suffix name="Experimental"/>
  <suffix name="Original"/>
  <affected-histogram name="SoftwareReporter.FoundUwSReadError"/>
  <affected-histogram name="SoftwareReporter.LogsUploadEnabled"/>
  <affected-histogram name="SoftwareReporter.LogsUploadResult"/>
  <affected-histogram name="SoftwareReporter.LogsUploadResultRegistryError"/>
  <affected-histogram name="SoftwareReporter.MajorVersion"/>
  <affected-histogram name="SoftwareReporter.MemoryUsed"/>
  <affected-histogram name="SoftwareReporter.MinorVersion"/>
  <affected-histogram name="SoftwareReporter.RunningTime"/>
  <affected-histogram name="SoftwareReporter.RunningTimeAccordingToChrome"/>
  <affected-histogram name="SoftwareReporter.RunningTimeRegistryError"/>
  <affected-histogram name="SoftwareReporter.Step"/>
</histogram_suffixes>

<histogram_suffixes name="SoftwareReporterInvocationType" separator="_">
  <suffix name="Periodic" label="Periodic run of the reporter."/>
  <suffix name="UserInitiated" label="User-initiated run of the reporter."/>
  <affected-histogram name="SoftwareReporter.ReporterSequenceResult"/>
</histogram_suffixes>

<histogram_suffixes name="SpdyCwnd" separator="_">
  <obsolete>
    Deprecated as of 07/2014.
  </obsolete>
  <suffix name="cwnd10" label="using cwnd policy static 10"/>
  <suffix name="cwnd16" label="using cwnd policy static 16"/>
  <owner>willchan@chromium.org</owner>
  <suffix name="cwnd32" label="using cwnd policy static 32"/>
  <suffix name="cwndDynamic" label="using dynamic cwnd policy"/>
  <suffix name="cwndMin10" label="using dynamic cwnd policy no lower than 10"/>
  <suffix name="cwndMin16" label="using dynamic cwnd policy no lower than 16"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
  <affected-histogram name="PLT.StartToCommit_LinkLoadNormal"/>
  <affected-histogram name="PLT.StartToFinish_LinkLoadNormal"/>
  <affected-histogram name="PLT.StartToFinish_NormalLoad"/>
</histogram_suffixes>

<histogram_suffixes name="SpdyImpact" separator="_">
  <suffix name="npn_with_http"
      label="with NPN negotiated but using HTTP instead of SPDY"/>
  <suffix name="npn_with_spdy" label="with NPN negotiated and using SPDY"/>
  <affected-histogram name="Net.Transaction_Connected"/>
  <affected-histogram name="Net.Transaction_Connected_New"/>
  <affected-histogram name="Net.Transaction_Connected_New_b"/>
  <affected-histogram name="Net.Transaction_Connected_Under_10"/>
  <affected-histogram name="PLT.Abandoned"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
  <affected-histogram name="PLT.StartToCommit_LinkLoadNormal"/>
  <affected-histogram name="PLT.StartToCommit_NormalLoad"/>
  <affected-histogram name="PLT.StartToFinish_LinkLoadNormal"/>
  <affected-histogram name="PLT.StartToFinish_NormalLoad"/>
</histogram_suffixes>

<histogram_suffixes name="SpdySettingsCwnd" separator="">
  <suffix name="10K" label="where at least 10KB was transferred."/>
  <suffix name="25K" label="where at least 25KB was transferred."/>
  <suffix name="50K" label="where at least 50KB was transferred."/>
  <suffix name="100K" label="where at least 100KB was transferred."/>
  <affected-histogram name="Net.SpdySettingsCwnd"/>
</histogram_suffixes>

<histogram_suffixes name="SqliteDatabases" separator=".">
  <owner>shess@chromium.org</owner>
  <suffix name="Activity" label="Activity"/>
  <suffix name="Affiliation" label="Affiliation"/>
  <suffix name="AppCache" label="AppCache"/>
  <suffix name="BackgroundRequestQueue" label="BackgroundRequestQueue"/>
  <suffix name="BookmarkImages" label="BookmarkImages">
    <obsolete>
      Deprecated as of 2016-1 (http://crrev.com/372327).
    </obsolete>
  </suffix>
  <suffix name="Cookie" label="Cookie"/>
  <suffix name="DatabaseTracker" label="DatabaseTracker"/>
  <suffix name="DomainBoundCerts" label="DomainBoundCerts"/>
  <suffix name="DOMStorageDatabase" label="DOMStorageDatabase"/>
  <suffix name="History" label="History"/>
  <suffix name="OfflinePageMetadata" label="OfflinePageMetadata"/>
  <suffix name="Passwords" label="Passwords"/>
  <suffix name="Precache" label="Precache">
    <obsolete>
      Deprecated July 11 2017.
    </obsolete>
  </suffix>
  <suffix name="Predictor" label="Predictor"/>
  <suffix name="PrefetchStore" label="PrefetchStore"/>
  <suffix name="PreviewsOptOut" label="PreviewsOptOut"/>
  <suffix name="Quota" label="Quota"/>
  <suffix name="Shortcuts" label="Shortcuts"/>
  <suffix name="SyncDirectory" label="SyncDirectory"/>
  <suffix name="Text" label="Text (obsolete 7/24/13)">
    <obsolete>
      Deprecated as of 2013-07.
    </obsolete>
  </suffix>
  <suffix name="Thumbnail" label="Thumbnail"/>
  <suffix name="TopSites" label="TopSites"/>
  <suffix name="Web" label="Web"/>
  <affected-histogram name="Sqlite.AutoCommitTime"/>
  <affected-histogram name="Sqlite.CommitTime"/>
  <affected-histogram name="Sqlite.Error"/>
  <affected-histogram name="Sqlite.QueryTime"/>
  <affected-histogram name="Sqlite.SizeKB"/>
  <affected-histogram name="Sqlite.Stats"/>
  <affected-histogram name="Sqlite.UpdateTime"/>
  <affected-histogram name="Sqlite.Version"/>
</histogram_suffixes>

<histogram_suffixes name="SqliteVfsOperations" separator="_">
  <obsolete>
    Removed 2018-02-06.
  </obsolete>
  <owner>shess@chromium.org</owner>
  <suffix name="Fetch" label="fetch"/>
  <suffix name="Read" label="read"/>
  <suffix name="Write" label="write"/>
  <affected-histogram name="Sqlite.Vfs"/>
</histogram_suffixes>

<histogram_suffixes name="SSLFalseStart" separator="_">
  <obsolete>
    Removed 2011-06-01.
  </obsolete>
  <suffix name="FalseStart_disabled"/>
  <suffix name="FalseStart_enabled"/>
  <affected-histogram name="Net.SSL_Connection_Latency"/>
  <affected-histogram name="Net.SSL_Connection_Latency_2"/>
  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
</histogram_suffixes>

<histogram_suffixes name="StartupProfilingAbandonState" separator="_">
  <suffix name="NoLoad" label="Abandoned before first main frame load."/>
  <suffix name="NoPaint" label="Abandoned before first paint."/>
  <affected-histogram name="Startup.FirstWebContents.FinishReason"/>
</histogram_suffixes>

<histogram_suffixes name="StartupTemperature" separator=".">
  <suffix name="ColdStartup" label="Startup was cold (mostly hard faults)."/>
  <suffix name="LukewarmStartup" label="Startup was neither warm nor cold."/>
  <suffix name="WarmStartup" label="Startup was warm (almost no hard faults)."/>
  <affected-histogram
      name="LibraryLoader.PercentageOfResidentCodeBeforePrefetch"/>
  <affected-histogram name="Startup.BrowserMainToRendererMain"/>
  <affected-histogram
      name="Startup.BrowserMessageLoopStart.To.MainNavigationStart"/>
  <affected-histogram name="Startup.BrowserMessageLoopStart.To.NonEmptyPaint2"/>
  <affected-histogram name="Startup.BrowserMessageLoopStartTime"/>
  <affected-histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry"/>
  <affected-histogram
      name="Startup.BrowserMessageLoopStartTimeFromMainEntry.FirstRun"/>
  <affected-histogram
      name="Startup.BrowserMessageLoopStartTimeFromMainEntry.FirstRun2"/>
  <affected-histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry2"/>
  <affected-histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry3"/>
  <affected-histogram name="Startup.BrowserOpenTabs"/>
  <affected-histogram name="Startup.BrowserWindow.FirstPaint"/>
  <affected-histogram name="Startup.BrowserWindow.FirstPaint.CompositingEnded"/>
  <affected-histogram name="Startup.BrowserWindowDisplay"/>
  <affected-histogram name="Startup.FirstWebContents.MainFrameLoad"/>
  <affected-histogram name="Startup.FirstWebContents.MainFrameLoad2"/>
  <affected-histogram name="Startup.FirstWebContents.MainNavigationFinished"/>
  <affected-histogram name="Startup.FirstWebContents.MainNavigationStart"/>
  <affected-histogram
      name="Startup.FirstWebContents.MainNavigationStart.MultiTabs"/>
  <affected-histogram
      name="Startup.FirstWebContents.MainNavigationStart.SingleTab"/>
  <affected-histogram name="Startup.FirstWebContents.NonEmptyPaint"/>
  <affected-histogram name="Startup.FirstWebContents.NonEmptyPaint2"/>
  <affected-histogram
      name="Startup.FirstWebContents.RenderProcessHostInit.ToNonEmptyPaint"/>
  <affected-histogram name="Startup.LoadTime.ExeMainToDllMain"/>
  <affected-histogram name="Startup.LoadTime.ExeMainToDllMain2"/>
  <affected-histogram name="Startup.LoadTime.ProcessCreateToDllMain"/>
  <affected-histogram name="Startup.LoadTime.ProcessCreateToDllMain2"/>
  <affected-histogram name="Startup.LoadTime.ProcessCreateToExeMain"/>
  <affected-histogram name="Startup.LoadTime.ProcessCreateToExeMain2"/>
  <affected-histogram name="Startup.SystemUptime"/>
  <affected-histogram name="Startup.TimeSinceLastStartup"/>
</histogram_suffixes>

<histogram_suffixes name="StartupTimeBombAlarm" separator=".">
  <obsolete>
    Deprecated as of 10/2014.
  </obsolete>
  <suffix name="ThreadNowDuration" label="Duration is in thread CPU time."/>
  <suffix name="TimeDuration" label="Duration is in clock time."/>
  <suffix name="TimeTicksDuration" label="Duration is in TimeTicks time."/>
  <affected-histogram name="StartupTimeBomb.Alarm"/>
</histogram_suffixes>

<histogram_suffixes name="StartupWorkload" separator=".">
  <suffix name="MultiTabs" label="Multiple tabs instantiated on startup."/>
  <suffix name="SingleTab" label="Single tab instantiated on startup."/>
  <affected-histogram name="Startup.FirstWebContents.MainNavigationStart"/>
</histogram_suffixes>

<histogram_suffixes name="StartWorkerExistingProcess" separator="_">
  <obsolete>
    Deprecated as of June 2017.
  </obsolete>
  <suffix name="StartWorkerExistingProcess"
      label="The worker started up in an existing process"/>
  <affected-histogram name="ServiceWorker.NavigationPreload.ConcurrentTime"/>
  <affected-histogram
      name="ServiceWorker.NavigationPreload.ConcurrentTime_NavPreloadFirst"/>
  <affected-histogram
      name="ServiceWorker.NavigationPreload.ConcurrentTime_SWStartFirst"/>
  <affected-histogram
      name="ServiceWorker.NavigationPreload.FinishedBeforeStartWorker"/>
  <affected-histogram
      name="ServiceWorker.NavigationPreload.NavPreloadAfterSWStart"/>
  <affected-histogram
      name="ServiceWorker.NavigationPreload.SWStartAfterNavPreload"/>
</histogram_suffixes>

<histogram_suffixes name="StartWorkerExistingProcess2" separator="_">
  <obsolete>
    Deprecated as of June 2017.
  </obsolete>
  <suffix name="StartWorkerExistingProcess"
      label="The worker started up in an existing process"/>
  <affected-histogram name="ServiceWorker.NavPreload.ConcurrentTime_MainFrame"/>
  <affected-histogram name="ServiceWorker.NavPreload.FinishedFirst_MainFrame"/>
  <affected-histogram name="ServiceWorker.NavPreload.ResponseTime_MainFrame"/>
  <affected-histogram name="ServiceWorker.NavPreload.WorkerWaitTime_MainFrame"/>
</histogram_suffixes>

<histogram_suffixes name="Storage.BlobAppendableItems" separator=".">
  <suffix name="Blob" label="Appending a blob."/>
  <suffix name="Bytes" label="Appending bytes."/>
  <suffix name="CacheEntry" label="Appending a cache entry."/>
  <suffix name="File" label="Appending a file with a known size."/>
  <suffix name="FileSystem"
      label="Appending a filesystem object with known size."/>
  <affected-histogram name="Storage.BlobItemSize"/>
  <affected-histogram name="Storage.BlobItemSize.BlobSlice"/>
</histogram_suffixes>

<histogram_suffixes name="Storage.BlobEvictReason" separator=".">
  <suffix name="OnMemoryPressure"
      label="Eviction was triggered because of memory pressure signal."/>
  <suffix name="SizeExceededInMemoryLimit"
      label="Eviction was triggered because the total size exceeded maximum
             in memory size allwed"/>
  <suffix name="SizeExceededMaxDiskSpace"
      label="Eviction was triggered because the total size exceeded maximum
             available disk space"/>
  <affected-histogram name="Storage.Blob.SizeEvictedToDiskInKB"/>
</histogram_suffixes>

<histogram_suffixes name="Storage.Bytes" separator=".">
  <suffix name="DiskCache.AppCache" label="AppCache usage."/>
  <suffix name="DiskCache.CacheStorage" label="CacheStorage usage."/>
  <suffix name="DiskCache.ServiceWorker"
      label="ServiceWorker scriptcache usage."/>
  <suffix name="LevelDBEnv" label="Undifferentiated leveldb usage."/>
  <suffix name="LevelDBEnv.IDB" label="IndexedDB usage."/>
  <suffix name="LevelDBEnv.ServiceWorker"
      label="ServiceWorker database usage."/>
  <suffix name="MojoLevelDBEnv" label="Mojo leveldb component usage."/>
  <affected-histogram name="Storage.BytesRead"/>
  <affected-histogram name="Storage.BytesWritten"/>
</histogram_suffixes>

<histogram_suffixes name="StunPingInternal" separator=".">
  <suffix name="0ms" label="0ms between requests"/>
  <suffix name="5ms" label="5ms between requests"/>
  <suffix name="10ms" label="10ms between requests"/>
  <suffix name="15ms" label="15ms between requests"/>
  <suffix name="20ms" label="20ms between requests"/>
  <suffix name="25ms" label="25ms between requests"/>
  <suffix name="30ms" label="30ms between requests"/>
  <suffix name="35ms" label="35ms between requests"/>
  <suffix name="40ms" label="40ms between requests"/>
  <suffix name="45ms" label="45ms between requests"/>
  <suffix name="50ms" label="50ms between requests"/>
  <suffix name="100ms" label="100ms between requests"/>
  <affected-histogram name="WebRTC.Stun.ResponseLatency.NoNAT"/>
  <affected-histogram name="WebRTC.Stun.ResponseLatency.NonSymNAT"/>
  <affected-histogram name="WebRTC.Stun.ResponseLatency.SymNAT"/>
  <affected-histogram name="WebRTC.Stun.ResponseLatency.UnknownNAT"/>
  <affected-histogram name="WebRTC.Stun.SuccessPercent.NoNAT"/>
  <affected-histogram name="WebRTC.Stun.SuccessPercent.NonSymNAT"/>
  <affected-histogram name="WebRTC.Stun.SuccessPercent.SymNAT"/>
  <affected-histogram name="WebRTC.Stun.SuccessPercent.UnknownNAT"/>
</histogram_suffixes>

<histogram_suffixes name="SubresourceFilterOnlyExperiment" separator=".">
  <obsolete>
    Deprecated May 2018
  </obsolete>
  <suffix name="AbusiveAds" label="Abusive Ads pattern">
    <obsolete>
      Deprecated 11/17, no longer used.
    </obsolete>
  </suffix>
  <suffix name="AllAds" label="All Ads (BAS + Abusive) pattern">
    <obsolete>
      Deprecated 11/17, no longer used.
    </obsolete>
  </suffix>
  <suffix name="BetterAds" label="Better Ads Standard pattern"/>
  <suffix name="PhishingInterstitial" label="phishing blacklist pattern"/>
  <suffix name="SocialEngineeringAdsInterstitial"
      label="social eng ad blacklist pattern"/>
  <suffix name="SubresourceFilterOnly" label="subresource filter only pattern"/>
  <affected-histogram name="SubresourceFilter.PageLoad.FinalURLMatch"/>
  <affected-histogram name="SubresourceFilter.PageLoad.RedirectChainLength"/>
  <affected-histogram
      name="SubresourceFilter.PageLoad.RedirectChainMatchPattern">
    <obsolete>
      Obsolete as of April 2017
    </obsolete>
  </affected-histogram>
</histogram_suffixes>

<histogram_suffixes name="SweeperCompletionTypes" separator=".">
  <suffix name="Complete" label="All indexes are scanned."/>
  <suffix name="ConnectionOpened"
      label="Scanning is interrupted by an new connection to the database."/>
  <suffix name="MaxIterations"
      label="Scanning is stopped because the maximum record iteration count
             was hit."/>
  <suffix name="SweepError"
      label="Scanning is stopped because a leveldb error was encountered
             during sweeping."/>
  <suffix name="TimeoutReached" label="Scanning is stopped by the timeout."/>
  <affected-histogram
      name="WebCore.IndexedDB.TombstoneSweeper.DeletedTombstonesSize"/>
  <affected-histogram
      name="WebCore.IndexedDB.TombstoneSweeper.NumDeletedTombstones"/>
  <affected-histogram name="WebCore.IndexedDB.TombstoneSweeper.NumTombstones"/>
  <affected-histogram name="WebCore.IndexedDB.TombstoneSweeper.TombstonesSize"/>
</histogram_suffixes>

<histogram_suffixes name="SyncModelType" separator=".">
  <suffix name="APP" label="APP"/>
  <suffix name="APP_LIST" label="APP_LIST"/>
  <suffix name="APP_NOTIFICATION" label="APP_NOTIFICATION"/>
  <suffix name="APP_SETTING" label="APP_SETTING"/>
  <suffix name="ARTICLE" label="ARTICLE"/>
  <suffix name="AUTOFILL" label="AUTOFILL"/>
  <suffix name="AUTOFILL_PROFILE" label="AUTOFILL_PROFILE"/>
  <suffix name="AUTOFILL_WALLET" label="AUTOFILL_WALLET"/>
  <suffix name="AUTOFILL_WALLET_METADATA" label="AUTOFILL_WALLET_METADATA"/>
  <suffix name="BOOKMARK" label="BOOKMARK"/>
  <suffix name="DEVICE_INFO" label="DEVICE_INFO"/>
  <suffix name="DICTIONARY" label="DICTIONARY"/>
  <suffix name="EXPERIMENTS" label="EXPERIMENTS"/>
  <suffix name="EXTENSION" label="EXTENSION"/>
  <suffix name="EXTENSION_SETTING" label="EXTENSION_SETTING"/>
  <suffix name="FAVICON_IMAGE" label="FAVICON_IMAGE"/>
  <suffix name="FAVICON_TRACKING" label="FAVICON_TRACKING"/>
  <suffix name="HISTORY_DELETE_DIRECTIVE" label="HISTORY_DELETE_DIRECTIVE"/>
  <suffix name="MANAGED_USER" label="MANAGED_USER"/>
  <suffix name="MANAGED_USER_SETTING" label="MANAGED_USER_SETTING"/>
  <suffix name="MANAGED_USER_SHARED_SETTING"
      label="MANAGED_USER_SHARED_SETTING"/>
  <suffix name="MANAGED_USER_WHITELIST" label="MANAGED_USER_WHITELIST"/>
  <suffix name="MOUNTAIN_SHARE" label="MOUNTAIN_SHARE"/>
  <suffix name="NIGORI" label="NIGORI"/>
  <suffix name="PASSWORD" label="PASSWORD"/>
  <suffix name="PREFERENCE" label="PREFERENCE"/>
  <suffix name="PRIORITY_PREFERENCE" label="PRIORITY_PREFERENCE"/>
  <suffix name="SEARCH_ENGINE" label="SEARCH_ENGINE"/>
  <suffix name="SESSION" label="SESSION"/>
  <suffix name="SYNCED_NOTIFICATION" label="SYNCED_NOTIFICATION"/>
  <suffix name="SYNCED_NOTIFICATION_APP_INFO"
      label="SYNCED_NOTIFICATION_APP_INFO"/>
  <suffix name="THEME" label="THEME"/>
  <suffix name="TYPED_URL" label="TYPED_URL"/>
  <suffix name="USER_CONSENT" label="USER_CONSENT"/>
  <suffix name="USER_EVENT" label="USER_EVENT"/>
  <suffix name="WIFI_CREDENTIAL" label="WIFI_CREDENTIAL"/>
  <affected-histogram name="Sync.ModelTypeCount"/>
  <affected-histogram name="Sync.ModelTypeMemoryKB"/>
</histogram_suffixes>

<histogram_suffixes name="SyzygyStartupTime" separator="_">
  <obsolete>
    No longer logged.
  </obsolete>
  <suffix name="PreRead_0"/>
  <suffix name="PreRead_5"/>
  <suffix name="PreRead_10"/>
  <suffix name="PreRead_15"/>
  <suffix name="PreRead_20"/>
  <suffix name="PreRead_25"/>
  <suffix name="PreRead_30"/>
  <suffix name="PreRead_35"/>
  <suffix name="PreRead_40"/>
  <suffix name="PreRead_45"/>
  <suffix name="PreRead_50"/>
  <suffix name="PreRead_55"/>
  <suffix name="PreRead_60"/>
  <suffix name="PreRead_65"/>
  <suffix name="PreRead_70"/>
  <suffix name="PreRead_75"/>
  <suffix name="PreRead_80"/>
  <suffix name="PreRead_85"/>
  <suffix name="PreRead_90"/>
  <suffix name="PreRead_95"/>
  <suffix name="PreRead_100"/>
  <suffix name="PreReadDisabled"/>
  <suffix name="PreReadEnabled"/>
  <suffix name="XP_PreRead_0"/>
  <suffix name="XP_PreRead_5"/>
  <suffix name="XP_PreRead_10"/>
  <suffix name="XP_PreRead_15"/>
  <suffix name="XP_PreRead_20"/>
  <suffix name="XP_PreRead_25"/>
  <suffix name="XP_PreRead_30"/>
  <suffix name="XP_PreRead_35"/>
  <suffix name="XP_PreRead_40"/>
  <suffix name="XP_PreRead_45"/>
  <suffix name="XP_PreRead_50"/>
  <suffix name="XP_PreRead_55"/>
  <suffix name="XP_PreRead_60"/>
  <suffix name="XP_PreRead_65"/>
  <suffix name="XP_PreRead_70"/>
  <suffix name="XP_PreRead_75"/>
  <suffix name="XP_PreRead_80"/>
  <suffix name="XP_PreRead_85"/>
  <suffix name="XP_PreRead_90"/>
  <suffix name="XP_PreRead_95"/>
  <suffix name="XP_PreRead_100"/>
  <suffix name="XP_PreReadDisabled"/>
  <suffix name="XP_PreReadEnabled"/>
  <affected-histogram name="Startup.BrowserMessageLoopStartTime"/>
  <affected-histogram name="Startup.BrowserOpenTabs"/>
</histogram_suffixes>

<histogram_suffixes name="TabNewTabOnload" separator=".">
  <suffix name="Google" label="New Tab page for Google."/>
  <suffix name="Local" label="Local New Tab page."/>
  <suffix name="LocalGoogle" label="Local New Tab page for Google.">
    <obsolete>
      Removed 06/2017, never worked correctly.
    </obsolete>
  </suffix>
  <suffix name="LocalOther"
      label="Local New Tab page for a non-Google provider.">
    <obsolete>
      Removed 06/2017, never worked correctly.
    </obsolete>
  </suffix>
  <suffix name="Other" label="New Tab page for a non-Google provider."/>
  <affected-histogram name="Tab.NewTabOnload"/>
</histogram_suffixes>

<histogram_suffixes name="Tabs.SwitchLatency" separator="_">
  <suffix name="Actual"
      label="The time it takes to show a real live frame from the renderer on
             the screen after the user selects a tab. This doesn not include
             fake snapshots or other tricks, but the actual time to get real
             interactable content displayed."/>
  <suffix name="Perceived"
      label="The time it takes to show something on the screen after the user
             selects a tab. This might be a fake snapshot or it might just be
             the time it takes to show the real content if no snapshot was
             available."/>
  <affected-histogram name="Tabs.SwitchFromCloseLatency"/>
  <affected-histogram name="Tabs.SwitchFromExitLatency"/>
  <affected-histogram name="Tabs.SwitchFromNewLatency"/>
  <affected-histogram name="Tabs.SwitchFromUserLatency"/>
</histogram_suffixes>

<histogram_suffixes name="Tabs.TabUsageIntervalLength" separator="_">
  <suffix name="30" label="30 seconds"/>
  <suffix name="60" label="1 minute"/>
  <suffix name="600" label="10 minutes"/>
  <suffix name="3600" label="1 hour"/>
  <suffix name="18000" label="5 hours"/>
  <suffix name="43200" label="12 hours"/>
  <affected-histogram name="Tabs.UnusedAndClosedInInterval.Count"/>
  <affected-histogram name="Tabs.UnusedInInterval.Count"/>
  <affected-histogram name="Tabs.UsedAndClosedInInterval.Count"/>
  <affected-histogram name="Tabs.UsedInInterval.Count"/>
</histogram_suffixes>

<histogram_suffixes name="TaskSchedulerMayBlock" separator=".">
  <obsolete>
    Deprecated 1/2018. Merged with TaskSchedulerTaskPriority into
    TaskSchedulerTaskType to reduce suffixing.
  </obsolete>
  <suffix name="MayBlock"
      label="Applies to tasks posted with MayBlock() or
             WithBaseSyncPrimitives()."/>
  <affected-histogram name="TaskScheduler.TaskLatency.BackgroundTaskPriority">
    <obsolete>
      Deprecated 4/2017. Units changed from milliseconds to microseconds.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="TaskScheduler.TaskLatency.UserBlockingTaskPriority">
    <obsolete>
      Deprecated 4/2017. Units changed from milliseconds to microseconds.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="TaskScheduler.TaskLatency.UserVisibleTaskPriority">
    <obsolete>
      Deprecated 4/2017. Units changed from milliseconds to microseconds.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="TaskScheduler.TaskLatencyMicroseconds.BackgroundTaskPriority"/>
  <affected-histogram
      name="TaskScheduler.TaskLatencyMicroseconds.UserBlockingTaskPriority"/>
  <affected-histogram
      name="TaskScheduler.TaskLatencyMicroseconds.UserVisibleTaskPriority"/>
</histogram_suffixes>

<histogram_suffixes name="TaskSchedulerName" separator=".">
  <suffix base="true" name="Browser"
      label="TaskScheduler for the browser process."/>
  <suffix base="true" name="ContentChild"
      label="TaskSchedulers for various instantiations of
             content::ChildProcess."/>
  <suffix base="true" name="Renderer"
      label="TaskSchedulers for renderer processes."/>
  <affected-histogram name="TaskScheduler.DetachDuration"/>
  <affected-histogram name="TaskScheduler.HeartbeatLatencyMicroseconds"/>
  <affected-histogram name="TaskScheduler.NumTasksBeforeDetach"/>
  <affected-histogram name="TaskScheduler.NumTasksBetweenWaits"/>
  <affected-histogram name="TaskScheduler.TaskLatencyMicroseconds"/>
</histogram_suffixes>

<histogram_suffixes name="TaskSchedulerTaskPriority" separator=".">
  <obsolete>
    Deprecated 1/2018. Merged with TaskSchedulerMayBlock into
    TaskSchedulerTaskType to reduce suffixing.
  </obsolete>
  <suffix name="BackgroundTaskPriority"
      label="Applies to tasks posted with a BACKGROUND priority."/>
  <suffix name="UserBlockingTaskPriority"
      label="Applies to tasks posted with a USER_BLOCKING priority."/>
  <suffix name="UserVisibleTaskPriority"
      label="Applies to tasks posted with a USER_VISIBLE priority."/>
  <affected-histogram name="TaskScheduler.TaskLatency">
    <obsolete>
      Deprecated 4/2017. Units changed from milliseconds to microseconds.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="TaskScheduler.TaskLatency.BackgroundFileIOPool">
    <obsolete>
      Deprecated 12/2016. Pool name removed from task latency histogram name.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="TaskScheduler.TaskLatency.BackgroundPool">
    <obsolete>
      Deprecated 12/2016. Pool name removed from task latency histogram name.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="TaskScheduler.TaskLatency.ForegroundFileIOPool">
    <obsolete>
      Deprecated 12/2016. Pool name removed from task latency histogram name.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="TaskScheduler.TaskLatency.ForegroundPool">
    <obsolete>
      Deprecated 12/2016. Pool name removed from task latency histogram name.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="TaskScheduler.TaskLatencyMicroseconds"/>
</histogram_suffixes>

<histogram_suffixes name="TaskSchedulerTaskType" separator=".">
  <suffix name="BackgroundTaskPriority"
      label="Applies to tasks posted with a BACKGROUND priority and neither
             of MayBlock() nor WithBaseSyncPrimitives()."/>
  <suffix name="BackgroundTaskPriority_MayBlock"
      label="Applies to tasks posted with a BACKGROUND priority and
             MayBlock() or WithBaseSyncPrimitives()."/>
  <suffix name="UserBlockingTaskPriority"
      label="Applies to tasks posted with a USER_BLOCKING priority and
             neither of MayBlock() nor WithBaseSyncPrimitives()."/>
  <suffix name="UserBlockingTaskPriority_MayBlock"
      label="Applies to tasks posted with a USER_BLOCKING priority and
             MayBlock() or WithBaseSyncPrimitives()."/>
  <suffix name="UserVisibleTaskPriority"
      label="Applies to tasks posted with a USER_VISIBLE priority and neither
             of MayBlock() nor WithBaseSyncPrimitives()."/>
  <suffix name="UserVisibleTaskPriority_MayBlock"
      label="Applies to tasks posted with a USER_VISIBLE priority and
             MayBlock() or WithBaseSyncPrimitives()."/>
  <affected-histogram
      name="TaskScheduler.HeartbeatLatencyMicroseconds.Browser"/>
  <affected-histogram
      name="TaskScheduler.HeartbeatLatencyMicroseconds.ContentChild"/>
  <affected-histogram
      name="TaskScheduler.HeartbeatLatencyMicroseconds.Renderer"/>
  <affected-histogram name="TaskScheduler.TaskLatencyMicroseconds.Browser"/>
  <affected-histogram
      name="TaskScheduler.TaskLatencyMicroseconds.ContentChild"/>
  <affected-histogram name="TaskScheduler.TaskLatencyMicroseconds.Renderer"/>
</histogram_suffixes>

<histogram_suffixes name="TaskSchedulerWorkerPool" separator=".">
  <suffix name="BackgroundBlockingPool"
      label="Applies to the BackgroundBlocking worker pool."/>
  <suffix name="BackgroundFileIOPool"
      label="Applies to the BackgroundFileIO worker pool.">
    <obsolete>
      Deprecated 02/2017. Pool was renamed to BackgroundBlocking.
    </obsolete>
  </suffix>
  <suffix name="BackgroundPool" label="Applies to the Background worker pool."/>
  <suffix name="ForegroundBlockingPool"
      label="Applies to the ForegroundBlocking worker pool."/>
  <suffix name="ForegroundFileIOPool"
      label="Applies to the ForegroundFileIO worker pool.">
    <obsolete>
      Deprecated 02/2017. Pool was renamed to ForegroundBlocking.
    </obsolete>
  </suffix>
  <suffix name="ForegroundPool" label="Applies to the Foreground worker pool."/>
  <suffix name="RendererBackgroundBlockingPool"
      label="Applies to the RendererBackgroundBlocking worker pool.">
    <obsolete>
      Deprecated 01/2018. In favor of TaskSchedulerName suffix.
    </obsolete>
  </suffix>
  <suffix name="RendererBackgroundPool"
      label="Applies to the RendererBackground worker pool.">
    <obsolete>
      Deprecated 01/2018. In favor of TaskSchedulerName suffix.
    </obsolete>
  </suffix>
  <suffix name="RendererForegroundBlockingPool"
      label="Applies to the RendererForegroundBlocking worker pool.">
    <obsolete>
      Deprecated 01/2018. In favor of TaskSchedulerName suffix.
    </obsolete>
  </suffix>
  <suffix name="RendererForegroundPool"
      label="Applies to the RendererForeground worker pool.">
    <obsolete>
      Deprecated 01/2018. In favor of TaskSchedulerName suffix.
    </obsolete>
  </suffix>
  <affected-histogram name="TaskScheduler.DetachDuration">
    <obsolete>
      Deprecated 01/2018. In favor of explicit .Browser suffix.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="TaskScheduler.DetachDuration.Browser"/>
  <affected-histogram name="TaskScheduler.DetachDuration.ContentChild"/>
  <affected-histogram name="TaskScheduler.DetachDuration.Renderer"/>
  <affected-histogram name="TaskScheduler.NumTasksBeforeDetach">
    <obsolete>
      Deprecated 01/2018. In favor of explicit .Browser suffix.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="TaskScheduler.NumTasksBeforeDetach.Browser"/>
  <affected-histogram name="TaskScheduler.NumTasksBeforeDetach.ContentChild"/>
  <affected-histogram name="TaskScheduler.NumTasksBeforeDetach.Renderer"/>
  <affected-histogram name="TaskScheduler.NumTasksBetweenWaits">
    <obsolete>
      Deprecated 01/2018. In favor of explicit .Browser suffix.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="TaskScheduler.NumTasksBetweenWaits.Browser"/>
  <affected-histogram name="TaskScheduler.NumTasksBetweenWaits.ContentChild"/>
  <affected-histogram name="TaskScheduler.NumTasksBetweenWaits.Renderer"/>
  <affected-histogram name="TaskScheduler.TaskLatency">
    <obsolete>
      Deprecated 12/2016. Pool name removed from task latency histogram name.
    </obsolete>
  </affected-histogram>
</histogram_suffixes>

<histogram_suffixes name="TeamDrivesSupport" separator=".">
  <suffix name="TeamDrives"/>
  <affected-histogram name="Drive.DeltaFeedLoadTime"/>
  <affected-histogram name="Drive.DirectoryFeedLoadTime"/>
  <affected-histogram name="Drive.FullFeedLoadTime"/>
</histogram_suffixes>

<histogram_suffixes name="ThreadWatcher" separator=".">
  <suffix name="CACHE" label="where watched thread is CACHE BrowserThread."/>
  <suffix name="DB" label="where watched thread is DB BrowserThread."/>
  <suffix name="FILE" label="where watched thread is FILE BrowserThread."/>
  <suffix name="IO" label="where watched thread is IO BrowserThread."/>
  <suffix name="UI" label="where watched thread is UI BrowserThread."/>
  <affected-histogram name="ThreadWatcher.ResponseTime"/>
  <affected-histogram name="ThreadWatcher.ResponsiveThreads"/>
  <affected-histogram name="ThreadWatcher.Unresponsive"/>
  <affected-histogram name="ThreadWatcher.UnresponsiveThreads"/>
</histogram_suffixes>

<histogram_suffixes name="ThumbnailCaptureTrigger" separator=".">
  <suffix name="NavigatingAway" label="Triggered by navigating away."/>
  <suffix name="TabHidden" label="Triggered by the tab being hidden."/>
  <affected-histogram name="Thumbnails.CaptureOutcome"/>
</histogram_suffixes>

<histogram_suffixes name="TimestampTimebaseProcess" separator=".">
  <obsolete>
    Deprecated as of 11/2017 in Issue 650338. Using a DCHECK instead.
  </obsolete>
  <suffix name="Browser"/>
  <suffix name="Renderer"/>
  <affected-histogram name="Event.TimestampHasValidTimebase"/>
</histogram_suffixes>

<histogram_suffixes name="TotalTimeToHttpsGoogle" separator=".">
  <suffix name="NotQuic">
    <obsolete>
      Deprecated as of 08/2015. Use Net.HttpJob.*Secure.NotQuic instead.
    </obsolete>
  </suffix>
  <suffix name="Quic">
    <obsolete>
      Deprecated as of 08/2015. Use Net.HttpJob.*Secure.Quic instead.
    </obsolete>
  </suffix>
  <suffix name="Secure.NotQuic"
      label="Recorded for Google servers (https) only when QUIC is not used."/>
  <suffix name="Secure.Quic"
      label="Recorded for Google servers (https) only when QUIC is used."/>
  <affected-histogram name="Net.HttpJob.TotalTime"/>
  <affected-histogram name="Net.HttpJob.TotalTimeCached">
    <obsolete>
      Deprecated 10/2016, no longer used.
    </obsolete>
  </affected-histogram>
  <affected-histogram name="Net.HttpJob.TotalTimeNotCached"/>
</histogram_suffixes>

<histogram_suffixes name="Tps65090Fets" separator=".">
  <suffix name="Fet1" label="FET1 on tps65090 (register 0xf)"/>
  <suffix name="Fet2" label="FET2 on tps65090 (register 0x10)"/>
  <suffix name="Fet3" label="FET3 on tps65090 (register 0x11)"/>
  <suffix name="Fet4" label="FET4 on tps65090 (register 0x12)"/>
  <suffix name="Fet5" label="FET5 on tps65090 (register 0x13)"/>
  <suffix name="Fet6" label="FET6 on tps65090 (register 0x14)"/>
  <suffix name="Fet7" label="FET7 on tps65090 (register 0x15)"/>
  <affected-histogram name="Platform.Tps65090Retries"/>
</histogram_suffixes>

<histogram_suffixes name="TrackedPreferencesExternalValidators" separator=".">
  <suffix name="FromRegistry"
      label="Validation using MACs in the Windows Registry."/>
  <affected-histogram name="Settings.TrackedPreferenceChanged"/>
  <affected-histogram name="Settings.TrackedPreferenceCleared"/>
  <affected-histogram name="Settings.TrackedPreferenceInitialized"/>
  <affected-histogram name="Settings.TrackedPreferenceMigratedLegacyDeviceId"/>
  <affected-histogram name="Settings.TrackedPreferenceNullInitialized"/>
  <affected-histogram name="Settings.TrackedPreferenceTrustedInitialized"/>
  <affected-histogram name="Settings.TrackedPreferenceUnchanged"/>
</histogram_suffixes>

<histogram_suffixes name="TrackedSplitPreferences" separator=".">
  <suffix name="extensions.settings" label="Extension IDs dictionary"/>
  <affected-histogram name="Settings.TrackedSplitPreferenceChanged"/>
</histogram_suffixes>

<histogram_suffixes name="TrafficStatsAmortizerBytesDirection" separator=".">
  <obsolete>
    Deprecated 2018/07.
  </obsolete>
  <suffix name="Rx" label="Records only received network bytes."/>
  <suffix name="Tx" label="Records only transmitted network bytes."/>
  <affected-histogram
      name="TrafficStatsAmortizer.PostAmortizationRunDataUseBytes"/>
  <affected-histogram
      name="TrafficStatsAmortizer.PreAmortizationRunDataUseBytes"/>
</histogram_suffixes>

<histogram_suffixes name="UnackedPackets" separator=".">
  <obsolete>
    Deprecated as of 08/2016.
  </obsolete>
  <suffix name="NoUnackedPackets"
      label="The session had no outstanding unacked packets."/>
  <suffix name="UnackedPackets"
      label="The session had outstanding unacked packets."/>
  <affected-histogram
      name="Net.QuicSession.LocallyTimedOutWithOpenStreams.TimeSinceLastReceived"/>
</histogram_suffixes>

<histogram_suffixes name="UnPackConsumer" separator="_">
  <suffix name="ChromeArchivePatch"
      label="compressed patch: chrome_patch.packed.7z holding
             chrome_patch.diff (small)."/>
  <suffix name="CompressedChromeArchive"
      label="compressed archive: chrome.packed.7z holding chrome.7z (big)."/>
  <suffix name="SetupExePatch"
      label="compressed patch: setup_patch.packed.7z holding setup_patch.diff
             (small)."/>
  <suffix name="UncompressedChromeArchive"
      label="uncompressed archive: chrome.7z holding install dir (big)."/>
  <affected-histogram name="Setup.Install.LzmaUnPackNTSTATUS"/>
  <affected-histogram name="Setup.Install.LzmaUnPackStatus"/>
</histogram_suffixes>

<histogram_suffixes name="UserClasses" separator=".">
  <suffix name="ActiveNTPUser" label="Active NTP user"/>
  <suffix name="ActiveSuggestionsConsumer" label="Active suggestions consumer"/>
  <suffix name="RareNTPUser" label="Rare NTP user"/>
  <affected-histogram
      name="NewTabPage.ContentSuggestions.TimeUntilFirstShownTrigger"/>
  <affected-histogram
      name="NewTabPage.ContentSuggestions.TimeUntilFirstSoftTrigger">
    <obsolete>
      Deprecated as of July 2017, in favor of
      NewTabPage.ContentSuggestions.TimeUntilFirstShownTrigger and
      NewTabPage.ContentSuggestions.TimeUntilFirstStartupTrigger.
    </obsolete>
  </affected-histogram>
  <affected-histogram
      name="NewTabPage.ContentSuggestions.TimeUntilFirstStartupTrigger"/>
  <affected-histogram
      name="NewTabPage.ContentSuggestions.TimeUntilPersistentFetch"/>
  <affected-histogram name="NewTabPage.ContentSuggestions.TimeUntilSoftFetch"/>
  <affected-histogram
      name="NewTabPage.ContentSuggestions.TimeUntilStartupFetch"/>
</histogram_suffixes>

<histogram_suffixes name="UserScriptRunLocation" separator=".">
  <suffix name="DocumentEnd" label="Scripts with run_at: document_end."/>
  <suffix name="DocumentIdle" label="Scripts with run_at: document_idle."/>
  <suffix name="DocumentStart" label="Scripts with run_at: document_start."/>
  <affected-histogram name="Extensions.InjectedScriptExecutionTime"/>
  <affected-histogram name="Extensions.LongInjectionTaskTime"/>
  <affected-histogram name="Extensions.TimeYieldedBetweenContentScriptRuns"/>
</histogram_suffixes>

<histogram_suffixes name="V8SpecialApps" separator=".">
  <suffix name="calendar" label="Custom histogram for Calendar"/>
  <suffix name="docs" label="Custom histogram for Google Docs and Drive"/>
  <suffix name="gmail" label="Custom histogram for GMail"/>
  <suffix name="inbox" label="Custom histogram for Inbox"/>
  <suffix name="plus" label="Custom histogram for Google+"/>
  <suffix name="top10"
      label="Custom histogram for Alexa's Top10 non-Google sites"/>
  <suffix name="youtube" label="Custom histogram for Youtube"/>
  <affected-histogram name="V8.MemoryExternalFragmentationTotal"/>
  <affected-histogram name="V8.MemoryHeapCommitted"/>
  <affected-histogram name="V8.MemoryHeapSampleTotalCommitted"/>
  <affected-histogram name="V8.MemoryHeapSampleTotalUsed"/>
  <affected-histogram name="V8.MemoryHeapUsed"/>
</histogram_suffixes>

<histogram_suffixes name="V8WasmSeparateAsmAndWasm" separator=".">
  <suffix name="asm" label="This histogram contains results for asm.js"/>
  <suffix name="wasm" label="This histogram contains results for WASM modules"/>
  <affected-histogram name="V8.WasmCompileFunctionMicroSeconds"/>
  <affected-histogram name="V8.WasmCompileModuleMicroSeconds"/>
  <affected-histogram name="V8.WasmDecodeFunctionMicroSeconds"/>
  <affected-histogram name="V8.WasmDecodeModuleMicroSeconds"/>
  <affected-histogram name="V8.WasmDecodeModulePeakMemoryBytes"/>
  <affected-histogram name="V8.WasmFunctionSizeBytes"/>
  <affected-histogram name="V8.WasmFunctionsPerModule"/>
  <affected-histogram name="V8.WasmInstantiateModuleMicroSeconds"/>
  <affected-histogram name="V8.WasmMaxMemPagesCount"/>
  <affected-histogram name="V8.WasmMinMemPagesCount"/>
  <affected-histogram name="V8.WasmModuleSizeBytes"/>
</histogram_suffixes>

<histogram_suffixes name="VideoAdaptationReason" separator=".">
  <suffix name="Cpu" label="Adapt reason: CPU."/>
  <suffix name="Quality" label="Adapt reason: quality."/>
  <affected-histogram name="WebRTC.Video.AdaptChangesPerMinute"/>
</histogram_suffixes>

<histogram_suffixes name="VideoDecodeStatsDBOperations" separator=".">
  <suffix name="Destroy" label="Success status for destroying the DB"/>
  <suffix name="Initialize" label="Success status for initializing the DB."/>
  <suffix name="Read" label="Success status for reading from the DB"/>
  <suffix name="Write" label="Success status for writing to the DB"/>
  <affected-histogram name="Media.VideoDecodeStatsDB.OpSuccess"/>
</histogram_suffixes>

<histogram_suffixes name="VideoEncodedQpStats" separator=".">
  <suffix name="H264"
      label="Video codec: H264. QP range: 0-51. No spatial layers."/>
  <suffix name="Vp8"
      label="Video codec: VP8. QP range: 0-127. Single stream sent."/>
  <suffix name="Vp8.S0"
      label="Video codec: VP8. QP range: 0-127. Spatial index 0."/>
  <suffix name="Vp8.S1"
      label="Video codec: VP8. QP range: 0-127. Spatial index 1."/>
  <suffix name="Vp8.S2"
      label="Video codec: VP8. QP range: 0-127. Spatial index 2."/>
  <suffix name="Vp9"
      label="Video codec: VP9. QP range: 0-255. No spatial layers."/>
  <suffix name="Vp9.S0"
      label="Video codec: VP9. QP range: 0-255. Spatial layer 0."/>
  <suffix name="Vp9.S1"
      label="Video codec: VP9. QP range: 0-255. Spatial layer 1."/>
  <suffix name="Vp9.S2"
      label="Video codec: VP9. QP range: 0-255. Spatial layer 2."/>
  <affected-histogram name="WebRTC.Video.Encoded.Qp"/>
</histogram_suffixes>

<histogram_suffixes name="Visibility" separator=".">
  <suffix name="Hidden"
      label="The tab is not visible because it is in a minimized window
             (desktop) or background app (mobile), or because it isn't active
             in its tab strip."/>
  <suffix name="Occluded"
      label="The tab is fully covered by other windows. ChromeOS and Mac OS X
             only."/>
  <suffix name="Visible"
      label="The tab is visible. Except on ChromeOS and Mac OS X, a tab fully
             covered by other windows is considered visible."/>
  <affected-histogram name="Tab.Visibility"/>
</histogram_suffixes>

<histogram_suffixes name="VR.Mode" separator=".">
  <suffix name="AllVR" label="Entered either VR Browsing or WebVR mode."/>
  <suffix name="VRBrowsing" label="Entered VR Browsing Mode."/>
  <suffix name="WebVRPresentation"
      label="Entered WebVR presentation mode (also includes splash screen)."/>
  <affected-histogram name="VR.Component.Assets.DurationUntilReady.OnEnter"/>
  <affected-histogram name="VR.Component.Assets.Status.OnEnter"/>
  <affected-histogram name="VR.NetworkConnectionType.OnEnter"/>
</histogram_suffixes>

<histogram_suffixes name="VRFreNotCompleteType" separator=".">
  <suffix name="VrBrowser" label="FRE not complete when starting Chrome"/>
  <suffix name="WebVRAutopresent"
      label="FRE not complete when starting WebVR auto-presentation"/>
  <affected-histogram name="VRFreNotComplete"/>
</histogram_suffixes>

<histogram_suffixes name="VRRuntimeVersionGVRHeadset" separator=".">
  <suffix name="Cardboard" label="GVR version used with Carboard."/>
  <suffix name="Daydream" label="GVR version used with Daydream."/>
  <suffix name="Unknown" label="GVR version used with an unknown headset."/>
  <affected-histogram name="VRRuntimeVersion.GVR"/>
</histogram_suffixes>

<histogram_suffixes name="VRRuntimeVersionPlatform" separator=".">
  <suffix name="GVR"
      label="The GVR version being used for VR. Special values: (-4) Could
             not encode GVR version; (-3) Device does not support VR; (-2)
             GVR is not installed; (-1) GVR is installed but version is too
             old to be logged."/>
  <affected-histogram name="VRRuntimeVersion"/>
</histogram_suffixes>

<histogram_suffixes name="VRSessionType" separator=".">
  <suffix name="Browser"
      label="The session is restricted to the period that the browser is
             displaying a regular page."/>
  <suffix name="Fullscreen"
      label="The session is restricted to the period that the browser is
             displaying fullscreen content."/>
  <suffix name="WebVR"
      label="The session is restricted to the period that browser is
             displaying WebVR contents."/>
  <affected-histogram name="VRSessionTime"/>
  <affected-histogram name="VRSessionTimeFromDLA"/>
  <affected-histogram name="VRSessionVideoTime"/>
</histogram_suffixes>

<histogram_suffixes name="WebApkType" separator=".">
  <suffix name="BrowserApk" label="Installed by Chrome"/>
  <suffix name="UnboundApk" label="Not installed by Chrome"/>
  <affected-histogram name="WebApk.ShellApkVersion"/>
</histogram_suffixes>

<histogram_suffixes name="WebBluetoothMacOSAPIs" separator=".">
  <suffix name="DidDisconnectPeripheral" label="Disconnected from peripheral"/>
  <suffix name="DidDiscoverCharacteristics" label="Discovered characteristics"/>
  <suffix name="DidDiscoverDescriptors" label="Discovered descriptors"/>
  <suffix name="DidDiscoverPrimaryServices"
      label="Discovered primary services"/>
  <suffix name="DidFailToConnectToPeripheral"
      label="Failed to connect to peripheral"/>
  <suffix name="DidUpdateNotificationState" label="Updated notification state"/>
  <suffix name="DidUpdateValue" label="Updated value for characteristic"/>
  <suffix name="DidUpdateValueForDescriptor"
      label="Updated value for descriptor"/>
  <suffix name="DidWriteValue" label="Wrote value for characteristic"/>
  <suffix name="DidWriteValueForDescriptor"
      label="Wrote value value for descriptor"/>
  <affected-histogram name="Bluetooth.MacOS.Errors"/>
</histogram_suffixes>

<histogram_suffixes name="WebFontFamily" separator="_">
  <suffix name="opensans" label="Open Sans font"/>
  <suffix name="others" label="Fonts other than Roboto and Open Sans"/>
  <suffix name="roboto" label="Roboto font"/>
  <affected-histogram name="WebFont.DiskCache.EntryAge.Evict"/>
  <affected-histogram name="WebFont.DiskCache.EntryAge.Hit"/>
  <affected-histogram name="WebFont.DiskCache.ReuseCount.Evict"/>
  <affected-histogram name="WebFont.DiskCache.ReuseCount.Hit"/>
  <affected-histogram name="WebFont.DiskCacheHit"/>
</histogram_suffixes>

<histogram_suffixes name="WebFontFormat" separator=".">
  <suffix name="SFNT" label="TrueType or OpenType fonts"/>
  <suffix name="WOFF" label="WOFF 1.0 fonts"/>
  <suffix name="WOFF2" label="WOFF 2.0 fonts"/>
  <affected-histogram name="WebFont.DecodeSpeed"/>
</histogram_suffixes>

<histogram_suffixes name="WebFontMissedCache" separator="." ordering="prefix">
  <owner>toyoshim@chromium.org</owner>
  <suffix name="MissedCache" label="On missed cache"/>
  <affected-histogram name="WebFont.DownloadTime.0.Under10KB"/>
  <affected-histogram name="WebFont.DownloadTime.1.10KBTo50KB"/>
  <affected-histogram name="WebFont.DownloadTime.2.50KBTo100KB"/>
  <affected-histogram name="WebFont.DownloadTime.3.100KBTo1MB"/>
  <affected-histogram name="WebFont.DownloadTime.4.Over1MB"/>
  <affected-histogram name="WebFont.DownloadTime.LoadError"/>
</histogram_suffixes>

<histogram_suffixes name="WebFontMissedCacheAndInterventionTriggeredOrNot"
    separator="." ordering="prefix">
  <obsolete>
    Deprecated 10/2017. Related field trial has finished rolling out.
  </obsolete>
  <owner>toyoshim@chromium.org</owner>
  <suffix name="MissedCacheAndInterventionNotTriggered"
      label="On missed cache and intervention not triggered"/>
  <suffix name="MissedCacheAndInterventionTriggered"
      label="On missed cache and intervention triggered"/>
  <affected-histogram name="WebFont.DownloadTime.1.10KBTo50KB"/>
  <affected-histogram name="WebFont.DownloadTime.1.10KBTo50KB"/>
</histogram_suffixes>

<histogram_suffixes name="WebMediaPlayerContentTypes" separator=".">
  <suffix name="Audio"/>
  <suffix name="AudioVideo"/>
  <suffix name="Video"/>
  <affected-histogram name="Media.PreloadMetadataSuspendWasIdeal"/>
</histogram_suffixes>

<histogram_suffixes name="WebMediaPlayerImplTypes" separator=".">
  <suffix name="EME"
      label="For Encrypted Media Extensions (EME) based playbacks."/>
  <suffix name="MSE"
      label="For Media Source Extensions (MSE) based playbacks."/>
  <suffix name="SRC" label="For src= playbacks."/>
  <affected-histogram name="Media.TimeToFirstFrame"/>
  <affected-histogram name="Media.TimeToMetadata"/>
  <affected-histogram name="Media.TimeToPlayReady"/>
  <affected-histogram name="Media.UnderflowDuration2"/>
</histogram_suffixes>

<histogram_suffixes name="WebRTCEchoCancellerEstimate" separator=".">
  <suffix name="Max" label="The maximum over the time interval"/>
  <suffix name="Min" label="The minimum over the time interval"/>
  <suffix name="Value" label="The last estimated value of the time interval"/>
  <affected-histogram name="WebRTC.Audio.EchoCanceller.Erl"/>
  <affected-histogram name="WebRTC.Audio.EchoCanceller.Erle"/>
</histogram_suffixes>

<histogram_suffixes name="WebRTCEchoCancellerStatisticType" separator=".">
  <suffix name="Average" label="The average over the time interval"/>
  <suffix name="Max" label="The maximum over the time interval"/>
  <suffix name="Min" label="The minimum over the time interval"/>
  <affected-histogram name="WebRTC.Audio.EchoCanceller.ComfortNoiseBand0"/>
  <affected-histogram name="WebRTC.Audio.EchoCanceller.ComfortNoiseBand1"/>
  <affected-histogram name="WebRTC.Audio.EchoCanceller.ErlBand0"/>
  <affected-histogram name="WebRTC.Audio.EchoCanceller.ErlBand1"/>
  <affected-histogram name="WebRTC.Audio.EchoCanceller.ErleBand0"/>
  <affected-histogram name="WebRTC.Audio.EchoCanceller.ErleBand1"/>
  <affected-histogram name="WebRTC.Audio.EchoCanceller.SuppressorGainBand0"/>
  <affected-histogram name="WebRTC.Audio.EchoCanceller.SuppressorGainBand1"/>
</histogram_suffixes>

<histogram_suffixes name="WebRTCMediaType" separator=".">
  <suffix name="Audio" label="Audio"/>
  <suffix name="Data" label="Data"/>
  <suffix name="Video" label="Video"/>
  <affected-histogram name="WebRTC.PeerConnection.SrtpCryptoSuite"/>
  <affected-histogram name="WebRTC.PeerConnection.SslCipherSuite"/>
</histogram_suffixes>

<histogram_suffixes name="WebRTCVideoExperimentGroupId" separator=".">
  <owner>ilnik@chromium.org</owner>
  <suffix name="ExperimentGroup0"/>
  <suffix name="ExperimentGroup1"/>
  <suffix name="ExperimentGroup2"/>
  <suffix name="ExperimentGroup3"/>
  <suffix name="ExperimentGroup4"/>
  <suffix name="S0"/>
  <suffix name="S1"/>
  <suffix name="S2"/>
  <affected-histogram name="WebRTC.Video.Decoded.Vp8.Qp"/>
  <affected-histogram name="WebRTC.Video.EndToEndDelayInMs"/>
  <affected-histogram name="WebRTC.Video.EndToEndDelayMaxInMs"/>
  <affected-histogram name="WebRTC.Video.InterframeDelay95PercentileInMs"/>
  <affected-histogram name="WebRTC.Video.InterframeDelayInMs"/>
  <affected-histogram name="WebRTC.Video.InterframeDelayMaxInMs"/>
  <affected-histogram name="WebRTC.Video.KeyFramesReceivedInPermille"/>
  <affected-histogram name="WebRTC.Video.MediaBitrateReceivedInKbps"/>
  <affected-histogram name="WebRTC.Video.ReceivedHeightInPixels"/>
  <affected-histogram name="WebRTC.Video.ReceivedWidthInPixels"/>
  <affected-histogram name="WebRTC.Video.Screenshare.Decoded.Vp8.Qp"/>
  <affected-histogram name="WebRTC.Video.Screenshare.EndToEndDelayInMs"/>
  <affected-histogram name="WebRTC.Video.Screenshare.EndToEndDelayMaxInMs"/>
  <affected-histogram
      name="WebRTC.Video.Screenshare.InterframeDelay95PercentileInMs"/>
  <affected-histogram name="WebRTC.Video.Screenshare.InterframeDelayInMs"/>
  <affected-histogram name="WebRTC.Video.Screenshare.InterframeDelayMaxInMs"/>
  <affected-histogram
      name="WebRTC.Video.Screenshare.KeyFramesReceivedInPermille"/>
  <affected-histogram
      name="WebRTC.Video.Screenshare.MediaBitrateReceivedInKbps"/>
  <affected-histogram name="WebRTC.Video.Screenshare.ReceivedHeightInPixels"/>
  <affected-histogram name="WebRTC.Video.Screenshare.ReceivedWidthInPixels"/>
</histogram_suffixes>

<histogram_suffixes name="WebSocketErrorCodesVariants" separator="_">
  <suffix name="Localhost"/>
  <suffix name="NotLocalhost"/>
  <affected-histogram name="Net.WebSocket.ErrorCodes"/>
</histogram_suffixes>

<histogram_suffixes name="WebSocketMessageSizeReceive" separator=".">
  <suffix name="ArrayBuffer"/>
  <suffix name="Blob"/>
  <affected-histogram name="WebCore.WebSocket.MessageSize.Receive"/>
</histogram_suffixes>

<histogram_suffixes name="WebSocketMessageSizeSend" separator=".">
  <suffix name="ArrayBuffer"/>
  <suffix name="ArrayBufferView"/>
  <suffix name="Blob"/>
  <affected-histogram name="WebCore.WebSocket.MessageSize.Send"/>
</histogram_suffixes>

<histogram_suffixes name="WebStoreLinkExperiment" separator="_">
  <suffix name="Disabled" label="Neither extra webstore link is visible"/>
  <suffix name="FooterLink" label="Link in bottom right of footer"/>
  <suffix name="PlusIcon" label="Plus icon in apps page"/>
  <affected-histogram name="Extensions.AppLaunch"/>
  <affected-histogram name="NewTabPage.DefaultPageType"/>
</histogram_suffixes>

<histogram_suffixes name="WeekdayNames" separator="_">
  <suffix name="Friday"/>
  <suffix name="Monday"/>
  <suffix name="Saturday"/>
  <suffix name="Sunday"/>
  <suffix name="Thursday"/>
  <suffix name="Tuesday"/>
  <suffix name="Wednesday"/>
  <affected-histogram name="NewTabPage.ContentSuggestions.UsageTimeLocal"/>
</histogram_suffixes>

<histogram_suffixes name="WelcomeWin10Variant" separator="_">
  <owner>tmartino@chromium.org</owner>
  <suffix name="InlineCombined" label="Inline layout style, combined promo"/>
  <suffix name="InlineDefault"
      label="Inline layout style, default browser promo only"/>
  <suffix name="SectionedCombined"
      label="Sectioned layout style, combined promo"/>
  <suffix name="SectionedDefault"
      label="Sectioned layout style, default browser promo only"/>
  <affected-histogram name="Welcome.Win10.DefaultPromptResult"/>
  <affected-histogram name="Welcome.Win10.PinnedPromptResult"/>
</histogram_suffixes>

<histogram_suffixes name="WindowsImageCaptureOutcomeCategories" separator=".">
  <suffix name="DirectShowAnyRes" label="Using DirectShow at any resolution."/>
  <suffix name="DirectShowHighRes"
      label="Using DirectShow at high resolution (width &gt; 1920)."/>
  <suffix name="MediaFoundationAnyRes"
      label="Using MediaFoundation at any resolution."/>
  <suffix name="MediaFoundationHighRes"
      label="Using MediaFoundation at high resolution (width &gt; 1920)."/>
  <affected-histogram name="Media.VideoCapture.Windows.ImageCaptureOutcome"/>
</histogram_suffixes>

<histogram_suffixes name="WrenchMenuActionTimings" separator=".">
  <suffix name="About"/>
  <suffix name="AppInfo"/>
  <suffix name="BetaForum"/>
  <suffix name="BookmarkAllTabs"/>
  <suffix name="BookmarkOpen">
    <obsolete>
      Deprecated as of 02/2015. Use WrenchMenu.TimeToAction.OpenBookmark
      instead.
    </obsolete>
  </suffix>
  <suffix name="BookmarkPage"/>
  <suffix name="Cast"/>
  <suffix name="ChromeOSRestart"/>
  <suffix name="ClearBrowsingData"/>
  <suffix name="Copy"/>
  <suffix name="CopyUrl"/>
  <suffix name="CreateHostedApp"/>
  <suffix name="CreateShortcuts">
    <obsolete>
      Deprecated as of 04/2017. Replaced by Bookmark Apps (CreateHostedApp).
    </obsolete>
  </suffix>
  <suffix name="Cut"/>
  <suffix name="DevTools"/>
  <suffix name="DevToolsConsole"/>
  <suffix name="DevToolsDevices"/>
  <suffix name="DistillPage"/>
  <suffix name="EnterFullScreen"/>
  <suffix name="Exit"/>
  <suffix name="Feedback"/>
  <suffix name="Find"/>
  <suffix name="HelpPage"/>
  <suffix name="ImportSettings"/>
  <suffix name="ManageExtensions"/>
  <suffix name="NewIncognitoWindow"/>
  <suffix name="NewTab"/>
  <suffix name="NewWindow"/>
  <suffix name="OpenBookmark"/>
  <suffix name="OpenInChrome"/>
  <suffix name="OpenRecentTab"/>
  <suffix name="Paste"/>
  <suffix name="PinToStartScreen"/>
  <suffix name="Print"/>
  <suffix name="ProfilingEnabled"/>
  <suffix name="RecentTab">
    <obsolete>
      Deprecated as of 02/2015. Use WrenchMenu.TimeToAction.OpenRecentTab
      instead.
    </obsolete>
  </suffix>
  <suffix name="RequestTabletSite"/>
  <suffix name="RestoreTab"/>
  <suffix name="SavePage"/>
  <suffix name="Settings"/>
  <suffix name="ShowBookmarkBar"/>
  <suffix name="ShowBookmarkMgr"/>
  <suffix name="ShowDownloads"/>
  <suffix name="ShowHistory"/>
  <suffix name="ShowSyncSetup"/>
  <suffix name="SiteSettings"/>
  <suffix name="TaskManager"/>
  <suffix name="ViewSource"/>
  <suffix name="Win8MetroRestart"/>
  <suffix name="WinDesktopRestart"/>
  <suffix name="ZoomMinus"/>
  <suffix name="ZoomPlus"/>
  <affected-histogram name="WrenchMenu.TimeToAction"/>
</histogram_suffixes>

</histogram_suffixes_list>

</histogram-configuration>
