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

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

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

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

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

<histogram-configuration>

<histograms>

<variants name="SidePanelEntry">
  <variant name="AboutThisSite"/>
  <variant name="Assistant"/>
  <variant name="Bookmarks"/>
  <variant name="Companion"/>
  <variant name="CustomizeChrome"/>
  <variant name="Extension"/>
  <variant name="Feed"/>
  <variant name="HistoryClusters"/>
  <variant name="Lens"/>
  <variant name="LensOverlayResults"/>
  <variant name="ReadAnything"/>
  <variant name="ReadingList"/>
  <variant name="ShoppingInsights"/>
  <variant name="SideSearch"/>
  <variant name="UserNotes"/>
  <variant name="WebView"/>
</variants>

<variants name="TabSwitchingType">
  <variant name="" summary="Aggregation of all tab states."/>
  <variant name=".NoSavedFrames_Loaded"
      summary="Tab has no saved frame in the cache but is already loaded."/>
  <variant name=".NoSavedFrames_NotLoaded"
      summary="Tab has no saved frame in the cache and is not loaded."/>
  <variant name=".WithSavedFrames"
      summary="Tab has a saved frame in the cache."/>
</variants>

<histogram name="Browser.Actions.PinnedActionsCount" units="actions"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of actions that are currently pinned to the toolbar. This
    is emitted every time the user pins or unpins an action to the toolbar.
  </summary>
</histogram>

<histogram name="Browser.ChromeOS.HatsStatus" enum="HatsStatus"
    expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the stage up to which the user interacted with the HaTS Chrome OS
    survey. This is needed in addition to the Hats metrics data since Chrome OS
    relies on client side logic to roll the dice for device selection. This is
    recorded when the Hats pipeline ends processing, which is usually when the
    controller is destroyed.
  </summary>
</histogram>

<histogram name="Browser.DarkModeStatus" enum="DarkModeStatus"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether the user's system is in dark mode, light mode, or if this choice is
    unavailable due to lack of system support. Updated every UMA upload.
  </summary>
</histogram>

<histogram name="Browser.ERP.AppInstallTrackerDiskConsumption" units="bytes"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when the AppEventsObserver::AppInstallTracker starts tracking new
    app installs or uninstalls. This represents the total disk space consumed by
    the component in the user pref store before encryption.
  </summary>
</histogram>

<histogram name="Browser.ERP.CachedEventsCountExp" units="events"
    expires_after="2025-05-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reflects cached events count: presents number of times a single event is
    received and placed in cache. Per-event count is incremented every time an
    event is added/replaced in the cache, and the metrics sample is recorded
    once the event is confirmed by the server (and thus won't be accepted for
    upload anymore). Expected to be 1 for the majority of the events, although
    small number of re-uploads is allowed. Counter for an event that has not
    been confirmed by the server yet will not be presented in UMA even if
    received and cached multiple times; since ERP guarantees delivery, this
    would only be a temporary state. Counter is inexact, since it may be reset
    in the rare cases that the uploader memory usage reaches its limit. To see
    how common that is, look at the histogram
    Browser.ERP.UploadMemoryUsagePercent.
  </summary>
</histogram>

<histogram name="Browser.ERP.ConfigFileParsingError"
    enum="EnterpriseCloudReportingStatusCode" expires_after="2025-04-01">
  <owner>[email protected]</owner>
  <owner>src/components/reporting/OWNERS</owner>
  <summary>
    Recorded when RecordHandlerImpl catches an error while trying to parse the
    configuration file that was sent from the reporting server.
  </summary>
</histogram>

<histogram name="Browser.ERP.ConfigFileSignatureVerificationError"
    enum="EnterpriseCloudReportingStatusCode" expires_after="2025-04-01">
  <owner>[email protected]</owner>
  <owner>src/components/reporting/OWNERS</owner>
  <summary>
    Recorded when ConfigurationFileController encounters an error while trying
    to verify the signature and the signed message received from the reporting
    server.
  </summary>
</histogram>

<histogram name="Browser.ERP.DataLossErrorReason"
    enum="DataLossErrorReasonBrowser" expires_after="2025-04-01">
  <owner>[email protected]</owner>
  <owner>src/components/reporting/OWNERS</owner>
  <summary>
    Recorded once each time reporting::error::DATA_LOSS is returned in the
    browser. There is a 1:1 relationship between the UMA values and error
    messages used with reporting::error::DATA_LOSS so that we can understand
    exactly which parts of the code are failing.
  </summary>
</histogram>

<histogram name="Browser.ERP.EnqueueFailureDestination"
    enum="EnterpriseCloudReportingDestination" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when ReportQueue::Enqueue is called to post an event or metric to
    ERP. It counts occurences of the reporting destination for the record
    enqueue that failed.
  </summary>
</histogram>

<histogram name="Browser.ERP.EnqueueSuccessDestination"
    enum="EnterpriseCloudReportingDestination" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when ReportQueue::Enqueue is called to post an event or metric to
    ERP. It counts occurences of the reporting destination for the record
    enqueue that succeeded.
  </summary>
</histogram>

<histogram name="Browser.ERP.EventEnqueueResult"
    enum="EnterpriseCloudReportingStatusCode" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/components/reporting/OWNERS</owner>
  <summary>
    Recorded when ReportQueue::Enqueue is called to post an event to ERP. It
    counts occurrences of the call returning success or each possible error
    Status.
  </summary>
</histogram>

