chromium/tools/metrics/histograms/metadata/tab/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 Tab 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="BatteryState">
  <variant name="" summary="On battery or plugged-in"/>
  <variant name=".OnBattery"/>
  <variant name=".PluggedIn"/>
</variants>

<variants name="RecentlyClosedType">
  <variant name="Bulk" summary="RecentlyClosedBulkEvent"/>
  <variant name="Group" summary="RecentlyClosedGroup"/>
  <variant name="Tab" summary="RecentlyClosedTab"/>
</variants>

<variants name="TabActiveState">
  <variant name="Active" summary="active"/>
  <variant name="Inactive" summary="inactive"/>
</variants>

<variants name="TabDiscardReason">
  <variant name=".External"
      summary="from outside of TabManager (e.g. by an extension)"/>
  <variant name=".Proactive"
      summary="proactively by Performance Manager before the system is in a
               critical condition, such as when Memory Saver Mode discards
               the tab"/>
  <variant name=".Suggested"
      summary="suggested by the Performance Detection manager when the
               resource usage health may improve from discarding the tab"/>
  <variant name=".Urgent"
      summary="urgently by TabManager when the system is in a critical
               condition"/>
</variants>

<variants name="TabModelSelectorType">
  <variant name="Archived" summary="The archived tab model selector"/>
  <variant name="Custom" summary="The custom tab model selector."/>
  <variant name="Regular" summary="The regular tab model selector."/>
</variants>

<variants name="TabOrganizationEntryPoint">
  <variant name=".AllEntrypoints" summary="any of the entrypoints"/>
  <variant name=".Proactive"
      summary="the 'Organize Tabs' button in the tab strip"/>
  <variant name=".TabContextMenu" summary="the option in the tab context menu"/>
  <variant name=".TabSearch"
      summary="the start request button in the tab search ui"/>
  <variant name=".ThreeDotMenu" summary="the three dot menu option"/>
</variants>

<histogram name="Discarding.DailyDiscards{TabDiscardReason}" units="tabs"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of tabs discards since last emit. The emit interval is at least
    24 hours, see metrics::DailyEvent for more details. The discards are
    requested {TabDiscardReason}.
  </summary>
  <token key="TabDiscardReason" variants="TabDiscardReason"/>
</histogram>

<histogram name="Discarding.DailyReloads{TabDiscardReason}" units="tabs"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of tabs reloads since last emit. The emit interval is at least 24
    hours, see metrics::DailyEvent for more details. The discards corresponding
    to the reloads are requested {TabDiscardReason}.
  </summary>
  <token key="TabDiscardReason" variants="TabDiscardReason"/>
</histogram>

<histogram name="Discarding.DiscardCandidatesCount" units="tabs"
    expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of tabs discard candidates. This is recorded each time Chrome
    needs to urgently discard a tab.
  </summary>
</histogram>

<histogram name="Discarding.DiscardingFocusedTab" enum="BooleanFocusedTab"
    expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Logged every time a tab is set to be discarded. Tracks the porportion of tab
    discards that are focused at the time of discard.
  </summary>
</histogram>

<histogram name="Discarding.DiscardingProtectedTab" enum="BooleanProtectedTab"
    expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Logged every time a tab is set to be discarded. Tracks the porportion of tab
    discards that are protected at the time of discard.
  </summary>
</histogram>

<histogram name="Discarding.DiscardsDrivenByStaleSignal" units="tabs"
    expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reported for ChromeOS only. The count of tab discards that were unnecessary
    given the origin time of the memory pressure reclaim target. This is
    calculated and reported when Tab Manager or Page Discarder finish discarding
    tabs in response to a reclaim target. There can be a non-trival amount of
    time between when a memory pressure reclaim target is generated and when
    Chrome actually discards tabs in response to the reclaim target. If a
    reclaim target is generated before all tabs from the previous target have
    been discarded, then the same memory shortfall can be included in all of
    those signals' reclaim targets, resulting in Chrome discarding more tabs
    than is strictly necessary.
  </summary>
</histogram>

<histogram name="Discarding.LargestTabFootprint" units="MiB"
    expires_after="2021-02-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The largest tab's resident set among all the urgent discarding candidates.
  </summary>
</histogram>

<histogram name="Discarding.OldestTabFootprint" units="MiB"
    expires_after="2021-02-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>The resident set of the oldest urgent discarding candidate.</summary>
</histogram>

<histogram name="Discarding.ReclaimTargetAge" units="ms"
    expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reported for ChromeOS only. The age of the memory pressure signal when it is
    processed by the tab/page discarder. This is recorded when Tab Manager or
    Page Discarder reads the signal, but before any tabs are discarded as a
    result of the signal.
  </summary>
</histogram>

<histogram name="Tab.AgeAtDeletion" units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The age of a Tab when closed (Time between creation time on the current
    device and closure time).
  </summary>
</histogram>

<histogram name="Tab.AndroidCrashUpload{AndroidCrashUploadTypes}"
    enum="BooleanSuccess" expires_after="M85">
  <owner>[email protected]</owner>
  <summary>
    [Android] Count of upload success/failures by crash type.
    {AndroidCrashUploadTypes}
  </summary>
  <token key="AndroidCrashUploadTypes">
    <variant name="_Browser" summary="Measures browser crash uploads."/>
    <variant name="_GPU" summary="Measures GPU crash uploads."/>
    <variant name="_Other" summary="Measures other crash uploads."/>
    <variant name="_Renderer" summary="Measures renderer crash uploads."/>
  </token>
</histogram>

<histogram name="Tab.BackgroundLoadStatus" enum="TabBackgroundLoadStatus"
    expires_after="M77">
  <owner>[email protected]</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.CloseAllTabsDialog.ClosedAllTabs.{CloseType}"
    enum="Boolean" expires_after="2025-01-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether the &quot;Close all tabs&quot; action was taken when the
    close all tabs confirmation dialog was shown through App Menu &gt; Close all
    tabs. This is only recorded for Android for {CloseType} close all tabs menu
    actions.
  </summary>
  <token key="CloseType">
    <variant name="Incognito"/>
    <variant name="NonIncognito"/>
  </token>
</histogram>

<histogram name="Tab.Count.Guest" units="units" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of open tabs in each guest window. Recorded once a new tab in a guest
    window is opened and adds one to the bucket of number of tabs in that
    particular window (it does not count the total number of tabs in all open
    guest windows). Please note that this metric double counts the lower
    numbers, meaning that if user opens three tabs (without closing any in
    between), then buckets 1, 2, and 3 will all be incremented in turn. The
    metric also overcounts the tabs that are moved from one window to another as
    they are recorded both when they are created in the first window and when
    they are added to the second window.
  </summary>
</histogram>

<histogram name="Tab.Count.Incognito" units="units" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of open tabs in each incognito window. Recorded once a new tab is
    opened in an incognito window and adds one to the bucket of number of tabs
    in that particular window (it does not count the total number of tabs in all
    open incognito windows). Please note that this metric double counts the
    lower numbers, meaning that if user opens three tabs (without closing any in
    between), then buckets 1, 2, and 3 will all be incremented in turn. The
    metric also overcounts the tabs that are moved from one window to another as
    they are recorded both when they are created in the first window and when
    they are added to the second window.
  </summary>
</histogram>

<histogram name="Tab.ExternalApplicationOpened{Cause}"
    enum="ExternalLauncherOption" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [iOS] Used on External App launcher Prompt to determine how the user
    interacted with the prompt.
  </summary>
  <token key="Cause">
    <variant name=".Failed" summary="External application opening failed."/>
    <variant name=".FromIncognito" summary="Request from Incognito."/>
    <variant name=".Generic" summary="Misc request bucket."/>
    <variant name=".NoUserInteraction"
        summary="Request without user interaction."/>
    <variant name=".Repeated"
        summary="Repeated request to open external application.."/>
  </token>
</histogram>

<histogram name="Tab.HasCustomUnderPageBackgroundColor" enum="BooleanPresent"
    expires_after="2024-11-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [iOS] Whether a page has a custom under page background color, recorded when
    the page is fully loaded. The default value of this color is from the
    background colors of the &quot;html&quot; and &quot;body&quot; elements and
    the background color of the web view. By default it is white, so this
    histogram only records it as custom if it is not white with no alpha.
  </summary>
</histogram>

<histogram name="Tab.HasThemeColor" enum="BooleanPresent"
    expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [iOS] Whether a page has a theme-color html tag set, recorded when the page
    is fully loaded.
  </summary>
</histogram>

<histogram name="Tab.NewTab" enum="NewTabType" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when a new tab is opened. Tracks the method in which the tab was
    opened. 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.Organization.Organization.LabelEdited" enum="Boolean"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether the user has editted the label (title) of the suggested tab
    organization. Logged when a tab organization session has ended (all of the
    organizations have had a user choice or tabs have been added or removed from
    the tabstrip) for all suggested tab organizations in the session that were
    accepted.
  </summary>
</histogram>

<histogram name="Tab.Organization.Organization.TabRemovedCount" units="tabs"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The count of the tabs that the user removed from the suggestd tab
    organizations after it was shown to the user. Logged when a tab organization
    session has ended (all of the organizations have had a user choice or tabs
    have been added or removed from the tabstrip) for all suggested tab
    organizations in the session that were accepted.
  </summary>
</histogram>

<histogram name="Tab.Organization.Response.Latency" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time delta between when a tab organization request was started, and when
    the implementation of the request has completed and returned to the tab
    organization service. The request may come in the form of a remote call to a
    network service or local call to an async service.
  </summary>
