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

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

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

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

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

<histogram-configuration>

<histograms>

<variants name="ClusteringRequestSource">
  <variant name="" summary="all requests"/>
  <variant name=".AllKeywordCacheRefresh"
      summary="only requests for the all-keyword-cache which occurs about
               once every 2 hours but can vary if e.g. the user isn't
               interacting with the omnibox"/>
  <variant name=".NewTabPage"
      summary="only requests for the Journeys module on load of the New Tab
               Page"/>
  <variant name=".ShortKeywordCacheRefresh"
      summary="only requests for the short-keyword cache which occurs up to
               once every 10 seconds but can vary if e.g. the user isn't
               interacting with the omnibox"/>
  <variant name=".WebUI"
      summary="only requests for the Journeys this WebUI within History or
               Side Panel, either query-less or query states, both on load
               and on scroll"/>
</variants>

<histogram name="History.AttemptedToFixProfileError" units="units"
    expires_after="2024-02-11">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Logged whenever history database initialization fails. The frequency of
    logging will tell you the total failure rate. True indicate that we think
    the database is non-recoverable and it will be deleted. It should be
    re-created the next time Chrome is started. False indicates we think the
    error is temporary (like out of disk space or file locked). Chrome will run
    with no history database and nothing will be done to try to fix the error.
    See History.InitializationFailureStep for which particular step of history
    initialization failed.
  </summary>
</histogram>

<histogram name="History.Backend.TransactionCommitError"
    enum="SqliteLoggedResultCode" expires_after="2025-02-04">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    The exact database error encountered when committing a transaction, if it
    failed.
  </summary>
</histogram>

<histogram name="History.Backend.TransactionCommitSuccess"
    enum="BooleanSuccess" expires_after="2025-02-04">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Recorded after attempting to commit a singleton transaction within
    HistoryBackend. Records whether it was successfully committed or not.
  </summary>
</histogram>

<histogram name="History.BrowsingDataLifetime.Duration.BrowserShutdownDeletion"
    units="ms" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    The time that passed while performing a browsing data deletion using the
    ClearBrowsingDataOnExitList policy. The deletion will be for all time.
  </summary>
</histogram>

<histogram
    name="History.BrowsingDataLifetime.Duration.Scheduled{DeletionType}Deletion"
    units="ms" expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    The time that passed while performing a scheduled data deletion using the
    BrowsingDataSettings policy. The deletion will be for a specific hourly time
    range, the data types being deleted are {DeletionType}.
  </summary>
  <token key="DeletionType">
    <variant name="Filterable" summary="filterable"/>
    <variant name="Unfilterable" summary="unfilterable"/>
  </token>
</histogram>

<histogram name="History.ClearBrowsingData.Duration.ChromeTask.{Task}"
    units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Records the duration of a ChromeBrowsingDataRemoverDelegate task for {Task}
    deletion.
  </summary>
<!-- LINT.IfChange(History.ClearBrowsingData.Duration.ChromeTask.Task) -->

  <token key="Task">
    <variant name="AccountPasswords" summary="AccountPasswords"/>
    <variant name="AccountPasswordsSynced" summary="AccountPasswordsSynced"/>
    <variant name="AutofillData" summary="AutofillData"/>
    <variant name="AutofillOrigins" summary="AutofillOrigins"/>
    <variant name="CdmLicenses" summary="CdmLicenses"/>
    <variant name="Cookies" summary="Cookies"/>
    <variant name="DisableAutoSigninForAccountPasswords"
        summary="DisableAutoSigninForAccountPasswords"/>
    <variant name="DisableAutoSigninForProfilePasswords"
        summary="DisableAutoSigninForProfilePasswords"/>
    <variant name="DomainReliability" summary="DomainReliability"/>
    <variant name="FaviconCacheExpiration" summary="FaviconCacheExpiration"/>
    <variant name="FieldInfo" summary="FieldInfo"/>
    <variant name="History" summary="History"/>
    <variant name="HostCache" summary="HostCache"/>
    <variant name="HttpAuthCache" summary="HttpAuthCache"/>
    <variant name="MediaDeviceSalts" summary="MediaDeviceSalts"/>
    <variant name="NaclCache" summary="NaclCache"/>
    <variant name="NetworkErrorLogging" summary="NetworkErrorLogging"/>
    <variant name="OfflinePages" summary="OfflinePages"/>
    <variant name="Passwords" summary="Passwords"/>
    <variant name="PasswordsStatistics" summary="PasswordsStatistics"/>
    <variant name="PnaclCache" summary="PnaclCache"/>
    <variant name="ReportingCache" summary="ReportingCache"/>
    <variant name="SecurePaymentConfirmationCredentials"
        summary="SecurePaymentConfirmationCredentials"/>
    <variant name="Synchronous" summary="Synchronous"/>
    <variant name="TpmAttestationKeys" summary="TpmAttestationKeys"/>
    <variant name="UserDataSnapshot" summary="UserDataSnapshot"/>
    <variant name="VideoDecodeHistory" summary="VideoDecodeHistory"/>
    <variant name="WebAppHistory" summary="WebAppHistory"/>
    <variant name="WebAuthnCredentials" summary="WebAuthnCredentials"/>
    <variant name="WebrtcEventLogs" summary="WebrtcEventLogs"/>
    <variant name="WebrtcLogs" summary="WebrtcLogs"/>
  </token>
<!-- LINT.ThenChange(//chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h:TracingDataType) -->

</histogram>

<histogram name="History.ClearBrowsingData.Duration.FilteredDeletion"
    units="ms" expires_after="never">
<!-- expires-never: tracked as an important privacy metric. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    The time that passed while performing a browsing data deletion with an
    origin filter. The deletion might be for all time or specific time range.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.Duration.FullDeletion" units="ms"
    expires_after="never">
<!-- expires-never: tracked as an important privacy metric. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    The time that passed while performing a full browsing data deletion.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.Duration.OriginDeletion" units="ms"
    expires_after="never">
<!-- expires-never: tracked as an important privacy metric. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    The time that passed while performing a browsing data deletion for a set of
    origins.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.Duration.SlowTasks180s"
    enum="BrowsingDataRemoverTasks" expires_after="never">
<!-- expires-never: tracked as an important privacy metric. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Record tasks from BrowsingDataRemoverImpl that took more than 180s to
    finish.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.Duration.SlowTasks180sChrome"
    enum="ChromeBrowsingDataRemoverTasks" expires_after="never">
<!-- expires-never: tracked as an important privacy metric. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Record tasks from ChromeBrowsingDataRemoverDelegate that took more than 180s
    to finish.
  </summary>
</histogram>

<histogram
    name="History.ClearBrowsingData.Duration.SlowTasks180sStoragePartition"
    enum="StoragePartitionRemoverTasks" expires_after="never">
<!-- expires-never: tracked as an important privacy metric. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Record tasks from StoragePartition that took more than 180s to finish.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.Duration.Task.{Task}" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Records the duration of a BrowsingDataRemoverImpl task for {Task} deletion.
  </summary>
<!-- LINT.IfChange(History.ClearBrowsingData.Duration.Task.Task) -->

  <token key="Task">
    <variant name="AuthCache" summary="AuthCache"/>
    <variant name="ChannelIds" summary="ChannelIds"/>
    <variant name="CodeCaches" summary="CodeCaches"/>
    <variant name="Conversions" summary="Conversions"/>
    <variant name="DeferredCookies" summary="DeferredCookies"/>
    <variant name="EmbedderData" summary="EmbedderData"/>
    <variant name="HttpAndMediaCaches" summary="HttpAndMediaCaches"/>
    <variant name="HttpCache" summary="HttpCache"/>
    <variant name="NetworkErrorLogging" summary="NetworkErrorLogging"/>
    <variant name="NetworkHistory" summary="NetworkHistory"/>
    <variant name="PreflightCache" summary="PreflightCache"/>
    <variant name="ReportingCache" summary="ReportingCache"/>
    <variant name="SharedDictionary" summary="SharedDictionary"/>
    <variant name="SharedStorage" summary="SharedStorage"/>
    <variant name="StoragePartition" summary="StoragePartition"/>
    <variant name="Synchronous" summary="Synchronous"/>
    <variant name="TrustTokens" summary="TrustTokens"/>
  </token>
<!-- LINT.ThenChange(//content/browser/browsing_data/browsing_data_remover_impl.h:TracingDataType) -->

</histogram>

<histogram name="History.ClearBrowsingData.Duration.TimeRangeDeletion"
    units="ms" expires_after="never">
<!-- expires-never: tracked as an important privacy metric. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    The time that passed while performing a browsing data deletion for a
    restricted amount of time (e.g. &quot;Last hour&quot;) without an origin
    filter.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.FailedTasksChrome"
    enum="ChromeBrowsingDataRemoverTasks" expires_after="2022-09-25">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Records tasks from ChromeBrowsingDataRemoverDelegate that did not complete
    successfully, i.e. where some data that was supposed to be deleted was left
    behind.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.ImportantDeselectedNum"
    units="units" expires_after="2024-10-04">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Recorded when the user presses the 'clear' button when presented with the
    list of important sites they might want to exclude from clearing browsing
    data. We record the number of sites the user deselected, or protected, from
    clearing. The default has all sites selected.

    This histogram expired between M95 and M115, and may have incomplete data
    within that range.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.ImportantDeselectedPercent"
    units="%/5" expires_after="2024-10-04">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Recorded when the user presses the 'clear' button when presented with the
    list of important sites they might want to exclude from clearing browsing
    data. We record the percent of sites the user deselected, or protected, from
    clearing. The default has all sites selected, which is 0%. Note: To reduce
    the number of empty buckets, the percent is divided by 5.

    This histogram expired between M95 and M115, and may have incomplete data
    within that range.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.ImportantDialogShown"
    enum="BooleanShown" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Recorded when the user presses the 'clear' button in the clear browsing
    dialog. We record 'true' if the important sites dialog is shown.

    This histogram expired between M95 and M115, and may have incomplete data
    within that range.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.NumImportant" units="units"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Recorded when we successfully fetched important sites in the clear browsing
    data screen. This is the number of sites that we think are important to the
    user.

    This histogram expired between M95 and M115, and may have incomplete data
    within that range.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.ShownHistoryNoticeAfterClearing"
    enum="BooleanShown" expires_after="M81">
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Whether a dialog with a notice about other forms of browsing history was
    shown after the user deleted data from the Clear Browsing Data dialog.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.TaskQueueAtShutdown" units="units"
    expires_after="never">
<!-- expires-never: tracked as an important privacy metric. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    The number of tasks that are in the task queue when the BrowsingDataRemover
    is destroyed.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.UserDeletedCookieOrCache"
    enum="CookieOrCacheDeletion" expires_after="never">
<!-- expires-never: tracked as an important privacy metric. -->

  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Recorded when the user deletes their browsing data. Shows whether cookies
    and/or cache were among the selected data types.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.UserDeletedCookieOrCacheFromDialog"
    enum="CookieOrCacheDeletion" expires_after="never">
<!-- expires-never: tracked as an important privacy metric. -->

  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Recorded when the user deletes their browsing data manually from the
    ClearBrowsingData dialog. Shows whether cookies and/or cache were among the
    selected data types.
  </summary>
</histogram>

<histogram name="History.ClearBrowsingData.UserDeletedFromTab"
    enum="ClearBrowsingDataTab" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Recorded when the user deletes their browsing data. Shows which tab was used
    to perform the deletion.
  </summary>
</histogram>

<histogram name="History.Clusters.Actions.DidMakeQuery" enum="BooleanQueried"
    expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Logged when the user closes the chrome://history/journeys page (e.g. closed
    tab, navigated in the same tab, or closed browser). Logs whether the user
    made a query on their history from the journeys page.
  </summary>
</histogram>

<histogram name="History.Clusters.Actions.FinalState.Number{Event}"
    units="count" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Logged when the user closes the chrome://history/journeys page (e.g. closed
    tab, navigated in the same tab, or closed browser). Logs the number of
    {Event} over the period of a single visit to the Journeys UI.
  </summary>
  <token key="Event">
    <variant name="ClustersDeleted" summary="cluster deletions"/>
    <variant name="IndividualVisitsDeleted"
        summary="single/individual visits deleted"/>
    <variant name="LinksOpened" summary="links opened"/>
    <variant name="RelatedSearchesClicked"
        summary="related search links opened"/>
    <variant name="TogglesToBasicHistory"
        summary="Toggles to from basic history UI"/>
    <variant name="VisibilityToggles" summary="Journeys UI toggles on/off"/>
  </token>