<histogram name="Browser.ERP.EventEnqueueResult.{Destination}"
    enum="EnterpriseCloudReportingStatusCode" expires_after="2025-03-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when ReportQueue::Enqueue is called to post an event to ERP. It
    counts occurrences of the call returning success or each possible error
    status for the {Destination} destination.
  </summary>
  <token key="Destination">
    <variant name="ADDED_REMOVED_EVENTS"/>
    <variant name="ARC_INSTALL"/>
    <variant name="CHROME_BROWSER_ENTERPRISE"/>
    <variant name="CRASH_EVENTS"/>
    <variant name="CRD_EVENTS"/>
    <variant name="CROS_SECURITY_AGENT"/>
    <variant name="CROS_SECURITY_NETWORK"/>
    <variant name="CROS_SECURITY_PROCESS"/>
    <variant name="CROS_SECURITY_USER"/>
    <variant name="DLP_EVENTS"/>
    <variant name="EVENT_METRIC"/>
    <variant name="EXTENSION_INSTALL"/>
    <variant name="EXTENSIONS_WORKFLOW"/>
    <variant name="HEARTBEAT_EVENT"/>
    <variant name="INFO_METRIC"/>
    <variant name="KIOSK_HEARTBEAT_EVENTS"/>
    <variant name="LEGACY_TECH"/>
    <variant name="LOCK_UNLOCK_EVENTS"/>
    <variant name="LOG_UPLOAD"/>
    <variant name="LOGIN_LOGOUT_EVENTS"/>
    <variant name="MEET_DEVICE_TELEMETRY"/>
    <variant name="OS_EVENTS"/>
    <variant name="PERIPHERAL_EVENTS"/>
    <variant name="POLICY_VALIDATION"/>
    <variant name="PRINT_JOBS"/>
    <variant name="REPORTING_RECORD"/>
    <variant name="SUSPICIOUS_EVENTS"/>
    <variant name="TELEMETRY_METRIC"/>
    <variant name="UNDEFINED_DESTINATION"/>
    <variant name="UPLOAD_EVENTS"/>
    <variant name="WEB_PROTECT"/>
  </token>
</histogram>