</histogram>

<histogram name="Tab.Organization.Response.Succeeded" enum="Boolean"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether the tab organization request returned valid results for exposing to
    the Tab Search UI. The request may come in the form of a remote call to a
    network service or local call to an async service. Failures could come in
    the form of improper formatting of results, network failures, remote service
    issues, or failures in the tab organization requests implementation.
  </summary>
</histogram>

<histogram name="Tab.Organization.Response.TabCount" units="tabs"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    A count of the full number of tabs that the tab organization request
    implementation has returned for grouping. Logged on the successful
    completion of a tab organization request.
  </summary>
</histogram>

<histogram name="Tab.Organization.Trigger.Outcome"
    enum="TabOrganizationTriggerOutcome" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records user actions (or lack thereof) taken on the proactive nudge UI each
    time it is triggered to suggest the user organize their tabs.
  </summary>
</histogram>

<histogram name="Tab.Organization.TriggeredInPeriod" enum="Boolean"
    expires_after="2024-11-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether or not the Tab Organization nudge UI was triggered when each
    trigger period ends. The nudge UI is limited to trigger at most once per
    period, but may not trigger at all if it doesn't find a good moment.
  </summary>
</histogram>

<histogram name="Tab.Organization{EntryPoint}.Clicked" enum="Boolean"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Logged when the user clicks {EntryPoint}. In cases where the entrypoint is
    proactively shown, logs false if the user did not interact with the
    entrypoint. All first run experience users will go through the tab search
    entrypoint even if entering the tab search UI from a different entrypoint,
    in which case both entrypoints will be logged.
  </summary>
  <token key="EntryPoint" variants="TabOrganizationEntryPoint"/>
</histogram>

<histogram name="Tab.Organization{EntryPoint}.GroupCount" units="groups"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of organizations that were suggested as a result of {EntryPoint}
    being clicked. Logs when the suggestion is destroyed, regardless of whether
    the user accepted it.
  </summary>
  <token key="EntryPoint" variants="TabOrganizationEntryPoint"/>
</histogram>

<histogram name="Tab.Organization{EntryPoint}.UserChoice"
    enum="TabOrganizationUserChoice" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether the user eventually accepted one of the Organizations that were
    suggested as a result of {EntryPoint} being clicked.
  </summary>
  <token key="EntryPoint" variants="TabOrganizationEntryPoint"/>
</histogram>

<histogram name="Tab.PageLoadsSinceLastSwitchToEvictedTab" units="units"
    expires_after="2024-03-18">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [Android] 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. Note
    that this data is invalid from M77 until 2023-11-22 because this histogram
    was expired. As of right now, this histogram is only emitted in iOS.
  </summary>
</histogram>

<histogram name="Tab.PerceivedRestoreTime" units="ms"
    expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [Android] 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.

    Warning this historgram was expired between M89 and 2022-08-24.
  </summary>
</histogram>

<histogram name="Tab.Preview.TimeToStoreAfterTabSwitch" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    On tab switch, the visible content area is captured and stored as a
    thumbnail. This measures the time between requesting the capture and storing
    it as the current thumbnail.
  </summary>
</histogram>

<histogram name="Tab.PullDownGesture" enum="PullDownGestureAction"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Record the action executed when the user performs a pull down gesture. This
    feature is currently iOS only.

    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.
  </summary>
</histogram>

<histogram name="Tab.RendererTermination.AliveRenderersCount" units="renderers"
    expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [iOS] A count of the number of alive renderers in the current window when a
    renderer termination occurs. Expired for M78-94.
  </summary>
</histogram>

<histogram name="Tab.RendererTermination.RecentlyAliveRenderersCount"
    units="renderers" expires_after="M106">
  <owner>[email protected]</owner>
  <summary>
    [iOS] The number of renderers which are either currently alive or recently
    terminated in the current window at the time of a renderer termination.
  </summary>
</histogram>

<histogram name="Tab.RendererTermination.TotalTabCount" units="tabs"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [iOS] The number of tabs of the current window at the time of a renderer
    termination.
  </summary>
</histogram>

<histogram name="Tab.RestoreClosedTab" enum="Boolean"
    expires_after="2024-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [Desktop] This metric is recorded whenever a tab is restored by the user.
    Set to true if the tab is restored from ClosedTabCache and false indicates
    the tab is restored normally. This accounts for all types of tab restores
    i.e., in a closed window, closed group also on startup tab restores.
  </summary>
</histogram>

<histogram name="Tab.Screenshot.Action" enum="TabScreenshotAction"
    expires_after="2023-12-10">
  <owner>[email protected]</owner>
  <summary>
    Records actions taken after one or more screenshots of a page were taken.
    This will not be recorded if Chromium is killed before leaving the page. If
    several types of action (IPH and Sharing) occur, only the last is recorded.
    We think that both IPH and Sharing happening at the same time is rare, so we
    do not expect to lose much data this way.
  </summary>
</histogram>

<histogram name="Tab.Screenshot.ScreenshotsPerPage" units="screenshots"
    expires_after="2022-12-18">
  <owner>[email protected]</owner>
  <summary>
    Records the number of screenshots taken of a specific page. It is recorded
    when the user navigates away from this page or the tab is destroyed. This
    will not be recorded if Chromium is killed before leaving the page.
  </summary>
</histogram>

<histogram name="Tab.StateAtRendererTermination" enum="TabForegroundState"
    expires_after="2024-10-06">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The state (foreground/background) of a tab when its renderer is terminated.
  </summary>
</histogram>

<histogram name="Tab.StatusWhenSwitchedBackToForeground" enum="TabStatus"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [Android and iOS] 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.
    However, it does include the Tab opened/restored when launching an Activity
    (on Android).

    Warning this histogram was expired between M86 and 2022-08-24.

    In M130, this metric was updated to include Custom Tabs on Android, which
    were probably unintentionally excluded.
  </summary>
</histogram>

<histogram name="Tab.SwitchedToForegroundAge" units="ms"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [Android] Age (in ms) when the tab was switched to foreground. Note that
    this data is invalid from M85 until 2023-11-22 because this histogram was
    expired.

    In M130, this metric was updated to include Custom Tabs on Android, which
    were probably unintentionally excluded.
  </summary>
</histogram>

<histogram name="TabGroups.CollapsedGroupCountPerLoad" units="groups"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of tabs groups that are collapsed in all browsers (counting
    app-mode windows) when a load completes.

    Prior to M-121, this was also recorded when a navigation in a non-tab
    WebContents (e.g. DevTools, extension popups) happens. Such a navigation
    would not have affected the recorded value. It would only duplicate a
    previous recording.
  </summary>
</histogram>

<histogram name="TabGroups.CollapsedTabCount" units="tabs"
    expires_after="2021-09-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of tabs in a collapsed tab group in all browsers, reported every
    5 minutes. Desktop only.
  </summary>
</histogram>

<histogram name="TabGroups.CountAtStartup" units="groups"
    expires_after="2025-04-11">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>[iOS] The number of tab groups opened at cold launch.</summary>
</histogram>

<histogram name="TabGroups.NonZeroUserGroupCountPerLoad" units="groups"
    expires_after="2021-09-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of (non-zero) tabs groups open in all browsers (counting app-mode
    windows) when a load completes.
  </summary>
</histogram>

<histogram name="TabGroups.NumberOfRootIdsFixed" units="groups"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [Android] Records the number of tab groups where the root identifier did not
    match a tab from its tab group and the root identifier had to be corrected.
    Emitted once per start during tab state initialization.
  </summary>
</histogram>

<histogram
    name="TabGroups.ParseSavedTabGroupDataEntries.ParseFailurePercentage"
    units="%" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the percentage of stored entries in the saved tab group
    DataTypeStore that failed to parse as a SavedTabGroupData in the final stage
    of startup. Recorded during SavedTabGroupSyncBridge initialization after
    sucessfully passing through the migration stages.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroupActiveCount" units="groups"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records per hour once the SavedTabGroupKeyedService is instantiated upon
    profile open. Tracks the total number of active groups (groups that have
    been modified within the last 30 days) saved in the profile. Nothing is
    recorded for sessions shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroupAge" units="minutes"
    expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records once per group per hour once the SavedTabGroupKeyedService is
    instantiated upon profile open. Tracks the age of a SavedTabGroup (since
    creation). Nothing is recorded for sessions shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroupCount" units="groups"
    expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records per hour once the SavedTabGroupKeyedService is instantiated upon
    profile open. Tracks the total number of groups saved in the profile.
    Nothing is recorded for sessions shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroupLifespan" units="minutes"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records when a SavedTabGroup is deleted. Tracks the total age / lifespan of
    a SavedTabGroup (since creation) once deleted. Nothing is recorded for
    sessions shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroupPinnedCount" units="groups"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records per hour once the SavedTabGroupKeyedService is instantiated upon
    profile open. Tracks the total number of pinned groups saved in the profile.
    Nothing is recorded for sessions shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroups.TabCountDifference.Negative"
    units="tabs" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the difference in the number of tabs between local tab group and its
    synced counterpart when the synced version has more tabs compared to the
    local version. Recorded on connect which happens on startup and also when
    sync is turned on from an off state.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroups.TabCountDifference.Positive"
    units="tabs" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the difference in the number of tabs between local tab group and its
    synced counterpart when the local version has more tabs compared to the
    synced version. Recorded on connect which happens on startup and also when
    sync is turned on from an off state.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroupSyncBridge.MigrationResult"
    enum="SavedTabGroupSyncBridge.MigrationResult" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Histogram for recording various steps of the SavedTabGroupSyncBridge
    initialization, such as the migration steps and their results. Care has been
    taken to ensure that a certain step isn't recorded more than once during a
    chrome session. Recorded on startup.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroupTabCount" units="tabs"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records once per group per hour once the SavedTabGroupKeyedService is
    instantiated. Tracks the number of tabs in a SavedTabGroup. Nothing is
    recorded for sessions shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroupTabTimeSinceModification"
    units="minutes" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records once per saved tab per saved group per hour once the
    SavedTabGroupKeyedService is instantiated upon profile open. Tracks the
    duration since a saved tab's last modification. Nothing is recorded for
    sessions shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroupTimeSinceModification" units="minutes"
    expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records once per group per hour once the SavedTabGroupKeyedService is
    instantiated upon profile open. Tracks the duration since a saved group's
    last modification. Nothing is recorded for sessions shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.SavedTabGroupUnpinnedCount" units="groups"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records per hour once the SavedTabGroupKeyedService is instantiated upon
    profile open. Tracks the total number of unpinned groups saved in the
    profile. Nothing is recorded for sessions shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.SelectedTabInTabGroup" enum="Boolean"
    expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded on Android when a user switches tabs. Records whether the tab that
    was selected was in a tab group.
  </summary>