</histogram>

<histogram name="History.Clusters.Actions.FinalState.WasSuccessful"
    enum="BooleanSuccess" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Logged when the user closes the chrome://history/journeys page (e.g., closed
    tab, navigated in the same tab, or closed browser). Logs whether the users
    interaction with the UI was deemed successful or not. Success is defined as
    a link was clicked, a cluster was opened, or a deletion event occurred.
  </summary>
</histogram>

<histogram name="History.Clusters.Actions.InitialState"
    enum="HistoryClustersInitialState" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Logged when the user closes the chrome://history/journeys page (e.g. closed
    tab, navigated in the same tab, or closed browser). Logs the state that
    started the use of the journeys page (e.g., a direct navigation to journeys
    page).
  </summary>
</histogram>

<histogram name="History.Clusters.Actions.LinksOpened" units="links opened"
    expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Logged when the user closed the chrome://history/journeys page (e.g. closed
    tab, navigated in the same tab, or closed browser). Logs the # of links
    opened from the journeys page.
  </summary>
</histogram>

<histogram name="History.Clusters.Actions.NumQueries"
    units="number queries made" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Logged when the user closes the chrome://history/journeys page (e.g. closed
    tab, navigated in the same tab, or closed browser). Logs the number of
    queries the user made while on the journeys page, only logged if at least
    one query was made.
  </summary>
</histogram>

<histogram
    name="History.Clusters.Backend.ClusterSimilarityHeuristicsProcessor.ClusterSearchTermOverriden"
    enum="Boolean" expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Logs whether the canonical search term for the cluster was overridden when
    one was already generated for it. Logged for all but the first search visit
    in each cluster processed that has multiple search visits when the Journeys
    UI is shown.

    A cluster can have multiple search visits and we expect that search visits
    in the same cluster all have the same search term (or no search term at
    all). However, this does not seem to be true as we have seen crashes in the
    wild that make this assumption. This metric tracks how often a search visit
    had non-empty search terms that differed from the search terms of the
    previous search visit with non-empty search terms in the same cluster.
  </summary>
</histogram>

<histogram name="History.Clusters.Backend.ComputeClusters.ThreadTime"
    units="ms" expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Logs the time taken to cluster visits once the visits have been finalized
    with all the necessary information for clustering, which is performed on a
    background worker. This does not include any thread hop or queuing delay.
    Logged when clusters have been calculated based on any request to cluster
    visits, which could be triggered from several things, including loading the
    journeys UI, putting a query in the journeys page, etc.
  </summary>
</histogram>

<histogram name="History.Clusters.Backend.ComputeClustersForUI.ThreadTime"
    units="ms" expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Logs the time taken to determine how clusters should be displayed once the
    initial context clusters have been formed, which is performed on a
    background worker. This does not include any thread hop or queuing delay.
    Logged when clusters have been calculated based on any request to cluster
    visits, which could be triggered from several things, including loading the
    journeys UI, putting a query in the journeys page, etc. This is a segment
    within `History.Clusters.Backend.ComputeClusters.ThreadTime`.
  </summary>
</histogram>

<histogram
    name="History.Clusters.Backend.ComputeClusterTriggerability2.ThreadTime"
    units="ms" expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Logs the time taken to run the steps during a clustering pass that are
    required for determinining the triggerability for a cluster, which is
    performed on a background worker. This does not include any thread hop or
    queuing delay. Logged when clusters have been calculated based on any
    request to cluster visits, which could be triggered from several things,
    including loading the journeys UI, putting a query in the journeys page,
    etc. This is a segment within
    `History.Clusters.Backend.ComputeClusters.ThreadTime`.
  </summary>
</histogram>

<histogram name="History.Clusters.Backend.ContextClusterer.ThreadTime"
    units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Logs the time taken to run the initial context clustering pass, which is
    performed on a background worker. This does not include any thread hop or
    queuing delay. Logged when clusters have been calculated based on any
    request to cluster visits, which could be triggered from several things,
    including loading the journeys UI, putting a query in the journeys page,
    etc. This is a segment within
    `History.Clusters.Backend.ComputeClusters.ThreadTime`.
  </summary>
</histogram>

<histogram
    name="History.Clusters.Backend.FilterClusterProcessor.ClusterFilterReason{Source}"
    enum="ClusterFilterReason" expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Logs the reason why a cluster was filtered out of the return set for each
    cluster provided to the clustering backend when invoked by {Source}. Note
    that a single cluster can log multiple values in this metric if it is
    ineligible for multiple reasons.
  </summary>
  <token key="Source" variants="ClusteringRequestSource"/>
</histogram>

<histogram
    name="History.Clusters.Backend.FilterClusterProcessor.NumClusters.{Segment}{Source}"
    units="counts" expires_after="2024-06-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Logs the number of clusters {Segment} each time {Source} invokes the
    clustering backend with a functional filtering configuration. Note that the
    max count is limited to the size of the initial batch sent to the clustering
    backend.
  </summary>
  <token key="Segment">
    <variant name="PostFilter" summary="after applying the filtering criteria"/>
    <variant name="PreFilter" summary="before applying the filtering criteria"/>
  </token>
  <token key="Source" variants="ClusteringRequestSource"/>
</histogram>

<histogram
    name="History.Clusters.Backend.GetMostRecentClusters.{Segment}{Source}"
    units="ms" expires_after="2024-10-06">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Near startup and every 1 hour afterwards, unclustered visits are clustered,
    and the clusters are persisted in the history DB.

    As needed, both fresh and persisted clusters are fetched. Clusters are
    fetched for: a) displaying on the Journeys WebUI and b) generating keyword
    caches to match with omnibox inputs and show journey chips or suggestions in
    the omnibox.

    This histogram records the latency breakdown for fetching both fresh and
    persisted clusters. See the similar
    'History.Clusters.Backend.UpdateClusters.*' histograms for the latency
    breakdown for updating clusters.

    Recorded for every batch of fetched clusters; can be recorded more than once
    per Journey WebUI load or keyword cache generations

    This slice records the time between the main thread requesting and receiving
    {Segment}. Records {Source}.
  </summary>
  <token key="Segment">
    <variant name="ComputeClustersLatency" summary="clusters from the model"/>
    <variant name="GetAnnotatedVisitsToClusterLatency"
        summary="annotated visits to cluster (which can include clustered,
                 unclustered, incomplete, and complete visits)"/>
    <variant name="GetMostRecentPersistedClustersLatency"
        summary="persisted clusters from the history DB"/>
  </token>
  <token key="Source" variants="ClusteringRequestSource"/>
</histogram>

<histogram
    name="History.Clusters.Backend.GetMostRecentClustersForUI.GetMostRecentPersistedClustersTimeHorizon{Source}"
    units="hours" expires_after="2024-10-06">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    On navigation, context clusters are created, grown, and persisted.

    On startup and every 1 hour afterwards, these context clusters have their
    triggability calculated. Context clusters older than 2 hours are not updated
    are not re-updated after the initial triggability is calculated. However, if
    there are unclustered visits (due to visits from before the user had context
    clustering enabled or synced visits without a cluster ID), they will also be
    context clustered with their triggerability calculated as well.

    When a user visits the Journeys WebUI, persisted clusters (both those with
    and without triggerability calculated) are fetched. Clusters are then
    augmented with appropriate metadata needed for displaying on the Journeys
    WebUI (e.g. ranking, deduping, labeling).

    When the keyword cache used to match omnibox inputs and show journey chips
    or suggestions in the omnibox needs updating, context clusters (both those
    with and without triggerability calculated) are fetched.

    This histogram records the number of hours that the persisted clusters
    returned covers.

    Recorded for every batch of fetched clusters; can be recorded more than once
    per load of {Source}.
  </summary>
  <token key="Source" variants="ClusteringRequestSource"/>
</histogram>

