blob: 1325bf5afc8f1781d1392be77d04981e4fa4db16 [file]
<!--
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
chromium-metrics-reviews@google.com.
-->
<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"/>
<variant name="Window" summary="RecentlyClosedWindow"/>
</variants>
<variants name="SplitViewMenuSource">
<variant name="MiniToolbar" summary="The split view mini toolbar"/>
<variant name="TabContextMenu" summary="The tab context menu"/>
<variant name="ToolbarButton" summary="The split view toolbar button"/>
</variants>
<variants name="TabActiveState">
<variant name="Active" summary="active"/>
<variant name="Inactive" summary="inactive"/>
</variants>
<!-- LINT.IfChange(TabContextMenuCommand) -->
<variants name="TabContextMenuCommand">
<variant name="AddToExistingGroup"
summary="the Add to Existing Group command"/>
<variant name="AddToNewComparisonTable"
summary="the Add to new comparison table command"/>
<variant name="AddToNewGroup" summary="the Add to New Group command"/>
<variant name="AddToNewGroupFromMenuItem"
summary="the Add to new group from menu item command"/>
<variant name="AddToReadLater" summary="the Add to Read Later command"/>
<variant name="AddToSplit" summary="the Add to Split command"/>
<variant name="ArrangeSplit" summary="the Arrange Split command"/>
<variant name="CloseAllTabs" summary="the Close All Tabs command"/>
<variant name="CloseOtherTabs" summary="the Close Other Tabs command"/>
<variant name="CloseTab" summary="the Close Tab command"/>
<variant name="CloseTabsToRight"
summary="the Close Tabs to the Right command"/>
<variant name="CopyURL" summary="the Copy URL command"/>
<variant name="Duplicate" summary="the Duplicate command"/>
<variant name="GlicCreateNewChat"
summary="the Start New Chat with Gemini command"/>
<variant name="GlicShare" summary="the Share with Gemini command"/>
<variant name="GlicShareLimit" summary="the Glic share limit command"/>
<variant name="GlicStartShare" summary="the Share Tab with Gemini command"/>
<variant name="GlicStopShare"
summary="the Stop Sharing Tab with Gemini command"/>
<variant name="GlicSwitchToRecentConversation"
summary="the Switch to Recent Conversation command"/>
<variant name="GlicUnshare" summary="the Unshare with Gemini command"/>
<variant name="GoBack" summary="the Go Back command"/>
<variant name="MoveToExistingWindow"
summary="the Move to existing window command"/>
<variant name="MoveToNewWindow" summary="the Move to new window command"/>
<variant name="NewTabToRight" summary="the New Tab To Right command"/>
<variant name="OrganizeTabs" summary="the Organize tabs command"/>
<variant name="Reload" summary="the Reload command"/>
<variant name="RemoveFromGroup" summary="the Remove from Group command"/>
<variant name="SendTabToSelf" summary="the Send to Your Devices command"/>
<variant name="SwapWithActiveSplit"
summary="the Swap with Active Split command"/>
<variant name="ToggleGrouped" summary="the Toggle group command"/>
<variant name="ToggleMuted" summary="the Toggle muted command"/>
<variant name="TogglePinned" summary="the Toggle Pinned command"/>
</variants>
<!-- LINT.ThenChange(//chrome/browser/ui/tabs/tab_strip_model.h:TabContextMenuCommand) -->
<variants name="TabDiscardReason">
<variant name=".External"
summary="from outside of TabManager (e.g. by an extension)"/>
<variant name=".FrozenWithGrowingMemory"
summary="due to growing memory usage while frozen"/>
<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>
<!-- LINT.IfChange(TabModelOrchestratorType) -->
<variants name="TabModelOrchestratorType">
<variant name="Archived" summary="ArchivedTabModelOrchestrator"/>
<variant name="Custom" summary="CustomTabsTabModelOrchestrator"/>
<variant name="Headless" summary="HeadlessTabModelOrchestrator"/>
<variant name="Tabbed" summary="TabbedModeTabModelOrchestrator"/>
</variants>
<!-- LINT.ThenChange(//chrome/android/java/src/org/chromium/chrome/browser/app/tabmodel/ShadowTabStoreValidator.java:TabModelOrchestratorType) -->
<variants name="TabModelSelectorType">
<variant name="Archived" summary="The archived tab model selector"/>
<variant name="Custom" summary="The custom tab model selector."/>
<variant name="Headless"
summary="Tab models that are not currently owned by an activity, but
had previously been."/>
<variant name="Regular" summary="The regular tab model selector."/>
</variants>
<variants name="TabStripMode">
<variant name="HorizontalTabStrip"/>
<variant name="VerticalTabStrip"/>
</variants>
<histogram name="Discarding.AttemptFastKillForDiscardResult"
enum="AttemptFastKillForDiscardResult" expires_after="2026-06-28">
<owner>kawasin@google.com</owner>
<owner>catan-team@chromium.org</owner>
<summary>
Records the result of AttemptFastKillForDiscard. Emitted immediately after
the fast shutdown for the main frame renderer process attempt.
</summary>
</histogram>
<histogram name="Discarding.DailyDiscards{TabDiscardReason}" units="tabs"
expires_after="2026-07-26">
<owner>vovoy@chromium.org</owner>
<owner>fdoray@chromium.org</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="2026-07-26">
<owner>vovoy@chromium.org</owner>
<owner>fdoray@chromium.org</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="2026-08-09">
<owner>fdoray@chromium.org</owner>
<owner>catan-team@chromium.org</owner>
<summary>
The number of tabs discard candidates. This is recorded each time Chrome
needs to urgently discard a tab.
Warning this historgram was expired between 2024-04-28 and 2025-01-18.
</summary>
</histogram>
<histogram name="Discarding.DiscardFrameTree" enum="BooleanSuccess"
expires_after="2026-06-28">
<owner>tluk@chromium.org</owner>
<owner>catan-team@chromium.org</owner>
<summary>
Records whether the FrameTree discard operation succeeded. Emitted
immediately after the FrameTree discard operation attempt.
</summary>
</histogram>
<histogram name="Discarding.DiscardingFocusedTab2" enum="BooleanFocusedTab"
expires_after="2026-06-28">
<owner>kalutes@chromium.org</owner>
<owner>cros-core-systems-perf@google.com</owner>
<summary>
Logged after a tab is successfully discarded by
PageDiscardingHelper::DiscardMultiplePages (includes urgent discards, but
not discards by Performance Controls features such as Memory Saver or
Performance Detection). Indicates whether the tab was focused at the time of
discard.
</summary>
</histogram>
<histogram name="Discarding.DiscardingProtectedTab2" enum="BooleanProtectedTab"
expires_after="2026-06-28">
<owner>kalutes@chromium.org</owner>
<owner>cros-core-systems-perf@google.com</owner>
<summary>
Logged after a tab is successfully discarded by
PageDiscardingHelper::DiscardMultiplePages (includes urgent discards, but
not discards by Performance Controls features such as Memory Saver or
Performance Detection). Indicates whether the tab was protected at the time
of discard.
</summary>
</histogram>
<histogram name="Discarding.DiscardLatency" units="ms"
expires_after="2026-06-28">
<owner>kalutes@chromium.org</owner>
<owner>kawasin@chromium.org</owner>
<owner>vovoy@chromium.org</owner>
<summary>
Reported for ChromeOS only. The latency since Chrome start handling a
discard request and until the first tab discarding from the request
completes. This is recorded when discarding tabs for the request completes
in success.
</summary>
</histogram>
<histogram name="Discarding.DiscardPageOnUIThreadOutcome2"
enum="DiscardPageOnUIThreadOutcome" expires_after="2026-05-24">
<owner>fdoray@chromium.org</owner>
<owner>joenotcharles@google.com</owner>
<summary>
Reports the outcome of each discard tab attempt by the
DiscardPagesOnUIThread function. Will be used to validate that the number of
failures does not increase if DiscardAttemptMarker is retired (it was
introduced to prevent repeated attempts to discard a non-discardable tab,
but that shouldn't happen in practice). Use
&quot;Discarding.DiscardTabOutcome&quot; to determine why there are samples
in the &quot;DiscardTabFailure&quot; bucket.
</summary>
</histogram>
<histogram name="Discarding.DiscardsDrivenByStaleSignal" units="tabs"
expires_after="2026-06-28">
<owner>kalutes@chromium.org</owner>
<owner>vovoy@chromium.org</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.DiscardTabOutcome" enum="DiscardTabOutcome"
expires_after="2026-06-07">
<owner>fdoray@chromium.org</owner>
<owner>joenotcharles@google.com</owner>
<summary>
Reports the outcome of each discard tab attempt by
TabLifecycleUnit::Discard. Will be used to understand why we have samples in
the &quot;DiscardTabFailure&quot; bucket of
&quot;Discarding.DiscardPageOnUIThreadOutcome&quot;.
</summary>
</histogram>
<histogram name="Discarding.LargestTabFootprint" units="MiB"
expires_after="2021-02-28">
<owner>chrisha@chromium.org</owner>
<owner>catan-team@chromium.org</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>chrisha@chromium.org</owner>
<owner>catan-team@chromium.org</owner>
<summary>The resident set of the oldest urgent discarding candidate.</summary>
</histogram>
<histogram name="Discarding.ReclaimArrivalLatency" units="ms"
expires_after="2026-07-05">
<owner>kalutes@chromium.org</owner>
<owner>kawasin@chromium.org</owner>
<owner>vovoy@chromium.org</owner>
<summary>
Reported for ChromeOS only. The latency since a critical memory pressure
signal is sent from resourced and until Chrome start handling the discard
request. This is recorded when discarding tabs for the request completes in
success.
</summary>
</histogram>
<histogram name="Discarding.ReclaimTargetAge" units="ms"
expires_after="2026-06-28">
<owner>kalutes@chromium.org</owner>
<owner>vovoy@chromium.org</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="Discarding.TabLifecycleUnit.DiscardLatency" units="ms"
expires_after="2026-08-09">
<owner>tluk@chromium.org</owner>
<owner>catan-team@chromium.org</owner>
<summary>
Records discard latency for the TabLifecycleUnit::Discard() operation.
For the discard implementation that replaces the discarded tab's WebContents
this is measured as the time from when a TabLifecycleUnit::Discard() is
called for a tab, to when the Tab's WebContents is replaced. This is emitted
immediately after the Tab's WebContents is replaced.
For the discard implementation that retains the discarded tab's WebContents
this is measured as the time from when a TabLifecycleUnit::Discard() is
called for a tab, to when the Discard() operation was completed in the
renderer and completion was acknowledged by the Browser or when the frame's
renderer is terminated. This is emitted immediately after the
acknowledgement of the Discard operation by the RenderFrameHost in the
Browser or once the frame is notified its renderer has terminated.
The retained discard implementation is behind the WebContentsDiscard flag
and eventually the old implementation that replaces the WebContents will be
removed.
</summary>
</histogram>
<histogram name="Tab.AgeAtDeletion" units="ms" expires_after="2026-08-02">
<owner>ewannpv@chromium.org</owner>
<owner>gambard@chromium.org</owner>
<owner>bling-team@google.com</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.Android.DiscardLatency.{DiscardReason}" units="ms"
expires_after="2026-08-09">
<owner>ckitagawa@chromium.org</owner>
<owner>clank-tab-dev@chromium.org</owner>
<summary>
[Android] Records the latency for a tab discarded for {DiscardReason}.
Emitted after the tab discard callback is run. Note that discard might not
run the callback or might not have happened in the event the tab is not
discardable.
</summary>
<token key="DiscardReason">
<variant name="AppendNavigation"
summary="Tab discarded for appending a navigation."/>
<variant name="OnDemand" summary="Tab discarded on demand."/>
</token>
</histogram>
<histogram name="Tab.Android.DiscardStarted" enum="DiscardReason"
expires_after="2026-08-09">
<owner>ckitagawa@chromium.org</owner>
<owner>clank-tab-dev@chromium.org</owner>
<summary>
[Android] Records the reason for starting a tab discard. Emitted when a Tab
discard is started.
</summary>
</histogram>
<histogram name="Tab.AndroidCrashUpload{AndroidCrashUploadTypes}"
enum="BooleanSuccess" expires_after="M85">
<owner>wnwen@chromium.org</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.CloseAllTabsDialog.ClosedAllTabs.{CloseType}"
enum="Boolean" expires_after="2026-04-12">
<owner>ckitagawa@chromium.org</owner>
<owner>fredmello@chromium.org</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.ContextMenu.{TabContextMenuCommand}.SelectedTabsCount"
units="tabs" expires_after="2026-07-28">
<owner>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
The number of selected tabs when the user selects {TabContextMenuCommand}
from the tab context menu.
</summary>
<token key="TabContextMenuCommand" variants="TabContextMenuCommand"/>
</histogram>
<histogram name="Tab.Count.Guest" units="units" expires_after="2026-07-05">
<owner>rhalavati@chromium.org</owner>
<owner>chrome-incognito@google.com</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="2026-07-05">
<owner>rhalavati@chromium.org</owner>
<owner>chrome-incognito@google.com</owner>
<summary>
Number of open incognito tabs in each window. Recorded once a new incognito
tab is opened in a window and adds one to the bucket of number of incognito
tabs in that particular window (it does not count the total number of
incognito tabs in all open 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.Discarding.Reload.CausedByFocus" enum="Boolean"
expires_after="2027-01-10">
<owner>aattar@google.com</owner>
<owner>catan-team@chromium.org</owner>
<summary>
Recorded when a discarded tab begins to reload. Returns true if the tab was
focused at the moment the reload started (indicating an explicit user
switch), and false if it was a background reload.
</summary>
</histogram>
<histogram name="Tab.Discarding.Reload.FreedMemoryMB" units="MB"
expires_after="2027-01-10">
<owner>aattar@google.com</owner>
<owner>catan-team@chromium.org</owner>
<summary>
Recorded when a discarded tab finishes reloading. Tracks the estimated
memory (in MB) that was originally freed when this tab was discarded.
Correlate with Reload.LoadTime to determine efficiency.
</summary>
</histogram>
<histogram name="Tab.Discarding.Reload.LoadTime" units="ms"
expires_after="2027-01-10">
<owner>aattar@google.com</owner>
<owner>catan-team@chromium.org</owner>
<summary>
Recorded when a discarded tab finishes reloading. Measures the duration from
DidStartLoading to DidStopLoading.
</summary>
</histogram>
<histogram name="Tab.Discarding.Reload.TimeSinceDiscard" units="ms"
expires_after="2027-01-10">
<owner>aattar@google.com</owner>
<owner>catan-team@chromium.org</owner>
<summary>
Recorded when a discarded tab begins to reload. Measures the time elapsed
since the tab was originally discarded. Short times indicate high &quot;user
regret.&quot;
</summary>
</histogram>
<histogram name="Tab.ExternalApplicationOpened{Cause}"
enum="ExternalLauncherOption" expires_after="2026-04-05">
<owner>olivierrobin@chromium.org</owner>
<owner>bling-team@google.com</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.GroupingTransition2" enum="TabGroupingTransitionType"
expires_after="2026-08-16">
<owner>temao@chromium.org</owner>
<owner>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
[Desktop] Records different types of tab grouping transition states 10
seconds after a tab is created.
Replaces Tab.GroupingTransition.
</summary>
</histogram>
<histogram name="Tab.HasCustomUnderPageBackgroundColor" enum="BooleanPresent"
expires_after="2027-02-22">
<owner>gambard@chromium.org</owner>
<owner>bling-team@google.com</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="2027-02-22">
<owner>gambard@chromium.org</owner>
<owner>bling-team@google.com</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="2026-07-26">
<owner>bsep@chromium.org</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.PageLoadsSinceLastSwitchToEvictedTab" units="units"
expires_after="2024-03-18">
<owner>dtrainor@chromium.org</owner>
<owner>ckitagawa@chroimum.org</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="2026-07-05">
<owner>ckitagawa@chromium.org</owner>
<owner>dtrainor@chromium.org</owner>
<owner>yfriedman@chromium.org</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.PinnedDuration" units="ms" expires_after="2026-10-01">
<owner>madhavpruthi@google.com</owner>
<owner>ckitagawa@chromium.org</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
[Android only] Records the total time for which a tab was pinned within a
single session. The value is the duration between the tab being pinned and
when it was unpinned.
</summary>
</histogram>
<histogram name="Tab.Preview.TimeToStoreAfterTabSwitch" units="ms"
expires_after="2026-07-05">
<owner>dfried@chromium.org</owner>
<owner>collinbaker@chromium.org</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.Preview.TimeToStoreFirstUsableFrameAfterStartCapture"
units="ms" expires_after="2026-07-26">
<owner>chazzy@chromium.org</owner>
<owner>dfried@chromium.org</owner>
<summary>
When generating a preview for a background tab, this measures the time
between starting a video capture and storing the first usable frame as the
current thumbnail.
</summary>
</histogram>
<histogram name="Tab.PullDownGesture" enum="PullDownGestureAction"
expires_after="2026-05-11">
<owner>huitingyu@google.com</owner>
<owner>bling-pandamonium@google.com</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. Expired
2025-05. Revived July 2025.
</summary>
</histogram>
<histogram name="Tab.RendererTermination.AliveRenderersCount" units="renderers"
expires_after="2027-01-19">
<owner>justincohen@chromium.org</owner>
<owner>bling-fundamentals@google.com</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>pkl@chromium.org</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="2027-01-26">
<owner>justincohen@chromium.org</owner>
<owner>thegreenfrog@chromium.org</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>sreejakshetty@chromium.org</owner>
<owner>chrome-brapp-loading@google.com</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>skare@chromium.org</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>skare@chromium.org</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="2026-06-21">
<owner>gambard@chromium.org</owner>
<owner>olivierrobin@chromium.org</owner>
<summary>
The state (foreground/background) of a tab when its renderer is terminated.
</summary>
</histogram>
<histogram name="Tab.StatusWhenSwitchedBackToForeground" enum="TabStatus"
expires_after="2026-07-05">
<owner>ckitagawa@chromium.org</owner>
<owner>marq@chromium.org</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="2026-06-28">
<owner>dtrainor@chromium.org</owner>
<owner>ckitagawa@chroimum.org</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="Tab.{AnimationType}.NewTabAnimationProgress"
enum="AnimationFreezeCheckerState" expires_after="2026-06-21">
<owner>ckitagawa@chromium.org</owner>
<owner>polardz@google.com</owner>
<summary>
Records the progress of new tab animations on Android to detect freezes. The
animation is split into multiple parts, each with its own histogram.
{AnimationType}
</summary>
<token key="AnimationType">
<variant name="BackgroundAnimation" summary="The background animation."/>
<variant name="ForegroundCornerAnimation"
summary="The foreground corner animation."/>
<variant name="ForegroundExpandAnimation"
summary="The foreground expand animation set."/>
<variant name="ForegroundFadeAnimation"
summary="The foreground fade out animation."/>
<variant name="ForegroundRectAnimation"
summary="The foreground rectangle animation."/>
</token>
</histogram>
<histogram
name="TabGroups.ArchivedTabGroupManualCloseOnInactiveSurface.TabGroupTabCount"
units="tabs" expires_after="2026-07-19">
<owner>wylieb@google.com</owner>
<owner>evanluo@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Records number of tabs within an archived tab group closed by pressing the X
button on the tab group in the inactive surface.
</summary>
</histogram>
<histogram name="TabGroups.AutodeletePass.DurationMs" units="ms"
expires_after="2026-05-06">
<owner>bjfong@google.com</owner>
<owner>wylieb@google.com</owner>
<owner>evanluo@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
(Android only) Records the duration of an auto-delete pass for tab groups.
</summary>
</histogram>
<histogram name="TabGroups.CloseAllArchivedTabGroups.TabGroupCount"
units="groups" expires_after="2026-07-19">
<owner>wylieb@google.com</owner>
<owner>evanluo@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Records when archived tab groups are closed through the &quot;Close all
inactive tabs&quot; button in inactive pane.
</summary>
</histogram>
<histogram name="TabGroups.CloseAllArchivedTabGroups.TabGroupTabCount"
units="tabs" expires_after="2026-07-19">
<owner>wylieb@google.com</owner>
<owner>evanluo@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Records number of tabs within archived tab groups closed through the
&quot;Close all inactive tabs&quot; button in inactive pane.
</summary>
</histogram>
<histogram name="TabGroups.CloseArchivedTabsMenuItem.TabGroupCount"
units="groups" expires_after="2026-07-19">
<owner>wylieb@google.com</owner>
<owner>evanluo@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Records when archived tab groups are closed through the &quot;Close
tab&quot; menu item after user selects which tab groups to be closed.
</summary>
</histogram>
<histogram name="TabGroups.CloseArchivedTabsMenuItem.TabGroupTabCount"
units="tabs" expires_after="2026-07-19">
<owner>wylieb@google.com</owner>
<owner>evanluo@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Records number of tabs within archived tab groups closed through the
&quot;Close tab&quot; menu item after user selects which tab groups to be
closed.
</summary>
</histogram>
<histogram name="TabGroups.CloseTabGroupsDeletedRemotely" units="groups"
expires_after="2026-07-19">
<owner>wylieb@google.com</owner>
<owner>evanluo@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Records when tab groups are closed locally due to the synced tab group being
deleted elsewhere (e.g. another device logged into same account).
</summary>
</histogram>
<histogram name="TabGroups.CollapsedGroupCountPerLoad" units="groups"
expires_after="2026-12-15">
<owner>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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="2026-04-11">
<owner>huitingyu@google.com</owner>
<owner>bling-pandamonium@google.com</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>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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.ParseSavedTabGroupDataEntries.ParseFailurePercentage"
units="%" expires_after="2026-12-15">
<owner>shaktisahu@chromium.org</owner>
<owner>chrome-multiplayer-eng@google.com</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.RestoreAllArchivedTabsMenuItem.TabGroupCount"
units="groups" expires_after="2026-07-19">
<owner>wylieb@google.com</owner>
<owner>evanluo@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Records when archived tab groups are restored through the &quot;Restore
all&quot; option menu item.
</summary>
</histogram>
<histogram name="TabGroups.RestoreAllArchivedTabsMenuItem.TabGroupTabCount"
units="tabs" expires_after="2026-07-19">
<owner>wylieb@google.com</owner>
<owner>evanluo@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Records number of tabs within archived tab groups restored by the
&quot;Restore all&quot; option menu item.
</summary>
</histogram>
<histogram name="TabGroups.RestoreArchivedTabsMenuItem.TabGroupCount"
units="groups" expires_after="2026-07-19">
<owner>wylieb@google.com</owner>
<owner>evanluo@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Records when archived tab groups are restored through the &quot;Restore
tab&quot; menu option after user selects which tab groups to restore.
</summary>
</histogram>
<histogram name="TabGroups.RestoreArchivedTabsMenuItem.TabGroupTabCount"
units="tabs" expires_after="2026-07-19">
<owner>wylieb@google.com</owner>
<owner>evanluo@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Records number of tabs within archived tab groups restored by user selecting
tab groups and using the &quot;Restore tab&quot; menu option.
</summary>
</histogram>
<histogram name="TabGroups.RestoreFromTabGroupPane.TabCount" units="tabs"
expires_after="2026-07-19">
<owner>wylieb@google.com</owner>
<owner>evanluo@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Records number of tabs within an archived tab group restored by user opening
the synced tab group from the tab group pane.
</summary>
</histogram>
<histogram name="TabGroups.RestoreSingleTabGroup.TabGroupTabCount" units="tabs"
expires_after="2026-07-19">
<owner>wylieb@google.com</owner>
<owner>evanluo@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Records number of tabs within archived tab groups restored by user manually
clicking into the tab group in the inactive surface.
</summary>
</histogram>
<histogram name="TabGroups.SavedTabGroupActiveCount" units="groups"
expires_after="2026-07-19">
<owner>dljames@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Records per hour once the TabGroupSyncService 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="2026-08-09">
<owner>dljames@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Records once per group per hour once the TabGroupSyncService 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="2026-08-09">
<owner>dljames@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Records per hour once the TabGroupSyncService 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="2026-04-05">
<owner>dljames@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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.SavedTabGroupOpenCount" units="groups"
expires_after="2026-08-02">
<owner>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Records per hour once the TabGroupSyncService is instantiated upon profile
open. Tracks the total number of open groups (groups that are in the
platforms &quot;tabstrip&quot;) saved in the profile. Nothing is recorded
for sessions shorter than one hour.
</summary>
</histogram>
<histogram name="TabGroups.SavedTabGroupOpenedSubmenu"
enum="SavedTabGroupOpenedSubmenuDesktop" expires_after="2026-06-21">
<owner>dominicaustria@google.com</owner>
<owner>yuhengh@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Tracks the type of tab group submenu that a user used to open a saved tab
group.
</summary>
</histogram>
<histogram name="TabGroups.SavedTabGroupPinnedCount" units="groups"
expires_after="2026-07-19">
<owner>dljames@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Records per hour once the TabGroupSyncService 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="2026-12-15">
<owner>shaktisahu@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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="2026-12-15">
<owner>shaktisahu@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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="2026-07-05">
<owner>shaktisahu@chromium.org</owner>
<owner>chrome-multiplayer-eng@google.com</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="2026-07-26">
<owner>dljames@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Records once per group per hour once the TabGroupSyncService 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="2026-12-15">
<owner>dljames@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Records once per saved tab per saved group per hour once the
TabGroupSyncService 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="2026-05-17">
<owner>dljames@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Records once per group per hour once the TabGroupSyncService 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="2026-07-19">
<owner>dljames@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Records per hour once the TabGroupSyncService 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="2026-07-19">
<owner>ckitagawa@chromium.org</owner>
<owner>clank-tab-dev@google.com</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.Shared.GroupDeleted" enum="Boolean"
expires_after="2026-08-15">
<owner>dljames@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
[ All platforms ] Tracks the number of times a shared tab group was deleted.
Recorded when a shared tab group is deleted.
</summary>
</histogram>
<histogram name="TabGroups.Shared.LastTabClosed2" enum="Boolean"
expires_after="2026-12-15">
<owner>dljames@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
[ All platforms ] Tracks the number of times the last tab was closed in a
shared tab group.
Recorded when the last tab is closed in a shared tab group.
Replaces TabGroups.Shared.LastTabClosed.
</summary>
</histogram>
<histogram name="TabGroups.Shared.LoadFromDiskResult"
enum="SharedTabGroupDataLoadFromDiskResult" expires_after="2026-10-10">
<owner>shaktisahu@chromium.org</owner>
<owner>chrome-multiplayer-eng@google.com</owner>
<summary>
Records the result of loading a SharedTabGroupData entry from disk. Recorded
on browser startup or profile open for each entry in the store.
</summary>
</histogram>
<histogram name="TabGroups.Shared.Manage.Desktop"
enum="SharedTabGroupManageTypeDesktop" expires_after="2026-08-15">
<owner>dljames@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
[ Desktop ] Tracks the type of manage action a user explicitly performs on a
shared tab group such as clicking the share / manage group button, or
deleting a shared group. Recorded when a user triggers a manage action.
</summary>
</histogram>
<histogram name="TabGroups.Shared.Recall.Desktop"
enum="SharedTabGroupRecallTypeDesktop" expires_after="2026-08-15">
<owner>dljames@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
[ Desktop ] Tracks the type of recall action a user explicitly performs on a
shared tab group such as closing a group but not deleting it, or opening a
group from the bookmarks bar. Recorded when a user triggers a recall action.
</summary>
</histogram>
<histogram name="TabGroups.Shared.TabGroupAge2" units="minutes"
expires_after="2026-08-15">
<owner>dljames@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
[ All platforms ] Tracks the age of a SavedTabGroup (since creation). Only
records if the data sharing feature is enabled.
Recorded once per group on startup 10 seconds after TabGroupSyncService
initialization.
Replaces TabGroups.Shared.TabGroupAge.
</summary>
</histogram>
<histogram name="TabGroups.Shared.TotalTabGroupCount2" units="groups"
expires_after="2026-08-15">
<owner>dljames@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
[ All platforms ] Tracks the number of total shared tab groups on startup
which includes both open and closed tab groups. Only records if the data
sharing feature is enabled.
Recorded on startup 10 seconds after TabGroupSyncService initialization.
Replaces TabGroups.Shared.TotalTabGroupCount.
</summary>
</histogram>
<histogram name="TabGroups.Shared.TotalTabGroupTabCount2" units="tabs"
expires_after="2026-08-15">
<owner>dljames@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
[ All platforms ] Tracks the number of tabs in a shared tab group. Only
records if the data sharing feature is enabled.
Recorded once per group on startup 10 seconds after TabGroupSyncService
initialization.
Replaces TabGroups.Shared.TotalTabGroupTabCount.
</summary>
</histogram>
<histogram name="TabGroups.Shared.UseUrlForTitle.{SanitizationRequestType}"
enum="Boolean" expires_after="2026-09-29">
<owner>qinmin@google.com</owner>
<owner>chrome-multiplayer-eng@google.com</owner>
<summary>
Records whether a tab in a shared tab group uses page URL as its title, if
the page is http(s) and optimization guide is enabled to retrieve the
alternative title. Recorded when a tab is added to a shared tab group, or
when a tab in a shared tab group finishes a navigation, or after the
tabgroup owning the tab was converted to a shared group. No metrics are
recorded for tabs in non-shared tab groups. This is recorded on all
platforms.
</summary>
<token key="SanitizationRequestType">
<variant name="AddTab" summary="Add a tab"/>
<variant name="NavigateTab" summary="Navigate a tab"/>
<variant name="ShareTabGroup" summary="Share a tab group"/>
</token>
</histogram>
<histogram name="TabGroups.Shortcuts" enum="TabGroupShortcut"
expires_after="2026-05-31">
<owner>dljames@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
[Desktop] Records when a keyboard shortcut for a tab group action is
triggered. Tracks the number of times each tab group shortcut is used. Ex: -
Creating a new tab group - Closing a tab group - Focusing the next /
previous tab group - Adding the new tab to a tab group
</summary>
</histogram>
<histogram name="TabGroups.SpecificsToDataMigration.ParseFailurePercentage"
units="%" expires_after="2026-12-15">
<owner>shaktisahu@chromium.org</owner>
<owner>chrome-multiplayer-eng@google.com</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="2026-06-28">
<owner>shaktisahu@chromium.org</owner>
<owner>clank-tab-dev@google.com</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 and iOS 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.AddedGroupIsEmptyFromSync" enum="Boolean"
expires_after="2026-09-29">
<owner>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Records whether a newly saved tab group was empty or not. Recorded on all
platforms (Android, iOS, Desktop) whenever a tab group is added to the
SavedTabGroupModel by syncing it from another device. Note that since
messages are not received/processed in any particular order, it should not
be surprising if this is a large value; however, each empty group should be
filled, so the counts should be similar to TabAddedToEmptyGroupFromSync.
</summary>
</histogram>
<histogram name="TabGroups.Sync.AddedGroupIsEmptyLocally" enum="Boolean"
expires_after="2026-09-29">
<owner>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Records whether a newly saved tab group was empty or not. Recorded on all
platforms (Android, iOS, Desktop) whenever a tab group is added to the
SavedTabGroupModel by the local device.
</summary>
</histogram>
<histogram name="TabGroups.Sync.ClosedTabGroupCount" units="groups"
expires_after="2026-06-28">
<owner>shaktisahu@chromium.org</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Tracks the number of closed tab groups on startup.
Recorded on startup 10 seconds after TabGroupSyncService initialization.
Android and iOS only.
</summary>
</histogram>
<histogram name="TabGroups.Sync.GroupClosedByUser.HasTitle"
enum="BooleanHasTitle" expires_after="2026-12-15">
<owner>shaktisahu@chromium.org</owner>
<owner>chrome-multiplayer-eng@google.com</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="2026-07-05">
<owner>shaktisahu@chromium.org</owner>
<owner>chrome-multiplayer-eng@google.com</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.NumberOfGroupsDeletedOnStartup" units="groups"
expires_after="2026-06-07">
<owner>shaktisahu@chromium.org</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Tracks the number of tab groups that are deleted on startup due to a forced
cleanup. This is only enabled for a certain finch group of users who have
network layer disabled.
Recorded on startup after TabGroupSyncService initialization after notifying
the observers. Android only.
</summary>
</histogram>
<histogram name="TabGroups.Sync.OpenTabGroupCount" units="groups"
expires_after="2026-06-28">
<owner>shaktisahu@chromium.org</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Tracks the number of open tab groups on startup.
Recorded on startup 10 seconds after TabGroupSyncService initialization.
Android and iOS only.
</summary>
</histogram>
<histogram name="TabGroups.Sync.RemoteActiveTabGroupCount.{NumberOfDays}Day"
units="groups" expires_after="2026-06-21">
<owner>shaktisahu@chromium.org</owner>
<owner>clank-tab-dev@google.com</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 and iOS 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="2026-07-05">
<owner>shaktisahu@chromium.org</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Tracks the number of active tab groups on startup that were remotely
created.
Recorded on startup 10 seconds after TabGroupSyncService initialization.
Android and iOS only.
</summary>
</histogram>
<histogram name="TabGroups.Sync.SavedTabGroupAge" units="minutes"
expires_after="2026-01-18">
<owner>shaktisahu@chromium.org</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Tracks the age of a SavedTabGroup (since creation). Recorded once per group
on startup 10 seconds after TabGroupSyncService initialization. Android and
iOS only.
</summary>
</histogram>
<histogram name="TabGroups.Sync.SavedTabGroupTabCount" units="tabs"
expires_after="2026-06-28">
<owner>shaktisahu@chromium.org</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Tracks the number of tabs in a SavedTabGroup.
Recorded once per group on startup 10 seconds after TabGroupSyncService
initialization. Android and iOS only.
</summary>
</histogram>
<histogram name="TabGroups.Sync.SavedTabGroupTabTimeSinceModification"
units="minutes" expires_after="2026-06-28">
<owner>shaktisahu@chromium.org</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Tracks the duration since a saved tab's last modification.
Recorded once per tab on startup 10 seconds after TabGroupSyncService
initialization. Android and iOS only.
</summary>
</histogram>
<histogram name="TabGroups.Sync.TabAddedToEmptyGroupFromSync" enum="Boolean"
expires_after="2026-09-29">
<owner>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Records whether a tab added to a saved group was the first tab or not.
Recorded on all platforms (Android, iOS, Desktop) whenever a tab is added to
a tab group by syncing it from another device.
</summary>
</histogram>
<histogram name="TabGroups.Sync.TabAddedToEmptyGroupLocally" enum="Boolean"
expires_after="2026-09-29">
<owner>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Records whether a tab added to a saved group was the first tab or not.
Recorded on all platforms (Android, iOS, Desktop) whenever a tab is added to
a tab group by the local device.
</summary>
</histogram>
<histogram name="TabGroups.Sync.TabGroup.Closed.GroupCreateOrigin"
enum="DeviceType" expires_after="2026-08-09">
<owner>shaktisahu@chromium.org</owner>
<owner>chrome-multiplayer-eng@google.com</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="GroupClosingSource" expires_after="2026-08-09">
<owner>shaktisahu@chromium.org</owner>
<owner>clank-tab-dev@google.com</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="2026-08-09">
<owner>shaktisahu@chromium.org</owner>
<owner>chrome-multiplayer-eng@google.com</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="2026-08-09">
<owner>shaktisahu@chromium.org</owner>
<owner>chrome-multiplayer-eng@google.com</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="GroupOpeningSource" expires_after="2026-08-09">
<owner>shaktisahu@chromium.org</owner>
<owner>clank-tab-dev@google.com</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="2026-08-09">
<owner>shaktisahu@chromium.org</owner>
<owner>chrome-multiplayer-eng@google.com</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="2026-08-09">
<owner>shaktisahu@chromium.org</owner>
<owner>chrome-multiplayer-eng@google.com</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="2026-08-09">
<owner>shaktisahu@chromium.org</owner>
<owner>chrome-multiplayer-eng@google.com</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="2026-12-15">
<owner>shaktisahu@chromium.org</owner>
<owner>chrome-multiplayer-eng@google.com</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="2026-12-15">
<owner>shaktisahu@chromium.org</owner>
<owner>chrome-multiplayer-eng@google.com</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="2026-12-15">
<owner>shaktisahu@chromium.org</owner>
<owner>chrome-multiplayer-eng@google.com</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="2026-12-15">
<owner>shaktisahu@chromium.org</owner>
<owner>chrome-multiplayer-eng@google.com</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="2026-12-15">
<owner>shaktisahu@chromium.org</owner>
<owner>chrome-multiplayer-eng@google.com</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="2026-12-15">
<owner>shaktisahu@chromium.org</owner>
<owner>chrome-multiplayer-eng@google.com</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="2026-08-09">
<owner>shaktisahu@chromium.org</owner>
<owner>chrome-multiplayer-eng@google.com</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.TabGroupLoadedEmptiness"
enum="TabGroupLoadedEmptiness" expires_after="2026-06-07">
<owner>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Records whether a tab group loaded from disk was empty, not empty, or if it
became empty after removing tabs already in a shared group. Recorded on all
platforms (Android, iOS, Desktop) on browser startup or profile open for
each saved or shared tab group loaded.
</summary>
</histogram>
<histogram name="TabGroups.Sync.TabGroupTitleLength" units="characters"
expires_after="2026-06-07">
<owner>shaktisahu@chromium.org</owner>
<owner>clank-tab-dev@google.com</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.TabRemovedFromGroupWasLastTab" enum="Boolean"
expires_after="2026-09-29">
<owner>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Records whether a tab removed from a saved group was the last tab or not.
Recorded on all platforms (Android, iOS, Desktop) whenever a tab is removed
from a tab group.
</summary>
</histogram>
<histogram name="TabGroups.Sync.TimeSinceLastUserInteractionWithGroup"
units="minutes" expires_after="2026-06-21">
<owner>shaktisahu@chromium.org</owner>
<owner>clank-tab-dev@google.com</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 and iOS only.
</summary>
</histogram>
<histogram name="TabGroups.Sync.TotalTabGroupCount" units="groups"
expires_after="2026-08-09">
<owner>shaktisahu@chromium.org</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
[ All platforms ] 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.
</summary>
</histogram>
<histogram name="TabGroups.TabGroupAutoDeleted.TabCount" units="tabs"
expires_after="2026-05-06">
<owner>bjfong@google.com</owner>
<owner>wylieb@google.com</owner>
<owner>evanluo@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
(Android only) Records the number of tabs within a tab group that is
autodeleted.
</summary>
</histogram>
<histogram name="TabGroups.TabGroupAutoDeleteEligibilityCheck.AfterNDays"
units="days" expires_after="2026-05-06">
<owner>bjfong@google.com</owner>
<owner>wylieb@google.com</owner>
<owner>evanluo@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
(Android only) Records how old, in days, a tab group 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 (same cadence as tabs).
Only recorded if tab group declutter is enabled.
</summary>
</histogram>
<histogram name="TabGroups.TabGroupBubble.TabCount" units="tabs"
expires_after="2026-12-15">
<owner>sophiechang@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Records the number of tabs in a group whenever a tab group editor bubble
closes.
</summary>
</histogram>
<histogram name="TabGroups.TabGroupDeclutter.ArchivedTabGroups" units="groups"
expires_after="2026-07-19">
<owner>wylieb@google.com</owner>
<owner>evanluo@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Records number of tab groups that are archived due to tab group declutter.
</summary>
</histogram>
<histogram name="TabGroups.TabGroupDeclutter.ArchivedTabGroupTabCount"
units="tabs" expires_after="2026-07-19">
<owner>wylieb@google.com</owner>
<owner>evanluo@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Records number of tabs within each archived tab group that are archived when
the tab group is archived.
</summary>
</histogram>
<histogram name="TabGroups.TabsPerGroupCountAtStartup" units="tabs"
expires_after="2026-07-05">
<owner>huitingyu@google.com</owner>
<owner>bling-pandamonium@google.com</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>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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="2026-04-05">
<owner>dljames@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Records once an hour once the TabGroupSyncService 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="2026-04-05">
<owner>dljames@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Records once per group per hour once the TabGroupSyncService 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="2026-08-01">
<owner>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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="2026-07-12">
<owner>ckitagawa@chromium.org</owner>
<owner>meiliang@chromium.org</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="2026-07-12">
<owner>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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="2026-07-12">
<owner>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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="TabGroups.{ConsentLevel}.{GroupsOrTabs}" units="count"
expires_after="2026-06-28">
<owner>treib@chromium.org</owner>
<owner>shaktisahu@chromium.org</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Records the number of {GroupsOrTabs}, at the moment when the user is
{ConsentLevel} Chrome. Android and iOS only.
</summary>
<token key="GroupsOrTabs">
<variant name="ClosedTabGroupCount" summary="closed tab groups"/>
<variant name="ClosedTabGroupTabsCount"
summary="tabs that are part of a closed tab group"/>
<variant name="OpenTabGroupCount" summary="open tab groups"/>
<variant name="OpenTabGroupTabsCount"
summary="tabs that are part of an open tab group"/>
<variant name="TotalTabGroupCount"
summary="all tab groups (open or closed)"/>
<variant name="TotalTabGroupTabsCount"
summary="all tabs that are part of a tab group (open or closed)"/>
</token>
<token key="ConsentLevel">
<variant name="OnSignin" summary="signing in to"/>
<variant name="OnSync" summary="enabling sync in"/>
</token>
</histogram>
<histogram name="TabManager.Discarding.DiscardCount" units="Discards"
expires_after="2026-08-09">
<owner>fdoray@chromium.org</owner>
<owner>catan-team@chromium.org</owner>
<summary>
Cumulative number of tabs discarded due to low memory conditions, recorded
once per tab discard event. For example, a user who had 3 tabs discarded
records a count in the 1 bin, 2 bin and 3 bin. Thus each bin N is the number
of sessions where users experienced N or more tab discard events.
</summary>
</histogram>
<histogram name="TabManager.Discarding.DiscardToReloadTime" units="ms"
expires_after="2026-07-26">
<owner>fdoray@chromium.org</owner>
<owner>catan-team@chromium.org</owner>
<summary>
Elapsed time between a tab getting discarded to eventually being reloaded by
the user.
</summary>
</histogram>
<histogram name="TabManager.Discarding.InactiveToReloadTime" units="ms"
expires_after="2026-06-21">
<owner>fdoray@chromium.org</owner>
<owner>catan-team@chromium.org</owner>
<summary>
Elapsed time between the time a tab switched from being active to inactive
(that eventually gets discarded) until it gets reloaded.
</summary>
</histogram>
<histogram name="TabManager.Discarding.ReloadCount" units="Reloads"
expires_after="2026-06-28">
<owner>fdoray@chromium.org</owner>
<owner>catan-team@chromium.org</owner>
<summary>
Cumulative number of discarded tabs that have been reloaded by the user,
recorded once per tab discard event. For example, a user who had 3 tabs
reloaded records a count in the 1 bin, 2 bin and 3 bin. Thus each bin N is
the number of sessions where users experienced N or more tab reload events.
</summary>
</histogram>
<histogram name="TabManager.Discarding.ReloadToCloseTime" units="ms"
expires_after="2025-06-22">
<owner>fdoray@chromium.org</owner>
<owner>catan-team@chromium.org</owner>
<summary>
Elapsed time between the last time a discarded tab was reloaded and the time
it gets closed.
</summary>
</histogram>
<histogram name="TabRestore.{RestoreType}.TimeBetweenClosedAndRestored"
units="ms" expires_after="2026-01-18">
<owner>sreejakshetty@chromium.org</owner>
<owner>chrome-brapp-loading@google.com</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="2026-08-09">
<owner>emshack@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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="2026-08-09">
<owner>emshack@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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="2026-06-28">
<owner>huitingyu@google.com</owner>
<owner>bling-pandamonium@google.com</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.ArchivedTabRestored.TabCount" units="count"
expires_after="2026-06-21">
<owner>wylieb@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
(Android only) Records how many tabs were restored. Recorded when a user
restores tabs from the archived tabs dialog, selects the &quot;close all
tabs&quot; button, or opens an archived tab.
</summary>
</histogram>
<histogram name="Tabs.ArchivedTabs.MaxLimitReachedAt" units="count"
expires_after="2026-08-16">
<owner>wylieb@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
(Android only) Records how many tabs were archived prior to hitting the
maximum limit for simultaneous archives.
</summary>
</histogram>
<histogram name="Tabs.ArchivePass.DurationMs" units="ms"
expires_after="2026-06-11">
<owner>wylieb@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
(Android only) Records the duration of an archive pass, not including the
time it takes to initialize the PersistedTabData (PTD).
</summary>
</histogram>
<histogram name="Tabs.ArchiveSettings.ArchiveDuplicateTabsEnabled"
enum="Boolean" expires_after="2026-07-19">
<owner>bjfong@google.com</owner>
<owner>wylieb@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Records when a user toggles the settings entry for automatically archiving
duplicate 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.AutoDeleteEnabled" enum="Boolean"
expires_after="2026-06-11">
<owner>wylieb@google.com</owner>
<owner>clank-tab-dev@google.com</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="2026-07-19">
<owner>wylieb@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>Records when a user selects an archive time preference.</summary>
</histogram>
<histogram name="Tabs.AutoOpenSyncedTabGroupsSwitch.ToggledToState"
enum="Boolean" expires_after="2026-04-30">
<owner>ckitagawa@chromium.org</owner>
<owner>clank-tab-dev@google.com</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="2026-07-19">
<owner>wylieb@google.com</owner>
<owner>clank-tab-dev@google.com</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="2026-07-19">
<owner>wylieb@google.com</owner>
<owner>clank-tab-dev@google.com</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="2026-06-28">
<owner>marq@chromium.org</owner>
<owner>olivierrobin@chromium.org</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="2026-06-28">
<owner>marq@chromium.org</owner>
<owner>bling-pandamonium@google.com</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="2026-06-28">
<owner>marq@chromium.org</owner>
<owner>bling-pandamonium@google.com</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.DeleteWithPTD.DurationMs" units="ms"
expires_after="2026-06-11">
<owner>wylieb@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
(Android only) Records the duration of an auto-delete pass, including the
time it takes to load the PersistedTabData (PTD).
</summary>
</histogram>
<histogram name="Tabs.DeserializationResultForAppendPendingNavigation"
enum="BooleanSuccess" expires_after="2026-04-26">
<owner>ckitagawa@chromium.org</owner>
<owner>clank-tab-dev@google.com</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="2026-12-01">
<owner>huitingyu@google.com</owner>
<owner>bling-pandamonium@google.com</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="2026-06-28">
<owner>huitingyu@google.com</owner>
<owner>bling-pandamonium@google.com</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.FreezeAndAppendPendingNavigationResult"
enum="BooleanSuccess" expires_after="2026-07-05">
<owner>ckitagawa@chromium.org</owner>
<owner>clank-tab-dev@google.com</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.GridTabSwitcher.ScrollToTabById.HasTab" enum="Boolean"
expires_after="2026-07-19">
<owner>ckitagawa@chromium.org</owner>
<owner>skym@chromium.org</owner>
<summary>
Records whether the scrollToTabById operation had a valid tab. This is being
used to investigate the frequency with which this operation fails.
</summary>
</histogram>
<histogram name="Tabs.InactiveCountAtStartup" units="tabs"
expires_after="2026-06-28">
<owner>huitingyu@google.com</owner>
<owner>bling-pandamonium@google.com</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.InitializePTD.DurationMs" units="ms"
expires_after="2026-06-11">
<owner>wylieb@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
(Android only) Records the duration of initializing all the PersistedTabData
(PTD) from an archive pass.
</summary>
</histogram>
<histogram name="Tabs.LiveNTPCountAtResume" units="tabs"
expires_after="2026-06-29">
<owner>thegreenfrog@chromium.org</owner>
<owner>bling-team@google.com</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>fdoray@chromium.org</owner>
<owner>catan-team@chromium.org</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>fdoray@chromium.org</owner>
<owner>catan-team@chromium.org</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>fdoray@chromium.org</owner>
<owner>catan-team@chromium.org</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.Metadata.FileSizeOnRead.{TabModelSelectorType}"
units="KB" expires_after="2026-07-28">
<owner>skym@chromium.org</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
Records the size of the tab list metadata file that's loaded on tab model
creation split out by client type. This is for the regular tab model, not
the incognito. Additionally this file may be loaded more times for various
things such as clean up and merging, these loads are all ignored. Clients
such as headless will still report with their selector type.
</summary>
</histogram>
<histogram name="Tabs.Metadata.SyncSave.{TabModelSelectorType}" units="count"
expires_after="2026-08-01">
<owner>skym@chromium.org</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
(Android only) Records whether the metadata save was performed synchronously
(only the UI thread) or asynchronous (on a background thread). Also useful
because it captures the total number of metadata saves.
</summary>
</histogram>
<histogram name="Tabs.MissingWebStateStorageFileOnSessionRestore"
enum="Boolean" expires_after="2027-02-10">
<owner>justincohen@google.com</owner>
<owner>bling-fundamentals@google.com</owner>
<summary>
Records whether a web state session storage file is missing on session
restore. Recorded when the web state is realized.
</summary>
</histogram>
<histogram name="Tabs.NewNavigationWithSameOriginTab" enum="Boolean"
expires_after="2024-02-11">
<owner>gjc@google.com</owner>
<owner>net-dev@chromium.org</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="2026-08-24">
<owner>thegreenfrog@chromium.org</owner>
<owner>sugoi@chromium.org</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="2026-08-24">
<owner>thegreenfrog@chromium.org</owner>
<owner>sugoi@chromium.org</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>fdoray@chromium.org</owner>
<owner>catan-team@chromium.org</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="2026-12-01">
<owner>huitingyu@google.com</owner>
<owner>bling-pandamonium@google.com</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="2026-07-12">
<owner>emshack@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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="2026-07-12">
<owner>emshack@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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>davidjm@chromium.org</owner>
<owner>dtrainor@chromium.org</owner>
<owner>nyquist@chromium.org</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>yusufo@chromium.org</owner>
<owner>nyquist@chromium.org</owner>
<owner>dtrainor@chromium.org</owner>
<owner>davidjm@chromium.org</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>yusufo@chromium.org</owner>
<owner>nyquist@chromium.org</owner>
<owner>dtrainor@chromium.org</owner>
<owner>davidjm@chromium.org</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>yusufo@chromium.org</owner>
<owner>nyquist@chromium.org</owner>
<owner>dtrainor@chromium.org</owner>
<owner>davidjm@chromium.org</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>yusufo@chromium.org</owner>
<owner>nyquist@chromium.org</owner>
<owner>dtrainor@chromium.org</owner>
<owner>davidjm@chromium.org</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="2026-07-12">
<owner>davidjm@chromium.org</owner>
<owner>dtrainor@chromium.org</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>davidjm@chromium.org</owner>
<owner>dtrainor@chromium.org</owner>
<owner>nyquist@chromium.org</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>yusufo@chromium.org</owner>
<owner>nyquist@chromium.org</owner>
<owner>dtrainor@chromium.org</owner>
<owner>davidjm@chromium.org</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>davidjm@chromium.org</owner>
<owner>dtrainor@chromium.org</owner>
<owner>nyquist@chromium.org</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>yusufo@chromium.org</owner>
<owner>nyquist@chromium.org</owner>
<owner>dtrainor@chromium.org</owner>
<owner>davidjm@chromium.org</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>yusufo@chromium.org</owner>
<owner>nyquist@chromium.org</owner>
<owner>dtrainor@chromium.org</owner>
<owner>davidjm@chromium.org</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>yusufo@chromium.org</owner>
<owner>nyquist@chromium.org</owner>
<owner>dtrainor@chromium.org</owner>
<owner>davidjm@chromium.org</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>yusufo@chromium.org</owner>
<owner>nyquist@chromium.org</owner>
<owner>dtrainor@chromium.org</owner>
<owner>davidjm@chromium.org</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="2026-06-28">
<owner>huitingyu@google.com</owner>
<owner>bling-pandamonium@google.com</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>skym@chromium.org</owner>
<owner>ckitagawa@chroimum.org</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="2026-06-08">
<owner>ckitagawa@chromium.org</owner>
<owner>fredmello@chromium.org</owner>
<summary>
The number of distinct entries of {RecentlyClosedType} that were restored in
one Recent Tabs page session on Android. Entries may come from
TabRestoreService (Tab, Group, BulkEvent) or from MultiInstanceManager
(Window). This is recorded when destroying the Recent Tabs page if any
entries of {RecentlyClosedType} type were shown.
</summary>
<token key="RecentlyClosedType" variants="RecentlyClosedType"/>
</histogram>
<histogram name="Tabs.RecentlyClosed.EntriesShownInPage.{RecentlyClosedType}"
units="entries shown" expires_after="2026-06-08">
<owner>ckitagawa@chromium.org</owner>
<owner>fredmello@chromium.org</owner>
<summary>
The number of distinct entries of {RecentlyClosedType} shown in the Recent
Tabs page on Android. Entries may come from TabRestoreService (Tab, Group,
BulkEvent) or from MultiInstanceManager (Window). 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="2026-06-08">
<owner>ckitagawa@chromium.org</owner>
<owner>fredmello@chromium.org</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.RestoreAllArchivedTabsMenuItem.TabCount" units="tabs"
expires_after="2026-07-19">
<owner>wylieb@google.com</owner>
<owner>clank-tab-dev@google.com</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="2026-07-19">
<owner>wylieb@google.com</owner>
<owner>clank-tab-dev@google.com</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="2026-06-21">
<owner>huitingyu@google.com</owner>
<owner>bling-pandamonium@google.com</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="2026-07-26">
<owner>ckitagawa@chromium.org</owner>
<owner>fredmello@chromium.org</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="2026-07-05">
<owner>sonnyrao@chromium.org</owner>
<owner>jamescook@chromium.org</owner>
<summary>
Counts of events from the style of sad tab which has a feedback button as
its primary action. Currently, events include being displayed (actually
visible in a window), and the actions a user can take on the page.
</summary>
</histogram>
<histogram name="Tabs.SadTab.Reload.Event" enum="SadTabEvent"
expires_after="2026-07-05">
<owner>sonnyrao@chromium.org</owner>
<owner>jamescook@chromium.org</owner>
<summary>
Counts of events from the style of sad tab which has a reload button as its
primary action. Compare to Tabs.SadTab.Feedback.Event.
</summary>
</histogram>
<histogram name="Tabs.SadTab.ReloadCount" units="tabs"
expires_after="2021-06-01">
<owner>sonnyrao@chromium.org</owner>
<owner>jamescook@chromium.org</owner>
<summary>
The number of times a tab was reloaded because it was killed (usually by the
kernel OOM killer) and the user clicked on it later, recorded once per
reload event. For example, a user who clicks on 3 discarded tabs will record
a count in the 1 bin, 2 bin, and 3 bin. Thus each bin N is the number of
sessions where users experienced N or more reload events. Compare to
Tabs.Discard.DiscardCount.
</summary>
</histogram>
<histogram name="Tabs.ScrubbedInInterval.KeyPress" units="tabs"
expires_after="2023-05-07">
<owner>corising@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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>corising@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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>afakhry@chromium.org</owner>
<owner>tclaiborne@chromium.org</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>afakhry@chromium.org</owner>
<owner>tclaiborne@chromium.org</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.Selections.Count" units="tabs" expires_after="2026-07-19">
<owner>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
The number of selected tabs in a tab strip. Recorded each time the tab
selection changes.
</summary>
</histogram>
<histogram name="Tabs.ShoppingPersistedTabData.FoundBuyableProductAnnotation"
enum="FoundBuyableProductAnnotation" expires_after="2026-01-27">
<owner>yusufo@chromium.org</owner>
<owner>ayman@chromium.org</owner>
<owner>davidjm@chromium.org</owner>
<summary>
(Android only) 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.SplitViewMenu.{SplitViewMenuSource}"
enum="SplitViewMenuEntry" expires_after="2026-06-28">
<owner>agale@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Records the menu item selected from the split view menu anchored to
{SplitViewMenuSource}.
</summary>
<token key="SplitViewMenuSource" variants="SplitViewMenuSource"/>
</histogram>
<histogram name="Tabs.Startup.PinnedTabCount.{TabModelSelectorType}.{TabType}"
units="count" expires_after="2026-09-15">
<owner>madhavpruthi@google.com</owner>
<owner>ckitagawa@chromium.org</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
(Android only) Records the number of {TabType} pinned 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.Startup.RestoreDuration.{TabModelSelectorType}"
units="ms" expires_after="2026-06-21">
<owner>ckitagawa@chromium.org</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
(Android only) 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="2026-06-21">
<owner>ckitagawa@chromium.org</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
(Android only) 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="2026-08-02">
<owner>davidjm@chromium.org</owner>
<owner>nyquist@chromium.org</owner>
<summary>
(Android only) 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="2026-07-05">
<owner>wylieb@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
(Android only) 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="2026-06-21">
<owner>davidjm@chromium.org</owner>
<owner>nyquist@chromium.org</owner>
<summary>
(Android only) 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.Startup.UniqueUrlCount.{TabModelSelectorType}"
units="count" expires_after="2026-03-15">
<owner>wylieb@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
(Android only) Records the number of duplicate tab URLs found at startup per
{TabModelSelectorType}.
</summary>
<token key="TabModelSelectorType" variants="TabModelSelectorType"/>
</histogram>
<histogram name="Tabs.TabArchived.FoundDuplicateInRegularModel" units="count"
expires_after="2026-07-05">
<owner>wylieb@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
(Android only) Records how many tabs were found in the regular model which
have already been archived. Recorded on each declutter pass.
</summary>
</histogram>
<histogram name="Tabs.TabArchived.TabCount" units="tabs"
expires_after="2026-07-19">
<owner>wylieb@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
(Android only) Records how many tabs were archived from the normal tab model
selector during an archive pass.
</summary>
</histogram>
<histogram name="Tabs.TabArchiveEligibilityCheck.AfterNDays" units="days"
expires_after="2026-07-19">
<owner>wylieb@google.com</owner>
<owner>clank-tab-dev@google.com</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="2026-03-15">
<owner>wylieb@google.com</owner>
<owner>clank-tab-dev@google.com</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="2026-07-19">
<owner>wylieb@google.com</owner>
<owner>clank-tab-dev@google.com</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.TabCount.SplitTabs" units="tabs"
expires_after="2026-07-16">
<owner>agale@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Counts the number of split tabs across each window, reported every 5
minutes. Desktop only.
</summary>
</histogram>
<histogram name="Tabs.TabCount.{TabStripMode}" units="tabs"
expires_after="2026-07-16">
<owner>agale@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Counts the number of tabs across each window, reported every 5 minutes.
Desktop only.
</summary>
<token key="TabStripMode" variants="TabStripMode"/>
</histogram>
<histogram name="Tabs.TabCountActiveWindow" units="tabs" expires_after="never">
<!-- expires-never: usage drives tab optimization and analysis. -->
<owner>markchang@google.com</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="2026-03-29">
<owner>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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="2026-07-05">
<owner>mpearson@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<owner>sbirch@google.com</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="2026-07-05">
<owner>mpearson@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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>fdoray@chromium.org</owner>
<owner>catan-team@chromium.org</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>yusufo@chromium.org</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="2026-07-19">
<owner>davidjm@chromium.org</owner>
<owner>dtrainor@chromium.org</owner>
<owner>nyquist@chromium.org</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="2026-07-26">
<owner>ckitagawa@chromium.org</owner>
<owner>dtrainor@chromium.org</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.AccidentalClicks" enum="AccidentalClickType"
expires_after="2026-09-09">
<owner>emshack@chromium.org</owner>
<owner>shibalik@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Records the total number of tab search clicks, and the number of accidental
clicks as measured by less than a second passing between clicking tab search
and clicking the new tab button. Percentage of accidental clicks can be
determined by accidental clicks / total clicks. This metric only logs for
clicks within the tab strip combo button.
</summary>
</histogram>
<histogram name="Tabs.TabSearch.BubbleWidgetInitializationTime" units="ms"
expires_after="2026-09-09">
<owner>temao@chromium.org</owner>
<owner>tluk@chromium.org</owner>
<owner>robliao@chromium.org</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="2026-09-09">
<owner>temao@chromium.org</owner>
<owner>tluk@chromium.org</owner>
<owner>robliao@chromium.org</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="2026-09-09">
<owner>tluk@chromium.org</owner>
<owner>robliao@chromium.org</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="2026-09-09">
<owner>kerenzhu@chromium.org</owner>
<owner>romanarora@chromium.org</owner>
<owner>yuhengh@chromium.org</owner>
<owner>tluk@chromium.org</owner>
<owner>robliao@chromium.org</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="2026-09-09">
<owner>kerenzhu@chromium.org</owner>
<owner>romanarora@chromium.org</owner>
<owner>yuhengh@chromium.org</owner>
<owner>tluk@chromium.org</owner>
<owner>robliao@chromium.org</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="2026-09-09">
<owner>kerenzhu@chromium.org</owner>
<owner>romanarora@chromium.org</owner>
<owner>yuhengh@chromium.org</owner>
<owner>tluk@chromium.org</owner>
<owner>robliao@chromium.org</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="2026-09-09">
<owner>kerenzhu@chromium.org</owner>
<owner>romanarora@chromium.org</owner>
<owner>yuhengh@chromium.org</owner>
<owner>tluk@chromium.org</owner>
<owner>robliao@chromium.org</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="2026-09-09">
<owner>tluk@chromium.org</owner>
<owner>robliao@chromium.org</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="2026-09-09">
<owner>tluk@chromium.org</owner>
<owner>robliao@chromium.org</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="2026-09-09">
<owner>tluk@chromium.org</owner>
<owner>robliao@chromium.org</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="2026-09-09">
<owner>tluk@chromium.org</owner>
<owner>robliao@chromium.org</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="2026-09-09">
<owner>tluk@chromium.org</owner>
<owner>robliao@chromium.org</owner>
<owner>yuhengh@chromium.org</owner>
<owner>romanarora@chromium.org</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="2026-09-09">
<owner>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
[Desktop] Logs the yser preference of where the tab search button should be
rendered in the tabstrip region view. Trailing implies right side in LTR,
leading implies left in LTR. Replaced by PositionInTabstrip2.
</summary>
</histogram>
<histogram name="Tabs.TabSearch.PositionInTabstrip2" enum="TabSearchPosition"
expires_after="2026-09-09">
<owner>agale@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
[Desktop] Logs the position of the tab search button in the tabstrip region
view, but only if the tab search button is rendered in the tabstrip region.
Trailing implies right side in LTR, leading implies left in LTR. The
previous version of the histogram always logged the value of the pref, but
that didn't mean the tab search button was actually rendered in the tab
strip.
</summary>
</histogram>
<histogram name="Tabs.TabSearch.RecentlyClosedSectionToggleAction"
enum="TabSearchRecentlyClosedToggleActions" expires_after="2026-09-09">
<owner>romanarora@chromium.org</owner>
<owner>robliao@chromium.org</owner>
<owner>tluk@chromium.org</owner>
<owner>yuhengh@chromium.org</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="2026-09-09">
<owner>romanarora@chromium.org</owner>
<owner>robliao@chromium.org</owner>
<owner>tluk@chromium.org</owner>
<owner>yuhengh@chromium.org</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.TimeToClose" units="ms"
expires_after="2026-09-09">
<owner>emshack@chromium.org</owner>
<owner>shibalik@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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 length of time the Tab Search bubble widget was
open, recorded on close.
</summary>
</histogram>
<histogram name="Tabs.TabSearch.TimeToShow.{WarmUpLevel}" units="ms"
expires_after="2026-09-09">
<owner>kerenzhu@chromium.org</owner>
<owner>dayeung@chromium.org</owner>
<owner>tluk@chromium.org</owner>
<owner>robliao@chromium.org</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="2026-09-09">
<owner>tluk@chromium.org</owner>
<owner>robliao@chromium.org</owner>
<owner>yuhengh@chromium.org</owner>
<owner>romanarora@chromium.org</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="2026-09-09">
<owner>tluk@chromium.org</owner>
<owner>robliao@chromium.org</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="2026-09-09">
<owner>tluk@chromium.org</owner>
<owner>robliao@chromium.org</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="2026-09-09">
<owner>tluk@chromium.org</owner>
<owner>chrome-cros@chromium.org</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="2026-09-09">
<owner>yuhengh@chromium.org</owner>
<owner>chrome-cros@chromium.org</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.TabListDataReceived2" units="ms"
expires_after="2026-09-09">
<owner>kerenzhu@chromium.org</owner>
<owner>tluk@chromium.org</owner>
<owner>robliao@chromium.org</owner>
<owner>yuhengh@chromium.org</owner>
<owner>kerenzhu@chromium.org</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="2026-09-09">
<owner>kerenzhu@chromium.org</owner>
<owner>tluk@chromium.org</owner>
<owner>robliao@chromium.org</owner>
<owner>yuhengh@chromium.org</owner>
<owner>kerenzhu@chromium.org</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="2026-09-09">
<owner>tluk@chromium.org</owner>
<owner>robliao@chromium.org</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="2026-09-09">
<owner>yuhengh@chromium.org</owner>
<owner>chrome-cros@chromium.org</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="2026-09-09">
<owner>tluk@chromium.org</owner>
<owner>robliao@chromium.org</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="2026-09-09">
<owner>tluk@chromium.org</owner>
<owner>robliao@chromium.org</owner>
<owner>yuhengh@chromium.org</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="2026-09-09">
<owner>tluk@chromium.org</owner>
<owner>robliao@chromium.org</owner>
<owner>yuhengh@chromium.org</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="2026-12-28">
<owner>davidjm@chromium.org</owner>
<owner>clank-tab-dev@google.com</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="2026-07-05">
<owner>yusufo@chromium.org</owner>
<owner>nyquist@chromium.org</owner>
<owner>dtrainor@chromium.org</owner>
<owner>davidjm@chromium.org</owner>
<summary>
Time taken to load a TabState file in the event that it exists.
</summary>
</histogram>
<histogram name="Tabs.TabState.MigrationStatus" enum="TabStateMigrationStatus"
expires_after="2026-07-12">
<owner>davidjm@chromium.org</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
TabState (Tab metadata persistence system on Chrome for Android) has being
migrated from a hand-written schema to a FlatBuffer based schema. Part of
the cleanup is removing legacy hand-written FlatBuffer files. This metric
records if the TabState is fully migrated (FlatBuffer file exists and no
legacy file exists), is partially migrated (both FlatBuffer file and legacy
file exist) or is unmigrated (only legacy file exists). This metric is
recorded when a Tab is restored.
</summary>
</histogram>
<histogram name="Tabs.TabState.RestoreMethod" enum="TabStateRestoreMethod"
expires_after="2026-07-12">
<owner>davidjm@chromium.org</owner>
<owner>clank-tab-dev@google.com</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="2026-06-28">
<owner>nyquist@chromium.org</owner>
<owner>dtrainor@chromium.org</owner>
<owner>davidjm@chromium.org</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="2026-06-11">
<owner>wylieb@google.com</owner>
<owner>clank-tab-dev@google.com</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.TabStateStore.FilteredTabCount" units="tabs"
expires_after="2026-10-28">
<owner>mfiaz@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
[Android] Records the number of tabs we purposefully did not restore during
the restoration process. Recorded when the restoration process in
TabRestorer has concluded.
</summary>
</histogram>
<histogram name="Tabs.TabStateStore.LoadAllTabsDuration" units="ms"
expires_after="2026-10-28">
<owner>skym@chromium.org</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
[Android] Records the duration of reading all tab state information from
disk via the TabStateStorageService and creating Java representations of
them. This does not include creating full tabs. Recorded when all tab states
have been loaded from the service.
</summary>
</histogram>
<histogram name="Tabs.TabStateStore.ShadowStoreCaughtUp" enum="Boolean"
expires_after="2026-10-28">
<owner>mfiaz@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
[Android] Records when the shadow store has caught up to the authoritative
store. This is a prerequisite for the shadow store to become the
authoritative store during the migration process.
</summary>
</histogram>
<histogram
name="Tabs.TabStateStore.TabCountDelta.AuthoritativeHigher.{TabModelOrchestratorType}"
units="tabs" expires_after="2026-10-28">
<owner>skym@chromium.org</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
[Android] Records the delta in tab count between the authoritative and
shadow tab models when the authoritative model has more tabs. Recorded when
both models have finished loading. This is recorded for the
{TabModelOrchestratorType} tab model orchestrator.
</summary>
<token key="TabModelOrchestratorType" variants="TabModelOrchestratorType"/>
</histogram>
<histogram
name="Tabs.TabStateStore.TabCountDelta.Equal.{TabModelOrchestratorType}"
units="Boolean" expires_after="2026-10-28">
<owner>mfiaz@google.com</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
[Android] Records the tab count when the authoritative and shadow tab models
have the same number of tabs. Recorded when both models have finished
loading. This is recorded for the {TabModelOrchestratorType} tab model
orchestrator.
</summary>
<token key="TabModelOrchestratorType" variants="TabModelOrchestratorType"/>
</histogram>
<histogram
name="Tabs.TabStateStore.TabCountDelta.ShadowHigher.{TabModelOrchestratorType}"
units="tabs" expires_after="2026-10-28">
<owner>skym@chromium.org</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
[Android] Records the delta in tab count between the authoritative and
shadow tab models when the shadow model has more tabs. Recorded when both
models have finished loading. This is recorded for the
{TabModelOrchestratorType} tab model orchestrator.
</summary>
<token key="TabModelOrchestratorType" variants="TabModelOrchestratorType"/>
</histogram>
<histogram
name="Tabs.TabStateStore.TimeDeltaOnMismatch.AuthoritativeNewer.{TabModelOrchestratorType}"
units="ms" expires_after="2026-10-28">
<owner>skym@chromium.org</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
[Android] Records the time delta when a URL mismatch occurs between the
authoritative and shadow tab models, and the authoritative tab is newer.
Recorded when both models have finished loading and a URL mismatch is
detected. This is recorded for the {TabModelOrchestratorType} tab model
orchestrator.
</summary>
<token key="TabModelOrchestratorType" variants="TabModelOrchestratorType"/>
</histogram>
<histogram
name="Tabs.TabStateStore.TimeDeltaOnMismatch.ShadowNewer.{TabModelOrchestratorType}"
units="ms" expires_after="2026-10-28">
<owner>skym@chromium.org</owner>
<owner>clank-tab-dev@google.com</owner>
<summary>
[Android] Records the time delta when a URL mismatch occurs between the
authoritative and shadow tab models, and the shadow tab is newer. Recorded
when both models have finished loading and a URL mismatch is detected. This
is recorded for the {TabModelOrchestratorType} tab model orchestrator.
</summary>
<token key="TabModelOrchestratorType" variants="TabModelOrchestratorType"/>
</histogram>
<histogram name="Tabs.TabThumbnailCleanupAbortedByArchive" enum="Boolean"
expires_after="2026-06-11">
<owner>wylieb@google.com</owner>
<owner>clank-tab-dev@google.com</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="2026-05-03">
<owner>ckitagawa@chromium.org</owner>
<owner>clank-tab-dev@chromium.org</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="2026-06-08">
<owner>ckitagawa@chromium.org</owner>
<owner>clank-tab-dev@chromium.org</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="2026-06-28">
<owner>huitingyu@google.com</owner>
<owner>bling-pandamonium@google.com</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="2026-12-12">
<owner>huitingyu@google.com</owner>
<owner>bling-pandamonium@google.com</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.VerticalTabs.State" enum="VerticalTabsState"
expires_after="2026-07-01">
<owner>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
The state of vertical tabs across all profiles. Logged by the metric
provider for UMA filtering.
</summary>
</histogram>
<histogram name="Tabs.VerticalTabs.TabStripSize" units="DIPs"
expires_after="2026-07-01">
<owner>charlesmeng@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
When the user finishes dragging to resize the vertical tabstrip, this metric
is logged to record the requested size of the tabstrip by the user.
</summary>
</histogram>
<histogram name="Tabs.WindowCount{BatteryState}" units="windows"
expires_after="never">
<!-- expires-never: https://crbug.com/966137 -->
<owner>fdoray@chromium.org</owner>
<owner>catan-team@chromium.org</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="2026-07-05">
<owner>collinbaker@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
The width of each open browser window, in DIPs, reported every 5 minutes.
Desktop only.
</summary>
</histogram>
<histogram name="Tabs.{DuplicateType}.{MetricType}.{WindowType}" units="tabs"
expires_after="2026-06-07">
<owner>emshack@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
Every 5 minutes, records the {MetricType} of duplicate tabs in {WindowType}.
If there are 3 tabs with matching URLs, 2 count as duplicates. URL match is
determined by {DuplicateType}. Desktop only.
</summary>
<token key="DuplicateType">
<variant name="Duplicates" summary="exact string comparison"/>
<variant name="DuplicatesExcludingFragments"
summary="string comparison after excluding fragments"/>
</token>
<token key="WindowType">
<variant name="AllProfileWindows"
summary="each open profile, across all windows for that profile."/>
<variant name="SingleWindow" summary="each browser window"/>
</token>
<token key="MetricType">
<variant name="Count" summary="count"/>
<variant name="Percentage" summary="percentage"/>
</token>
</histogram>
<histogram name="Tabs.{TabActiveState}TabWidth" units="px"
expires_after="2025-11-16">
<owner>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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.SplitView.Created" enum="SplitTabCreatedSource"
expires_after="2026-07-26">
<owner>agale@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
When a split tab is created, records the method through which it was
created.
</summary>
</histogram>
<histogram name="TabStrip.Tab.ContextMenuReloadCount" units="tabs"
expires_after="2026-07-26">
<owner>agale@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
When the user reloads a tab using the tab context menu, records the number
of tabs being reloaded.
</summary>
</histogram>
<histogram name="TabStrip.Tab.HotkeyClosedCount" units="tabs"
expires_after="2026-09-01">
<owner>atharvmaan@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
When the user closes tab(s) using hotkey, records the number of tabs being
closed.
</summary>
</histogram>
<histogram name="TabStrip.Tab.ReloadCount" units="tabs"
expires_after="2026-07-26">
<owner>agale@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
When the user reloads a tab using the toolbar button, hotkey, or contents
context menu, records the number of tabs being reloaded.
</summary>
</histogram>
<histogram name="TabStrip.Tab.{Framework}.ActivationAction"
enum="TabActivationTypes" expires_after="2026-07-26">
<owner>yuhengh@chromium.org</owner>
<owner>tluk@chromium.org</owner>
<owner>romanarora@chromium.org</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="2026-07-05">
<owner>yusufo@chromium.org</owner>
<owner>wychen@chromium.org</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="2026-05-03">
<owner>robliao@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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="2026-07-26">
<owner>dpenning@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</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>
<histogram name="TabStrip.Vertical.TimeToSwitch" units="ms"
expires_after="2026-07-26">
<owner>agale@chromium.org</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
The amount of time from cursor entering the vertical tabstrip to first click
on a tab to switch. This is only logged when the user is in vertical
tabstrip mode.
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>
<histogram name="TabStrip.{TabStripMode}.TabDragDestination"
enum="TabDragDestination" expires_after="2026-07-01">
<owner>kunaldaftari@google.com</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
The destination of a tab drag operation for either vertical or horizontal
tabs.
It will either be in the same window, a new window, an existing distinct
window, or abandoned.
Currently, users cannot drag between tab strips of different types. If that
becomes possible, then this metric needs to be updated accordingly to
distinguish between those behaviors.
</summary>
<token key="TabStripMode" variants="TabStripMode"/>
</histogram>
<histogram name="TabStrip.{TabStripMode}.TabDragDuration" units="ms"
expires_after="2026-07-01">
<owner>kunaldaftari@google.com</owner>
<owner>top-chrome-desktop-ui@google.com</owner>
<summary>
The duration of a completed tab drag operation for either vertical or
horizontal tabs.
Currently, users cannot drag between tab strips of different types. If that
becomes possible, then this metric needs to be updated accordingly to
distinguish between those behaviors.
</summary>
<token key="TabStripMode" variants="TabStripMode"/>
</histogram>
</histograms>
</histogram-configuration>