</histogram>

<histogram name="TabGroups.ShowTabGroupCreationDialogSwitch.ToggledToState"
    enum="Boolean" expires_after="2024-10-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records when a user toggles the settings entry for showing the tab group
    creation dialog on Android. The default state is enabled and is not
    recorded. This histogram tracks the new state of the toggle and is emitted
    each time it is changed. True corresponds to enabled and false corresponds
    to disabled.
  </summary>
</histogram>

<histogram name="TabGroups.SpecificsToDataMigration.ParseFailurePercentage"
    units="%" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the percentage of stored entries in the saved tab group
    DataTypeStore that failed to parse as a SavedTabGroupSpecfics during
    migration to SavedTabGroupData. Recorded during the one-time migration. If
    the data is already migrated, this histogram is not recorded.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.ActiveTabGroupCount.{NumberOfDays}Day"
    units="groups" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the number of active tab groups on startup. A group is active iff
    there was explicit user interaction with the group in last {NumberOfDays}
    days. An explicit user interaction is currently defined as a tab addition,
    tab removal or a tab navigation inside the group.

    Recorded on startup 10 seconds after TabGroupSyncService initialization.
    Android only.
  </summary>
  <token key="NumberOfDays">
    <variant name="1" summary="1 day"/>
    <variant name="7" summary="7 day"/>
    <variant name="28" summary="28 day"/>
  </token>
</histogram>

<histogram name="TabGroups.Sync.ClosedTabGroupCount" units="groups"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the number of closed tab groups on startup.

    Recorded on startup 10 seconds after TabGroupSyncService initialization.
    Android only.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.GroupClosedByUser.HasTitle"
    enum="BooleanHasTitle" expires_after="2024-12-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether a tab group that was closed by user has non-empty title.
    Recorded when the group is closed due to the user action which could be a
    deletion, ungroup or close action via UI.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.GroupOpenedByUser.HasTitle"
    enum="BooleanHasTitle" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether a tab group that was opened by user has non-empty title.
    Recorded when the group is opened from revisit surface.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.OpenTabGroupCount" units="groups"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the number of open tab groups on startup.

    Recorded on startup 10 seconds after TabGroupSyncService initialization.
    Android only.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.RemoteActiveTabGroupCount.{NumberOfDays}Day"
    units="groups" expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the number of active tab groups on startup that were remotely
    created. A group is active iff there was explicit user interaction with the
    group in last {NumberOfDays} days. An explicit user interaction is currently
    defined as a tab addition, tab removal or a tab navigation inside the group.

    Recorded on startup 10 seconds after TabGroupSyncService initialization.
    Android only.
  </summary>
  <token key="NumberOfDays">
    <variant name="1" summary="1 day"/>
    <variant name="7" summary="7 day"/>
    <variant name="28" summary="28 day"/>
  </token>
</histogram>

<histogram name="TabGroups.Sync.RemoteTabGroupCount" units="groups"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the number of active tab groups on startup that were remotely
    created.

    Recorded on startup 10 seconds after TabGroupSyncService initialization.
    Android only.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.SavedTabGroupAge" units="minutes"
    expires_after="2024-11-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the age of a SavedTabGroup (since creation). Recorded once per group
    on startup 10 seconds after TabGroupSyncService initialization. Android
    only.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.SavedTabGroupTabCount" units="tabs"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the number of tabs in a SavedTabGroup.

    Recorded once per group on startup 10 seconds after TabGroupSyncService
    initialization. Android only.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.SavedTabGroupTabTimeSinceModification"
    units="minutes" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the duration since a saved tab's last modification.

    Recorded once per tab on startup 10 seconds after TabGroupSyncService
    initialization. Android only.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.Closed.GroupCreateOrigin"
    enum="DeviceType" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the DeviceType of the device in which a tab group was created.
    Recorded when the group is closed. This includes all types of group closures
    initiated by the user such as close, ungroup or delete event on the group.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.Closed.Reason" enum="GroupCloseReason"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the source from which a tab group was closed. Recorded whenever a
    group is being closed in the UI which could be due to various trigger
    sources such as manually closed by user or deletion from sync.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.Created.GroupCreateOrigin"
    enum="DeviceType" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the DeviceType of the device in which a tab group was created.
    Recorded when the group is created.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.Opened.GroupCreateOrigin"
    enum="DeviceType" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the DeviceType of the device in which a tab group was created.
    Recorded when the group is opened due to user action such as opening the
    group from revisit surface.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.Opened.Reason" enum="GroupOpenReason"
    expires_after="2025-01-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the source from which a tab group was opened. Recorded whenever a
    group is being opened in the UI which could be due to various trigger
    sources such as manually opened by user or auto-opened from sync.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.Removed.GroupCreateOrigin"
    enum="DeviceType" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the DeviceType of the device in which a tab group was created.
    Recorded when the group is removed.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.TabAdded.GroupCreateOrigin"
    enum="DeviceType" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the DeviceType of the device in which a tab group was created.
    Recorded when a tab was added to the tab group.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.TabNavigated.GroupCreateOrigin"
    enum="DeviceType" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the DeviceType of the device in which a tab group was created.
    Recorded when a tab was navigated in the tab group.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.TabRemoved.GroupCreateOrigin"
    enum="DeviceType" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the DeviceType of the device in which a tab group was created.
    Recorded when a tab was was removed from the tab group.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.TabSelected.GroupCreateOrigin"
    enum="DeviceType" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the DeviceType of the device in which a tab group was created.
    Recorded when the a tab is selected by user action. Note that this can
    happen multiple times during a user session.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.TabSelected.TabCreateOrigin"
    enum="DeviceType" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the DeviceType of the device in which a tab was created. Recorded
    when the a tab is selected by user action. Note that this can happen
    multiple times during a user session.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.TabsReordered.GroupCreateOrigin"
    enum="DeviceType" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the DeviceType of the device in which a tab group was created.
    Recorded when the tabs are reordered inside the group.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.UserInteracted.GroupCreateOrigin"
    enum="DeviceType" expires_after="2024-12-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the DeviceType of the device in which a tab group was created.
    Recorded when the group is interacted with by user. Tab addition, removal
    and selection are considered as user interaction
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.UserInteracted.HasTitle"
    enum="BooleanHasTitle" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether a tab group that was interacted by user has non-empty title.
    Tab addition, removal and selection are considered as user interaction. Note
    that this can happen multiple times during a user session.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroup.VisualsChanged.GroupCreateOrigin"
    enum="DeviceType" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the DeviceType of the device in which a tab group was created.
    Recorded when the group visuals (title or color) is changed.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TabGroupTitleLength" units="characters"
    expires_after="2024-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of characters in the tab group title. Recorded when
    TabGroupSyncService::UpdateVisualData is invoked which is typically invoked
    whenever there is any change to title, color, or even when tab group dialog
    is closed.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TimeSinceLastUserInteractionWithGroup"
    units="minutes" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the duration since a saved group's last user interaction which is
    typically defined as tab addition, tab removal or tab navigation.

    Recorded once per group on startup 10 seconds after TabGroupSyncService
    initialization. Android only.
  </summary>
</histogram>

<histogram name="TabGroups.Sync.TotalTabGroupCount" units="groups"
    expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the number of total tab groups on startup which includes both open
    and closed tab groups.

    Recorded on startup 10 seconds after TabGroupSyncService initialization.
    Android only.
  </summary>
</histogram>

<histogram name="TabGroups.TabGroupBubble.TabCount" units="tabs"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of tabs in a group whenever a tab group editor bubble
    closes.
  </summary>
</histogram>

<histogram name="TabGroups.TabsPerGroupCountAtStartup" units="tabs"
    expires_after="2025-04-11">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>[iOS] The number of tabs per group at cold launch.</summary>
</histogram>

<histogram name="TabGroups.TimeSpentCollapsed2" units="seconds"
    expires_after="2021-09-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time a tab group spends in the collapsed state before the group is
    either expanded or closed.
  </summary>
</histogram>

<histogram name="TabGroups.TimeSpentExpanded2" units="seconds"
    expires_after="2021-09-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time a tab group spends in the expanded state before the group is either
    collapsed or closed.
  </summary>