<histogram
    name="History.Clusters.Backend.GetMostRecentClustersForUI.{Segment}{Source}"
    units="ms" expires_after="2024-10-06">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    On navigation, context clusters are created, grown, and persisted.

    On startup and every 1 hour afterwards, these context clusters have their
    triggability calculated. Context clusters older than 2 hours are not updated
    are not re-updated after the initial triggability is calculated. However, if
    there are unclustered visits (due to visits from before the user had context
    clustering enabled or synced visits without a cluster ID), they will also be
    context clustered with their triggerability calculated as well.

    When a user visits the Journeys WebUI, persisted clusters (both those with
    and without triggerability calculated) are fetched. Clusters are then
    augmented with appropriate metadata needed for displaying on the Journeys
    WebUI (e.g. ranking, deduping, labeling).

    When the keyword cache used to match omnibox inputs and show journey chips
    or suggestions in the omnibox needs updating, context clusters (both those
    with and without triggerability calculated) are fetched.

    This histogram records the latency breakdown for each step of getting
    clusters for the webUI. It does not cover getting clusters for the keyword
    cache.

    Recorded for every batch of fetched clusters; can be recorded more than once
    per Journey WebUI load.

    This slice records the time between the main thread requesting and receiving
    {Segment}. Records {Source}.
  </summary>
  <token key="Segment">
    <variant name="ComputeClustersForUILatency"
        summary="UI-augmented clusters from the model"/>
    <variant name="GetMostRecentPersistedClustersLatency"
        summary="persisted raw context clusters from the history DB"/>
  </token>
  <token key="Source" variants="ClusteringRequestSource"/>
</histogram>

<histogram name="History.Clusters.Backend.KeywordCache.AllKeywordsCount"
    units="count" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Logs the number of keywords stored in the primary cache. Each keyword may
    actually be multiple words.

    Logged each time the primary cache is refreshed, i.e. on omnibox key stroke
    limited to at most once every 2 hours, though clearing history items will
    reset the cache timer.
  </summary>
</histogram>

<histogram name="History.Clusters.Backend.KeywordCache.ShortKeywordsCount"
    units="count" expires_after="2024-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Logs the number of keyword stored in the short cache. Each keyword may
    actually be multiple words.

    Each cluster can have multiple keyword phrases; each phrase consists of 1 or
    more words.

    Logged each time the short cache is refreshed, i.e. on omnibox key stroke if
    the primary cache is not stale and limited to at most once every 10 seconds.
  </summary>
</histogram>

<histogram name="History.Clusters.Backend.NumClustersReturned"
    units="number clusters returned" expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Logs the total number of clusters returned for requested visits. Logged when
    clusters have been calculated based on any request to cluster visits, which
    could be triggered from several things, including loading the journeys UI,
    putting a query in the journeys page, etc..
  </summary>
</histogram>

<histogram name="History.Clusters.Backend.NumVisitsBelowFold"
    units="number visits" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Logs the number of visits that are &quot;below the fold&quot; in each
    cluster after hidden and done visits have been culled. Logged for each
    cluster that is shown to the user in the Journeys WebUI.
  </summary>
</histogram>

<histogram name="History.Clusters.Backend.NumVisitsBelowFoldPercentage"
    units="%" expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Logs the percentage of visits that are &quot;below the fold&quot; in each
    cluster after hidden and done visits have been culled. Logged for each
    cluster that is shown to the user in the Journeys WebUI.
  </summary>
</histogram>

<histogram name="History.Clusters.Backend.NumVisitsToCluster"
    units="number visits" expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Logs the total number of visits requested to be clustered by the backend.
    Logged when any request to cluster visits is made, which could be triggered
    from several things, including loading the journeys UI, putting a query in
    the journeys page, etc..
  </summary>
</histogram>

<histogram name="History.Clusters.Backend.ProcessBatchOfVisits.ThreadTime"
    units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Logs the time taken to process a batch of visits (joining existing History
    visit metadata with any additional Search, engagement, content metadata) and
    is performed on the UI thread. This does not include any thread hop or
    queuing delay. Can be logged multiple times when a request to cluster visits
    is made, which could be triggered from several things, including loading the
    journeys UI, putting a query in the journeys page, etc... depending on how
    many visits were sent to the backend to cluster.
  </summary>
</histogram>

<histogram name="History.Clusters.Backend.QueryAnnotatedVisits.ThreadTime"
    units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    This histogram records the time taken (excluding queuing delay) to retrieve
    visits from the History database, which occurs on the History DB thread.
    Logged once per request to cluster visits is made, which could be triggered
    from several things, including loading the journeys UI, putting a query in
    the journeys page, etc.
  </summary>
</histogram>

<histogram name="History.Clusters.Backend.UpdateClusters.Counts.{Segment}"
    units="count" expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Near startup and every 1 hour afterwards, unclustered visits are clustered,
    and the clusters are persisted in the history DB.

    As needed, both fresh and persisted clusters are fetched. Clusters are
    fetched for: a) displaying on the Journeys WebUI and b) generating keyword
    caches to match with omnibox inputs and show journey chips or suggestions in
    the omnibox.

    Each update consists of multiple batches of 1-3 days. The number of batches
    depends on how long ago the last update occurred, which could have been 0-90
    days ago.

    Recorded for every batch of visits clustered; can be recorded more than once
    every hour.

    {Segment}
  </summary>
  <token key="Segment">
    <variant name="NumClustersReplaced"
        summary="This slice records the number of clusters included in the
                 visits and therefore replaced from the DB. Not recorded if
                 there were 0 visits. Recorded even if there were 0 model
                 clusters or 0 replaced clusters."/>
    <variant name="NumClustersReturned"
        summary="This slice records the number of clusters returned from the
                 cluster model. Not recorded if there were 0 visits. Recorded
                 een if there were 0 clusters."/>
    <variant name="NumVisitsToCluster"
        summary="This slice records the number of visits returned and sent to
                 the cluster model. Recorded even if there were 0 visits."/>
  </token>
</histogram>

<histogram name="History.Clusters.Backend.UpdateClusters.{Segment}" units="ms"
    expires_after="2024-03-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Near startup and every 1 hour afterwards, unclustered visits are clustered,
    and the clusters are persisted in the history DB.

    As needed, both fresh and persisted clusters are fetched. Clusters are
    fetched for: a) displaying on the Journeys WebUI and b) generating keyword
    caches to match with omnibox inputs and show journey chips or suggestions in
    the omnibox.

    This histogram records the latency breakdown for updating clusters. See the
    similar 'History.Clusters.Backend.GetMostRecentClusters.*' histograms for
    the latency breakdown for fetching clusters.

    Recorded for every batch of visits clustered; can be recorded more than once
    every hour.

    This slice records the time between the main thread requesting and
    {Segment}.
  </summary>
  <token key="Segment">
    <variant name="ComputeClustersLatency"
        summary="receiving clusters from the model"/>
    <variant name="GetAnnotatedVisitsToClusterLatency"
        summary="receiving annotated visits to cluster (which can include
                 clustered, unclustered, incomplete, and complete visits)"/>
    <variant name="PersistClustersLatency"
        summary="receiving acknowledgement for completion of persisting the
                 clusters to the history DB"/>
    <variant name="Total"
        summary="the main thread being notified that the work was completed"/>
  </token>
</histogram>

<histogram
    name="History.Clusters.Backend.UpdateClusterTriggerability.DidUpdateClusterTriggerability{Segment}"
    enum="Boolean" expires_after="2024-11-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    On navigation, context clusters are created, grown, and persisted.

    On startup and every 1 hour afterwards, these context clusters have their
    triggability calculated. Context clusters older than 2 hours are not updated
    are not re-updated after the initial triggability is calculated. However, if
    there are unclustered visits (due to visits from before the user had context
    clustering enabled or synced visits without a cluster ID), they will also be
    context clustered with their triggerability calculated as well.

    When a user visits the Journeys WebUI, persisted clusters (both those with
    and without triggerability calculated) are fetched. Clusters are then
    augmented with appropriate metadata needed for displaying on the Journeys
    WebUI (e.g. ranking, deduping, labeling).

    When the keyword cache used to match omnibox inputs and show journey chips
    or suggestions in the omnibox needs updating, context clusters (both those
    with and without triggerability calculated) are fetched.

    This histogram records whether there was at least one cluster's
    triggerability was updated {Segment}.

    Recorded for every batch of clusters to be updated; can be recorded more
    than once every hour (Finch-configurable).
  </summary>
  <token key="Segment">
    <variant name="" summary="during a run of the task"/>
    <variant name=".AfterFilteredClustersEmpty"
        summary="after a call to fetch persisted clusters returned only
                 clusters that have all had their triggerability calculated
                 already"/>
  </token>
</histogram>

<histogram
    name="History.Clusters.Backend.UpdateClusterTriggerability.HadUnclusteredVisitsToCluster"
    enum="Boolean" expires_after="2024-06-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    On navigation, context clusters are created, grown, and persisted.

    On startup and every 1 hour afterwards, these context clusters have their
    triggability calculated. Context clusters older than 2 hours are not updated
    are not re-updated after the initial triggability is calculated. However, if
    there are unclustered visits (due to visits from before the user had context
    clustering enabled or synced visits without a cluster ID), they will also be
    context clustered with their triggerability calculated as well.

    When a user visits the Journeys WebUI, persisted clusters (both those with
    and without triggerability calculated) are fetched. Clusters are then
    augmented with appropriate metadata needed for displaying on the Journeys
    WebUI (e.g. ranking, deduping, labeling).

    When the keyword cache used to match omnibox inputs and show journey chips
    or suggestions in the omnibox needs updating, context clusters (both those
    with and without triggerability calculated) are fetched.

    This histogram records whether there were unclustered visits left to cluster
    in the first run of this task. When this trends to all false, this
    additional step can get deleted.

    Recorded for every batch of clusters to be updated; can be recorded more
    than once every hour.
  </summary>
</histogram>