<histogram name="Browser.ERP.EventsUploadCountExp" units="uploads"
    expires_after="2025-05-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reflects events upload count: presents number of times a single event is
    sent to the server. Per-event count is incremented every time the event is
    sent, and the metrics value is recorded in UMA once the event is confirmed
    by the server (and thus won't be sent anymore). Expected to be 1 for the
    majority of the events, although minor duplication is allowed. Counter for
    an event that has not been confirmed by the server yet will not be presented
    in UMA even if uploaded multiple times; since ERP guarantees delivery, this
    would only be a temporary state. Counter is inexact, since it may be reset
    in the rare cases that the uploader memory usage reaches its limit. To see
    how common that is, look at the histogram
    Browser.ERP.UploadMemoryUsagePercent.
  </summary>
</histogram>

<histogram name="Browser.ERP.EventUploadSizeAdjustment.{Param}" units="bytes"
    expires_after="2025-05-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    {Param} informed by the Missive daemon. Updated every time the Missive
    daemon requests uploading.
  </summary>
  <token key="Param">
    <variant name="MaxUploadSize"
        summary="The maximum upload size computed based on new events rate
                 and remaining storage capacity"/>
    <variant name="NewEventsRate"
        summary="The size of events enqueued every second"/>
    <variant name="RemainingStorageCapacity"
        summary="The remaining storage capacity"/>
  </token>
</histogram>

<histogram name="Browser.ERP.FilteredOutEvents" enum="BooleanFiltered"
    expires_after="2025-05-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether an event is filtered out by FilteredReportQueue.
  </summary>
</histogram>

<histogram name="Browser.ERP.MetricsReporting.EventMetricEnqueued"
    enum="EnterpriseCloudReportingMetricEventType" expires_after="2024-12-04">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when the MetricEventObserverManager enqueues an event metric. It
    counts occurences of the event type that was extracted from the event
    payload.
  </summary>
</histogram>

<histogram name="Browser.ERP.MetricsReporting.{MetricCollector}NoMetricData"
    enum="EnterpriseCloudReportingDestination" expires_after="2024-11-22">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when {MetricCollector}::OnMetricDataCollected is triggered from
    samplers with no metric data to report. It counts occurences of the
    reporting destination configured with the collector's report queue.
  </summary>
  <token key="MetricCollector">
    <variant name="ManualCollector"/>
    <variant name="OneShotCollector"/>
    <variant name="PeriodicCollector"/>
  </token>
</histogram>

<histogram name="Browser.ERP.MissiveClientDbusError"
    enum="EnterpriseReportingMissiveClientDbusError" expires_after="2025-04-01">
  <owner>[email protected]</owner>
  <owner>src/components/reporting/OWNERS</owner>
  <summary>
    Recorded when the Missive client receives a response from sending a record
    to the Missive daemon over dBus. There are four types of responses. OK
    indicates no error. SERVICE_UNAVAILABLE indicates Missive client is not
    connected to dBus and did not attempt to send the record. NO_RESPONSE
    indicates Missive client thinks it's connected to dBus and attempted to send
    the record over dBus but received no response from the Missive daemon.
    UNKNOWN indicates an unknown error occurred.
  </summary>
</histogram>

<histogram name="Browser.ERP.PsrResult" enum="EnterpriseReportingPsrResult"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of obtaining PSR info from healthd in the metrics
    pipeline.
  </summary>
</histogram>

<histogram name="Browser.ERP.RateLimitedEvents" enum="BooleanAccepted"
    expires_after="2025-05-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether an event is accepted by ReportQueue rate limiter.
  </summary>
</histogram>

<histogram name="Browser.ERP.RecordProcessedByServer" enum="Boolean"
    expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>src/components/reporting/OWNERS</owner>
  <summary>
    Recorded when we send an encrypted record and receive a valid response from
    the server (i.e. no network errors). True if the server processed the
    record. False if the server found some error with the record. Note that this
    may return False even if Browser.ERP.(Un)ManagedUploadEncryptedReport
    doesn't report a server error, because the server errors it refers to are
    for DM server requests which are not reporting specific.
  </summary>
</histogram>

<histogram name="Browser.ERP.RecordsPerUploadFromNonChromeosDevice"
    units="records" expires_after="2024-11-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when uploading records to the reporting server from a non-ChromeOS
    device (i.e. using the realtime reporting pipeline). Counts the number of
    records batched into a single upload request from a {ManagementStatus}
    device. Uploads containing zero records will not be included as those are
    just encryption key requests.
  </summary>
</histogram>

<histogram name="Browser.ERP.RecordsPerUploadFrom{ManagementStatus}Device"
    units="records" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when uploading records to the reporting server. Counts the number
    of records batched into a single upload request from a {ManagementStatus}
    device. Uploads containing zero records will not be included as those are
    just encryption key requests.
  </summary>
  <token key="ManagementStatus">
    <variant name="Managed" summary="managed"/>
    <variant name="Unmanaged" summary="unmanaged"/>
  </token>
</histogram>

<histogram name="Browser.ERP.ResponsePayloadSize" units="bytes"
    expires_after="2025-05-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The size of ERP's response payload as a JSON string when upload is
    successful. Updated every time when an upload succeeds AND at least one hour
    has passed since the last update AND 9 more uploads have succeeded since the
    last update.
  </summary>
</histogram>

<histogram name="Browser.ERP.RetryEnqueueRecordStatus"
    enum="EnterpriseCloudReportingStatusCode" expires_after="2025-04-01">
  <owner>[email protected]</owner>
  <owner>src/components/reporting/OWNERS</owner>
  <summary>
    Success or failure status of enqueuing a record to Missive after failing to
    enqueue at least once due to Missive unavailablity. Recorded once the
    enqueue succeeds or times out.
  </summary>
</histogram>

<histogram name="Browser.ERP.SingleRequestPayloadSize" units="bytes"
    expires_after="2025-05-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The size of ERP's request payload as a JSON string when upload is
    successful. Updated every time when an upload succeeds.
  </summary>
</histogram>

<histogram name="Browser.ERP.TimeSpentRetryingEnqueueRecord" units="ms"
    expires_after="2025-04-01">
  <owner>[email protected]</owner>
  <owner>src/components/reporting/OWNERS</owner>
  <summary>
    Amount of time spent re-trying to enqueue a record to Missive after failing
    to enqueue at least once due to Missive unavailablity. Recorded once the
    enqueue succeeds or times out.
  </summary>
</histogram>

<histogram name="Browser.ERP.UnavailableErrorReason"
    enum="UnavailableErrorReasonBrowser" expires_after="2025-04-01">
  <owner>[email protected]</owner>
  <owner>src/components/reporting/OWNERS</owner>
  <summary>
    Recorded once each time reporting::error::UNAVAILABLE is returned in the
    browser. There is a 1:1 relationship between the UMA values and error
    messages used with reporting::error::UNAVAILABLE so that we can understand
    exactly which parts of the code are failing.
  </summary>
</histogram>

<histogram name="Browser.ERP.UnuploadedCrashShouldNotReportReason"
    enum="EnterpriseReportingUnuploadedCrashShouldNotReportReason"
    expires_after="2024-10-18">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The reason that an unuploaded crash is determined that it should or should
    not be reported in crash reporting. It is recorded every time an unuploaded
    crash is received from healthd. The primary purpose is to monitor how
    frequently old unuploaded crashes are not reported because a maximum number
    of saved local IDs has been reached.
  </summary>
</histogram>

<histogram name="Browser.ERP.UnusualEnqueueTimestamp" enum="Boolean"
    expires_after="2024-12-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Would only be true. Recorded whenever an unusual timestamp is encountered
    when enqueuing a record, which will be rejected.
  </summary>
</histogram>

<histogram name="Browser.ERP.UploadMemoryUsagePercent" units="%"
    expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records memory usage by event uploader as a percent of total memory
    allocated for the client-side events upload handling. Metric is recorded
    every time a new upload request is received and stored in memory.
  </summary>
</histogram>

<histogram name="Browser.ERP.{ManagementStatus}UploadEncryptedReport"
    enum="EnterpriseDMServerRequestSuccess" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>src/components/reporting/OWNERS</owner>
  <summary>
    Status of a completed ERP upload request from a {ManagementStatus} device.
    Either successful, with a failure or with a server error. Recorded when a
    response from the server is received.
  </summary>
  <token key="ManagementStatus">
    <variant name="Managed" summary="managed"/>
    <variant name="Unmanaged" summary="unmanaged"/>
  </token>
</histogram>

<histogram name="Browser.ERP.{Param}PayloadSizePerHour" units="KiB"
    expires_after="2025-05-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The accumulated size per hour of ERP's {Param} payload as JSON strings when
    upload is successful. Updated every hour.
  </summary>
  <token key="Param">
    <variant name="Request" summary="request"/>
    <variant name="Response" summary="response"/>
  </token>
</histogram>

<histogram name="Browser.MainThreadsCongestion.1MinAfterResume" units="janks"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This metric is a specialized subset of the `Browser.MainThreadsCongestion`
    metric, designed to capture the metrics specifically during the first minute
    after a device resumes from suspend. After the main message loop starts, the
    calculation for Browser.MainThreadsCongestion is done on a periodic 30
    second interval. Any calculations that occur within a minute of resuming
    will also emit this metric. Each 30 second duration is divided into 100ms
    intervals. This metric counts the number of these intervals that were
    &quot;congested&quot;. An interval is congested if during it the UI or IO
    thread executes an &quot;important&quot; task that was queued more than 100
    ms ago, or a non-important task or a native event handler that started
    executing more than 100 ms ago. See
    https://docs.google.com/document/d/1vDSGFvJblh7yJ3U3RVB_7qZLubyfTbQdQjuN1GoUNkc/edit
    for more details.

    This is supported by ChromeOS only.
  </summary>
</histogram>

<histogram
    name="Browser.MainThreadsCongestion.ExtensionContentScripts.{NumExtensions}"
    units="janks" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This metric is emitted every 30 seconds after main message loop start, when
    there is user activity. Each 30 second duration is divided into 100ms
    intervals. This metric counts the number of these intervals that were
    &quot;congested&quot;. An interval is congested if during it the UI or IO
    thread executes an &quot;important&quot; task that was queued more than 100
    ms ago, or a non-important task or a native event handler that started
    executing more than 100 ms ago. See
    https://docs.google.com/document/d/1vDSGFvJblh7yJ3U3RVB_7qZLubyfTbQdQjuN1GoUNkc/edit
    for more details.

    This metric is split by the estimated number of extensions that ran content
    scripts in the pages that were visible during the interval. It is only
    recorded if there were visible pages. This version is used for
    {NumExtensions}.
  </summary>
  <token key="NumExtensions">
    <variant name="0" summary="0 extensions"/>
    <variant name="1" summary="1 extension"/>
    <variant name="2" summary="2 or 3 extensions"/>
    <variant name="4" summary="4 to 7 extensions"/>
    <variant name="8" summary="8 to 15 extensions"/>
    <variant name="16" summary="16 or more extensions"/>
  </token>
</histogram>

<histogram name="Browser.MainThreadsCongestion.LowMemory" units="janks"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This metric is emitted every 30 seconds after main message loop start, when
    there is user activity. Each 30 second duration is divided into 100ms
    intervals. This metric counts the number of these intervals that were
    &quot;congested&quot;. An interval is congested if during it the UI or IO
    thread executes an &quot;important&quot; task that was queued more than 100
    ms ago, or a non-important task or a native event handler that started
    executing more than 100 ms ago. See
    https://docs.google.com/document/d/1vDSGFvJblh7yJ3U3RVB_7qZLubyfTbQdQjuN1GoUNkc/edit
    for more details.

    This metric is only recorded if the available physical memory is below a
    threshold based on Memory.Experimental.AvailableMemoryPercent 10 percentile.
  </summary>
</histogram>

<histogram name="Browser.MainThreadsCongestion.Used" units="janks"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This metric is emitted every 30 seconds after main message loop start, when
    there is user activity. Each 30 second duration is divided into 100ms
    intervals. This metric counts the number of these intervals that were
    &quot;congested&quot;. An interval is congested if during it the UI or IO
    thread executes an &quot;important&quot; task that was queued more than 100
    ms ago, or a non-important task or a native event handler that started
    executing more than 100 ms ago. See
    https://docs.google.com/document/d/1vDSGFvJblh7yJ3U3RVB_7qZLubyfTbQdQjuN1GoUNkc/edit
    for more details.

    This metric is only recorded if Chrome is either visible, playing audio, or
    capturing video.
  </summary>
</histogram>

<histogram name="Browser.MainThreadsCongestion{Phase}" units="janks"
    expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This metric is emitted every 30 seconds after main message loop start, when
    there is user activity. Each 30 second duration is divided into 100ms
    intervals. This metric counts the number of these intervals that were
    &quot;congested&quot;. An interval is congested if during it the UI or IO
    thread executes an &quot;important&quot; task that was queued more than 100
    ms ago, or a non-important task or a native event handler that started
    executing more than 100 ms ago. See
    https://docs.google.com/document/d/1vDSGFvJblh7yJ3U3RVB_7qZLubyfTbQdQjuN1GoUNkc/edit
    for more details.

    This metrics graduated from
    Browser.Responsiveness.JankyIntervalsPerThirtySeconds(1,2,3) and their
    history might be useful to understand how we got here.

    Suffixed phases can be useful as diagnosis metrics. This phase represents:
    {Phase}

    This histogram is of special interest to the chrome-analysis-team@. Do not
    change its semantics or retire it without talking to them first.
  </summary>
  <token key="Phase">
    <variant name=""
        summary="Default view, includes all congested intervals after
                 OnFirstIdle()."/>
    <variant name=".Initial" summary="The first interval after OnFirstIdle()."/>
    <variant name=".Periodic" summary="All intervals but .Initial"/>
    <variant name=".RunningOnly"
        summary="Diagnostic metric which ignores queuing congestion."/>
    <variant name=".RunningOnly.Initial"
        summary="The first interval, before first idle and ignoring queuing
                 congestion."/>
    <variant name=".RunningOnly.Periodic"
        summary="All RunningOnly intervals but the first one."/>
  </token>
</histogram>

<histogram name="Browser.MainThreadsCongestion{UsageScenario}" units="janks"
    expires_after="2025-02-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This metric is emitted every 30 seconds after main message loop start, when
    there is user activity. Each 30 second duration is divided into 100ms
    intervals. This metric counts the number of these intervals that were
    &quot;congested&quot;. An interval is congested if during it the UI or IO
    thread executes an &quot;important&quot; task that was queued more than 100
    ms ago, or a non-important task or a native event handler that started
    executing more than 100 ms ago. See
    https://docs.google.com/document/d/1vDSGFvJblh7yJ3U3RVB_7qZLubyfTbQdQjuN1GoUNkc/edit
    for more details.

    This metric is split by usage scenarios (go/chrome_power_use_per_scenario).
    This version is recorded for {UsageScenario}.
  </summary>
  <token key="UsageScenario">
<!--
  Variants describing the usage scenario for a time interval. Consider updating
  both "UsageScenario" and "UsageScenario10Sec" in
  tools/metrics/histograms/metadata/power/histograms.xml when updating this.
-->

    <variant name=".AllTabsHidden_Audio"
        summary="intervals during which there was no visible tab and no video
                 capture, but there was audio"/>
    <variant name=".AllTabsHidden_NoVideoCaptureOrAudio"
        summary="intervals during which there was no visible tab, no video
                 capture and no audio"/>
    <variant name=".AllTabsHidden_VideoCapture"
        summary="intervals during which there was no visible tab, but there
                 was video capture"/>
    <variant name=".Audio"
        summary="intervals during which there was audio and at least 1
                 visible tab, but there was no video playback or video
                 capture"/>
    <variant name=".EmbeddedVideo_NoNavigation"
        summary="intervals during which a video played in a visible tab and
                 there was no navigation and no video capture"/>
    <variant name=".EmbeddedVideo_WithNavigation"
        summary="intervals during which a video played in a visible tab and
                 there was a navigation, but no video capture"/>
    <variant name=".FullscreenVideo"
        summary="intervals during which a video played in fullscreen and
                 there was no video capture"/>
    <variant name=".Interaction"
        summary="intervals during which there was at least 1 visible tab and
                 a user interaction, but no navigation, audio, video playback
                 or video capture"/>
    <variant name=".Navigation"
        summary="intervals during which there was at least 1 visible tab and
                 a navigation, but no audio, video playback or video capture"/>
    <variant name=".Passive"
        summary="intervals during which there was at least 1 visible tab, but
                 no user interaction, navigation, audio, video playback or
                 video capture"/>
    <variant name=".VideoCapture"
        summary="intervals during which there was at least 1 visible tab and
                 video capture"/>
    <variant name=".ZeroWindow"
        summary="intervals during which there was no window"/>
  </token>
</histogram>

<histogram name="Browser.PaintPreview.Capture.CompressedOnDiskSize" units="KB"
    expires_after="2025-05-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the size of a compressed on-disk capture for the paint preview after
    a proto is written to disk if compressed.
  </summary>
</histogram>

<histogram name="Browser.PaintPreview.Capture.NumberOfFramesCaptured"
    units="units" expires_after="2025-05-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of frames captured by a paint preview if it succeeded.
  </summary>
</histogram>

<histogram name="Browser.PaintPreview.Capture.Success" enum="BooleanSuccess"
    expires_after="2025-05-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records a boolean indicating whether a capture attempt was successful.
  </summary>
</histogram>

<histogram name="Browser.PaintPreview.Capture.TotalCaptureDuration" units="ms"
    expires_after="2025-05-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the total time spent capturing a paint preview of a page. This
    includes capture and serialization of all frames and IPC time.
  </summary>
</histogram>

<histogram name="Browser.PaintPreview.Player.CompositorProcessStartedCorrectly"
    enum="BooleanSuccess" expires_after="2025-05-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records if the paint preview compositor process started correctly.
  </summary>
</histogram>

<histogram name="Browser.PaintPreview.Player.CompositorProcessStartupTime"
    units="ms" expires_after="2025-05-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the time it took to start the paint preview compositor process.
  </summary>
</histogram>

<histogram name="Browser.PaintPreview.Player.LinkClicked" enum="BooleanSuccess"
    expires_after="2025-05-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Records when a link is clicked in the paint preview player.</summary>
</histogram>

<histogram name="Browser.PaintPreview.Player.TimeToFirstBitmap" units="ms"
    expires_after="2025-05-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the time taken to from the request to start the compositor process
    to the first bitmap being loaded.
  </summary>
</histogram>

<histogram name="Browser.PaintPreview.TabbedPlayer.CompositorFailureReason"
    enum="TabbedPaintPreviewCompositorFailureReason" expires_after="2025-05-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the the reason for exiting the compositor process for the
    TabbedPaintPreviewPlayer. Recorded when the compositor returns an error or
    disconnects.
  </summary>
</histogram>

<histogram name="Browser.PaintPreview.TabbedPlayer.ExitCause"
    enum="TabbedPaintPreviewExitCause" expires_after="2025-05-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the the reason for exiting TabbedPaintPreviewPlayer. Recorded when
    paint preview is removed.
  </summary>
</histogram>

<histogram name="Browser.PaintPreview.TabbedPlayer.FirstPaintBeforeTabLoad"
    enum="Boolean" expires_after="2025-05-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether paint preview was drawn before the tab finished loading.
    Recorded when tab has finished loading.
  </summary>
</histogram>

<histogram name="Browser.PaintPreview.TabbedPlayer.HadCapture" enum="Boolean"
    expires_after="2025-05-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether a paint preview exists. Recorded when attempting to show a
    preview on startup. This in conjuction with CompositorFailureReason gives
    the total number of failures to show a paint preview.
  </summary>
</histogram>

<histogram name="Browser.PaintPreview.TabbedPlayer.SnackbarCount" units="units"
    expires_after="2025-05-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of times that the upgrade snackbar was shown in a session
    of TabbedPaintPreviewPlayer. Recorded when paint preview is removed.
  </summary>
</histogram>

<histogram name="Browser.PaintPreview.TabbedPlayer.TimeToFirstBitmap"
    units="ms" expires_after="2025-05-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the time taken to from actvity creation to the first bitmap being
    shown. Recorded on first paint preview paint event.
  </summary>
</histogram>

<histogram
    name="Browser.PaintPreview.TabbedPlayer.UpTime{TabbedPaintPreviewPlayerUptime}"
    units="ms" expires_after="2025-05-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the length of the time that a session of TabbedPaintPreviewPlayer
    lasts. Recorded when paint preview is removed.
    {TabbedPaintPreviewPlayerUptime}
  </summary>
  <token key="TabbedPaintPreviewPlayerUptime">
    <variant name=".RemovedByCompositorFailure"
        summary="Removed by compositor failure"/>
    <variant name=".RemovedByLinkClick" summary="Removed by link click"/>
    <variant name=".RemovedByNavigation" summary="Removed by navigation"/>
    <variant name=".RemovedByPullToRefresh"
        summary="Removed by pull to refresh"/>
    <variant name=".RemovedBySnackBar" summary="Removed by SnackBar"/>
    <variant name=".RemovedOnAccessibilityNotSupported"
        summary="Removed on accessibility not supported"/>
    <variant name=".RemovedOnLoad" summary="Removed on load"/>
    <variant name=".RemovedOnOfflineAvailable"
        summary="Removed on offline page available"/>
    <variant name=".RemovedOnTabDestroy" summary="Removed on tab destroy"/>
    <variant name=".RemovedOnTabHidden" summary="Removed on tab hidden"/>
  </token>
</histogram>

<histogram name="Browser.PaintPreview.TabService.DiskUsageAtStartup" units="KB"
    expires_after="2025-05-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the total disk usage by the Paint Preview Tab Service at startup of
    the profile keyed service.
  </summary>
</histogram>

<histogram name="Browser.Responsiveness.IOJanksTotalPerMinute" units="janks"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Similar to Browser.Responsiveness.IOJankyIntervalsPerMinute but sums janky
    events across all foreground threads over the monitored minute rather than
    considering each interval a boolean. This aims to cover a blind spot of
    IOJankyIntervalsPerMinute as it cannot see an improvement where we unblock
    19/20 threads performing I/O. Not reported across system sleep. More details
    @ https://bit.ly/chrome-io-jank-metric
  </summary>
</histogram>

<histogram name="Browser.Responsiveness.IOJankyIntervalsPerMinute"
    units="janks" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This metric is emitted every minute. It reports a number between 0 and 60
    which corresponds to the number of 1 second intervals during the monitored
    minute to which a stalled foreground thread
    ScopedBlockingCall(BlockingType::MAY_BLOCK) was attributed. A stalled call
    is first attributed to the interval in which it began, and is attributed to
    a number of intervals equal to the length of the call, rounded to the
    nearest second. (Before http://crrev.com/c/2314873, the length was truncated
    rather than rounded.) This aims to capture moments where the main thread is
    responsive but the application is not (because things aren't loading). Not
    reported across system sleep. More details @
    https://bit.ly/chrome-io-jank-metric
  </summary>
</histogram>

<histogram name="Browser.SupportTool.SupportToolWebUIAction"
    enum="SupportToolWebUIActionType" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reports the actions that the user takes when they use chrome://support-tool
    WebUI. These actions include the page navigation and data collection
    details. This metric is used to measure the usage rate of Support Tool
    features.
  </summary>
</histogram>

<histogram name="Browser.TabDragging.DragAmongTabsPresentationTime" units="ms"
    expires_after="2024-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Compositor presentation time when dragging tabs left or right to a different
    index. This metric is used to measure tab dragging performance. Record on
    the next compositor frame when the data is collected.
  </summary>
</histogram>

<histogram name="Browser.TabDragging.DragToNewBrowserPresentationTime"
    units="ms" expires_after="2023-12-07">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Compositor presentation time when dragging tabs out to a new browser. This
    metric is used to measure tab dragging performance. Record on the next
    compositor frame when the data is collected.
  </summary>
</histogram>

<histogram name="Browser.TabDragging.PresentationTime" units="ms"
    expires_after="2023-12-07">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Compositor presentation time when dragging tabs. This metric is used to
    measure tab dragging performance. Record on the next compositor frame when
    the data is collected.
  </summary>
</histogram>

<histogram name="Browser.TabDragging.PresentationTimeMax" units="ms"
    expires_after="2024-06-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Maxinum compositor presentation time when dragging tabs. This metric is used
    to measure tab dragging performance. Record after a drag and drop session is
    ended.
  </summary>
</histogram>

<histogram name="Browser.Tabs.TabSwitchResult3{TabSwitchingType}"
    enum="TabSwitchResult2" expires_after="2025-02-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether a frame was presented after a tab switch event. Recorded based on
    the destination tab state when the tab switch starts: {TabSwitchingType}
  </summary>
  <token key="TabSwitchingType" variants="TabSwitchingType"/>
</histogram>

<histogram name="Browser.Tabs.TotalIncompleteSwitchDuration3{TabSwitchingType}"
    units="ms" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time between a tab switch input event timestamp and when the tab is
    hidden, if no frame is presented in the meantime. Recorded based on the
    destination tab state when the tab switch starts: {TabSwitchingType}
  </summary>
  <token key="TabSwitchingType" variants="TabSwitchingType"/>
</histogram>

<histogram name="Browser.Tabs.TotalSwitchDuration3{TabSwitchingType}"
    units="ms" expires_after="2025-02-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time between the input event timestamp and the frame presentation time
    on a tab switch. Recorded based on the destination tab state when the tab
    switch starts: {TabSwitchingType}
  </summary>
  <token key="TabSwitchingType" variants="TabSwitchingType"/>
</histogram>

<histogram name="Browser.WindowCount.Guest" units="units"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of open guest windows at the same time. Recorded when a new guest
    window is created. Please note that this metric double counts the lower
    numbers, meaning that if user opens three windows (without closing any in
    between), then buckets 1, 2, and 3 will all be incremented in turn.
  </summary>
</histogram>

<histogram name="Browser.WindowCount.Incognito" units="units"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of open incognito windows at the same time. Recorded when a new
    incognito window is created. Please note that this metric double counts the
    lower numbers, meaning that if user opens three windows (without closing any
    in between), then buckets 1, 2, and 3 will all be incremented in turn.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.BlockedByFilterURL"
    enum="RenderProcessHostBlockedURLReason" expires_after="2025-02-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when RenderProcessHostImpl::FilterURL detects a disallowed URL sent
    by the renderer process and rewrites it to about:blank#blocked. See also
    Navigation.Renderer.BlockedForFilterURL for cases caught earlier in the
    renderer process, and https://crbug.com/40066983.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.ChildCodeIntegrityFailures"
    enum="RendererType" expires_after="never">
<!-- expires-never: For monitoring stability regressions. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Count of renderer process terminations due to a code integrity failure,
    grouped by type. This is only reported on Windows.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.ChildCrashes" enum="RendererType"
    expires_after="never">
<!-- expires-never: For monitoring stability regressions. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Count of renderer process crashes grouped by type.</summary>
</histogram>

<histogram name="BrowserRenderProcessHost.ChildKills" enum="RendererType"
    expires_after="never">
<!-- expires-never: For monitoring stability regressions. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Count of renderer process kills grouped by type.</summary>
</histogram>

<histogram name="BrowserRenderProcessHost.ChildKills.OOM" enum="RendererType"
    expires_after="never">
<!-- expires-never: For monitoring stability regressions. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</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" expires_after="never">
<!-- expires-never: For monitoring stability regressions. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The launch error codes for failed renderer process launches.

    In M129 we are more accurately tracking renderer process launch failures,
    and expect to find a significant spike in volume.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.ChildLaunchFailures"
    enum="RendererType" expires_after="never">
<!-- expires-never: For monitoring stability regressions. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Count of renderer process launch failures grouped by type.

    In M129 we are more accurately tracking renderer process launch failures,
    and expect to find a significant spike in volume.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.Cleanup.DelayReason"
    enum="RenderProcessHostDelayShutdownReason" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded whenever a RenderProcessHost is cleaned up, with the reason the
    cleanup fails or is delayed, or kNoDelay if it succeeded quickly.

    The total count of this histogram should be equal to
    BrowserRenderProcessHost.Cleanup.Total.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.Cleanup.Total" enum="Boolean"
    expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records true when an attempt is made to clean up a RenderProcessHost.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.DisconnectedAlive"
    enum="RendererType" expires_after="never">
<!-- expires-never: For monitoring stability regressions. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</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.ExistingRendererIsInitializedAndNotDead"
    enum="Boolean" expires_after="2025-04-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether the existing renderer used is alive. Recorded when
    RenderProcessHostImpl::GetProcessHostForSiteInstance uses an existing
    renderer.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.FastShutdownIfPossible.DelayReason"
    enum="RenderProcessHostDelayShutdownReason" expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded whenever a RenderProcessHost is fast shutting down, with the reason
    the shutdown fails or is delayed, or kNoDelay if it succeeded quickly.

    The total count of this histogram should be equal to
    BrowserRenderProcessHost.FastShutdownIfPossible.Total.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.FastShutdownIfPossible.Total"
    enum="Boolean" expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records true when an attempt is made to fast shutdown a RenderProcessHost.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.LabeledInTaskManager"
    enum="BooleanLabeledRendererTask" expires_after="2024-06-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reports false each time the Task Manager displays an unlabeled renderer
    process using the fallback task provider, indicating that a type of renderer
    process is missing a task provider, which is a bug. For comparison, this
    reports true when renderer processes are properly labeled by a primary task
    provider. These values are only reported when the Task Manager is open. This
    can be removed when no unlabeled cases remain, per https://crbug.com/739782.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.MaxOutermostMainFrames"
    units="frames" expires_after="M132">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the maximum number of outermost main frames that were hosted in the
    process. This is logged when the RenderProcessHost is destroyed.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.ProcessPerSiteMainFrameLimit"
    units="frames" expires_after="M132">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of outermost main frames that were hosted in the process
    when it was determined no more should be placed in the process for the
    ProcessPerSite algorithm. This is recorded only when this limit is first
    crossed for each RenderProcessHost.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.SpareProcessDelayTime" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the time elapsed from the initiation of the spare process warm-up to
    the actual creation of the process.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.SpareProcessEvictedOtherSpare"
    enum="Boolean" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records true if WarmupSpareRenderProcessHost evicted an existing spare
    process that had a different BrowserContext, or false if there wasn't an
    existing spare process.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.SpareProcessMaybeTakeAction"
    enum="SpareProcessMaybeTakeAction" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="BrowserRenderProcessHost.SpareProcessRefusedByEmbedderReason"
    enum="SpareProcessRefusedByEmbedderReason" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the detailed reason if the spare process cannot be taken because of
    RefusedByEmbedder.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.SpareProcessStartupTime" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the time elapsed from the creation of the spare process to the point
    when the process becomes ready. This does not include the scheduled delay
    time (see SpareProcessDelayTime).
  </summary>
</histogram>

<histogram
    name="BrowserRenderProcessHost.SuspendedChild.KernelExecutionRecorded"
    enum="BooleanRecorded" expires_after="never">
<!-- expires-never: For monitoring stability regressions. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether or not kernel-mode execution was recorded for a suspended renderer
    process. This is recorded after process creation but before process
    resumption. This is recorded for every sandboxed Renderer process launched
    on Windows only.
  </summary>
</histogram>

<histogram name="BrowserRenderProcessHost.SuspendedChild.UserExecutionRecorded"
    enum="BooleanRecorded" expires_after="never">
<!-- expires-never: For monitoring stability regressions. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether or not user-mode execution was recorded for a suspended renderer
    process. This is recorded after process creation but before process
    resumption. This is recorded for every sandboxed Renderer process launched
    on Windows only.
  </summary>
</histogram>

<histogram name="BrowserServices.TwaOpenTime.V2" units="ms"
    expires_after="2024-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Triggered when a TrustedWebActivity is paused, recording the time since it
    had been resumed.
  </summary>
</histogram>

<histogram name="BrowserServices.VerificationResult"
    enum="BrowserServicesVerificationResult" expires_after="M114">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The result of Digital Asset Link verification performed when starting a
    Trusted Web Activity.
  </summary>
</histogram>

<histogram name="BrowserServices.VerificationTime.Offline" units="ms"
    expires_after="2024-09-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Triggered when Trusted Web Activity verification completes. Records how long
    it takes the device to realise it is offline and fall back to the cached
    result.
  </summary>
</histogram>

<histogram name="BrowserServices.VerificationTime.Online" units="ms"
    expires_after="2025-01-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Triggered when Trusted Web Activity verification completes. Records how long
    verification took when online.
  </summary>
</histogram>

<histogram name="BrowserSwitcher.AlternativeBrowser" enum="BrowserType"
    expires_after="2025-05-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records which browser the Legacy Browser Support feature is configured to
    open (which defaults to IE). Recorded on browser startup, and when the value
    changes. Only measured when Legacy Browser Support is enabled via the
    BrowserSwitcher* policies. Desktop Chrome only.
  </summary>
</histogram>

<histogram name="BrowserSwitcher.CacheFile.MkDirSuccess" enum="BooleanSuccess"
    expires_after="2025-05-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether the &quot;AppData/Local/Google/BrowserSwitcher&quot;
    directory was successfully created. Windows only.
  </summary>
</histogram>

<histogram name="BrowserSwitcher.CacheFile.MkTempSuccess" enum="BooleanSuccess"
    expires_after="2025-05-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether a temp file in
    &quot;AppData/Local/Google/BrowserSwitcher&quot; the directory was
    successfully created. Windows only.
  </summary>
</histogram>

<histogram name="BrowserSwitcher.CacheFile.MoveSuccess" enum="BooleanSuccess"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether the temp file in
    &quot;AppData/Local/Google/BrowserSwitcher&quot; directory was successfully
    moved to its final destination (&quot;cache.dat&quot;) after writing its
    contents. Windows only.
  </summary>
</histogram>

<histogram name="BrowserSwitcher.ChromeLaunch.IsFromBrowserSwitcher"
    enum="Boolean" expires_after="2025-01-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether or not Chrome was launched by the Legacy Browser Support for Edge
    extension's native host. This indicates an automatic Edge=&gt;Chrome or
    IE=&gt;Chrome transition. Recorded whenever Chrome is launched by any means.
    Only recorded on Windows.
  </summary>
</histogram>

<histogram name="BrowserSwitcher.Decision" enum="BooleanBrowserSwitch"
    expires_after="2025-05-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    On navigation and redirect, whether to switch browsers or not. Only measured
    when Legacy Browser Support is enabled via the BrowserSwitcher* policies.
    When this is true, Chrome attempts to launch an alternative browser
    (typically IE) with the navigation URL. Desktop Chrome only.
  </summary>
</histogram>

<histogram name="BrowserSwitcher.DecisionTime" units="ms"
    expires_after="2025-05-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    On navigation and redirect, records how long it took to compute a decision
    (stay in Chrome/open in IE). Only measured when Legacy Browser Support is
    enabled via the BrowserSwitcher* policies. Desktop Chrome only.
  </summary>
</histogram>

<histogram name="BrowserSwitcher.ExternalGreylistSize" units="rules"
    expires_after="2025-05-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of rules that come from an external greylist XML file. Measured when
    the sitelist is loaded during browser startup. Desktop Chrome only.
  </summary>
</histogram>

<histogram name="BrowserSwitcher.ExternalSitelistSize" units="rules"
    expires_after="2025-05-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of rules that come from an external sitelist XML file. Measured when
    the sitelist is loaded during browser startup. Desktop Chrome only.
  </summary>
</histogram>

<histogram name="BrowserSwitcher.GreylistSize" units="rules"
    expires_after="2025-05-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of rules in the BrowserSwitcherUrlGreylist policy. Measured when the
    policy is loaded. Desktop Chrome only.
  </summary>
</histogram>

<histogram name="BrowserSwitcher.GreylistWildcard" enum="BooleanPresent"
    expires_after="2025-05-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether there is a wildcard (&quot;*&quot;) rule in the
    BrowserSwitcherUrlGreylist policy. Measured when the
    BrowserSwitcherUrlGreylist policy gets updated. Desktop Chrome only.
  </summary>
</histogram>

<histogram name="BrowserSwitcher.IeemSitelistSize" units="rules"
    expires_after="2025-05-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of rules that come from Internet Explorer Enterprise Mode's sitelist.
    Measured when the sitelist is loaded during browser startup. Windows only.
  </summary>
</histogram>

<histogram name="BrowserSwitcher.LaunchSuccess" enum="BooleanSuccess"
    expires_after="2025-05-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether an attempt to launch an alternate browser failed or
    succeeded. Desktop Chrome only.
  </summary>
</histogram>

<histogram name="BrowserSwitcher.LaunchTime" units="ms"
    expires_after="2025-05-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records how long it took to launch an alternate browser (regardless of
    whether it failed or succeeded). Desktop Chrome only.
  </summary>
</histogram>

<histogram name="BrowserSwitcher.UrlListSize" units="rules"
    expires_after="2025-05-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of rules in the BrowserSwitcherUrlList policy. Measured when the
    policy gets updated. Desktop Chrome only.
  </summary>
</histogram>

<histogram name="BrowserSwitcher.UrlListWildcard" enum="BooleanPresent"
    expires_after="2025-05-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether there is a wildcard (&quot;*&quot;) rule in the
    BrowserSwitcherUrlList policy. Measured when the BrowserSwitcherUrlList
    policy gets updated. Desktop Chrome only.
  </summary>
</histogram>

<histogram name="DigitalAssetLinks.NumFingerprints" units="NumFingerprints"
    expires_after="M116">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of fingerprints in assetlinks.json for every performed
    Digital Asset Link validation with a valid `sha256_cert_fingerprints`-entry.
  </summary>
</histogram>

<histogram name="InfoBar.Shown" enum="InfoBarIdentifier" expires_after="never">
<!-- expires-never: Required as long as infobars exist. -->

  <owner>[email protected]</owner>
  <owner>src/components/infobars/OWNERS</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"
    expires_after="never">
<!-- expires-never: Required as long as infobars exist. -->

  <owner>[email protected]</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"
    expires_after="never">
<!-- expires-never: Required as long as infobars exist. -->

  <owner>[email protected]</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"
    expires_after="never">
<!-- expires-never: Required as long as infobars exist. -->

  <owner>[email protected]</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="SidePanel.ComboboxMenuShown" enum="Boolean"
    expires_after="2024-09-22">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Records true when the side panel combobox is opened.</summary>
</histogram>

<histogram name="SidePanel.OpenDuration" units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records how long the side panel was open for (capped at 1 hour) starting
    when the side panel is triggered to be opened. Note this might be different
    than when the side panel becomes visible due to delays for loading content.
    Recorded when the side panel is closed.
  </summary>
</histogram>

<histogram name="SidePanel.OpenOrChangeEntryTrigger"
    enum="SidePanelOpenTrigger" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Logs the UI location from which the side panel is triggered to be opened or
    to change the entry shown. Recorded when the side panel is shown or the
    entry changed and a trigger is provided.
  </summary>
</histogram>

<histogram name="SidePanel.OpenTrigger" enum="SidePanelOpenTrigger"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Logs the UI location from which the side panel is triggered to be opened.
    Recorded when the side panel is shown and a trigger is provided.
  </summary>
</histogram>

<histogram name="SidePanel.ResizedWidth" units="px" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the width of the side panel contents after the side panel was
    resized.
  </summary>
</histogram>

<histogram name="SidePanel.ResizedWidthPercentage" units="% of window width"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the width of the side panel contents as a percentage of the browser
    window width after the side panel was resized.
  </summary>
</histogram>

<histogram name="SidePanel.TimeOfLongestAnimationStep" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records elapsed time between animation steps for the longest step in a side
    panel open or close animation.
  </summary>
</histogram>

<histogram name="SidePanel.{SidePanelEntry}.ResizedWidth" units="px"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the width of the side panel contents after the side panel was
    resized, while the {SidePanelEntry} side panel entry was displayed.
  </summary>
  <token key="SidePanelEntry" variants="SidePanelEntry"/>
</histogram>

<histogram name="SidePanel.{SidePanelEntry}.ResizedWidthPercentage"
    units="% of window width" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the width of the side panel contents as a percentage of the browser
    window width after the side panel was resized, while the {SidePanelEntry}
    side panel entry was displayed.
  </summary>
  <token key="SidePanelEntry" variants="SidePanelEntry"/>
</histogram>

<histogram name="SidePanel.{SidePanelEntry}.ShownDuration" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records how long the {SidePanelEntry} side panel entry was open for (capped
    at 1 hour). This is recorded in SidePanelEntry::OnEntryHidden when the entry
    is hidden (ie. switching entries or the side panel closing).
  </summary>
  <token key="SidePanelEntry" variants="SidePanelEntry"/>
</histogram>

<histogram name="SidePanel.{SidePanelEntry}.ShowTriggered"
    enum="SidePanelOpenTrigger" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records how a side panel entry is triggered to be shown. (i.e. by toolbar
    button, by commbobox selection). This is recorded when a new side panel
    entry is triggered to be shown regardless any side panel entry is currently
    open.
  </summary>
  <token key="SidePanelEntry" variants="SidePanelEntry"/>
</histogram>

<histogram name="SidePanel.{SidePanelEntry}.TimeFromEntryTriggerToShown"
    units="ms" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records elapsed time between when the {SidePanelEntry} side panel entry
    triggered to be shown and when it was shown.
  </summary>
  <token key="SidePanelEntry" variants="SidePanelEntry"/>
</histogram>

</histograms>

</histogram-configuration>