</histogram>

<histogram name="TabGroups.UnsavedTabGroupCount" units="groups"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records once an hour once the SavedTabGroupKeyedService is instantiated upon
    profile open. Tracks the number of unsaved TabGroups. Nothing is recorded
    for sessions shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.UnsavedTabGroupTabCount" units="tabs"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records once per group per hour once the SavedTabGroupKeyedService is
    instantiated. Tracks the number of tabs in an unsaved TabGroup. Nothing is
    recorded for sessions shorter than one hour.
  </summary>
</histogram>

<histogram name="TabGroups.UserCustomizedGroupCountPerLoad" units="groups"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of tabs groups with a user-set name or color open in all browsers
    (counting app-mode windows) when a load completes.

    Prior to M-121, this was also recorded when a navigation in a non-tab
    WebContents (e.g. DevTools, extension popups) happens. Such a navigation
    would not have affected the recorded value. It would only duplicate a
    previous recording.
  </summary>
</histogram>

<histogram name="TabGroups.UserGroupCount" units="groups"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This histogram records the number of tab groups whenever Chrome comes to the
    foreground.
  </summary>
</histogram>

<histogram name="TabGroups.UserGroupCountPerLoad" units="groups"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of tabs groups open in all browsers (counting app-mode windows)
    when a load completes.

    Prior to M-121, this was also recorded when a navigation in a non-tab
    WebContents (e.g. DevTools, extension popups) happens. Such a navigation
    would not have affected the recorded value. It would only duplicate a
    previous recording.
  </summary>
</histogram>

<histogram name="TabGroups.UserPinnedTabCountPerLoad" units="tabs"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of pinned tabs in the tabstrip in all browser windows, when a
    page load completes.

    Prior to M-121, this was also recorded when a navigation in a non-tab
    WebContents (e.g. DevTools, extension popups) happens. Such a navigation
    would not have affected the recorded value. It would only duplicate a
    previous recording.
  </summary>
</histogram>

<histogram name="TabManager.BackgroundTabOpening.TabCount" units="tabs"
    expires_after="M79">
  <owner>[email protected]</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" expires_after="M79">
  <owner>[email protected]</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" expires_after="M79">
  <owner>[email protected]</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" expires_after="M79">
  <owner>[email protected]</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"
    expires_after="M79">
  <owner>[email protected]</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"
    expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.DiscardToReloadTime" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Elapsed time between a tab getting discarded to eventually being reloaded by
    the user.
  </summary>
</histogram>

<histogram name="TabManager.Discarding.DiscardToReloadTime.Proactive"
    units="ms" expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Elapsed time between a tab getting discarded to eventually being reloaded by
    the user. Recorded when the discard was triggered by Memory Saver Mode.
  </summary>
</histogram>

<histogram name="TabManager.Discarding.InactiveToReloadTime" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.InactiveToReloadTime.Proactive"
    units="ms" expires_after="2024-05-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Elapsed time between the time a tab switched from being active to inactive
    (that eventually gets discarded) until it gets reloaded. Recorded when the
    discard was triggered by Memory Saver Mode.
  </summary>
</histogram>

<histogram name="TabManager.Discarding.ReloadCount" units="Reloads"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.ReloadToCloseTime" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Elapsed time between the last time a discarded tab was reloaded and the time
    it gets closed.
  </summary>
</histogram>

<histogram name="TabManager.SessionOverlap.BackgroundTabOpening"
    enum="BooleanOverlap" expires_after="M79">
  <owner>[email protected]</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.TabRanker.Result" enum="TabManagerTabRankerResult"
    expires_after="M85">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.{RestoreType}.TimeBetweenClosedAndRestored"
    units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when the user restores a {RestoreType}. The value is the time
    duration between the previous closing of the {RestoreType} and the
    {RestoreType} being restored.
  </summary>
  <token key="RestoreType">
    <variant name="Group" summary="tab group"/>
    <variant name="Tab" summary="tab"/>
    <variant name="Window" summary="window"/>
  </token>
</histogram>

<histogram name="Tabs.Active.AbsolutePosition" units="index"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When a tab is activated, records the index of that tab in the tab strip,
    starting at 1 (1-indexed).
  </summary>
</histogram>

<histogram name="Tabs.Active.RelativePosition" units="%"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When a tab is activated, records the index of that tab in the tab strip as a
    percentage of the total number of tabs.
  </summary>
</histogram>

<histogram name="Tabs.ActiveCountAtStartup" units="tabs"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [iOS] Records the number of tabs that are considered active as per the
    current tab inactivity threshold. This is recorded at cold launch.
  </summary>
</histogram>

<histogram name="Tabs.ArchiveSettings.AutoDeleteEnabled" enum="Boolean"
    expires_after="2024-10-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records when a user toggles the settings entry for automatically deleting
    inactive tabs on Android. The default state is enabled and is not recorded.
    This histogram tracks the new state of the toggle and is emitted each time
    it is changed. True corresponds to enabled and false corresponds to
    disabled.
  </summary>
</histogram>

<histogram name="Tabs.ArchiveSettings.TimeDeltaPreference" units="days"
    expires_after="2024-10-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Records when a user selects an archive time preference.</summary>
</histogram>

<histogram name="Tabs.AutoOpenSyncedTabGroupsSwitch.ToggledToState"
    enum="Boolean" expires_after="2024-10-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records when a user toggles the settings entry for automatically opening
    synced tab groups on Android. The default state is enabled and is not
    recorded. This histogram tracks the new state of the toggle and is emitted
    each time it is changed. True corresponds to enabled and false corresponds
    to disabled.
  </summary>
</histogram>

<histogram name="Tabs.CloseAllArchivedTabs.TabCount" units="tabs"
    expires_after="2024-10-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of tabs that are currently selected when the close all
    inactive tabs button is clicked.
  </summary>
</histogram>

<histogram name="Tabs.CloseArchivedTabsMenuItem.TabCount" units="tabs"
    expires_after="2024-10-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of tabs that are currently selected when the close menu
    item is clicked.
  </summary>
</histogram>

<histogram name="Tabs.CountAtResume2" units="tabs" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [iOS] The number of tabs opened when the app comes out of the background.
    With a wider range than Tabs.CountAtResume (100 -&gt; 1M)
  </summary>
</histogram>

<histogram name="Tabs.CountAtStartup" units="tabs" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [Android] The number of tabs opened at cold launch. iOS uses
    Tabs.CountAtStartup2
  </summary>
</histogram>

<histogram name="Tabs.CountAtStartup2" units="tabs" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [iOS] The number of tabs opened at cold launch. With a wider range than
    Tabs.CountAtStartup (100 -&gt; 1M)
  </summary>
</histogram>

<histogram name="Tabs.DeserializationResultForAppendPendingNavigation"
    enum="BooleanSuccess" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [Android] Recorded when a tab's WebContentsState is being modified by
    freezing and appending to it. Success indicates that the previous state was
    safely deserialized and could be appended to. Failure indicates that the
    previous WebContentsState could not be read and will be clobbered.
  </summary>
</histogram>

<histogram name="Tabs.DroppedDuplicatesCountOn{Occasion}" units="tabs"
    expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [iOS] The number of invalid duplicated tabs dropped {Occasion}.

    Note: This tracks invalid web states that share the same identifier. This
    metric is not to be confused with Tabs.DuplicatesCountAtStartup which counts
    valid duplicates (i.e. different web states, with different identifiers, but
    the same URL).
  </summary>
  <token key="Occasion">
    <variant name="MigrateActiveToInactive"
        summary="during Inactive Tabs migration (moving now-considered
                 inactive tabs to the inactive browser)"/>
    <variant name="MigrateInactiveToActive"
        summary="during Inactive Tabs migration (moving now-considered active
                 tabs to the active browser)"/>
    <variant name="RestoreAllInactive"
        summary="during Inactive Tabs migration (moving back all inactive
                 tabs to the active browser)."/>
    <variant name="SessionRestore"
        summary="each time a session is restored from storage"/>
    <variant name="SessionSave"
        summary="each time a session is saved to storage"/>
  </token>
</histogram>

<histogram name="Tabs.DuplicatesCountAtStartup" units="tabs"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [iOS] The number of redundant active tabs restored at cold launch.

    Note: This metric counts each non-unique tab from the active browser as a
    redundant tab. E.g. if there are 3 active tabs with the same URL, this
    metric will represent the amount of total duplicates (i.e. two duplicates).
    Inactive tabs are not counted towards that metric.
  </summary>
</histogram>

<histogram name="Tabs.FirstSwitchedToForegroundCreationRank" units="units"
    expires_after="M77">
  <owner>[email protected]</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"
    units="units" expires_after="M77">
  <owner>[email protected]</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.FreezeAndAppendPendingNavigationResult"
    enum="BooleanSuccess" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [Android] Recorded when a tab's WebContentsState is being frozen and
    appended to. Success indicates that the append succeeded. Failure indicates
    it was not possible to freeze the tab and we had to fallback to a lazy load.
  </summary>
</histogram>

<histogram name="Tabs.InactiveCountAtStartup" units="tabs"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [iOS] Records the number of tabs that are considered inactive as per the
    current tab inactivity threshold. This is recorded at cold launch.
  </summary>
</histogram>

<histogram name="Tabs.LiveNTPCountAtResume" units="tabs"
    expires_after="2025-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [iOS] The number of live allocated regular (not incognito) NTP tabs when the
    app comes out of a background state. A live NTP is one whose UI classes are
    initialized. Prior to M99 this incorrectly counted whichever interface
    (regular or incognito) was selected.
  </summary>