<histogram
    name="History.Clusters.Backend.UpdateClusterTriggerability.{Segment}"
    units="ms" expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    On navigation, context clusters are created, grown, and persisted.

    On startup and every 1 hour afterwards, these context clusters have their
    triggability calculated. Context clusters older than 2 hours are not updated
    are not re-updated after the initial triggability is calculated. However, if
    there are unclustered visits (due to visits from before the user had context
    clustering enabled or synced visits without a cluster ID), they will also be
    context clustered with their triggerability calculated as well.

    When a user visits the Journeys WebUI, persisted clusters (both those with
    and without triggerability calculated) are fetched. Clusters are then
    augmented with appropriate metadata needed for displaying on the Journeys
    WebUI (e.g. ranking, deduping, labeling).

    When the keyword cache used to match omnibox inputs and show journey chips
    or suggestions in the omnibox needs updating, context clusters (both those
    with and without triggerability calculated) are fetched.

    This histogram records the latency breakdown for updating cluster
    triggerability.

    Recorded for every batch of clusters to be updated; can be recorded more
    than once every hour.

    This slice records the time between the main thread requesting and
    {Segment}.
  </summary>
  <token key="Segment">
    <variant name="ComputeClusterTriggerabilityLatency"
        summary="receiving cluster triggerability metadata from the model"/>
    <variant name="ComputeContextClustersLatency"
        summary="receiving context clusters from unclustered visits from the
                 model"/>
    <variant name="GetAnnotatedVisitsToClusterLatency"
        summary="receiving persisted unclustered visits to compute context
                 clusters for for"/>
    <variant name="GetMostRecentPersistedClustersLatency"
        summary="receiving persisted clusters to compute cluster
                 triggerability metadata for"/>
    <variant name="PersistClusterTriggerabilityLatency"
        summary="receiving acknowledgement for completion of persisting the
                 cluster triggerability metadata to the history DB"/>
    <variant name="PersistContextClustersLatency"
        summary="receiving acknowledgement for completion of persisting the
                 context clusters formed from unclustered visits to the
                 history DB"/>
    <variant name="Total"
        summary="the main thread being notified that the work was completed"/>
  </token>
</histogram>

<histogram
    name="History.Clusters.Backend.WasClusterFiltered.{ClusterFilterReason}"
    enum="BooleanFiltered" expires_after="2024-10-06">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Logs whether a cluster was filtered for having {ClusterFilterReason}. Logged
    when finalizing each individual cluster which occurs at the end of every
    clustering backend request.
  </summary>
  <token key="ClusterFilterReason">
    <variant name="Category" summary="all non-complex categories"/>
    <variant name="NoisyCluster" summary="all noisy visits"/>
    <variant name="SingleVisit" summary="only a single visit"/>
    <variant name="VisibilityScore" summary="low visibility score"/>
  </token>
</histogram>

<histogram
    name="History.Clusters.ContextClusterer.ClusterCleanedUpBeforePersistence"
    enum="Boolean" expires_after="2024-06-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    When the user visits a page, `ContextClustererHistoryServiceObserver`
    considers whether to add the visit to a new cluster or an existing cluster.
    If it decides to create a new cluster, this is logged. Therefore, logged at
    most once per page visit.
  </summary>
</histogram>

<histogram name="History.Clusters.ContextClusterer.DbLatency.{Segment}"
    units="ms" expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    When the user visits a page, `ContextClustererHistoryServiceObserver`
    considers whether to add the visit to a new cluster or an existing cluster.

    This histogram records the processing breakdown for persisting visits to
    group them into context clusters. Recorded each time {Segment}. The
    histograms here summed up with the histograms as part of
    `History.Clusters.ContextClusterer.VisitProcessingLatency` record the total
    latency for context clustering.
  </summary>
  <token key="Segment">
    <variant name="AddVisitsToCluster"
        summary="new visits are added to an existing cluster"/>
    <variant name="ReserveNextClusterId"
        summary="a cluster is determined and requires a new cluster ID"/>
    <variant name="UpdateClusterVisit"
        summary="additional visit metadata has been calculated for an
                 existing visit already part of a cluster and needs to be
                 updated"/>
  </token>
</histogram>

<histogram name="History.Clusters.ContextClusterer.NumClusters.AtCleanUp"
    units="num clusters" expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Number of clusters that are in-progress. Recorded once an hour
    (Finch-configurable) prior to the clean-up pass.
  </summary>
</histogram>

<histogram name="History.Clusters.ContextClusterer.NumClusters.CleanedUp"
    units="num clusters" expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Number of clusters that were cleaned up in the clean-up pass. Recorded once
    an hour (Finch-configurable) during the clean-up pass.
  </summary>
</histogram>

<histogram name="History.Clusters.ContextClusterer.NumClusters.PostCleanUp"
    units="num clusters" expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Number of clusters that are in-progress. Recorded once an hour
    (Finch-configurable) after the clean-up pass.
  </summary>
</histogram>

<histogram
    name="History.Clusters.ContextClusterer.NumUnpersistedVisitsBeforeClusterPersisted"
    units="num unpersisted visits" expires_after="2024-06-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    When we decide a new visit belongs to a new cluster, we asyncly reserve a
    new cluster ID and add the visit to the cluster. When subsequent visits
    belong to the same cluster, we asyncly add those visits to the cluster. When
    the latter occurs before the former completes, i.e. when there are multiple
    visits done that belong in the same cluster before the cluster ID was
    reserved, we queue those subsequent visits and only add them when the
    cluster ID is reserved.

    This histogram records the number of visits that were waiting to be
    persisted while waiting for the persisted ID of the containg cluster to be
    received. Recorded at most once per cluster that is generated via the
    navigation graph.
  </summary>
</histogram>

<histogram
    name="History.Clusters.ContextClusterer.VisitProcessingLatency.{Segment}"
    units="ms" expires_after="2024-10-06">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    When the user visits a page, `ContextClustererHistoryServiceObserver`
    considers whether to add the visit to a new cluster or an existing cluster.

    This histogram records the processing breakdown for processing visits to
    group them into context clusters. Recorded each time {Segment}. The
    histograms here summed up with the histograms as part of
    `History.Clusters.ContextClusterer.DbLatency` record the total latency for
    context clustering.
  </summary>
  <token key="Segment">
    <variant name="CleanUpTimer"
        summary="a clean-up pass has invoked, roughly once every ten minutes
                 (Finch-configurable)"/>
    <variant name="UrlsDeleted" summary="a set of URLs has beeen deleted"/>
    <variant name="UrlVisited" summary="a URL is visited"/>
  </token>
</histogram>

<histogram name="History.Clusters.JourneysEligibleAndEnabledAtSessionStart"
    enum="BooleanEnabled" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Records whether a user that is Journeys eligible has Journeys enabled. This
    is recorded once at the start of the session.
  </summary>
</histogram>

<histogram name="History.Clusters.KeywordCache.Latency" units="ms"
    expires_after="2024-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Records the total amount of time spent populating the keyword cache,
    measured via the wall clock. Most of this time is not on the main thread.

    The total time spent populating the keywords cache will be:
    History.Clusters.KeywordCache.Latency = (number of batches) * (
    History.Clusters.Backend.GetMostRecentClusters.GetAnnotatedVisitsToClusterLatency.AllKeywordCacheRefresh
    +
    History.Clusters.Backend.GetMostRecentClusters.ComputeClustersLatency.AllKeywordCacheRefresh
    +
    History.Clusters.Backend.GetMostRecentClusters.GetMostRecentPersistedClustersLatency.AllKeywordCacheRefresh
    +
    History.Clusters.Backend.GetMostRecentClusters.GetAnnotatedVisitsToClusterLatency.ShortKeywordCacheRefresh
    +
    History.Clusters.Backend.GetMostRecentClusters.ComputeClustersLatency.ShortKeywordCacheRefresh
    +
    History.Clusters.Backend.GetMostRecentClusters.GetMostRecentPersistedClustersLatency.ShortKeywordCacheRefresh
    + History.Clusters.KeywordCache.ThreadTime)
  </summary>
</histogram>

<histogram name="History.Clusters.KeywordCache.LoadCachesFromPrefs.Latency"
    units="ms" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Records the amount of time spent reading all caches from the pref service
    and deserializing them. Recorded when these caches are read from prefs,
    which is once at startup. This is not recorded if the pref service is null.
  </summary>
</histogram>

<histogram name="History.Clusters.KeywordCache.ThreadTime" units="ms"
    expires_after="2024-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    This measures the amount of main thread time spent populating the keyword
    cache AFTER we get it from the backend.

    See History.Clusters.KeywordCache.Latency for the full wall clock time.
  </summary>
</histogram>

<histogram name="History.Clusters.KeywordCache.WriteCache.{CacheType}.Latency"
    units="ms" expires_after="2024-10-06">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Records the amount of time spent serializing and writing a keyword cache to
    the pref service. Recorded every time a cache is written to prefs, which is
    every time one is updated. This is not recorded if the pref service is null.
  </summary>
  <token key="CacheType">
    <variant name="All"
        summary="Records time spent writing the 'all keywords' cache."/>
    <variant name="Short"
        summary="Records time spent writing the short keyword cache."/>
  </token>
</histogram>

<histogram name="History.Clusters.ProcessClustersDuration" units="ms"
    expires_after="2024-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    This histogram records the total time taken to convert and process visits in
    all history cluster available. This is recorded once after the conversion,
    deduplication and sorting of the clusters. This is recorded using the
    highest precision clock possible. Like most time measurements this will not
    have the same behavior regarding system sleep on all platforms. See
    bit.ly/chrome-clocks-and-sleep for more details. Since the measurement is
    taken after the operation is over it will be missing if the operation never
    completes. This can happen if the user or the system shuts down chrome
    because of the unresponsiveness. A decidedly imperfect strategy to evaluate
    how often this happens is to compare total counts with another histogram
    that is recorded before the operation starts
    (&quot;History.Clusters.Backend.GetClusterLatency&quot;). Such analysis has
    to be conducted with care. Consult with Metrics team if curious.
  </summary>
</histogram>

<histogram name="History.Clusters.ServiceLatency" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Records the time taken between the History Clusters UI requests a batch of
    clusters, and when we get the post-processed clusters back.

    This request occurs when the page is first loaded, when the page is
    refreshed, when the user changes the History search terms, and when the user
    scrolls to the bottom of the page and requests the next batch of clusters
    from the service.

    This metric doesn't distinguish between any of these cases. This metric is
    recorded on all requests, whether or not it returns clusters.

    This does not take into account the time spent in JavaScript, or updating
    the DOM. It's recorded in QueryClustersState, which is meant to be shared
    between multiple UIs.

    Roughly, History.Clusters.ServiceLatency =
    History.Clusters.Backend.GetMostRecentClusters.GetAnnotatedVisitsToClusterLatency.WebUI
    +
    History.Clusters.Backend.GetMostRecentClusters.ComputeClustersLatency.WebUI
    +
    History.Clusters.Backend.GetMostRecentClusters.GetMostRecentPersistedClustersLatency.WebUI
    + History.Clusters.ProcessClustersDuration
  </summary>
</histogram>