</histogram>

<histogram name="Tabs.MaxTabsInADay{BatteryState}" units="tabs"
    expires_after="never">
<!-- expires-never: https://crbug.com/966137 -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The maximum number of tabs that Chrome displays at the same time over the
    course of a day. Desktop only.

    NOTE: This metric is asynchronous, the value reported on a given day
    represents the previous day's observations (which can be from a different
    build).
  </summary>
  <token key="BatteryState" variants="BatteryState"/>
</histogram>

<histogram name="Tabs.MaxTabsPerWindowInADay{BatteryState}" units="tabs"
    expires_after="never">
<!-- expires-never: https://crbug.com/966137 -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The maximum number of tabs per window that Chrome displays over the course
    of a day. Desktop Only.

    NOTE: This metric is asynchronous, the value reported on a given day
    represents the previous day's observations (which can be from a different
    build).
  </summary>
  <token key="BatteryState" variants="BatteryState"/>
</histogram>

<histogram name="Tabs.MaxWindowsInADay{BatteryState}" units="tabs"
    expires_after="never">
<!-- expires-never: https://crbug.com/966137 -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The maximum number of windows existing at the same time over the course of a
    day. Desktop only.

    NOTE: This metric is asynchronous, the value reported on a given day
    represents the previous day's observations (which can be from a different
    build).
  </summary>
  <token key="BatteryState" variants="BatteryState"/>
</histogram>

<histogram name="Tabs.NewNavigationWithSameOriginTab" enum="Boolean"
    expires_after="2024-02-11">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether another tab under the same origin can be found when a tab has
    finished a navigation to a new security origin. This can happen when a new
    tab is added with a website or the user navigates to another security
    origin. The browser will iterate over all the tabs to find if there is a tab
    with content under the same origin as the new link.
  </summary>
</histogram>

<histogram name="Tabs.NTPCountAtResume" units="tabs" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [iOS] The number of NTP tabs open when the app comes out of the background.
  </summary>
</histogram>

<histogram name="Tabs.NTPCountAtStartup" units="tabs"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>[iOS] The number of NTP tabs open at cold launch.</summary>
</histogram>

<histogram name="Tabs.NumberOfTabsOnResume{BatteryState}" units="tabs"
    expires_after="never">
<!-- expires-never: https://crbug.com/966137 -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of tabs total at resume from sleep/hibernate. This is being
    logged on all desktop platforms.
  </summary>
  <token key="BatteryState" variants="BatteryState"/>
</histogram>

<histogram name="Tabs.OldCountAtStartup2" units="tabs"
    expires_after="2025-02-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [iOS] Number of tabs older than 21 days. Recorded at cold launch.
  </summary>
</histogram>

<histogram name="Tabs.PageLoad.TimeSinceActive2" units="ms"
    expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    On page load, records the time since last active for each tab in the tab
    strip.
  </summary>
</histogram>

<histogram name="Tabs.PageLoad.TimeSinceCreated2" units="ms"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    On page load, records the time since creation for each tab in the tab strip.
  </summary>
</histogram>

<histogram name="Tabs.PersistedTabData.Critical.Map.Success"
    enum="BooleanSuccess" expires_after="2025-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    CriticalPersistedTabData persists core Tab metadata (tab id, web contents
    etc.) across restarts. This metric records if the Tab metadata is
    successfully mapped from raw storage into an object which can be consumed in
    Tab restoration.
  </summary>
</histogram>

<histogram name="Tabs.PersistedTabData.Deserialize.Critical"
    enum="BooleanSuccess" expires_after="2024-05-14">
<!-- P2 project which hasn't launched yet -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    CriticalPersistedTabData stores data pertinent to the running of the app
    such as tab id, parent id, web contents. This data is serialized and stored
    across restarts. This records if the deserialization succeeds or fails.
  </summary>
</histogram>

<histogram name="Tabs.PersistedTabData.Serialize.Critical"
    enum="BooleanSuccess" expires_after="2025-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    CriticalPersistedTabData stores data pertinent to the running of the app
    such as tab id, parent id, web contents. This data is serialized and stored
    across restarts. This records if the serialization succeeds or fails.
  </summary>
</histogram>

<histogram name="Tabs.PersistedTabData.Storage.Delete.File"
    enum="BooleanSuccess" expires_after="2023-06-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    FilePersistedTabData storage stores serialized PersistedTabData (metadata
    persisted across restarts) in a file. This metric records if a delete was
    successful or unsuccessful.
  </summary>
</histogram>

<histogram name="Tabs.PersistedTabData.Storage.Exists.File"
    enum="BooleanSuccess" expires_after="2025-04-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    FilePersistedTabData storage stores serialized PersistedTabData (metadata
    persisted across restarts) in a file. This metric records if a delete
    operation was found to have the file not existing.
  </summary>
</histogram>

<histogram name="Tabs.PersistedTabData.Storage.LevelDB.OrphanedDataCount"
    units="keys" expires_after="2025-04-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of keys that were identified to be orphaned in the
    LevelDB database for PersistedTabData. PersistedTabData stores Tab data to
    be persisted across restarts. When a Tab is closed, the data is removed,
    however, it is possible for data to become orphaned if the app crashes after
    a Tab is closed and before the cleanup is complete. This metric is recorded
    in the first callback, OnPerformMaintenance, whereby orphaned keys are
    identified and before they are deleted.
  </summary>
</histogram>

<histogram name="Tabs.PersistedTabData.Storage.LoadAndMapTime.File" units="ms"
    expires_after="2025-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    PersistedTabData stores Tab related data across restarts in a number of
    storage options. This metric stores the time to load Tab data from file
    storage and map it into an object available for consumption on Tab
    restoration. The only client currently using File storage is
    CriticalPersistedTabData which persists core Tab metadata (tab id, web
    contents etc.) across restarts.
  </summary>
</histogram>

<histogram name="Tabs.PersistedTabData.Storage.LoadTime.File" units="ms"
    expires_after="2025-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    FilePersistedTabData storage stores serialized PersistedTabData (metadata
    persisted across restarts) in a file. This metric records how long it took
    to load the file in the event the file exists. .
  </summary>
</histogram>

<histogram name="Tabs.PersistedTabData.Storage.MapTime.File" units="ms"
    expires_after="2025-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    PersistedTabData stores Tab related data across restarts in a number of
    storage options. This metric stores the time to map data acquired from raw
    file storage into an object which can be consumed on Tab restoration. The
    only client currently using File storage is CriticalPersistedTabData which
    persists core Tab metadata (tab id, web contents etc.) across restarts.
  </summary>
</histogram>

<histogram name="Tabs.PersistedTabData.Storage.Restore.File"
    enum="BooleanSuccess" expires_after="2024-12-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    FilePersistedTabData storage stores serialized PersistedTabData (metadata
    persisted across restarts) in a file. This metric records if a restore was
    successful or unsuccessful.
  </summary>
</histogram>

<histogram name="Tabs.PersistedTabData.Storage.Save.File" enum="BooleanSuccess"
    expires_after="2025-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    FilePersistedTabData storage stores serialized PersistedTabData (metadata
    persisted across restarts) in a file. This metric records if a save was
    successful or unsuccessful.
  </summary>
</histogram>

<histogram
    name="Tabs.PersistedTabData.Storage.Save.File.FirstStorageRequestType"
    enum="FileStorageRequestType" expires_after="2023-08-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    First storage request type in FilePersistedTabData. It would be expected
    that the first storage request will be a restore (as restoring the active
    tab) is pivotal for startup performance.
  </summary>
</histogram>

<histogram name="Tabs.PersistedTabData.Storage.SaveTime.File" units="ms"
    expires_after="2025-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    FilePersistedTabData storage stores serialized PersistedTabData (metadata
    persisted across restarts) in a file. This metric records how long it took
    to save the file in the event of a successful save.
  </summary>
</histogram>

<histogram name="Tabs.PinnedCountAtStartup" units="tabs"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>[iOS] The number of pinned tabs opened at cold launch.</summary>
</histogram>

<histogram name="Tabs.PotentialDoubleDirty.SaveQueueSize" units="tabs"
    expires_after="2025-01-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    On Android, when a tab becomes dirty, it is queued to be saved to disk.
    Clients that make multiple modifications in a sequence to the same tab can
    cause poor performance by triggering a synchronous save from the first
    modification, and then a second one from the others. This can be manually
    worked around by notifying the TabStateAttributes, but clients that need
    this change need to be identified first. This histogram is trying to help
    identify the frequency that this situation is encountered.

    This histogram, only on Android, is specifically recorded when we go to
    queue a tab's data to be saved to persistent storage, and we notice that
    we're also currently writing the same tab to disk. This is not always a
    problem, as there could be many pending async writes happening to various
    tabs, when new fresh modifications come in.

    The value being recorded is the number of tabs in the save queue in front of
    the tab being added. If the number is zero, it's very likely because of a
    client making multiple sequential modifications. On the other hand, a larger
    number is likely just the same tab being modified asynchronously and the
    queue is backed up with other changes.
  </summary>
</histogram>

<histogram
    name="Tabs.RecentlyClosed.EntriesRestoredInPage.{RecentlyClosedType}"
    units="entries restored" expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of distinct entries from TabRestoreService of
    {RecentlyClosedType} type that were restored in one Recent Tabs page session
    on Android. This is recorded when destroying the Recent Tabs page if any
    entires of {RecentlyClosedType} type were shown.
  </summary>
  <token key="RecentlyClosedType" variants="RecentlyClosedType"/>
</histogram>

<histogram name="Tabs.RecentlyClosed.EntriesShownInPage.{RecentlyClosedType}"
    units="entries shown" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of distinct entries from TabRestoreService of
    {RecentlyClosedType} type shown in one Recent Tabs page session on Android.
    This is recorded when destroying the Recent Tabs page.
  </summary>
  <token key="RecentlyClosedType" variants="RecentlyClosedType"/>
</histogram>

<histogram name="Tabs.RecentlyClosed.HistoricalSaverCloseType"
    enum="HistoricalSaverCloseType" expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded once for each tab closure event processed by HistoricalTabSaverImpl
    on Android. Enum categories correspond to the the type of closure that was
    saved to the native TabRestoreService. Tab for single tab, Group for a
    single tab group and Bulk for a combination of tabs and groups or more than
    one of either.
  </summary>
</histogram>

<histogram
    name="Tabs.RecentlyClosed.PercentOfEntriesRestoredInPage.{RecentlyClosedType}"
    units="percentage restored" expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The percentage of entries from TabRestoreService of {RecentlyClosedType}
    type that were restored relative to the number shown in one Recent Tabs page
    session on Android. This is recorded when destroying the Recent Tabs page if
    any entires of {RecentlyClosedType} type were shown.
  </summary>
  <token key="RecentlyClosedType" variants="RecentlyClosedType"/>
</histogram>

<histogram name="Tabs.RestoreAllArchivedTabsMenuItem.TabCount" units="tabs"
    expires_after="2024-10-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of tabs that are currently selected when the restore all
    menu item is clicked.
  </summary>
</histogram>

<histogram name="Tabs.RestoreArchivedTabsMenuItem.TabCount" units="tabs"
    expires_after="2024-10-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of tabs that are currently selected when the restore menu
    item is clicked.
  </summary>
</histogram>

<histogram name="Tabs.RestoredFromInactiveCount" units="tabs"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded on disabling Inactive Tabs (for example in case of an unlaunch).
    The number of tabs rescued from the orphan inactive tabs browser after the
    Inactive Tabs experimental flag has been disabled.
  </summary>
</histogram>

<histogram name="Tabs.RestoreTabStateException" enum="RestoreTabStateException"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [Android] TabState restoration may fail resulting in fallback restoration
    from the TabStateList or aborting restoration altogether. TabState
    restoration occurs on startup when restoring tab state from disk or when
    merging multi-instance modes together. This histogram is emitted when
    TabState restoration fails to indicate the cause of the failure.
  </summary>
</histogram>

<histogram name="Tabs.SadTab.Feedback.Event" enum="SadTabEvent"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.Reload.Event" enum="SadTabEvent"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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"
    expires_after="2021-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.ScrubbedInInterval.KeyPress" units="tabs"
    expires_after="2023-05-07">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This histogram records the number of tabs that are 'scrubbed' by key press
    during a given interval of time (i.e. ctrl+tab navigation). For this metric,
    a tab is considered 'scrubbed' if it was active for less than or equal to a
    given amount of time.
  </summary>
</histogram>

<histogram name="Tabs.ScrubbedInInterval.MousePress" units="tabs"
    expires_after="2023-07-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This histogram records the number of tabs that are 'scrubbed' by mouse press
    during a given interval of time. For this metric, a tab is considered
    'scrubbed' if it was active for less than or equal to a given amount of
    time.
  </summary>
</histogram>

<histogram name="Tabs.ScrubDistance" units="tabs" expires_after="2024-03-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The distance a user multi-finger scrubbed to change tabs. Always positive
    (ignores left / right).
  </summary>
</histogram>

<histogram name="Tabs.ScrubDuration" units="ms" expires_after="2024-07-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The duration a user spent doing multi-finger scrubbing to change tabs before
    a different tab than the currently active one was actually activated.
  </summary>
</histogram>

<histogram name="Tabs.ShoppingPersistedTabData.FoundBuyableProductAnnotation"
    enum="FoundBuyableProductAnnotation" expires_after="2025-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records if we find a BuyableProductAnnotation in the response from our
    endpoint which provides page annotations to enrich the user experience. The
    endpoint is called for every Tab when we enter the Tab grid switcher and is
    cached with a time to live of 1 hour.
  </summary>
</histogram>

<histogram name="Tabs.Startup.RestoreDuration.{TabModelSelectorType}"
    units="ms" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the realtime duration it took to restore all the tab states per
    {TabModelSelectorType}. Recorded after tab model selector restoration
    completes successfully. Android-only.
  </summary>
  <token key="TabModelSelectorType" variants="TabModelSelectorType"/>
</histogram>

<histogram name="Tabs.Startup.RestoreDurationPerTab.{TabModelSelectorType}"
    units="ms" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the average realtime duration it took per-tab to restore all the tab
    states. Bucketed by {TabModelSelectorType}. Recorded after tab model
    selector restoration completes successfully. Android-only.
  </summary>
  <token key="TabModelSelectorType" variants="TabModelSelectorType"/>
</histogram>

<histogram name="Tabs.Startup.TabCount.{TabType}" units="count"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Records the number of {TabType} Tabs loaded on startup.</summary>
  <token key="TabType">
    <variant name="Incognito" summary="Incognito"/>
    <variant name="Regular" summary="Regular"/>
  </token>
</histogram>

<histogram name="Tabs.Startup.TabCount2.{TabModelSelectorType}.DuplicateTabIds"
    units="count" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of duplicate tabs in the tab metadata found at startup
    per {TabModelSelectorType}.
  </summary>
  <token key="TabModelSelectorType" variants="TabModelSelectorType"/>
</histogram>

<histogram name="Tabs.Startup.TabCount2.{TabModelSelectorType}.{TabType}"
    units="count" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of {TabType} Tabs loaded on startup per
    {TabModelSelectorType}.
  </summary>
  <token key="TabModelSelectorType" variants="TabModelSelectorType"/>
  <token key="TabType">
    <variant name="Incognito" summary="Incognito"/>
    <variant name="Regular" summary="Regular"/>
  </token>
</histogram>

<histogram name="Tabs.StateTransfer.TabDistanceInactiveToActive" units="tabs"
    expires_after="M85">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of tabs between the previously active tab and the new active tab.

    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.
  </summary>
</histogram>

<histogram name="Tabs.TabArchived.AfterNDays" units="days"
    expires_after="2024-10-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    (Android only) Records how old, in days, a tab is when it's archived. Age is
    calculated based on the last used time.
  </summary>
</histogram>

<histogram name="Tabs.TabArchived.FoundDuplicateInRegularModel" units="count"
    expires_after="2024-10-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    (Android only) Records how many tabs were found in the regular model which
    have already been archvied. Recorded on each declutter pass.
  </summary>
</histogram>

<histogram name="Tabs.TabArchiveEligibilityCheck.AfterNDays" units="days"
    expires_after="2024-10-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    (Android only) Records how old, in days, a tab is when it's checked for
    archive eligibility. Recorded at startup when the archived tab model is
    loaded and at regular intervals after that (default interval is 7d, but is
    configurable via finch.). Only recorded if tab declutter is enabled.
  </summary>
</histogram>

<histogram name="Tabs.TabAutoDeleted.AfterNDays" units="days"
    expires_after="2024-10-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    (Android only) Records how old, in days, a tab is when it's autodeleted. Age
    is calculated based on when a tab was archived.
  </summary>
</histogram>

<histogram name="Tabs.TabAutoDeleteEligibilityCheck.AfterNDays" units="days"
    expires_after="2024-10-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    (Android only) Records how old, in days, a tab is when it's checked for
    auto-deletion eligibility. Recorded at startup when the archived tab model
    is loaded and at regular intervals after that (default interval is 7d, but
    is configurable via finch.). Only recorded if tab declutter is enabled.
  </summary>
</histogram>

<histogram name="Tabs.TabCountActiveWindow" units="tabs" expires_after="never">
<!-- expires-never: usage drives tab optimization and analysis. -->

  <owner>[email protected]</owner>
  <summary>
    The number of tabs open in the active window when a load completes.

    Prior to M-121, this was also recorded when a navigation in a non-tab
    WebContents (e.g. DevTools, extension popups) happens. Such a navigation
    would not have affected the recorded value. It would only duplicate a
    previous recording.
  </summary>
</histogram>

<histogram name="Tabs.TabCountInGroupPerLoad" units="tabs"
    expires_after="2025-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of tabs in the current active group when a load completes.
    Records 0 if the active tab is not in a group.

    Prior to M-121, this was also recorded when a navigation in a non-tab
    WebContents (e.g. DevTools, extension popups) happens. Such a navigation
    would not have affected the recorded value. It would only duplicate a
    previous recording.
  </summary>
</histogram>

<histogram name="Tabs.TabCountPerLoad" units="tabs" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of tabs open in all browsers (counting app-mode windows) when a
    load completes.

    This is basically the average number of tabs over time.

    Prior to M-121, this was also recorded when a navigation in a non-tab
    WebContents (e.g. DevTools, extension popups) happens. Such a navigation
    would not have affected the recorded value. It would only duplicate a
    previous recording.
  </summary>
</histogram>

<histogram name="Tabs.TabCountPerWindow" units="tabs"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of tabs open per window (counting app-mode windows) when a load
    completes.

    This value will be recorded multiple times per load if more than one window
    is open.

    Prior to M-121, this was also recorded when a navigation in a non-tab
    WebContents (e.g. DevTools, extension popups) happens. Such a navigation
    would not have affected the recorded value. It would only duplicate a
    previous recording.
  </summary>