<histogram name="History.Clusters.UIActions.Cluster.{ClusterAction}"
    units="index" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Recorded every time the user {ClusterAction} in chrome://history/journeys.
    The value represents the 0-indexed index of the cluster.
  </summary>
  <token key="ClusterAction">
    <variant name="Deleted" summary="deletes a history cluster"/>
    <variant name="OpenedInTabGroup"
        summary="opens the visit urls in a history cluster in a new tab group"/>
    <variant name="RelatedSearchClicked"
        summary="clicks a related search suggestion"/>
    <variant name="RelatedVisitsVisibilityToggled"
        summary="toggles visibility of the default-hidden related visits.
                 Deprecated 1/25/23."/>
    <variant name="VisitClicked" summary="clicks a visit"/>
  </token>
</histogram>

<histogram
    name="History.Clusters.UIActions.RelatedSearch.{RelatedSearchAction}"
    units="index" expires_after="2025-01-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Recorded every time the user {RelatedSearchAction} a related search
    suggestion in a history cluster in chrome://history/journeys. The value
    represents the 0-indexed index of the related search suggestion in the
    respective cluster.
  </summary>
  <token key="RelatedSearchAction">
    <variant name="Clicked" summary="clicks"/>
  </token>
</histogram>

<histogram name="History.Clusters.UIActions.ToggledVisibility"
    enum="BooleanVisible" expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Recorded every time the user toggles the visibility of the history clusters
    Web UI shown at chrome://history/journeys from the history Web UI sidebar.
    The value represents the visibility of the history clusters Web UI.
  </summary>
</histogram>

<histogram name="History.Clusters.UIActions.{VisitType}Visit.{VisitAction}"
    units="index" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Recorded every time the user {VisitAction} a {VisitType} in a history
    cluster in chrome://history/journeys. The value represents the 0-indexed
    index of the visit in the respective cluster.
  </summary>
  <token key="VisitAction">
    <variant name="Clicked" summary="clicks"/>
    <variant name="Deleted" summary="deletes"/>
    <variant name="Hidden" summary="hides"/>
  </token>
  <token key="VisitType">
    <variant name="" summary="visit"/>
    <variant name="nonSRP"
        summary="visit to a url other than the default search results page"/>
    <variant name="SRP" summary="visit to the default search results page"/>
  </token>
</histogram>

<histogram name="History.Clusters.UpdateClusters.TimeBetweenTasks" units="ms"
    expires_after="2024-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    The time elapsed between subsequent cluster update tasks
    (HistoryClustersServiceTaskUpdateClusters). Depending on finch params, this
    occurs either:

    1) Never (e.g. if updating and persisting clusters is disabled).

    2) OR N time after startup in addition to every M time; where N is typically
    5-60 minutes, and M is typically 1-12 hours.

    3) OR on keyword refresh request bounded to at most every M time, where M is
    typically 1-12 hours. Keyword refresh requests occur when the omnibox input
    looks like a search query and journeys in the omnibox is enabled.
  </summary>
</histogram>

<histogram name="History.Clusters.WebUISessionDuration" units="ms"
    expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1457319</component>
  <summary>
    Records the amount of time the Journeys WebUI is open.

    This timer is started when the Journeys WebUI is loaded. The Journeys WebUI
    is loaded when either the user directly goes to the Journeys WebUI, or when
    the user switches to the Journeys tab from a different tab.

    The timer is stopped and the elapsed time recorded when either the whole
    WebUI is closed, or if the user disables the Journeys preference, or if the
    user switches tabs off the Journeys tab onto a different one.

    Elapsed times longer than one hour are recorded as one hour.
  </summary>
</histogram>

<histogram name="History.DatabaseAdvancedMetricsTime" units="ms"
    expires_after="2025-03-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Time spent on advanced History DB metrics calculation (weekly and monthly
    URL, host, and category counts). Advanced metrics are logged on
    initialization of the History DB on 0.3% of starts.
  </summary>
</histogram>

<histogram name="History.DatabaseBasicMetricsTime" units="ms"
    expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Time spent on basic History DB metrics calculation (file size and table
    counts). Basic metrics are logged on initialization of the History DB on 1%
    of starts.
  </summary>
</histogram>

<histogram name="History.DatabaseFileMB" units="MB" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Size of History DB file. Duplicate of Profile.HistorySize and
    Sqlite.SizeKB.History. Logged on initialization of the History DB on 1% of
    starts.
  </summary>
</histogram>

<histogram name="History.DatabaseForeignVisitMetricsTime" units="ms"
    expires_after="2025-03-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Time spent on foreign-visit-related History DB metrics calculation. These
    metrics are logged on initialization of the History DB on 1% of starts. Note
    that the actual metrics (History.ForeignVisits*) are only recorded if any
    such visits were actually found, so the total counts will not match this
    histogram's.
  </summary>
</histogram>

<histogram name="History.DatabaseSqliteError" enum="SqliteLoggedResultCode"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    The exact database error encountered when initializing the database, if
    failed.
  </summary>
</histogram>

<histogram name="History.DomainCount1Day_V2" units="domains"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <improvement direction="HIGHER_IS_BETTER"/>
  <summary>
    Number of unique domains visited by the user within a calendar day in user's
    local timezone. For each regular profile (not incognito, guest, system,
    etc.), reported at profile open (which usually happens at startup) for each
    unreported day (up to 7 days) prior to the current date, and also reported
    once every 24 hours thereafter for the latest unreported day, while the
    profile remains open. If no domains are visited in a given day, a count of 0
    will be reported for that day.

    Warning about Android activity types (custom tabs, browser app, etc.): Do
    not look at this data using an activity type filter; when looking at data
    from Android, use &quot;Android Chrome (All)&quot;. Why? This histogram
    reflects all usage of the browser. Using a filter such as &quot;Browser
    App&quot; is not appropriate because it doesn't make sense to ask &quot;how
    many web sites were visited in Chrome (in any mode) the last week but only
    tell me if the answer if this current launch was in browser app mode.&quot;

    Warning about delayed data: Chrome may upload logs on a given day without
    uploading this histogram. This can happen because Chrome uploads logs
    initially upon startup. This histogram is emitted shortly _after_ startup.
    In the case of short sessions, it's possible the log with this histogram did
    not have time to be uploaded. Generally the log will be cached and uploaded
    the next time the user starts Chrome. We should still get one count per
    calendar day; it simply may not be on the day the metric was computed.
    (Exception: on Android before M-91, sometimes these emitted histograms were
    lost due to lack of robust &quot;background logging&quot;.)

    Note: for users syncing between multiple devices, this count may include
    some URLs/domains that weren't visited on this device. In other words, some
    domains may be counted for multiple client_ids even though they were only
    visited once, on one device. For Chrome M113 or later, you probably want to
    look at DomainCount1Day_V3 instead.
  </summary>
</histogram>

<histogram name="History.DomainCount1Day_V3" units="domains"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <improvement direction="HIGHER_IS_BETTER"/>
  <summary>
    Number of unique domains visited by the user within a calendar day in user's
    local timezone. For each regular profile (not incognito, guest, system,
    etc.), reported at profile open (which usually happens at startup) for each
    unreported day (up to 7 days) prior to the current date, and also reported
    once every 24 hours thereafter for the latest unreported day, while the
    profile remains open. If no domains are visited in a given day, a count of 0
    will be reported for that day.

    Warning about Android activity types (custom tabs, browser app, etc.): Do
    not look at this data using an activity type filter; when looking at data
    from Android, use &quot;Android Chrome (All)&quot;. Why? This histogram
    reflects all usage of the browser. Using a filter such as &quot;Browser
    App&quot; is not appropriate because it doesn't make sense to ask &quot;how
    many web sites were visited in Chrome (in any mode) the last week but only
    tell me if the answer if this current launch was in browser app mode.&quot;

    Warning about delayed data: Chrome may upload logs on a given day without
    uploading this histogram. This can happen because Chrome uploads logs
    initially upon startup. This histogram is emitted shortly _after_ startup.
    In the case of short sessions, it's possible the log with this histogram did
    not have time to be uploaded. Generally the log will be cached and uploaded
    the next time the user starts Chrome. We should still get one count per
    calendar day; it simply may not be on the day the metric was computed.
    (Exception: on Android before M-91, sometimes these emitted histograms were
    lost due to lack of robust &quot;background logging&quot;.)
  </summary>
</histogram>

<histogram name="History.DomainCount28Day_V2" units="domains"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Number of unique domains visited by the user within a 28 calendar day period
    in user's local timezone. For each regular profile (not incognito, guest,
    system, etc.), reported at profile open (which usually happens at startup)
    for each unreported 28-day period (up to 7 periods) ending on the current
    day, current day - 1, current day - 2, etc. Also reported once every 24
    hours thereafter for the latest unreported period, while the profile remains
    open. If no domains are visited during a 28-day period, a count of 0 will be
    reported for that period.

    Warning about Android activity types (custom tabs, browser app, etc.): Do
    not look at this data using an activity type filter; when looking at data
    from Android, use &quot;Android Chrome (All)&quot;. Why? This histogram
    reflects all usage of the browser. Using a filter such as &quot;Browser
    App&quot; is not appropriate because it doesn't make sense to ask &quot;how
    many web sites were visited in Chrome (in any mode) the last week but only
    tell me if the answer if this current launch was in browser app mode.&quot;

    Warning about delayed data: Chrome may upload logs on a given day without
    uploading this histogram. This can happen because Chrome uploads logs
    initially upon startup. This histogram is emitted shortly _after_ startup.
    In the case of short sessions, it's possible the log with this histogram did
    not have time to be uploaded. Generally the log will be cached and uploaded
    the next time the user starts Chrome. We should still get one count per
    calendar day; it simply may not be on the day the metric was computed.
    (Exception: on Android before M-91, sometimes these emitted histograms were
    lost due to lack of robust &quot;background logging&quot;.)

    Note: for users syncing between multiple devices, this count may include
    some URLs/domains that weren't visited on this device. In other words, some
    domains may be counted for multiple client_ids even though they were only
    visited once, on one device. For Chrome M113 or later, you probably want to
    look at DomainCount28Day_V3 instead.
  </summary>
</histogram>