</histogram>

<histogram name="Tabs.TabCount{BatteryState}" units="tabs"
    expires_after="never">
<!-- expires-never: https://crbug.com/966137 -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts the number of tabs across all windows, reported every 5 minutes.
    Desktop only.
  </summary>
  <token key="BatteryState" variants="BatteryState"/>
</histogram>

<histogram name="Tabs.TabOffsetOfSwitch{TabOffsetOfSwitchComponentList}"
    units="units" expires_after="M85">
  <owner>[email protected]</owner>
  <summary>
    How many tabs a user moved forward or backward in the Android tab switcher.
    {TabOffsetOfSwitchComponentList}

    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.
  </summary>
  <token key="TabOffsetOfSwitchComponentList">
    <variant name=".GridTabSwitcher" summary="Tab switcher in grid layout"/>
    <variant name=".TabStrip" summary="The TabStrip componets"/>
  </token>
</histogram>

<histogram name="Tabs.TabRestoreMethod" enum="TabRestoreMethod"
    expires_after="2025-07-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    CriticalPersistedTabData is a schema based Tab restoration system which
    persists Tab metadata such as web contents and time last accessed across
    restarts. CriticalPersistedTabData will replace legacy hand-written
    TabState.

    This metric records how many Tabs are restored using
    CriticalPersistedTabData, TabState, are re-created, skipped or failed to be
    restored. As we migrate from TabState to CriticalPersistedTabData it is
    imperative we can compare the success rate of each system vs. how many Tabs
    are re-created or failed to be restored. This metric is emitted once for
    each Tab restoration on startup.
  </summary>
</histogram>

<histogram name="Tabs.TabRestoreUrlMatch" enum="Boolean"
    expires_after="2025-07-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether the URL in the tab state file and the tab state metadata
    list match when each tab is restored. Android-only.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.BubbleWidgetInitializationTime" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tab Search is a feature that allows users to better search for and switch to
    their desired tabs. The Tab Search UI is shown in a bubble anchored to an
    element of the UI in the browser window.

    This metric measures the time it takes for the Tab Search bubble widget to
    be initialized.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.ButtonPressedToNextFramePresented" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tab Search is a feature that allows users to better search for and switch to
    their desired tabs. The Tab Search UI is shown in a bubble anchored to an
    element of the UI in the browser window.

    This metric is intended to measure the time from when the Tab Search button
    is pressed to the next visual update of the bubble widget (which may or may
    not already be visible). It is recorded on successful presentation of the
    bubble's next compositor frame.

    We also have metrics measuring time for widget construction. Please refer to
    Tabs.TabSearch.WindowTimeToShowUncachedWebView and
    Tabs.TabSearch.WindowTimeToShowCachedWebView.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.CloseAction" enum="TabSearchCloseActions"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tab Search is a feature that allows users to better search for and switch to
    their desired tabs. The Tab Search UI is shown in a bubble anchored to an
    element of the UI in the browser window.

    The bubble is dismissed when it loses focus or the escape key is pressed.
    This metric tracks if the UI bubble was dismissed as a result of an action
    taken from within the UI (such as switching to an open tab) or dismissed
    without direct interaction with the Tab Search UI.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.Mojo.SwitchToTab" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time taken to switch tab. This is measured as the time from when the
    user clicks a tab in Tab Search to when the browser finishes switching tab.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.Mojo.SwitchToTab.IsOverlap" enum="Boolean"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether there's a pending Tabs.TabSearch.Mojo.SwitchToTab
    measurement when a new measurement is requested.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.Mojo.TabUpdated" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time taken for Tab Search to update its tab list when the browser's tab
    strip model changes. This is measured as the time from when the browser
    emits a notification to when the WebUI updates its state.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.Mojo.TabUpdated.IsOverlap" enum="Boolean"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether there's a pending Tabs.TabSearch.Mojo.TabUpdated measurement
    when a new measurement is requested.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.NumTabsClosedPerInstance" units="tabs"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tab Search is a feature that allows users to better search their browsers
    for their desired tabs and close any currently open tabs. This records the
    number of tabs closed from a single instance of the UI (the number of tabs
    closed from within Tab Search in the time between when the UI is open and
    when it is closed).
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.NumTabsOnOpen" units="tabs"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tab Search is a feature that allows users to better search their browsers
    for their desired tabs. It can be opened and closed. This records the number
    of tabs there are in the payload Tab Search is sent when it is first opened.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.NumWindowsOnOpen" units="windows"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tab Search is a feature that allows users to better search their browsers
    for their desired tabs. It can be opened and closed. This records the number
    of windows there are in the payload Tab Search is sent when it is first
    opened.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.OpenAction" enum="TabSearchOpenActions"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tab Search is a feature that allows users to better search for and switch to
    their desired tabs. The Tab Search UI is shown in a bubble anchored to an
    element of the UI in the browser window.

    The bubble can be invoked via a number of different means including mouse
    click, keyboard navigation, keyboard shortcut or touch gesture. This metric
    tracks the kind of action the user took to invoke the Tab Search bubble UI.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.PageHandlerConstructionDelay" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tab Search is a feature that allows users to better search for and switch to
    their desired tabs. The Tab Search UI is shown in a bubble anchored to an
    element of the UI in the browser window.

    When the WebUIController is first created it waits for the WebUI code in the
    renderer process to request the creation of the TabSearchPageHandler. This
    metric tracks the time between when the WebUIController was constructed to
    when the TabSearchPageHandler begins construction. This metric is emitted
    right before the TabSearchPageHandler's constructor is called.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.PositionInTabstrip" enum="TabSearchPosition"
    expires_after="2025-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [Desktop] Logs the position of the tab search button in the tabstrip region
    view. Trailing implies right side in LTR, leading implies left in LTR.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.RecentlyClosedSectionToggleAction"
    enum="TabSearchRecentlyClosedToggleActions" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tab Search is a feature that allows users to better search for and switch to
    their desired tabs. The Tab Search UI displays both open and recently closed
    tabs under different list sections. The recently closed section can be
    expanded or collapsed by the user by clicking a button.

    This metric tracks the recently closed section being expandeded or collapsed
    via the toggle button.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.RecentlyClosedSectionToggleStateOnOpen"
    enum="TabSearchRecentlyClosedToggleActions" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tab Search is a feature that allows users to better search for and switch to
    their desired tabs. The Tab Search UI displays both open and recently closed
    tabs under different list sections. The recently closed section can be
    expanded or collapsed by the user by clicking a button.

    This metric tracks if the recently closed section is in an expanded or
    collapsed state at the time of opening the Tab Search dialog.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.TimeToShow.{WarmUpLevel}" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This tracks the time between when the Tab Search WebUI bubble widget is
    first created and when it is first shown to users as reported by the bubble
    widget's ui compositor. This metric is only logged for the specific warm-up
    level. The warm-up level indicates the readiness of the browser when it was
    about to show this WebUI.

    This metric is emitted when the bubble window is first revealed.
  </summary>
  <token key="WarmUpLevel">
    <variant name="DedicatedRenderer"
        summary="Uses a renderer that already hosts other top chrome WebUIs"/>
    <variant name="NoRenderer" summary="No renderer can be used"/>
    <variant name="PreloadedWebContents"
        summary="Uses a preloaded WebContents."/>
    <variant name="RedirectedWebContents"
        summary="Uses a redirected preloaded WebContents that was on a
                 different WebUI."/>
    <variant name="ReshowingWebContents"
        summary="Reshowing a WebContents that has already navigated to this
                 WebUI"/>
    <variant name="SpareRenderer" summary="Uses a spare renderer"/>
  </token>
</histogram>

<histogram name="Tabs.TabSearch.WebUI.IndexOf{Action}In{State}List"
    units="tabs" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tab Search is a feature that allows users to better search their browsers
    for their desired tabs and close any currently open tabs.

    This records the index at which a {Action} has been performed on a tab in
    Tab Search's tab list in a {State} state.
  </summary>
  <token key="Action">
    <variant name="CloseTab"/>
    <variant name="OpenRecentlyClosedEntry"/>
    <variant name="SwitchTab"/>
  </token>
  <token key="State">
    <variant name="Filtered" summary="Filtered by user search query."/>
    <variant name="Unfiltered" summary="Unfiltered by user search query."/>
  </token>
</histogram>

<histogram name="Tabs.TabSearch.WebUI.LoadCompletedTime" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The amount of time between the RenderFrameHost StartProvisionalLoad event
    and the RenderFrameHost DocumentOnLoadCompleted event for the Tab Search
    WebUI page.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.WebUI.LoadDocumentTime" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The amount of time between the RenderFrameHost StartProvisionalLoad and
    DidFinishDocumentLoad events for the Tab Search WebUI page.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.WebUI.RecentlyClosed{Item}OpenAction"
    enum="TabSearchRecentlyClosedItemOpenAction" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tab Search is a feature that allows users to better search their browsers
    for their desired tabs or recently closed tabs and tab groups. This records
    whether the user used Tab Search to open a recently closed {Item} from a
    filtered search results list or the default unfiltered list.
  </summary>
  <token key="Item">
    <variant name="Group"/>
    <variant name="Tab"/>
  </token>
</histogram>