<histogram name="History.DomainCount28Day_V3" units="domains"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Number of unique domains visited by the user within a 28 calendar day period
    in user's local timezone. For each regular profile (not incognito, guest,
    system, etc.), reported at profile open (which usually happens at startup)
    for each unreported 28-day period (up to 7 periods) ending on the current
    day, current day - 1, current day - 2, etc. Also reported once every 24
    hours thereafter for the latest unreported period, while the profile remains
    open. If no domains are visited during a 28-day period, a count of 0 will be
    reported for that period.

    Warning about Android activity types (custom tabs, browser app, etc.): Do
    not look at this data using an activity type filter; when looking at data
    from Android, use &quot;Android Chrome (All)&quot;. Why? This histogram
    reflects all usage of the browser. Using a filter such as &quot;Browser
    App&quot; is not appropriate because it doesn't make sense to ask &quot;how
    many web sites were visited in Chrome (in any mode) the last week but only
    tell me if the answer if this current launch was in browser app mode.&quot;

    Warning about delayed data: Chrome may upload logs on a given day without
    uploading this histogram. This can happen because Chrome uploads logs
    initially upon startup. This histogram is emitted shortly _after_ startup.
    In the case of short sessions, it's possible the log with this histogram did
    not have time to be uploaded. Generally the log will be cached and uploaded
    the next time the user starts Chrome. We should still get one count per
    calendar day; it simply may not be on the day the metric was computed.
    (Exception: on Android before M-91, sometimes these emitted histograms were
    lost due to lack of robust &quot;background logging&quot;.)
  </summary>
</histogram>

<histogram name="History.DomainCount7Day_V2" units="domains"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Number of unique domains visited by the user within a 7 calendar day period
    in user's local timezone. For each regular profile (not incognito, guest,
    system, etc.), reported at profile open (which usually happens at startup)
    for each unreported 7-day period (up to 7 periods) ending on the current
    day, current day - 1, current day - 2, etc. Also reported once every 24
    hours thereafter for the latest unreported period, while the profile remains
    open. If no domains are visited during a 7-day period, a count 0 will be
    reported for that period.

    Warning about Android activity types (custom tabs, browser app, etc.): Do
    not look at this data using an activity type filter; when looking at data
    from Android, use &quot;Android Chrome (All)&quot;. Why? This histogram
    reflects all usage of the browser. Using a filter such as &quot;Browser
    App&quot; is not appropriate because it doesn't make sense to ask &quot;how
    many web sites were visited in Chrome (in any mode) the last week but only
    tell me if the answer if this current launch was in browser app mode.&quot;

    Warning about delayed data: Chrome may upload logs on a given day without
    uploading this histogram. This can happen because Chrome uploads logs
    initially upon startup. This histogram is emitted shortly _after_ startup.
    In the case of short sessions, it's possible the log with this histogram did
    not have time to be uploaded. Generally the log will be cached and uploaded
    the next time the user starts Chrome. We should still get one count per
    calendar day; it simply may not be on the day the metric was computed.
    (Exception: on Android before M-91, sometimes these emitted histograms were
    lost due to lack of robust &quot;background logging&quot;.)

    Note: for users syncing between multiple devices, this count may include
    some URLs/domains that weren't visited on this device. In other words, some
    domains may be counted for multiple client_ids even though they were only
    visited once, on one device. For Chrome M113 or later, you probably want to
    look at DomainCount7Day_V3 instead.
  </summary>
</histogram>

<histogram name="History.DomainCount7Day_V3" units="domains"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Number of unique domains visited by the user within a 7 calendar day period
    in user's local timezone. For each regular profile (not incognito, guest,
    system, etc.), reported at profile open (which usually happens at startup)
    for each unreported 7-day period (up to 7 periods) ending on the current
    day, current day - 1, current day - 2, etc. Also reported once every 24
    hours thereafter for the latest unreported period, while the profile remains
    open. If no domains are visited during a 7-day period, a count 0 will be
    reported for that period.

    Warning about Android activity types (custom tabs, browser app, etc.): Do
    not look at this data using an activity type filter; when looking at data
    from Android, use &quot;Android Chrome (All)&quot;. Why? This histogram
    reflects all usage of the browser. Using a filter such as &quot;Browser
    App&quot; is not appropriate because it doesn't make sense to ask &quot;how
    many web sites were visited in Chrome (in any mode) the last week but only
    tell me if the answer if this current launch was in browser app mode.&quot;

    Warning about delayed data: Chrome may upload logs on a given day without
    uploading this histogram. This can happen because Chrome uploads logs
    initially upon startup. This histogram is emitted shortly _after_ startup.
    In the case of short sessions, it's possible the log with this histogram did
    not have time to be uploaded. Generally the log will be cached and uploaded
    the next time the user starts Chrome. We should still get one count per
    calendar day; it simply may not be on the day the metric was computed.
    (Exception: on Android before M-91, sometimes these emitted histograms were
    lost due to lack of robust &quot;background logging&quot;.)
  </summary>
</histogram>

<histogram name="History.Embeddings.DatabaseAsCacheAccessTime.StorageRead"
    units="ms" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time spent on the Storage sequence to read existing passages and
    embeddings from the database so it can be used as a cache to avoid
    re-embedding identical passages from the same URL. Logged each time page
    passages are retrieved when the kUseDatabaseBeforeEmbedder feature parameter
    is enabled. (This metric includes SQL query time only; no waits.)
  </summary>
</histogram>

<histogram name="History.Embeddings.DatabaseAsCacheAccessTime.TotalWait"
    units="ms" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time the HistoryEmbeddingsService waited to receive existing passages
    and embeddings from its database Storage sequence. Logged each time page
    passages are retrieved when the kUseDatabaseBeforeEmbedder feature parameter
    is enabled. (This metric includes the SQL query time plus sequence waits.)
  </summary>
</histogram>

<histogram name="History.Embeddings.DatabaseCachedPassageHitCount"
    units="passages" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of passages that skip the embedder because the stored data for the
    URL was retrieved and used as a cache. This is effectively the numerator for
    History.Embeddings.DatabaseCachedPassageRatio.
  </summary>
</histogram>

<histogram name="History.Embeddings.DatabaseCachedPassageRatio" units="%"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Percentage of passages that skip the embedder because the stored data for
    the URL was retrieved and used as a cache. These passages reuse the
    embedding stored for the identical passage in the database, thus saving the
    embedder this portion of work. Logged regardless of presence/absence of
    existing data for the URL, as long as the kUseDatabaseBeforeEmbedder feature
    parameter is enabled.
  </summary>
</histogram>

<histogram name="History.Embeddings.DatabaseCachedPassageTryCount"
    units="passages" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of passages that attempted to bypass the embedder by using the
    database as an embeddings cache. This is effectively the denominator for
    History.Embeddings.DatabaseCachedPassageRatio.
  </summary>
</histogram>

<histogram name="History.Embeddings.DatabaseCacheHit" enum="Boolean"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether one passage attempting to bypass the embedder actually bypassed the
    embedder due to having its embedding already available in the database.
    Logged History.Embeddings.DatabaseCachedPassageTryCount times when a set of
    passages are checked against available passages/embeddings in the database.
  </summary>
</histogram>

<histogram name="History.Embeddings.DatabaseInitialized" enum="Boolean"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When the HistoryEmbeddings database is opened, this histogram is logged to
    indicate whether initialization succeeded.
  </summary>
</histogram>

<histogram name="History.Embeddings.DatabaseIterationSkippedEmbeddings"
    units="rows" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of database statement iteration rows skipped due to embeddings data
    load failure. If a row is skipped, only one counter is incremented to
    reflect the reason; the check order is: passages, embeddings, mismatches.
    Logged once for each full iteration, which happens when the database is
    queried; this may include a time range or not, and may exhaust all rows or
    stop early if a new query is initiated.
  </summary>
</histogram>

<histogram name="History.Embeddings.DatabaseIterationSkippedMismatches"
    units="rows" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of database statement iteration rows skipped due to embeddings count
    mismatching passages count. If a row is skipped, only one counter is
    incremented to reflect the reason; the check order is: passages, embeddings,
    mismatches. Logged once for each full iteration, which happens when the
    database is queried; this may include a time range or not, and may exhaust
    all rows or stop early if a new query is initiated.
  </summary>
</histogram>

<histogram name="History.Embeddings.DatabaseIterationSkippedMissizedEmbeddings"
    units="rows" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of database statement iteration rows skipped due to embeddings having
    unexpected dimensions. If a row is skipped, only one counter is incremented
    to reflect the reason; the check order is: passages, embeddings, mismatches.
    Logged once for each full iteration, which happens when the database is
    queried; this may include a time range or not, and may exhaust all rows or
    stop early if a new query is initiated.
  </summary>
</histogram>

<histogram name="History.Embeddings.DatabaseIterationSkippedPassages"
    units="rows" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of database statement iteration rows skipped due to passages data
    load failure. If a row is skipped, only one counter is incremented to
    reflect the reason; the check order is: passages, embeddings, mismatches.
    Logged once for each full iteration, which happens when the database is
    queried; this may include a time range or not, and may exhaust all rows or
    stop early if a new query is initiated.
  </summary>
</histogram>

<histogram name="History.Embeddings.DatabaseIterationYielded" units="rows"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of database statement iteration rows yielded with valid data. Logged
    once for each full iteration, which happens when the database is queried;
    this may include a time range or not, and may exhaust all rows or stop early
    if a new query is initiated.
  </summary>
</histogram>

<histogram name="History.Embeddings.Embedder.CacheHit" enum="Boolean"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether one embeddings generation attempt involves a passage in the cache.
    Logged each time the embedder attempts to generate one embeddings vector. On
    a cache hit, no tokenization or model execution will be attempted so the
    relevant histograms won't be recorded either.
  </summary>
</histogram>

<histogram name="History.Embeddings.Embedder.EmbeddingsGenerationSucceeded"
    enum="Boolean" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether an attempt to generate embeddings was successful. Logged each time
    the embedder attempts to generate embeddings.
  </summary>
</histogram>

<histogram name="History.Embeddings.Embedder.EmbeddingsModelLoadDuration"
    units="ms" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time it took to load the embeddings model. Logged each time the
    embeddings model is successfully loaded.
  </summary>
</histogram>

<histogram name="History.Embeddings.Embedder.EmbeddingsModelLoadSucceeded"
    enum="Boolean" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether the attempt to load the embeddings model succeeded. Logged each time
    loading of the embeddings model was attempted.
  </summary>
</histogram>