<histogram name="Tabs.TabSearch.WebUI.SearchAlgorithmDuration" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time taken to run the search algorithm. The algorithm takes an
    unfiltered list of items and user search query as inputs, then generate a
    list of filtered items as output. Recorded after the measurement ends.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.WebUI.TabListDataReceived" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time taken for the WebUI in the renderer to receive the full list of
    tabs for the current user profile. This is measured as the time from when
    the data was first requested by the WebUI to when the data was received by
    the WebUI.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.WebUI.TabListDataReceived2" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time taken for the WebUI in the renderer to receive the full list of
    tabs for the current user profile. This is measured as the time from when
    the data was first requested by the WebUI to when the data was received by
    the WebUI.

    This metric is recorded by MetricsReporter.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.WebUI.TabListDataReceived2.IsOverlap"
    enum="Boolean" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether there's a pending Tabs.TabSearch.WebUI.TabListDataReceived2
    measurement when a new measurement is requested.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.WebUI.TabSwitchAction"
    enum="TabSearchTabSwitchAction" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tab Search is a feature that allows users to better search their browsers
    for and switch to their desired tabs. This records whether the user used Tab
    Search to switch to a tab from a filtered search results list or the default
    unfiltered list.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.WebUI.TimeTo{Action}In{State}List" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time taken between the tab search bubble is open and user switches to a
    tab or opens a recently closed tab, with or without search query. Recorded
    after the measurement ends.
  </summary>
  <token key="Action">
    <variant name="OpenRecentlyClosedEntry"/>
    <variant name="SwitchTab"/>
  </token>
  <token key="State">
    <variant name="Filtered" summary="Filtered by user search query."/>
    <variant name="Unfiltered" summary="Unfiltered by user search query."/>
  </token>
</histogram>

<histogram name="Tabs.TabSearch.WindowDisplayedDuration3" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tab Search is a feature that allows users to better search their browsers
    for their desired tabs. It can be opened and closed. This records the amount
    of time between when a Tab Search bubble is opened and when it is closed. It
    does so by recording the difference in time between when the the hosting
    WebUIBubbleDialogView's Widget is first created and when the widget is
    destroyed.

    The Tab Search UI is a bubble anchored to an element within a browser window
    and is closed if the user switches to a tab, presses the escape key or
    performs an action to return focus to the hosting window. The Tab Search UI
    bubble will also close if the hosting browser window is closed or crashes.

    Users may leave the bubble open for long periods of time without directly
    interacting with the UI which could result in a long tail of displayed
    durations.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.WindowTimeToShowCachedWebView2" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tab Search is a feature that allows users to better search for and switch to
    their desired tabs. The Tab Search UI is shown in a bubble anchored to an
    element of the UI in the browser window.

    This tracks the time between when the Tab Search WebUI bubble widget is
    first created and when it is first shown to users as reported by the bubble
    widget's ui compositor. This metric is only logged if a previously cached
    WebView is used for the construction of the bubble widget. This metric is
    emitted when the bubble window is first revealed.
  </summary>
</histogram>

<histogram name="Tabs.TabSearch.WindowTimeToShowUncachedWebView2" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tab Search is a feature that allows users to better search for and switch to
    their desired tabs. The Tab Search UI is shown in a bubble anchored to an
    element of the UI in the browser window.

    This tracks the time between when the Tab Search WebUI bubble widget is
    first created and when it is first shown to users as reported by the bubble
    widget's ui compositor. This metric is only logged if a new WebView was
    created for the construction of the bubble widget. This metric is emitted
    when the bubble window is first revealed.
  </summary>
</histogram>

<histogram name="Tabs.TabState.FlatBufferDeserializeResult"
    enum="TabStateFlatBufferDeserializeResult" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    TabState (Tab metadata persistence system on Chrome for Android) is being
    migrated from a hand-written schema to a FlatBuffer based schema. This
    metric records the number of successful and unsuccessful FlatBuffer
    deserializations and where known what the reason for unsuccessful
    deserialization was.
  </summary>
</histogram>

<histogram name="Tabs.TabState.LoadTime" units="ms" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time taken to load a TabState file in the event that it exists.
  </summary>
</histogram>

<histogram name="Tabs.TabState.RestoreMethod" enum="TabStateRestoreMethod"
    expires_after="2025-02-21">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    TabState (Tab metadata persistence system on Chrome for Android) is being
    migrated from a hand-written schema to a FlatBuffer based schema. This
    metric records the whether a TabState was restored using the FlatBuffer
    schema, legacy TabState schema (e.g. if a FlatBuffer file hasn't been saved
    for the Tab yet) or if TabState was failed to be restored (e.g. both the
    FlatBuffer and legacy TabState file are corrupt). Recorded once per TabState
    restoration (i.e. once per tab) at cold startup.
  </summary>
</histogram>

<histogram name="Tabs.TabState.SaveTime{Schema}" units="ms"
    expires_after="2025-04-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time taken to save a TabState file in the event of a successful save.
    Includes differentiation between the original legacy based format and
    FlatBuffer based format.
  </summary>
  <token key="Schema">
    <variant name="" summary="Original metric, kept for continuity."/>
    <variant name=".FlatBuffer" summary="Using FlatBuffer based format."/>
    <variant name=".Legacy" summary="Using legacy Pickle based format."/>
  </token>
</histogram>

<histogram name="Tabs.TabStateCleanupAbortedByArchive" enum="Boolean"
    expires_after="2024-10-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records when a tab is marked as not ready for cleanup because it could
    possibly be an archived tab. This enum tracks the case specifically for tab
    state cleanup.
  </summary>
</histogram>

<histogram name="Tabs.TabThumbnailCleanupAbortedByArchive" enum="Boolean"
    expires_after="2024-10-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records when a tab is marked as not ready for cleanup because it could
    possibly be an archived tab. This enum tracks the case specifically for tab
    thumbnail cleanup.
  </summary>
</histogram>

<histogram name="Tabs.Tasks.OrderValidOnStartup" enum="Boolean"
    expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [Android] boolean value indicating whether the invariant that tab groups are
    contiguous holds. Recorded on cold start after all tabs are restored.
  </summary>
</histogram>

<histogram name="Tabs.Tasks.TabAddedWithValidProposedPosition" enum="Boolean"
    expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [Android] boolean value indicating whether a tab that was added to the
    TabModel would have been added at the correct position if
    TabGroupModelFilter had not interved to move it so it respected group
    position. Recorded each time a tab is added to the TabModel.
  </summary>
</histogram>

<histogram name="Tabs.TimeSinceCreationAtStartup" enum="IOSAllOpenTabsAge"
    expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [iOS] The age of tabs opened at cold launch. The age of a tab is the time
    elapsed since its creation.
  </summary>
</histogram>

<histogram name="Tabs.UnusedCountAtStartup2" units="tabs"
    expires_after="2025-02-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [iOS] The number of old/unused tabs opened at cold launch. Inactive tab is a
    tab that has been not interacted with for more than 7 days.
  </summary>
</histogram>

<histogram name="Tabs.WindowCount{BatteryState}" units="windows"
    expires_after="never">
<!-- expires-never: https://crbug.com/966137 -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts the number of Chrome windows, reported every 5 minutes. Desktop only.
  </summary>
  <token key="BatteryState" variants="BatteryState"/>
</histogram>

<histogram name="Tabs.WindowWidth" units="DIPs" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The width of each open browser window, in DIPs, reported every 5 minutes.
    Desktop only.
  </summary>
</histogram>

<histogram name="Tabs.{TabActiveState}TabWidth" units="px"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    [Desktop] The size in pixels of the {TabActiveState} tab logged when a tab
    is added. Used to collect size data for scrolling tabs.
  </summary>
  <token key="TabActiveState" variants="TabActiveState"/>
</histogram>

<histogram name="TabStrip.Dragging.Count30Min" units="times"
    expires_after="2024-11-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For every 30 minutes, records the number of times the user drags a tab
    within the time period.
  </summary>
</histogram>

<histogram name="TabStrip.Dragging.Count5Min" units="times"
    expires_after="2024-11-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For every 5 minutes, records the number of times the user drags a tab within
    the time period.
  </summary>
</histogram>

<histogram name="TabStrip.Dragging.TimeFromLastDrag" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When the user drags tab, records the time since the last tab dragging.
  </summary>
</histogram>

<histogram name="TabStrip.Dragging.TimeFromMouseEntered" units="ms"
    expires_after="2024-11-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When the user switches tab, records the time since the mouse entered the
    tabstrip.
  </summary>
</histogram>

<histogram name="TabStrip.Tab.{Framework}.ActivationAction"
    enum="TabActivationTypes" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tab activation triggered by click or touch on a tab. This is used to measure
    tab activation count of tab strip vs WebUI tab strip.
  </summary>
  <token key="Framework">
    <variant name="Views"/>
    <variant name="WebUI"/>
  </token>
</histogram>

<histogram name="TabStrip.TabCountOnPageLoad" units="tabs"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This histogram records the number of tabs within the group during page load.

    If the loading happens in a tab that does not belong to a group, we log 0.
    Else, we log a positive number &gt;= 2.
  </summary>
</histogram>

<histogram name="TabStrip.TimeToCreateNewTabFromPress" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The amount of time from receiving a new tab button pressed to creating the
    elements necessary to represent a new tab.
  </summary>
</histogram>

<histogram name="TabStrip.TimeToSwitch" units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The amount of time from cursor entering the tabstrip to first click on a tab
    to switch.

    This will exclude some kinds of switching (hotkeys, between windows) where
    it would be difficult to define a start time. Entering the tabstrip is an
    approximation which will vary between users, but should still be useful for
    A/B comparison.
  </summary>
</histogram>

</histograms>

</histogram-configuration>