<histogram name="History.Embeddings.Embedder.InputTruncated" enum="Boolean"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether the tokenized input was truncated during embeddings generation.
    Logged each time an input tokenization succeeds.
  </summary>
</histogram>

<histogram name="History.Embeddings.Embedder.ModelInfoStatus"
    enum="EmbeddingsModelInfoStatus" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether the model metadata received from optimization guide model provider
    is valid. Logged each time the embedder receives an model update from
    optimization guide.
  </summary>
</histogram>

<histogram
    name="History.Embeddings.Embedder.PassageEmbeddingsGenerationDuration"
    units="ms" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of milliseconds spent to generate embeddings for a passage.
    Logged each time embeddings generation succeeds for a passage.
  </summary>
</histogram>

<histogram
    name="History.Embeddings.Embedder.PassageEmbeddingsGenerationThreadDuration"
    units="ms" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of milliseconds spent to generate embeddings for a passage,
    measured in thread time. Logged each time embeddings generation succeeds for
    a passage, if ThreadTicks measurement is supported.
  </summary>
</histogram>

<histogram name="History.Embeddings.Embedder.PassageTokenCount" units="tokens"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The length of the token array that each passage is encoded into. Logged each
    time an input tokenization succeeds.
  </summary>
</histogram>

<histogram name="History.Embeddings.Embedder.QueryEmbeddingsGenerationDuration"
    units="ms" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of milliseconds spent to generate one embeddings vector for a
    user query. Logged each time embeddings generation succeeds for a user
    query.
  </summary>
</histogram>

<histogram
    name="History.Embeddings.Embedder.QueryEmbeddingsGenerationThreadDuration"
    units="ms" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of milliseconds spent to generate one embeddings vector for a
    user query, measured in thread time. Logged each time embeddings generation
    succeeds for a user query, if ThreadTicks measurement is supported.
  </summary>
</histogram>

<histogram name="History.Embeddings.Embedder.SentencePieceModelLoadDuration"
    units="ms" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time it took to load the sentencepiece model. Logged each time the
    sentencepiece model is successfully loaded.
  </summary>
</histogram>

<histogram name="History.Embeddings.Embedder.SentencePieceModelLoadSucceeded"
    enum="Boolean" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether the attempt to load the sentencepiece model succeeded. Logged each
    time loading of the sentencepiece model was attempted.
  </summary>
</histogram>

<histogram name="History.Embeddings.Embedder.TokenizationDuration" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of milliseconds spent tokenizing an input string. Logged each
    time the embedder successfully tokenizes an input string.
  </summary>
</histogram>

<histogram name="History.Embeddings.Embedder.TokenizationSucceeded"
    enum="Boolean" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether an attempt to tokenize an input string to the embedder was
    successful. Logged each time the embedder attempts to tokenize a string.
  </summary>
</histogram>

<histogram name="History.Embeddings.ExtractionCancelled"
    enum="EmbeddingsExtractionCancelled" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Signals a reason code when passage extraction, embedding, etc. is cancelled
    before completion and storage to database. Logged with different codes at
    various stages of extraction, embedding, etc.
  </summary>
</histogram>

<histogram name="History.Embeddings.LoadedMissizedEmbedding" enum="Boolean"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether any embeddings loaded from the SQL database are of the wrong size
    (number of dimensions expected to be consistent). Logged each time
    history_embeddings::SqlDatabase::GetUrlData completes.
  </summary>
</histogram>

<histogram name="History.Embeddings.NumMatchedUrlsVisible" units="counts"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of URLs that matched the query and are allowed to be shown based on
    the content visibility policy. Logged each time a query leveraging history
    embeddings is performed.
  </summary>
</histogram>

<histogram name="History.Embeddings.NumUrlsDiscardedForLowScore" units="counts"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of URLs that were found but discarded for insufficient score (i.e.
    not reaching the configured search score threshold). Logged each time a
    query leveraging history embeddings is performed.
  </summary>
</histogram>

<histogram name="History.Embeddings.NumUrlsMatched" units="counts"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/components/history_embeddings/OWNERS</owner>
  <summary>
    Number of URLs that matched the query. Logged each time a query leveraging
    history embeddings is performed.
  </summary>
</histogram>

<histogram name="History.Embeddings.Passages.ExtractionTime" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>src/components/history_embeddings/OWNERS</owner>
  <summary>
    Round trip request and response time for a single passage extraction. The
    clock starts just before the browser requests passages from a renderer, and
    stops just after results are received. Logged each time passages are
    successfully retrieved from a RenderFrameHost.
  </summary>
</histogram>

<histogram name="History.Embeddings.Passages.PassageCount" units="passages"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>src/components/history_embeddings/OWNERS</owner>
  <summary>
    Number of passages retrieved from a single page passage extraction. Logged
    each time passages are retrieved from a RenderFrameHost.
  </summary>
</histogram>

<histogram name="History.Embeddings.Passages.TotalTextSize" units="bytes"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>src/components/history_embeddings/OWNERS</owner>
  <summary>
    The sum of passage text sizes for all passages retrieved from an extraction.
    Logged each time passages are retrieved from a RenderFrameHost.
  </summary>
</histogram>

<histogram name="History.Embeddings.Quality.LogEntryPrepared" enum="Boolean"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether a quality log entry was prepared when a history embeddings result
    was selected while quality logging was enabled.
  </summary>
</histogram>

<histogram name="History.Embeddings.QueryEmbeddingSucceeded" enum="Boolean"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether the attempt to compute the query embedding succeeded. Logged each
    time an embedding was requested for a query.
  </summary>
</histogram>

<histogram name="History.Embeddings.QueryFiltered"
    enum="EmbeddingsQueryFiltered" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Indicates query filter status every time a query is checked for filtering.
  </summary>
</histogram>

<histogram name="History.Embeddings.Search.Completed" enum="Boolean"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>src/components/history_embeddings/OWNERS</owner>
  <summary>
    Whether the search completed without interruption. Logged each time a vector
    database search is performed.
  </summary>
</histogram>

<histogram name="History.Embeddings.Search.Duration" units="ms"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>src/components/history_embeddings/OWNERS</owner>
  <summary>
    The number of milliseconds spent searching. Logged each time a vector
    database search is performed.
  </summary>
</histogram>

<histogram name="History.Embeddings.Search.EmbeddingCount" units="embeddings"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>src/components/history_embeddings/OWNERS</owner>
  <summary>
    The number of embeddings searched. Logged each time a vector database search
    is performed.
  </summary>
</histogram>

<histogram name="History.Embeddings.Search.SkippedNonAsciiPassageCount"
    units="passages" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>src/components/history_embeddings/OWNERS</owner>
  <summary>
    The number of passages that had their embeddings scored zero during search
    due to the source passage containing non-ASCII characters. Logged each time
    a vector database search is performed.
  </summary>
</histogram>

<histogram name="History.Embeddings.Search.UrlCount" units="urls"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>src/components/history_embeddings/OWNERS</owner>
  <summary>
    The number of URLs searched. Logged each time a vector database search is
    performed.
  </summary>
</histogram>

<histogram name="History.Embeddings.UserActions" enum="EmbeddingsUserActions"
    expires_after="2025-04-15">
  <owner>[email protected]</owner>
  <owner>src/components/history_embeddings/OWNERS</owner>
  <summary>
    Tracks user actions related to History Embeddings in various bins within a
    single histogram.

    The first bucket of this histogram is logged for users with History
    Embeddings disabled too, to provide a baseline, and to serve as a guardian
    metric for the Embeddings experiments.
  </summary>
</histogram>

<histogram name="History.Embeddings.VisibilityModelAvailableAtQuery"
    enum="Boolean" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether the visibility model was available to determine whether the search
    results should be shown to the user for a given query. Logged each time a
    query leveraging history embeddings is performed.
  </summary>
</histogram>

<histogram name="History.FaviconDatabaseSizeMB" units="MB" expires_after="M130">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Size of the Favicons database in MB. This is calculated as the number of
    pages consumed by the database multiplied by the page size. Logged on
    initialization of the Favicon DB on 1% of starts.
  </summary>
</histogram>

<histogram name="History.ForeignVisitsLegacy" units="visits"
    expires_after="2025-03-17">
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    The number of foreign visits (i.e. visits coming from another device) in the
    DB table which came from &quot;legacy&quot; clients, i.e. those still using
    the Sessions sync integration. Recorded on initialization of the History DB
    on 1% of starts, only if any foreign visits exist (i.e. basically for users
    with History Sync on).
  </summary>
</histogram>

<histogram name="History.ForeignVisitsNotRemapped" units="visits"
    expires_after="2025-03-17">
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    The number of foreign visits (i.e. visits coming from another device) in the
    DB table which have an originator_from|opener_visit but are missing a
    corresponding local from|opener_visit. Recorded on initialization of the
    History DB on 1% of starts, only if any foreign visits exist (i.e. basically
    for users with History Sync on).
  </summary>
</histogram>

<histogram name="History.ForeignVisitsRemappableFrom" units="visits"
    expires_after="2025-03-17">
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    The number of foreign visits (i.e. visits coming from another device) in the
    DB table which have an originator_from_visit but are missing a corresponding
    local from_visit, and a matching visit actually exists in the DB. Recorded
    on initialization of the History DB on 1% of starts, only if any foreign
    visits exist (i.e. basically for users with History Sync on).
  </summary>
</histogram>

<histogram name="History.ForeignVisitsRemappableOpener" units="visits"
    expires_after="2025-03-17">
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    The number of foreign visits (i.e. visits coming from another device) in the
    DB table which have an originator_opener_visit but are missing a
    corresponding local opener_visit, and a matching visit actually exists in
    the DB. Recorded on initialization of the History DB on 1% of starts, only
    if any foreign visits exist (i.e. basically for users with History Sync on).
  </summary>
</histogram>

<histogram name="History.ForeignVisitsTotal" units="visits"
    expires_after="2025-03-17">
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    The number of foreign visits (i.e. visits coming from another device) in the
    DB table. Recorded on initialization of the History DB on 1% of starts, only
    if any foreign visits exist (i.e. basically for users with History Sync on).
  </summary>
</histogram>

<histogram name="History.HistoryPageView" enum="HistoryPageView"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/resources/history/OWNERS</owner>
  <component>1456716</component>
  <summary>
    The page of the History page shown to the user. Logged each time the user
    loads the History page or switches pages.

    This histogram expired on 2021-03-01, was renewed on 2021-09-01, and may
    have incomplete data within that range.
  </summary>
</histogram>

<histogram name="History.InitializationFailureStep" enum="HistoryInitStep"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    The phase of history initialization that failed. This histogram is only
    logged on database initialization failure.
    History.AttemptedToFixProfileError will tell how often initialization fails
    overall.
  </summary>
</histogram>

<histogram name="History.InMemoryDBItemCount" units="typed URLs"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    The number of typed URLs in the history database that are read into the
    &quot;in memory&quot; history database. This in memory copy of the typed
    URLs is used for synchronous inline autocomplete on the UI thread, while the
    larger slower service is run off of disk on a background thread. Recorded on
    profile open.
  </summary>
</histogram>

<histogram name="History.InMemoryURLHistoryItems" units="items"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Number of history items in the in-memory url index. Recorded on profile open
    when restoring from a cache file and again shortly after profile open when
    rebuilding the in-memory url index from history.
  </summary>
</histogram>

<histogram name="History.MigrateFailureFromVersion" units="units"
    expires_after="2024-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    History database version from which history migration failed. If there are
    higher than normal migration failures, this histogram will indicate which
    migration step failed.

    Warning: this histogram was expired from M77 to M108; data may be missing.
  </summary>
</histogram>

<histogram name="History.MonthlyHostCount" units="hosts"
    expires_after="2025-03-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Unique hostnames in History database urls table with last-visit times in the
    last 30 days. Metrics are logged on initialization of the History DB on 0.3%
    of starts. See also ExploreSites.MonthlyHostCount metric which is similar
    but is reported on an elapsed time basis to help avoid bias toward more
    active users.
  </summary>
</histogram>

<histogram name="History.MonthlyURLCount" units="urls"
    expires_after="2025-03-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Unique URLs in History database urls table with last-visit times in the last
    30 days. Metrics are logged on initialization of the History DB on 0.3% of
    starts.
  </summary>
</histogram>

<histogram name="History.QueryAppDuration" units="ms" expires_after="M138">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    The time in milliseconds the query takes to fetch the list of app IDs. The
    query is made to the local database only, not to the server side via
    network. This is called when history UI is opened. Only logged on Android.
  </summary>
</histogram>

<histogram name="History.QueryHistory" units="ms" expires_after="M124">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Time used by the HistoryBackend::QueryHistory() call.</summary>
</histogram>

<histogram name="History.QueryMostRepeatedQueriesTimeV2" units="ms"
    expires_after="2023-12-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The amount of time for HistoryBackend::QueryMostRepeatedQueriesForKeyword()
    to extract up to the requested number of search terms from the
    HistoryDatabase db_ and sort them by frecency scores to produce the most
    repeated search terms. Excludes the case where local HistoryDatabase db_ is
    unavailable, i.e. where the query doesn't really happen. Emitted on NTP load
    and on omnibox popup shown on Android where the repeatable queries are
    requested to be shown in the Most Visited tiles.
  </summary>
</histogram>

<histogram name="History.SearchResultClicked.Index{HistoryResultType}"
    units="index" expires_after="2025-04-15">
  <owner>[email protected]</owner>
  <summary>
    Logs the zero-based index of the result clicked.

    For Embeddings and Traditional history types, this logs the index of the
    visit with respect to visits of the same type only. For example, the first
    matching Traditional visit has index 0, even though it's displayed below all
    Embeddings matches.

    For Grouped history, this logs the index of the visit WITHIN its containing
    cluster. This is to match the History.Clusters.UIActions UMAs.

    This does not log anything shown directly in the omnibox suggest surface.

    This UMA is further sliced into per-type slices, and the sum of those
    histograms equals the unsliced histogram. The maximum index is 99, and
    clicks above that are clamped to that maximum.
  </summary>
  <token key="HistoryResultType">
    <variant name="" summary="Clicks of all types, unsliced"/>
    <variant name=".Embeddings" summary="Embeddings search result"/>
    <variant name=".Grouped"
        summary="Grouped history search result (index within cluster)"/>
    <variant name=".Traditional"
        summary="Traditional history search result (reverse chronological
                 list)"/>
  </token>
</histogram>

<histogram name="History.SearchResultClicked.Type" enum="HistoryResultType"
    expires_after="2025-04-15">
  <owner>[email protected]</owner>
  <summary>
    Logs the type of the History result clicked from History UI surfaces. Note,
    this does NOT include any results clicked from the omnibox suggest surface,
    even if they are History or @history site search suggestions.
  </summary>
</histogram>

<histogram name="History.TopSites.QueryFromHistoryTime" units="ms"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The amount of time it takes to asynchronously query the most visited URLs
    and the most repeated queries, if applicable, from the history service.
    Excludes the case where local HistoryDatabase db_ is unavailable, i.e. where
    the query doesn't really happen. Emitted on NTP load and on omnibox popup
    shown on Android where the Most Visited tiles are shown.
  </summary>
</histogram>

<histogram name="History.URLTableCount" units="URLs" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Number of rows in urls table in History DB. Metrics are logged on
    initialization of the History DB on 1% of starts.
  </summary>
</histogram>

<histogram name="History.VisitedLinks.HashTableLengthOnReaderInit"
    units="entries" expires_after="2025-02-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When VisitedLinkReader's in-memory hashtable is initialized, this metric
    records the value for table_length_ (the maximum number of entries that can
    be held in that hashtable).
  </summary>
</histogram>

<histogram name="History.VisitedLinks.HashTableSizeOnTableCreate" units="MB"
    expires_after="2025-02-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When a new in-memory hashtable is created in VisitedLinkWriter, this metric
    records the size of the memory allocated for that new hashtable in MB.
  </summary>
</histogram>

<histogram name="History.VisitedLinks.HashTableUsageOnLinkAdded"
    units="fingerprints" expires_after="2025-02-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When a new URL fingerprint is added to the VisitedLink hashtable, this
    metric logs value for used_items_ (the number of entries in the hashtable
    containing an actual fingerprint value rather than a placeholder).
  </summary>
</histogram>

<histogram name="History.VisitedLinks.NumSaltsForNavigationsDuringBuild"
    units="salts" expires_after="2025-06-24">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    After the partitioned hashtable has completed building on the DB thread, we
    return to the main thread and determine the per-origin salts corresponding
    to each navigation that took place during the build. The VisitedLinkUpdater
    then sends those salts to their corresponding VisitedLinkReader instance.
    Each time a VisitedLinkUpdater sends per-origin salts, this histogram
    records how many salts were in the map.
  </summary>
</histogram>

<histogram name="History.VisitedLinks.TryToAddFingerprint"
    enum="AddFingerprint" expires_after="2025-01-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When VisitedLinkWriter is asked to add a URL, it calculates that URL's
    fingerprint and tries to add that fingerprint to the hashtable. This metric
    records the result of that function: AddFingerprint(). If the fingerprint is
    already in the table, we record kAlreadyVisited. If we haven't seen this
    fingerprint before and it can be successfully stored in the hashtable, we
    record kNewVisit. Any other outcomes due to table sizing errors are recorded
    as kTableError.
  </summary>
</histogram>

<histogram name="History.VisitedLinks.VisitLoggedFromMainFrame" enum="Boolean"
    expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For each visit being logged in the VisitedLinks hashtable by the
    HistoryService, record whether its ui::PageTransition type came from the
    main frame.
  </summary>
</histogram>

<histogram name="History.VisitedLinks.VisitLoggedFromTransition"
    enum="PageTransitionForVisitedLinks" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For each visit being logged in the VisitedLinks hashtable by the
    HistoryService, record its PageTransitionForVisitedLinks type. This enum
    represents our ui::PageTransition types of interest (link vs. typed vs.
    subframe) and a catch-all other bucket.
  </summary>
</histogram>

<histogram name="History.VisitedLinkTableCount" units="VisitedLinks"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>Blink&gt;History&gt;VisitedLinks</component>
  <summary>
    Number of rows in visited_links table in History DB. Metrics are logged on
    initialization of the History DB on 1% of starts.
  </summary>
</histogram>

<histogram name="History.VisitTableCount" units="visits"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Number of rows in visits table in History DB. Metrics are logged on
    initialization of the History DB on 1% of starts.
  </summary>
</histogram>

<histogram name="History.WeeklyHostCount" units="hosts"
    expires_after="2025-03-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Unique hostnames in History database urls table with last-visit times in the
    last 7 days. Metrics are logged on initialization of the History DB on 0.3%
    of starts.
  </summary>
</histogram>

<histogram name="History.WeeklyURLCount" units="URLs"
    expires_after="2025-03-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Unique URLs in History database urls table with last-visit times in the last
    7 days. Metrics are logged on initialization of the History DB on 0.3% of
    starts.
  </summary>
</histogram>

<histogram name="HistoryPage.ClickPositionSubset" units="units"
    expires_after="M81">
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Subset of the Click Position histogram. Contains only the first smaller
    subset of entries on the page. Number of entries that the clicked entry is
    older than in History page. Last bucket is entries of that value or higher.
  </summary>
</histogram>

<histogram name="HistoryPage.OtherDevicesMenu" enum="OtherSessionsActions"
    expires_after="never">
<!-- expires-never: part of top-line metric (internal: go/chrome-browser-nsm) -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Histogram for usage of the section in the history page that allows the user
    to access tabs from other devices.

    OtherSessionsActions.OPENED_LINK_VIA_CONTEXT_MENU was added for M-76.

    This histogram is of special interest to the chrome-analysis-team@. Do not
    change its semantics or retire it without talking to them first.
  </summary>
</histogram>

<histogram name="HistoryPage.RemoveEntryPosition" units="units"
    expires_after="M81">
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Number of entries that the deleted entry is older than in History page. Last
    bucket is any entry of that value or higher. Confirmed removal is not
    guaranteed, just an initiation of 'Remove selected items'.
  </summary>
</histogram>

<histogram name="HistoryPage.RemoveEntryPositionSubset" units="units"
    expires_after="M81">
  <owner>[email protected]</owner>
  <component>1456716</component>
  <summary>
    Subset of Remove Entry Position histogram. Contains only the first smaller
    subset of entries on the page. Number of entries that the deleted entry is
    older than in History page. Last bucket is any entry of that value or
    higher. Confirmed removal is not guaranteed, just an initiation of 'Remove
    selected items'.
  </summary>
</histogram>

</histograms>

</histogram-configuration>