chromium/tools/metrics/histograms/metadata/android/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 Android 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="ActivityIndexMismatchAssignmentState">
  <variant name=".NotReassigned" summary="not reassigned"/>
  <variant name=".Reassigned" summary="reassigned"/>
</variants>

<variants name="ActivityType">
  <variant name="" summary="activity"/>
  <variant name=".ChromeTabbedActivity" summary="ChromeTabbedActivity"/>
  <variant name=".CustomTabActivity" summary="CustomTabActivity"/>
  <variant name=".FirstRunActivity" summary="FirstRunActivity"/>
</variants>

<variants name="AndroidDownloadTypes">
  <variant name=".Audio" summary=""/>
  <variant name=".Document" summary=""/>
  <variant name=".Image" summary=""/>
  <variant name=".OfflinePage" summary=""/>
  <variant name=".Other" summary=""/>
  <variant name=".PrefetchedOfflinePage" summary=""/>
  <variant name=".Total" summary=""/>
  <variant name=".Video" summary=""/>
</variants>

<variants name="AndroidFrameTimelineJankScenario">
  <variant name=".FeedScrolling" summary=""/>
  <variant name=".NewTabPage" summary=""/>
  <variant name=".OmniboxFocus" summary=""/>
  <variant name=".OpenLinkInNewTab" summary=""/>
  <variant name=".StartSurfaceHomepage" summary=""/>
  <variant name=".StartSurfaceTabSwitcher" summary=""/>
  <variant name=".Startup" summary=""/>
  <variant name=".TabSwitcher" summary=""/>
  <variant name=".Total" summary=""/>
  <variant name=".WebviewScrolling"
      summary="In case of multiple webviews being scrolled in a window, we
               emit this histogram just once. From Android perspective there
               is just a single frame being produced and it reports back
               metrics for that one frame which could potentially have
               updates from multiple webviews."/>
</variants>

<variants name="AndroidNavigationOrSuggestionPrefetch">
  <variant name="NavigationPrefetch"
      summary="Recorded for prefetches where Chrome is relatively confident
               an omnibox navigation is about to occur (i.e. the user
               selected a search suggestion). These prefetches allow Chrome
               to kickstart the request without waiting until before unload
               handlers or other navigation pre-processing mechanisms in
               Chrome."/>
  <variant name="SuggestionPrefetch"
      summary="Recorded for prefetches where an omnibox suggestion from the
               suggestion server recommends a prefetch of a suggestion
               results page."/>
</variants>

<variants name="AndroidNavigationPrefetchOnly">
  <variant name="NavigationPrefetch"
      summary="Recorded for prefetches where Chrome is relatively confident
               an omnibox navigation is about to occur (i.e. the user
               selected a search suggestion). These prefetches allow Chrome
               to kickstart the request without waiting until before unload
               handlers or other navigation pre-processing mechanisms in
               Chrome."/>
</variants>

<variants name="AndroidSearchPrefetch">
  <variant name="SearchPrefetch"
      summary="Search Prefetch issues results page requests in response to
               either the suggestion server or the Omnibox client being
               confident that the user will navigate to a specific search
               suggestion. These requests are then served instantly to the
               user when the user navigates to a search suggestion with the
               same search terms. These requests can have mismatching query
               params as the Omnibox client updates the search navigation URL
               as the user types more into the Omnibox. The suggestion server
               issues prefetch hints along with the suggestion request.
               Additionally, the Omnibox client decides to prefetch when the
               user has chosen (or likely chosen) a search suggestion to
               initiate the search suggestion navigation earlier."/>
</variants>

<variants name="ChildProcessConnectionMetricsBindingState">
  <variant name="ContentModerate"
      summary="Moderate binding excluding BindingManager bindings"/>
  <variant name="ContentVisible"
      summary="Visible binding excluding BindingManager bindings"/>
  <variant name="ContentWaived"
      summary="Waived binding excluding BindingManager bindings"/>
  <variant name="Moderate" summary="strongest binding of Moderate"/>
  <variant name="NotPerceptible"
      summary="strongest binding of Not Perceptible"/>
  <variant name="Strong" summary="strongest binding of Strong"/>
  <variant name="Visible" summary="strongest binding of Visible"/>
  <variant name="Waivable" summary="binding only from BindingManager"/>
  <variant name="Waived" summary="strongest binding of Waived"/>
</variants>

<variants name="CustomizationDelegate">
  <variant name="GService" summary="GService"/>
  <variant name="None" summary="None-valid"/>
  <variant name="Phenotype" summary="Phenotype/Heterodyne"/>
  <variant name="PreloadApk" summary="Preload-APK"/>
</variants>

<variants name="InstanceAllocationType">
  <variant name="ExistingInstance"
      summary="a restoration of a persisted instance"/>
  <variant name="NewInstance" summary="a new instance"/>
</variants>

<variants name="MessageIdentifiers">
  <variant name=".AboutThisSite"/>
  <variant name=".AddToHomescreenIPH"/>
  <variant name=".AdsBlocked"/>
  <variant name=".ArCoreUpgrade"/>
  <variant name=".AutoDarkWebContents"/>
  <variant name=".ChromeSurvey"/>
  <variant name=".CvcSave"/>
  <variant name=".DesktopSiteGlobalDefaultOptOut"/>
  <variant name=".DesktopSiteGlobalOptIn"/>
  <variant name=".DesktopSiteWindowSetting"/>
  <variant name=".DownloadIncognitoWarning"/>
  <variant name=".DownloadProgress"/>
  <variant name=".ExternalNavigation"/>
  <variant name=".FramebustBlocked"/>
  <variant name=".GeneratedPasswordSaved"/>
  <variant name=".InstallableAmbientBadge"/>
  <variant name=".MerchantTrust"/>
  <variant name=".NearOomReduction"/>
  <variant name=".NotificationBlocked"/>
  <variant name=".OfferNotification"/>
  <variant name=".PermissionBlocked"/>
  <variant name=".PermissionUpdate"/>
  <variant name=".PopupBlocked"/>
  <variant name=".PromptHatsCameraCustomInvitation"/>
  <variant name=".PromptHatsCameraGenericInvitation"/>
  <variant name=".PromptHatsLocationCustomInvitation"/>
  <variant name=".PromptHatsLocationGenericInvitation"/>
  <variant name=".PromptHatsMicrophoneCustomInvitation"/>
  <variant name=".PromptHatsMicrophoneGenericInvitation"/>
  <variant name=".PromptHatsQuickDelete"/>
  <variant name=".PromptHatsSafetyHub"/>
  <variant name=".ReaderMode"/>
  <variant name=".SafetyTip"/>
  <variant name=".SaveAddressProfile"/>
  <variant name=".SaveCard"/>
  <variant name=".SaveCardFailure"/>
  <variant name=".SavePassword"/>
  <variant name=".SendTabToSelf"/>
  <variant name=".SharedHighlighting"/>
  <variant name=".SyncError"/>
  <variant name=".TailoredSecurityDisabled"/>
  <variant name=".TailoredSecurityEnabled"/>
  <variant name=".TrackingProtectionNotice"/>
  <variant name=".Translate"/>
  <variant name=".UpdatePassword"/>
  <variant name=".VirtualCardEnrollFailure"/>
  <variant name=".VrServicesUpgrade"/>
</variants>

<variants name="MinimizeAppAndCloseTabTypeVariants">
  <variant name="CloseTab"/>
  <variant name="MinimizeApp"/>
  <variant name="MinimizeAppAndCloseTab"/>
</variants>

<variants name="ScrollScenarios">
  <variant name="FeedScrolling" summary="feed scroll."/>
  <variant name="WebviewScrolling"
      summary="webview scroll. In case of multiple webviews being scrolled in
               a window, the overlapping parts of scrolls will share the
               metrics reported from Android. A janky frame during multiple
               scrolls scenario will be reported in all the scrolls and vice
               a versa."/>
</variants>

<variants name="SearchActivityIntentOriginVariants">
  <variant name="" summary="overall"/>
  <variant name=".CustomTab" summary="Chrome Custom Tab specific"/>
  <variant name=".SearchWidget" summary="(old) Search widget specific"/>
  <variant name=".ShortcutsWidget" summary="(new) Shortcuts widget specific"/>
</variants>

<variants name="TaskType">
  <variant name="BackgroundSyncOneShot" summary="BackgroundSyncOneShot"/>
  <variant name="ChromeMinidumpUploading" summary="ChromeMinidumpUploading"/>
  <variant name="ComponentUpdate" summary="ComponentUpdate"/>
  <variant name="DeprecatedDownloadResumption"
      summary="DeprecatedDownloadResumption"/>
  <variant name="DeprecatedExploreSitesRefresh"
      summary="DeprecatedExploreSitesRefresh"/>
  <variant name="DownloadAutoResumption" summary="DownloadAutoResumption"/>
  <variant name="DownloadAutoResumptionAnyNetwork"
      summary="DownloadAutoResumptionAnyNetwork"/>
  <variant name="DownloadAutoResumptionUnmetered"
      summary="DownloadAutoResumptionUnmetered"/>
  <variant name="DownloadCleanup" summary="DownloadCleanup"/>
  <variant name="DownloadLater" summary="DownloadLater"/>
  <variant name="DownloadService" summary="DownloadService"/>
  <variant name="ExploreSitesRefresh" summary="ExploreSitesRefresh"/>
  <variant name="FeedRefresh" summary="FeedRefresh"/>
  <variant name="FeedV2Refresh" summary="FeedV2Refresh"/>
  <variant name="Gcm" summary="Gcm"/>
  <variant name="NotificationScheduler" summary="NotificationScheduler"/>
  <variant name="NotificationService" summary="NotificationService"/>
  <variant name="NotificationServicePreUnsubscribe"
      summary="NotificationServicePreUnsubscribe (not used)"/>
  <variant name="NotificationTrigger" summary="NotificationTrigger"/>
  <variant name="OfflinePages" summary="OfflinePages"/>
  <variant name="Omaha" summary="Omaha"/>
  <variant name="PeriodicBackgroundSyncChromeWakeup"
      summary="PeriodicBackgroundSyncChromeWakeup"/>
  <variant name="QueryTile" summary="QueryTile"/>
  <variant name="SafetyHub" summary="SafetyHub"/>
  <variant name="Test" summary="Test"/>
  <variant name="WebApkUpdate" summary="WebApkUpdate"/>
  <variant name="WebviewComponentUpdate" summary="WebviewComponentUpdate"/>
  <variant name="WebviewMinidumpUploading" summary="WebviewMinidumpUploading"/>
  <variant name="WebviewVariationsSeedFetch"
      summary="WebviewVariationsSeedFetch"/>
</variants>

<variants name="ThumbnailProvider_ClientType">
  <variant name=".DownloadHome" summary="Download home"/>
  <variant name=".NTPSnippets" summary="NTP snippets"/>
</variants>

<variants name="WVScrollJankOperator">
  <variant name="Max"
      summary="maximum number of vsyncs a frame was delayed by"/>
  <variant name="Sum" summary="sum of missed vsyncs across all frames"/>
</variants>

<variants name="WVScrollLength">
  <variant name="" summary="all scrolls"/>
  <variant name=".Large"
      summary="large scrolls - number of presented frames more than 64"/>
  <variant name=".Medium"
      summary="medium length scrolls - number of presented frames between
               [17,64]"/>
  <variant name=".Small"
      summary="small scrolls - number of presented frames between [1,16]"/>
</variants>

<histogram name="Android.ActivityStop.NumberOfTabsUsed" units="count"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Captures the number of regular and incognito tabs used. Used tabs are
    calculated by identifying the number of tabs that were selected between
    ChromeTabbedActivity onResumeWithNative() and onStopWithNative(). This is
    recorded when onStopWithNative() is called by backgrounding the app or by
    opening another activity like SettingsActivity. If multiple instances are
    running, each instance will only track and record usage of tabs that it
    contains.
  </summary>
</histogram>

<histogram name="Android.ActivityStop.PercentageOfTabsUsed" units="%"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Captures the percentage of regular and incognito tabs used. This is
    calculated by finding the ratio of the number of tabs used to the total
    number of tabs available between ChromeTabbedActivity onResumedWithNative
    and onStopWithNative. Total number of tabs available is the sum of the tab
    count when CTA is resumed and any new tabs that are opened before CTA is
    stopped. This is recorded when ChromeTabbedActivity#onStopWithNative() is
    called by backgrounding the app or by opening another activity like
    SettingsActivity. If multiple instances are running, each instance will only
    track and record usage of tabs that it contains.
  </summary>
</histogram>

<histogram name="Android.AdaptiveToolbarButton.Clicked"
    enum="AdaptiveToolbarButtonVariant" expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reports the variant of the optional toolbar button that was clicked.
  </summary>
</histogram>

<histogram name="Android.AdaptiveToolbarButton.SessionVariant"
    enum="AdaptiveToolbarButtonVariant" expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reports the variant of the optional toolbar button used during the session.
    The button is placed in the toolbar, and is clickable.
  </summary>
</histogram>

<histogram name="Android.AdaptiveToolbarButton.Settings.Changed"
    enum="AdaptiveToolbarRadioButtonState" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the newly selected radio button option for the adaptive toolbar
    button on the toolbar shortcut settings page. Recorded only when the
    selected radio button state is changed.
  </summary>
</histogram>

<histogram name="Android.AdaptiveToolbarButton.Settings.Startup"
    enum="AdaptiveToolbarRadioButtonState" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the currently selected radio button option for the adaptive toolbar
    button on the toolbar shortcut settings page. Recorded on startup, only if
    AdaptiveButtonInTopToolbarCustomization feature is enabled.
  </summary>
</histogram>

<histogram name="Android.AdaptiveToolbarButton.SettingsToggle.Changed"
    enum="BooleanEnabled" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether the toolbar settings toggle button is on or off on the
    toolbar shortcut settings page after the user manually changes it. Recorded
    after the user explicitly taps on the toggle button.
  </summary>
</histogram>

<histogram name="Android.AdaptiveToolbarButton.SettingsToggle.Startup"
    enum="BooleanEnabled" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether the toolbar settings toggle button is on or off on the
    toolbar shortcut settings page. Recorded on startup.
  </summary>
</histogram>

<histogram name="Android.AdaptiveToolbarButton.Variant.OnPageLoad"
    enum="AdaptiveToolbarButtonVariant" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reports the variant of the optional toolbar button that was shown after a
    page load. Reports only when a page is loaded or a tab is switched. Reports
    only when the contextual page actions feature is enabled and after all the
    action providers have responded or the request has timed out. Only reported
    for pages in the regular profile.
  </summary>
</histogram>

<histogram name="Android.AdaptiveToolbarButton.Variant.OnStartNavigation"
    enum="AdaptiveToolbarButtonVariant" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reports the variant of the optional toolbar button being shown during the
    start of a new navigation. Reports whenever
    TabObserver.onDidStartNavigationInPrimaryMainFrame() is called which then
    records the button variant currently being shown on the toolbar. Recorded
    for both regular and incognito profiles.
  </summary>
</histogram>

<histogram name="Android.AppLaunch.DurationDrawWasBlocked.OnIncognitoReauth"
    units="ms" expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the time (ms) we blocked the draw of the Incognito tab (if any)
    during the app restore phase to be sure the Incognito re-auth screen is
    shown. This gets recorded only when both native and tab state have been
    initialized as by then we would show the re-auth screen.

    Blocking draw on Incognito re-auth screen prevents accidental leakage of the
    Incognito tab contents. Note that, the Incognito re-auth screen is an opt-in
    feature controlled behind the Chrome Setting &quot;Lock Incognito tabs when
    you leave Chrome&quot; under &quot;Privacy and Security&quot; So, if the
    feature is turned off, we wouldn't block draw for this use-case and won't
    record this metric.
  </summary>
</histogram>

<histogram
    name="Android.ApplicationState.TimeInBackgroundBeforeForegroundedAgain"
    units="ms" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Record the time the application spent in the background in-between two
    foregrounded periods, meaning that when the application is started in
    background, then foregrounded, no data points are recorded. This is recorded
    at the end of each such background interval. Saturates at 1h.
  </summary>
</histogram>

<histogram name="Android.AppNotificationStatus" enum="NotificationAppStatus"
    expires_after="never">
<!-- expires-never: Indicates whether Chrome has notification permission. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether notifications are enabled for Chrome, as the Android app,
    every time metrics are logged.
  </summary>
</histogram>

<histogram name="Android.ArmCpuPart" enum="ArmCpuPart"
    expires_after="2024-07-21">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reports information about the ARM CPU of a device. This composes the 8-bit
    ARM implementer identifier and the 12-bit part number into a single 20-bit
    CPU identifier, ranging from [0x00000,0xFFFFF]. Depending on the CPU
    package, processor configuration, and/or kernel version, this may only
    report information about the processor on which the metric was collected.
    This can happen on heterogeneous-processor SoCs. The metric is logged once
    every startup.
  </summary>
</histogram>

<histogram name="Android.Automotive.DeviceLockDialogAction.{Source}"
    enum="DeviceLockDialogAction" expires_after="2024-10-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records action user took when presented with the device lock explainer
    dialog (ex: button clicked) during a {Source} flow. Other actions such as
    clicking back on the automotive toolbar or clicking outside of the dialog to
    escape it can be calculated by subtracting button clicks from number of
    times the dialog was shown.
  </summary>
  <token key="Source">
    <variant name="AccountPicker"/>
    <variant name="Autofill"/>
    <variant name="FirstRun"/>
    <variant name="SyncConsent"/>
  </token>
</histogram>

<histogram name="Android.Automotive.DeviceLockOutcome" enum="Boolean"
    expires_after="2024-10-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether the user successfully passed the device lock challenge after
    having seen the automotive device lock explainer dialog.
  </summary>
</histogram>

<histogram name="Android.Automotive.DeviceLockRemovalDialogEvent"
    enum="MissingDeviceLockDialogEvent" expires_after="2024-10-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records an event whenever the missing device lock dialog is shown to the
    user or the user takes an action on the dialog.
  </summary>
</histogram>

<histogram name="Android.Automotive.DeviceLockSet" enum="Boolean"
    expires_after="2024-10-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether the automotive device has a device lock set when Chrome is
    resumed.
  </summary>
</histogram>

<histogram name="Android.BackgroundRestrictions.IsBackgroundRestricted"
    enum="Boolean" expires_after="2023-04-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether user has enabled background restriction for chrome. Recorded
    after native initialization in browser process.
  </summary>
</histogram>

<histogram name="Android.BackgroundRestrictions.StandbyBucket"
    enum="StandbyBucket" expires_after="2023-04-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the standby bucket (UsageStatsManager.getAppStandbyBucket) in which
    chrome is currently placed by android. Recorded after native initialization
    in browser process.
  </summary>
</histogram>

<histogram
    name="Android.BackgroundRestrictions.StandbyBucket.WithUserRestriction"
    enum="StandbyBucket" expires_after="2023-04-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the standby bucket (UsageStatsManager.getAppStandbyBucket) in which
    chrome is currently placed by android, when user has explicitly enabled
    background restrictions. Recorded after native initialization in browser
    process.
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.ExactTaskCreated"
    enum="BackgroundTaskId" expires_after="2024-10-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records that an exact task has been created. Cached when the task is
    scheduled.

    Cached to SharedPreferences to be recorded in the next ChromeActivity start
    instead of recorded immediately on background.
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.SetNotification.{TaskType}"
    units="ms" expires_after="2024-10-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time starting from the instant the task was started till a
    notification was set on the background task job service for a task of type
    {TaskType}. Recorded when the notification was set as long as the task isn't
    finished.
  </summary>
  <token key="TaskType" variants="TaskType"/>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskCanceled"
    enum="BackgroundTaskId" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records that a specific background task has been canceled.

    Cached to SharedPreferences to be recorded in the next ChromeActivity start
    instead of recorded immediately on background.
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskCreated.WithExpiration"
    enum="BackgroundTaskId" expires_after="2024-10-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records that a specific task has been created with an expiration deadline.
    Cached when the task is scheduled.

    Cached to SharedPreferences to be recorded in the next ChromeActivity start
    instead of recorded immediately on background.
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskCreated.WithoutExpiration"
    enum="BackgroundTaskId" expires_after="2024-10-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records that a specific task has been created without the expiration feature
    activated. Cached when the task is scheduled.

    Cached to SharedPreferences to be recorded in the next ChromeActivity start
    instead of recorded immediately on background.
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskExpired"
    enum="BackgroundTaskId" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records that a specific background task has expired. Cached before the task
    is to be started.

    Cached to SharedPreferences to be recorded in the next ChromeActivity start
    instead of recorded immediately on background.
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskFinished.{TaskType}"
    units="ms" expires_after="2025-02-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the time (uptimeMillis) taken by a background task of type
    {TaskType}. Recorded when the task finished callback is invoked.

    Differs from other Android.BackgroundTaskScheduler histograms in that it is
    recorded immediately in background, instead of in the next time Chrome is
    run in foreground, so cannot be directly compared.
  </summary>
  <token key="TaskType" variants="TaskType"/>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskFinished2"
    enum="BackgroundTaskId" expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records that a specific background task has finished.

    Cached to SharedPreferences to be recorded in the next ChromeActivity start
    instead of recorded immediately on background.

    Differs from &quot;TaskFinished&quot; in that it is recorded in the same
    session as &quot;TaskStarted&quot;, making them comparable for success rate
    calculations and ensuring they are in the same experiment group (which is
    not the case for &quot;TaskFinished&quot;).
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskLoadedNative"
    enum="BackgroundTaskId" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records that a task extending a NativeBackgroundTask started loading the
    native portion of Chrome.

    Cached to SharedPreferences to be recorded in the next ChromeActivity start
    instead of recorded immediately on background.
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskScheduled.Failure"
    enum="BackgroundTaskId" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records that a specific background task has failed to be scheduled.

    Cached to SharedPreferences to be recorded in the next ChromeActivity start
    instead of recorded immediately on background.
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskScheduled.Success"
    enum="BackgroundTaskId" expires_after="2024-10-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records that a specific background task has been successfully scheduled.

    Cached to SharedPreferences to be recorded in the next ChromeActivity start
    instead of recorded immediately on background.
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskStarted"
    enum="BackgroundTaskId" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records that a specific background task has been started.

    Cached to SharedPreferences to be recorded in the next ChromeActivity start
    instead of recorded immediately on background.
  </summary>
</histogram>

<histogram name="Android.BackgroundTaskScheduler.TaskStopped"
    enum="BackgroundTaskId" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records that a specific background task has been stopped by Background Task
    Scheduler before it was able to complete itself.

    Cached to SharedPreferences to be recorded in the next ChromeActivity start
    instead of recorded immediately on background.
  </summary>
</histogram>

<histogram name="Android.BackPress.Failure" enum="BackPressConsumer"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/back_press/android/OWNERS</owner>
  <summary>
    Recorded when the user invokes a back navigation only if the handler failed
    to operate as expected, (e.g. it does nothing). May be recorded multiple
    times for a single back press event if there are multiple failed handlers.
    Android only.
  </summary>
</histogram>

<histogram
    name="Android.BackPress.Failure.{MinimizeAppAndCloseTabTypeVariants}"
    enum="MinimizeAppAndCloseTabType" expires_after="2024-09-22">
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/back_press/android/OWNERS</owner>
  <summary>
    Recorded when the user invokes a back navigation and there is a discrepancy
    between system back arm group and non system back arm group. The system back
    group is supposed to record {MinimizeAppAndCloseTabTypeVariants} but wrongly
    records another value.
  </summary>
  <token key="MinimizeAppAndCloseTabTypeVariants"
      variants="MinimizeAppAndCloseTabTypeVariants"/>
</histogram>

<histogram name="Android.BackPress.Intercept.CustomTab{Task}"
    enum="BackPressConsumer" expires_after="2025-05-15">
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/back_press/android/OWNERS</owner>
  <summary>
    Recorded when a custom tabs feature intercepted the system's back press
    gesture {Task}.
  </summary>
  <token key="Task">
    <variant name=".SameTask" summary="custom tab is from the same task."/>
    <variant name=".SeparateTask"
        summary="custom tab is from a separate task."/>
  </token>
</histogram>

<histogram name="Android.BackPress.Intercept{Direction}"
    enum="BackPressConsumer" expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/back_press/android/OWNERS</owner>
  <summary>
    Recorded when a specific feature intercepted the system's back press
    gesture{Direction}.
  </summary>
  <token key="Direction">
    <variant name="" summary=""/>
    <variant name=".LeftEdge" summary="from left edge in U+."/>
    <variant name=".RightEdge" summary="from right edge in U+."/>
  </token>
</histogram>

<histogram name="Android.BackPress.MinimizeAppAndCloseTab"
    enum="MinimizeAppAndCloseTabType" expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/back_press/android/OWNERS</owner>
  <summary>
    Records that the back press causes the app to be minimized or the current
    tab to be closed.
  </summary>
</histogram>

<histogram name="Android.BackPress.MinimizeAppAndCloseTab.CustomTab.{Task}"
    enum="MinimizeAppAndCloseTabType" expires_after="2025-05-15">
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/back_press/android/OWNERS</owner>
  <summary>
    Records that the custom tabs back press causes the app to be minimized or
    the current tab to be closed {Task}.
  </summary>
  <token key="Task">
    <variant name=".SameTask" summary="custom tab is from the same task."/>
    <variant name=".SeparateTask"
        summary="custom tab is from a separate task."/>
  </token>
</histogram>

<histogram name="Android.BackPress.SecondaryActivity" enum="SecondaryActivity"
    expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/back_press/android/OWNERS</owner>
  <summary>
    Records the secondary activity which intercepts the back press when the user
    does the Backpress gesture and it's not handled by the system.
  </summary>
</histogram>

<histogram name="Android.BackPress.SwipeEdge{Type}" enum="SwipeEdge"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/back_press/android/OWNERS</owner>
  <summary>
    Record the edge from which the gesture is swiped from {Type}.
  </summary>
  <token key="Type">
    <variant name="" summary=""/>
    <variant name=".TabHistoryNavigation"
        summary="when a back gesture triggers a tab history navigation."/>
  </token>
</histogram>

<histogram name="Android.BindingManger.ConnectionsDroppedDueToMaxSize"
    units="connections" expires_after="2024-10-24">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the total number of BindingManager bindings to
    ChildProcessConnections that were dropped due to the BindingManager reaching
    the connection limit. This value accumulates while the app is running and is
    emitted upong the app being backgrounded at which time the counter is reset.
  </summary>
</histogram>

<histogram name="Android.ChildProcessBinding.TotalConnections"
    units="connections" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the total number of sandboxed ChildProcessConnections in existence.
    This is emitted even if there are no live connections. Emitted at a Poisson
    distributed period with a mean of 5 minutes on Chrome on Android while in
    the foreground.
  </summary>
</histogram>

<histogram
    name="Android.ChildProcessBinding.{ChildProcessConnectionMetricsBindingState}Connections"
    units="connections" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of sandboxed ChildProcessConnections with a
    {ChildProcessConnectionMetricsBindingState}. This is emitted even if there
    are no live connections. Emitted at a Poisson distributed period with a mean
    of 5 minutes on Chrome on Android while in the foreground.
  </summary>
  <token key="ChildProcessConnectionMetricsBindingState"
      variants="ChildProcessConnectionMetricsBindingState"/>
</histogram>

<histogram name="Android.ChildProcessStartTimeV2{type}" units="ms"
    expires_after="2023-02-22">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures time from {type} child process starts to right before main. Only
    recorded on Android N+. Zygote measurements are recorded on Q+.

    Zygote measurements capture the CPU time (thread time) spent to create the
    app zygote process, before the zygote preload starts. For other processes it
    measures the time (uptimeMillis) to create the child process service.
  </summary>
  <token key="type">
    <variant name=".All" summary="all (excluding zygote)"/>
    <variant name=".Isolated" summary="isolated"/>
    <variant name=".NotIsolated" summary="non-isolated"/>
    <variant name=".Zygote" summary="app zygote"/>
  </token>
</histogram>

<histogram name="Android.ChromeActivity.Type" enum="ChromeActivityType"
    expires_after="never">
<!-- expires-never: Used to classify UMA reports by the dashboards. -->

  <owner>[email protected]</owner>
  <owner>src/base/metrics/OWNERS</owner>
  <summary>
    Recorded at the same time as &quot;CustomTabs.Visible&quot;, this metric
    should eventually replace that one. This additionally distinguishes between
    Trusted Web Activities, WebAPKs and Webapps.

    As of M87, this histogram is logged on a log start, rather than log end to
    tag more logs.
  </summary>
</histogram>

<histogram name="Android.ChromeStartupDelegate.FailureReason"
    enum="ChromeStartupDelegateFailureType" expires_after="2022-12-25">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the failure reason for ChromeStartupDelegate requests. Recorded at
    most once on application startup.
  </summary>
</histogram>

<histogram name="Android.ChromeStartupDelegate.Result"
    enum="ChromeStartupDelegateResult" expires_after="2022-10-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result for ChromeStartupDelegate. Recorded on application
    startup.
  </summary>
</histogram>

<histogram name="Android.ContactsPicker.ContactCount" units="Contacts"
    expires_after="2024-08-04">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the total number of contacts shown in the contacts picker. Measured
    once when the Contacts Picker dialog is dismissed.
  </summary>
</histogram>

<histogram name="Android.ContactsPicker.DialogAction"
    enum="ContactsPickerDialogAction" expires_after="2024-08-04">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records which action the user takes in the ContactsPickerDialog. Measured
    once when the Contacts Picker dialog is dismissed.
  </summary>
</histogram>

<histogram name="Android.ContactsPicker.PropertiesRequested"
    enum="ContactsPickerProperties" expires_after="2024-08-04">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The contact properties requested by the website (names, emails, telephone
    numbers). Measured once when the Contacts Picker dialog is dismissed. Note:
    This metric was not logged in June 2023.
  </summary>
</histogram>

<histogram name="Android.ContactsPicker.PropertiesUserRejected"
    enum="ContactsPickerProperties" expires_after="2024-10-06">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The contact properties requested by the website but rejected by the user.
    Measured once when the Contacts Picker dialog is dismissed.
  </summary>
</histogram>

<histogram name="Android.ContactsPicker.SelectCount" units="Contacts"
    expires_after="2024-08-04">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the total number of contacts selected in the contacts picker.
    Measured once when the Contacts Picker dialog is dismissed. Note: This
    metric was not logged in June 2023.
  </summary>
</histogram>

<histogram name="Android.ContactsPicker.SelectPercentage" units="%"
    expires_after="2024-08-04">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the percentage of contacts selected in the contacts picker.
    Measured once when the Contacts Picker dialog is dismissed. Note: This
    metric was not logged in June 2023.
  </summary>
</histogram>

<histogram name="Android.CpuAbiBitnessSupport" enum="CpuAbiBitnessSupport"
    expires_after="2025-04-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether 64-bit and/or 32-bit apps can be installed on this device/OS.

    This is recorded every time a metrics log is created.
  </summary>
</histogram>

<histogram name="Android.DarkTheme.AutoDarkMode.SettingsChangeSource{NewState}"
    enum="AndroidAutoDarkModeSettingsChangeSource" expires_after="2023-04-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Source that changed the auto dark web content settings. This includes both
    changes to global theme settings as well as individual site exceptions. This
    histogram does not take into account whether the browser UI theme is dark or
    not (e.g. browser theme could be &quot;light&quot; and user could still
    change auto dark mode state in site settings). Recorded when the auto dark
    web content settings changes including {NewState}
  </summary>
  <token key="NewState">
    <variant name=".Disabled"
        summary="default value change to Blocked, or a site exception is
                 added."/>
    <variant name=".Enabled"
        summary="default value change to Allowed, or a site exception is
                 removed."/>
  </token>
</histogram>

<histogram name="Android.DarkTheme.EnabledState" enum="BooleanEnabled"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether dark theme is enabled or not on cold start and when the
    enabled state changes.
  </summary>
</histogram>

<histogram name="Android.DarkTheme.ThemeSettingsEntry"
    enum="AndroidThemeSettingsEntry" expires_after="2023-04-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Entry that navigate the user into the Theme Settings. Recorded when the
    Theme settings is opened.
  </summary>
</histogram>

<histogram name="Android.DefaultBrowserPromo.Outcome.{CurrentState}"
    enum="AndroidDefaultBrowserPromoOutcomeType" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The final default browser state (outcome) after the user has been prompted
    to set Chrome as the default when {CurrentState} is set as the default
    initially. Recorded when the system UI prompting the user to change their
    default is dismissed.
  </summary>
  <token key="CurrentState">
    <variant name="NoDefault" summary="no browser"/>
    <variant name="OtherDefault" summary="another browser"/>
  </token>
</histogram>

<histogram
    name="Android.DefaultBrowserPromo.Outcome.{CurrentState}.{PromoCount}"
    enum="AndroidDefaultBrowserPromoOutcomeType" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The final default browser state (outcome) after the user has been prompted
    to set Chrome as the default when {CurrentState} is set as the default
    initially and the total promo count is {PromoCount}. Recorded when the
    system UI prompting the user to change their default is dismissed.
  </summary>
  <token key="CurrentState">
    <variant name="NoDefault" summary="no browser"/>
    <variant name="OtherDefault" summary="another browser"/>
  </token>
  <token key="PromoCount">
    <variant name="FifthOrMorePromo" summary="five or more"/>
    <variant name="FirstPromo" summary="one"/>
    <variant name="FourthPromo" summary="four"/>
    <variant name="SecondPromo" summary="two"/>
    <variant name="ThirdPromo" summary="three"/>
  </token>
</histogram>

<histogram name="Android.DefaultBrowserPromo.RoleManagerShown"
    enum="AndroidDefaultBrowserPromoType" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the default browser state when the Android Q+ role manager dialog is
    shown.
  </summary>
</histogram>

<histogram name="Android.DesktopWindowHeuristicResult"
    enum="DesktopWindowHeuristicResult" expires_after="2025-04-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of the heuristics used to determine whether the app is in
    a desktop window. The histogram will be emitted only if the result changed
    since the last time it was emitted. This is to avoid emitting noisy data,
    since we believe that most of the conditions in these heuristics are
    unlikely to change for a given OS/OEM across these checks that may be
    relatively significantly larger in number. Android V+ only.
  </summary>
</histogram>

<histogram name="Android.DeviceAuthenticator.AuthSource"
    enum="DeviceAuthSource" expires_after="2025-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when a UI surface/flow in Chrome on Android chooses to re-auth the
    user. It records where the request comes from (Password Manager, Autofill,
    Incognito or Device Lock Page).
  </summary>
</histogram>

<histogram name="Android.DeviceAuthenticator.CanAuthenticateWithBiometrics"
    enum="BiometricsAvailability" expires_after="2025-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when a UI surface/flow in Chrome on Android checks whether
    biometric authentication is available on the device. It may be called from
    various places which need to perform biometric re-auth (Password Manager,
    Autofill, Incognito or Device Lock Page).
  </summary>
</histogram>

<histogram name="Android.DeviceSize.ScreenSizeInTensOfInches"
    units="10x inches" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the primary display (screen) size in tens of inches with 0.2 inches
    (2 units) granularity, during deferred startup. The display size is not
    affected by Android N multi-window mode.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.ForegroundServiceLifecycle"
    enum="DownloadNotificationForegroundLifecycle" expires_after="never">
<!-- expires-never: Download foreground notification stability metric. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records instances where the foreground undergoes a lifecycle change (when
    the foreground starts, changes pinned notification, or stops).
  </summary>
</histogram>

<histogram name="Android.DownloadManager.Item.OpenFailed"
    enum="AndroidDownloadFilterType" expires_after="M81">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Recorded when a download fails to open.</summary>
</histogram>

<histogram name="Android.DownloadManager.Item.OpenSucceeded"
    enum="AndroidDownloadFilterType" expires_after="M85">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Recorded when a download is opened.</summary>
</histogram>

<histogram name="Android.DownloadManager.NotificationInteraction"
    enum="DownloadNotificationInteractions" expires_after="2023-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records instances where a user interacts with a download notification (ie.
    clicks on, pauses, resumes, cancels).
  </summary>
</histogram>

<histogram name="Android.DownloadManager.OpenSource.Audio"
    enum="AndroidDownloadOpenSource" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records how users open audio download files on Android. This histogram was
    previously expired on 2023-07-09, and was re-enabled on 2024-02-12.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.OpenSource.Other"
    enum="AndroidDownloadOpenSource" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the entry point for users opening downloaded files on Android, that
    are not audio nor video. Records how users open audio download files on
    Android. This histogram was previously expired on 2023-06-25, and was
    re-enabled on 2024-02-12.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.OpenSource.Video"
    enum="AndroidDownloadOpenSource" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records how users open video download files on Android. This histogram was
    previously expired on 2023-06-25, and was re-enabled on 2024-02-12.
  </summary>
</histogram>

<histogram name="Android.DownloadManager.ServiceStopped.DownloadForeground"
    enum="DownloadNotificationServiceStopped" expires_after="never">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
<!-- expires-never: Download foreground notification stability metric. -->

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

<histogram name="Android.DownloadManager.SpaceUsed" units="%"
    expires_after="M81">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>The percentage of total storage downloads consume.</summary>
</histogram>

<histogram
    name="Android.DownloadManager.Thumbnail.MaxRequiredStretch{AndroidDownloadTypes}"
    units="%" expires_after="2021-01-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the required stretch of the smaller dimension before displaying an
    image on download home. Measured in percentage. {AndroidDownloadTypes}
  </summary>
  <token key="AndroidDownloadTypes" variants="AndroidDownloadTypes"/>
</histogram>

<histogram name="Android.DownloadPage.OpenSource"
    enum="AndroidDownloadOpenSource" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the entry point for users opening the download page on Android. This
    histogram was previously expired on 2023-04-23, and was re-enabled on
    2024-02-12.
  </summary>
</histogram>

<histogram name="Android.DragDrop.Files.Count" units="files"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of files included in a drag-drop in chrome. It is
    recorded on the drop event for a web contents. Android only.
  </summary>
</histogram>

<histogram name="Android.DragDrop.FromWebContent.DropInWebContent.DistanceDip"
    units="dp" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the distance of the drag end position from the initial drag start
    position when dragging starts and ends within ContentView containing web
    contents. Note that the distance only counts the distance of drag event
    happend on the screen; scrolling for the web content will be disabled during
    drag. Used to assist in setting proper threshold to dismiss context menu
    during drag. Android only.
  </summary>
</histogram>

<histogram name="Android.DragDrop.FromWebContent.DropInWebContent.Duration"
    units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the duration in ms of drag process when drop happend inside
    ContentView containing web contents, regardless DragEvent#getResult. Does
    not capture drag events that end outside the ContentView (Use
    Android.DragDrop.FromWebContent.Duration instead). Android only.
  </summary>
</histogram>

<histogram name="Android.DragDrop.FromWebContent.Duration{DropResult}"
    units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the duration in ms of drag process when {DropResult}. Recorded for
    the drag process starts from the web content, and drop happens outside of
    the web content. Does not capture drag events that end inside the
    ContentView containing web contents. Recorded when such a drag event ends.
    Android only.

    For more information regarding drag results, see:
    https://developer.android.com/reference/android/view/DragEvent#getResult()
  </summary>
  <token key="DropResult">
    <variant name=".Canceled" summary="DragEvent#getResult() returns false."/>
    <variant name=".Success" summary="DragEvent#getResult() returns true."/>
  </token>
</histogram>

<histogram name="Android.DragDrop.FromWebContent.TargetType"
    enum="AndroidDragTargetType" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the type of object being dragged, for the drag process starts from
    the web content, and drop happens outside of the web content. Does not
    capture drag events that end inside the ContentView containing web contents.
    Recorded when such a drag event ends. Android only.
  </summary>
</histogram>

<histogram name="Android.DragDrop.Image.OpenFileTime.AllExpired" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the duration between the URI being cleared and
    ContentProvider#openFile attempts with that expired URI. This is used to
    evaluate how long we should keep the image data. Because drop target app
    could request data multiple times with the same URI, this metric could
    record multiple times per URI, which gives us the holistic view about the
    timing when the image data associated with the URI is needed. Another metric
    Android.DragDrop.Image.OpenFileTime.FirstExpired only records at most once
    per URI, to avoid counting in retries from drop target app when Chrome
    rejects the expired URI. This metric is recorded when Chrome receives an
    expired URI to retrieve data. If the URI is not the latest expired one, the
    metric will not be recorded because we do not calculate the elapsed time for
    older URIs. Android only.
  </summary>
</histogram>

<histogram name="Android.DragDrop.Image.OpenFileTime.FirstAttempt" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the duration between receiving Android Drag End event and the first
    ContentProvider#openFile attempted by the drop target app. The duration is
    calculated during the first ContentProvider#openFile for each URI. Another
    metric Android.DragDrop.Image.OpenFileTime.LastAttempt is recorded for the
    last ContentProvider#openFile. Record 0 if the duration is negative (e.g.
    ContentProvider#openFile is accessed before drag ends). Android only.
  </summary>
</histogram>

<histogram name="Android.DragDrop.Image.OpenFileTime.FirstExpired" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the duration between the URI being cleared and the first
    ContentProvider#openFile attempt with that expired URI. This is used to
    evaluate how long we should keep the image data. Because drop target app may
    retry after Chrome rejects the expired URI; and the retries are not helpful
    to evaluate how long the data is needed; this metric records at most once
    per URI. Another metric Android.DragDrop.Image.OpenFileTime.AllExpired
    records multiple times per URI, to gives us the holistic view about the
    timing when the image data associated with the URI is needed. This metric is
    recorded when Chrome receives an expired URI to retrieve data. If the URI is
    not the latest expired one, the metric will not be recorded because we do
    not calculate the elapsed time for older URIs. Android only.
  </summary>
</histogram>

<histogram name="Android.DragDrop.Image.OpenFileTime.LastAttempt" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the duration between receiving Android Drag End event and the last
    ContentProvider#openFile attempted by the drop target app. The duration is
    calculated when the image data expired at the designated time limit. It is
    not recorded if the image data is replaced before the time limit due to the
    start of the next image drag. Another metric
    Android.DragDrop.Image.OpenFileTime.FirstAttempt is recorded for the first
    ContentProvider#openFile. Record 0 if the duration is negative (e.g.
    ContentProvider#openFile is accessed before drag ends). Android only.
  </summary>
</histogram>

<histogram name="Android.DragDrop.Image.Size" units="KB"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the image size being dragged from Chrome. Recorded when start
    dragging an image from Chrome's web content, regardless of whether drop is
    handled successfully. Used to evaluate the memory consumption. Android only.
  </summary>
</histogram>

<histogram name="Android.DragDrop.Image.UriCreatedInterval" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the interval between two back-to-back image drags. This is used to
    evaluate the duration to preserve the image data. Android only.
  </summary>
</histogram>

<histogram name="Android.DragDrop.Tab.Duration.WithinDestStrip" units="ms"
    expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    During tab drag and drop, record duration when the drag is within the
    destination strip, which is the time difference from the first time entering
    the destination strip to the last time leaving or dropping into the
    destination strip. Recorded when a tab drag and drop is finished.
  </summary>
</histogram>

<histogram name="Android.DragDrop.Tab.FromStrip.Result"
    enum="DragDropTabResult" expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the tab drag and drop results, including successful drops and failed
    drops with varies reasons. For failed drops, it is recorded during
    ACTION_DROP. For successful drops, it is recored during ACTION_DRAG_ENDED.
    Note that the successful drops count can be recorded more often than
    Android.DragDrop.Tab.Type, such as reorder within strip or tabs being
    consumed as text by EditText in native pages.
  </summary>
</histogram>

<histogram name="Android.DragDrop.Tab.MaxInstanceFailureCount" units="failures"
    expires_after="2025-05-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of times tab tearing failed for a user, because the maximum
    number of Chrome instances were open, in a 24-hour period. Recorded when the
    max-instance toast is shown when a dragged tab drop is unhandled at the max
    instance limit.
  </summary>
</histogram>

<histogram name="Android.DragDrop.Tab.ReorderStripWithDragDrop" enum="Boolean"
    expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records tab drops into source strip with or without leaving the strip. True
    means the tab drag has left the source strip; while false means it does not.
    Recorded when tab is dropped into source strip. Used to determine the amount
    of accidental tab drag out of the strip.
  </summary>
</histogram>

<histogram name="Android.DragDrop.Tab.SourceWindowClosed" enum="Boolean"
    expires_after="2025-05-13">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records true when a tab drag/drop results in closing the source Chrome
    window because it was the last tab in the window, false when the drop does
    not close the source window. Only recorded when tab drag/drop is handled.
  </summary>
</histogram>

<histogram name="Android.DragDrop.Tab.Type" enum="DragDropType"
    expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the drag source and drop target when a tab is dropped successfully.
  </summary>
</histogram>

<histogram name="Android.DragDrop.ToOmnibox.DropType"
    enum="AndroidToolbarDropType" expires_after="2024-02-25">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the type of object dropped on the Omnibox, as well as whether it
    originated from Chrome. This metric could be used to determine the total
    number of uses for drag and drop to Omnibox, and specifics on how much each
    data type is being dropped. Android only.
  </summary>
</histogram>

<histogram name="Android.DynamicColors.IsAvailable" enum="Boolean"
    expires_after="2024-06-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded during ChromeBaseAppCompatActivity initialization if third_party
    dynamic colors logic thinks dynamic colors are available. This is often
    based on Android version and OEM. This metric is not related to whether
    dynamic colors are desired by features/experiments.
  </summary>
</histogram>

<histogram name="Android.DynamicTopChrome.TabStripTransition.Finished"
    enum="Boolean" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    On tablets, when the width of the tab strip passes a certain threshold, the
    tab strip will start a transition to show / hide it from the top toolbar.
    This records true when tab strip transition finishes successfully, or false
    when a new transition starts before an ongoing transition dispatched the
    finished signal.
  </summary>
</histogram>

<histogram name="Android.DynamicTopChrome.WindowResize.DesktopWindowModeState"
    enum="DesktopWindowModeState" expires_after="2025-05-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the desktop windowing mode state when the Chrome window is resized
    on tablet or foldable devices.
  </summary>
</histogram>

<histogram name="Android.EdgeToEdge.Eligible" enum="Boolean"
    expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether the current session is eligible for drawing any content edge
    to edge. Recorded on ChromeActivity launch.
  </summary>
</histogram>

<histogram name="Android.EdgeToEdge.IneligibilityReason"
    enum="IneligibilityReason" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the reason of why the current session is not eligibile for drawing
    any content edge to edge. Multiple reasons might be record for a single
    session. Recorded on ChromeActivity launch.
  </summary>
</histogram>

<histogram name="Android.Event.ActionDown" enum="InputDeviceSource"
    expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <owner>src/chrome/android/OWNERS</owner>
  <summary>
    Records the input device source for the action down touch event.
  </summary>
</histogram>

<histogram name="Android.ExplicitViewIntentFinishedNewTabbedActivity"
    enum="Boolean" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded during an atypical situation where a VIEW intent from an external
    app not routed via ChromeLauncherActivity, attempts to launch a new
    ChromeTabbedActivity, when multi-instance is supported. The histogram
    records true when the new activity is finished and the intent is launched in
    an existing ChromeTabbedActivity instead, false when we fail to find an
    existing ChromeTabbedActivity to launch such an intent in.
  </summary>
</histogram>

<histogram
    name="Android.FamilyLinkUser.LocalWebApprovalParentAuthenticationError"
    units="Status error codes raised in GMS Core" expires_after="2024-02-11">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The different GMS error status codes that a user may encounter during the
    parent authentication step in the local web approval flow. Recorded on
    Android only. See go/chrome-local-web-approval-parent-auth-error-codes
    (Googlers only) for the error code definitions. Warning: this histogram was
    expired from 2023-06-13 to 2023-07-28; data may be missing.
  </summary>
</histogram>

<histogram base="true" name="Android.FeatureModules.AvailabilityStatus"
    enum="FeatureModuleAvailabilityStatus" expires_after="2025-01-05">
<!-- Name completed by histogram_suffixes
       name="AndroidFeatureModuleName" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Availability status for each dynamic feature module. Reported once per
    Chrome start. This metric's purpose is to measure a feature module's install
    penetration over time.
  </summary>
</histogram>

<histogram base="true" name="Android.FeatureModules.CachedAwakeInstallDuration"
    units="ms" expires_after="2023-06-13">
<!-- Name completed by histogram_suffixes
       name="AndroidFeatureModuleName" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Duration of successful installs for each dynamic feature module. Only
    contains install durations for modules first requested *before* Chrome
    started last and may therefore be installed from cache. Omits deep sleep
    time.
  </summary>
</histogram>

<histogram base="true" name="Android.FeatureModules.InstallingStatus"
    enum="FeatureModuleInstallingStatus" expires_after="2024-06-30">
<!-- Name completed by histogram_suffixes
       name="AndroidFeatureModuleName" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Install status counter for each dynamic feature module. Recorded during
    on-demand and deferred installs.
  </summary>
</histogram>

<histogram base="true" name="Android.FeatureModules.InstallStatus"
    enum="FeatureModuleInstallStatus" expires_after="2023-06-13">
<!-- Name completed by histogram_suffixes
       name="AndroidFeatureModuleName" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Install status for each dynamic feature module. Recorded after the
    installation has finished.
  </summary>
</histogram>

<histogram name="Android.FeatureModules.StartupTime" units="ms"
    expires_after="2024-05-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Length of time during startup used by module framework code. This is our
    metric to improve and used to guard against regressions.
  </summary>
</histogram>

<histogram base="true"
    name="Android.FeatureModules.UncachedAwakeInstallDuration" units="ms"
    expires_after="2023-06-13">
<!-- Name completed by histogram_suffixes
       name="AndroidFeatureModuleName" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Duration of successful installs for each dynamic feature module. Only
    contains install durations of modules first requested *after* Chrome started
    last and are therefore unlikely to be installed from cache. Omits deep sleep
    time.
  </summary>
</histogram>

<histogram name="Android.FocusChanged.FocusOwningWebContents" enum="Boolean"
    expires_after="2025-05-22">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether the WebContents associated with the RenderWidgetHost
    responsible for handling input is focused specifically on TouchStart or
    GestureTap or MouseDown events. This histogram is recorded for each input
    event sequence on TouchStart/GestureTap/MouseDown input events. This would
    help us in understanding if focus changes on input events need to be handled
    by Viz once it starts receiving transferred input events after InputVizard
    (go/chrome-inputvizard).
  </summary>
</histogram>

<histogram
    name="Android.FocusChanged.RenderWidgetHostViewChildFrame.RootViewFocusState"
    enum="RootViewFocusState" expires_after="2025-05-22">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks if the RenderWidgetHostViewChildFrame requests focus on the root
    RenderWidgetHostViewAndroid or not during the beginning of a touch
    interaction. This tracking occurs every time the function
    RenderWidgetHostViewChildFrame::PreProcessTouchEvent() is called when a
    touch sequence begins (on TouchStart). This would help us in understanding
    if focus changes on touch input events need to be handled by Viz once it
    starts receiving transferred input events after InputVizard
    (go/chrome-inputvizard).
  </summary>
</histogram>

<histogram name="Android.FontLookup.Blink.DLFontsLatencyFailure2"
    units="microseconds" expires_after="2023-01-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the latency of looking up a local font from Android downloadable
    fonts at the time of instantiating the font in the fonts backend in the
    renderer. Includes time for error checking and attempting to create the font
    from the retrieved blob, if there is one. Only records timings for
    situations in which a font could not be instantiated. This is recorded only
    on devices that support high resolution timers.
  </summary>
</histogram>

<histogram name="Android.FontLookup.Blink.DLFontsLatencySuccess2"
    units="microseconds" expires_after="2023-07-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the latency of looking up a local font from Android downloadable
    fonts at the time of instantiating the font in the fonts backend in the
    renderer. Includes time for error checking and attempting to create the font
    from the retrieved blob, if there is one. Only records timings for
    situations in which a font was successfully instantiated and returned. This
    is recorded only on devices that support high resolution timers.
  </summary>
</histogram>

<histogram name="Android.FontLookup.Blink.GetTableLatency" units="ms"
    expires_after="2023-11-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the latency of fetching the font name lookup table from the browser.
    The table is cached by the renderer so will usually only be fetched once per
    renderer startup. This is recorded when an attempt is made to fetch the
    table, typically once per renderer on the first font lookup for that
    process. If the original fetch fails, this will be recorded the next time a
    font lookup is requested.
  </summary>
</histogram>

<histogram name="Android.FontLookup.FetchAllFontFiles.Time" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the time taken to fetch all available font files from the GMS Core
    Android downloadable font provider.
  </summary>
</histogram>

<histogram name="Android.FontLookup.GmsFontRequest.Time" units="ms"
    expires_after="2023-08-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the time taken to make a fetchFonts font request to GMS Core via the
    Android downloadable font provider API. This metric may be used to determine
    whether it's reasonable to execute this task on the IO thread rather than
    posting to a background thread.
  </summary>
</histogram>

<histogram name="Android.FontLookup.MatchLocalFontByUniqueName.Time" units="ms"
    expires_after="2023-08-13">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the time taken to respond to a request from the renderer to fetch a
    specific font file from the GMS Core Android downloadable font provider.
  </summary>
</histogram>

<histogram
    name="Android.Fonts.TimeDownloadableFontsRetrievedAfterFirstDraw{ActivityType}"
    units="ms" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time it took to retrieve the downloadable fonts after the first draw of
    {ActivityType}'s content view. Mutually exclusive with *BeforeFirstDraw.
    Recorded when all downloadable fonts are retrieved.
  </summary>
  <token key="ActivityType" variants="ActivityType"/>
</histogram>

<histogram
    name="Android.Fonts.TimeDownloadableFontsRetrievedAfterPostInflationStartup{ActivityType}"
    units="ms" expires_after="2024-12-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time it took to retrieve the downloadable fonts after post-inflation
    startup. Mutually exclusive with *BeforePostInflationStartup. Recorded when
    all downloadable fonts are retrieved. {ActivityType}
  </summary>
  <token key="ActivityType" variants="ActivityType"/>
</histogram>

<histogram
    name="Android.Fonts.TimeDownloadableFontsRetrievedBeforeFirstDraw{ActivityType}"
    units="ms" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Amount of time the downloadable fonts were retrieved before the first draw.
    Mutually exclusive with *AfterFirstDraw. Recorded when the first #onDraw
    call happens for the {ActivityType}'s content view.
  </summary>
  <token key="ActivityType" variants="ActivityType"/>
</histogram>

<histogram
    name="Android.Fonts.TimeDownloadableFontsRetrievedBeforePostInflationStartup{ActivityType}"
    units="ms" expires_after="2024-12-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Amount of time the downloadable fonts were retrieved before post-inflation
    startup. Mutually exclusive with *AfterPostInflationStartup. Recorded after
    AsyncInitializationActivity#performPostInflationStartup. {ActivityType}
  </summary>
  <token key="ActivityType" variants="ActivityType"/>
</histogram>

<histogram
    name="Android.Fonts.TimeToRetrieveDownloadableFontsAfterOnCreate{ActivityType}"
    units="ms" expires_after="2024-12-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time it took to retrieve the downloadable fonts after Application#OnCreate.
    Recorded when all downloadable fonts are retrieved. {ActivityType}
  </summary>
  <token key="ActivityType" variants="ActivityType"/>
</histogram>

<histogram name="Android.FrameTimelineJank.Duration{JankScenario}" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Amount of time it takes to draw Android UI frames as measured by Android's
    FrameMetrics API. Each frame's draw duration is stored individually.

    The samples for this metric (along with
    Android.FrameTimelineJank.JankyFrames) are manually passed from Java to C++
    to be recorded. This is done instead of recording in real time from Java due
    to the large number of generated samples (potentially ~60 per second).
    Recording them directly from Java would result in a JNI call for each sample
    which could cause performance issues.

    FrameMetrics only reports frames with Android UI updates. An idle input
    field would report only 2 frames per second due to the cursor blink
    animation. Scrolling through a web page may record no frames if no Android
    UI (like the address bar) updates.

    {JankScenario}
  </summary>
  <token key="JankScenario" variants="AndroidFrameTimelineJankScenario"/>
</histogram>

<histogram name="Android.FrameTimelineJank.FrameJankStatus{JankScenario}"
    enum="FrameJankStatus" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Note: This metric doesn't capture web contents scrolling quality on chrome,
    it is only emitted on Webview. For scroll jank metrics in chrome please
    check Event.ScrollJank.DelayedFramesPercentage* and
    Event.ScrollJank.MissedVsyncs* histograms.

    This metric measures jankiness of frames during scrolls according to the
    Android's FrameMetrics API. Samples are recorded into the Janky bucket for
    frames for which their total duration exceeded the given deadline and into
    the NonJanky bucket for all other frames. This metric is recorded at the
    same time as Android.Jank.FrameDuration histogram.

    {JankScenario}

    Known caveats of this metric: 1) During a staggered scroll where finger
    could be stationary for some time, any janks during the period when finger
    was stationary would still be marked as scroll janks even when we wouldn't
    have been producing frames during that time.
  </summary>
  <token key="JankScenario" variants="AndroidFrameTimelineJankScenario"/>
</histogram>

<histogram
    name="Android.FrameTimelineJank.{Scenario}.DelayedFramesPercentage.PerScroll{Length}"
    units="%" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Percentage of janky frames in a {Scenario}

    This metric is computed based on Android FrameMetrics. A frame is deemed
    janky if time taken to render frame(FrameMetrics.TOTAL_DURATION) exceeds the
    time available to app(FrameMetrics.DEADLINE). The metric is reported for
    {Length}, at the end of scroll.

    Note: For similar metric in chrome for web contents scrolling please check
    Event.ScrollJank.DelayedFramesPercentage.PerScroll*
  </summary>
  <token key="Length" variants="WVScrollLength"/>
  <token key="Scenario" variants="ScrollScenarios"/>
</histogram>

<histogram
    name="Android.FrameTimelineJank.{Scenario}.MissedVsyncs{Operator}.PerScroll{Length}"
    units="counts" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This metric reports the {Operator} in {Scenario}

    This metric is computed based on Android FrameMetrics. Missed vsyncs of
    janky frame is estimated as `ceil((total_duration -
    deadline)/vsync_interval)`, where total_duration is time taken to render
    frame(FrameMetrics.TOTAL_DURATION) and deadline is time available to
    app(FrameMetrics.DEADLINE). The metric is reported for {Length}, at the end
    of scroll.

    Note: For similar metric in chrome for web contents scrolling please check
    Event.ScrollJank.MissedVsyncs*.PerScroll*
  </summary>
  <token key="Length" variants="WVScrollLength"/>
  <token key="Operator" variants="WVScrollJankOperator"/>
  <token key="Scenario" variants="ScrollScenarios"/>
</histogram>

<histogram base="true"
    name="Android.GridTabSwitcher.Animation.FirstFrameLatency" units="ms"
    expires_after="2024-12-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This histogram records the time taken between the tab and tab switcher
    layout. Timing starts when the layout transition begins and ends on the
    first frame. This is recorded each time the layout transition animation
    occurs.
  </summary>
</histogram>

<histogram base="true" name="Android.GridTabSwitcher.Animation.TotalDuration"
    units="ms" expires_after="2024-12-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This histogram records the time taken between the tab and tab switcher
    layout. Timing starts when the layout transition begins and ends on the last
    frame. This is recorded each time the layout transition animation occurs.
  </summary>
</histogram>

<histogram name="Android.GridTabSwitcher.ThumbnailFetchingResult"
    enum="GridTabSwitcherThumbnailFetchingResult" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This histogram records the result of thumbnail fetching in the Grid Tab
    Switcher on Android. This is recorded once per thumbnail fetch when a Tab
    card with a thumbnail is shown onscreen.
  </summary>
</histogram>

<histogram name="Android.GridTabSwitcher.TimeToTabStateInitializedFromShown"
    units="ms" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the elapsed realtime in milliseconds between the tab switcher being
    shown and the tab state being initialized. This is not recorded if the tab
    state was already initialized. Recorded at most once per session once the
    tab state is initialized.
  </summary>
</histogram>

<histogram name="Android.HistoryPage.ClearBrowsingData.PerProfileType"
    enum="BrowserProfileType" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the clicks on Clear Browsing Data button at history page for each
    profile type in Android.
  </summary>
</histogram>

<histogram name="Android.HomeButton.PerProfileType" enum="BrowserProfileType"
    expires_after="2023-01-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the clicks on Home button in Android toolbar for each profile type.
  </summary>
</histogram>

<histogram name="Android.Hub.PaneFocused" enum="HubPaneId"
    expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reports which pane in the Hub becomes focused when a request to change focus
    occurs. Focus may change either in response to user input on the pane
    switcher or programmatically as a side-effect of another user action. For
    example the see all tabs button on the Incognito reauth dialog. See
    &quot;Android.Hub.PaneFocused.PaneSwitcher&quot; if only interested in user
    actions on the pane switcher.
  </summary>
</histogram>

<histogram name="Android.Hub.PaneFocused.PaneSwitcher" enum="HubPaneId"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reports which pane in the Hub becomes focused when a request to change focus
    occurs in response to a user input on the pane switcher. This does not count
    programmatic pane switches triggered as a side effect of other user actions
    such as the back button, Incognito reauth dialog, etc. See
    &quot;Android.Hub.PaneFocused&quot; for all pane focus events.
  </summary>
</histogram>

<histogram name="Android.IncognitoNotification.FileNotDeleted" enum="Boolean"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the count of any cases when clicking on the &quot;Close all
    Incognito tabs&quot; notification may not delete any files which were opened
    in the Incognito session. True value denotes file was not deleted and false
    otherwise.
  </summary>
</histogram>

<histogram name="Android.IncognitoReauth.AuthResult"
    enum="DeviceAuthFinalResult" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of the attempt to re-auth the user via biometrics or
    device lock for the Incognito re-auth screen.
  </summary>
</histogram>

<histogram name="Android.IncognitoReauth.PrefToggledFromSettingPage"
    enum="IncognitoReauthToggleValueType" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the count when the Incognito lock setting was either turned
    &quot;on&quot; or &quot;off&quot; from the Chrome Settings &gt; Privacy and
    Security &gt; Lock Incognito tabs when you leave Chrome, option. This
    setting can be in disabled state if the Android screen lock is not set-up,
    in which case we don't record this metric. This is recorded only when the
    toggle is not in disabled state and if the re-authentication checks succeeds
    which follows after the user changes the toggle. This covers only the
    interactions done from the above mentioned Incognito lock Setting page. See
    also the metric &quot;Android.IncognitoReauth.PromoActionType&quot; which
    records the opt-in made exclusively from promo card.
  </summary>
</histogram>

<histogram name="Android.IncognitoReauth.PromoAcceptedOrDismissed"
    enum="IncognitoReauthPromoActionType" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the action type the user makes on the Incognito re-auth promo card
    which is shown inside the Incognito tab grid view. There's only two possible
    interactions possible which is either to turn on the Incognito lock or
    dismiss the promo. A &quot;Promo accepted&quot; entry is emitted when user
    clicks on &quot;Turn on Incognito lock&quot; (gated on successful
    re-authentication) and a &quot;No thanks&quot; value is emitted when the
    user clicks on &quot;No thanks&quot;.
  </summary>
</histogram>

<histogram name="Android.IncognitoReauth.PromoImpressionAfterActionCount"
    units="count" expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of impressions of the Incognito re-auth promo card when
    user clicks accept or dismiss or when the promo expires after the max number
    of impressions.
  </summary>
</histogram>

<histogram name="Android.IncognitoReauth.ToggleOnOrOff" enum="BooleanToggled"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the Incognito lock setting state (if available to clients) exactly
    once during the browser startup, after the native code is initialized. Note,
    for multi-windows this histogram would be emitted as many times as the users
    enter multi-window(s).
  </summary>
</histogram>

<histogram name="Android.InputDevice.Keyboard.Active" enum="Boolean"
    expires_after="2024-10-13">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Emitted when a hardware keyboard is connected or disconnected.
  </summary>
</histogram>

<histogram name="Android.InputDevice.Mouse.Active" enum="Boolean"
    expires_after="2024-10-13">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Emitted when a mouse is connected or disconnected.</summary>
</histogram>

<histogram name="Android.InputHintChecker.InitializationResult"
    enum="InputHintInitializationResult" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the status of the InputHintChecker initialization. This
    initialization procedure is required to be able to later poll for
    availability of unhandled input events queued. Recorded immediately after
    finishing the initialization, which should happen once during early browser
    process initialization.

    A failure may be recorded after initialization succeeds (which itself
    records a sample) if reading the input hint fails. In this case only the
    first failure is recorded.
  </summary>
</histogram>

<histogram name="Android.Intent.BlockedExternalNavLastGestureTime" units="ms"
    expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When a navigation to an external protocol is blocked due to a missing
    gesture on the redirect chain, records the time in milliseconds since the
    last time the user touched the screen before the navigation. Note that this
    notion is decoupled from the last user activation in blink due to quirks
    around how the RedirectHandler works.
  </summary>
</histogram>

<histogram name="Android.Intent.HasNonSpoofablePackageName" enum="Boolean"
    expires_after="2024-12-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Android only. Boolean histogram denoting whether the package name can be
    retrieved in a non-spoofable way from the View Intents sent to Chrome. When
    the histogram returns true, it means we can confirm the package name was
    passed by the defined host app. Emitted upon launching the tabbed Chrome
    Activity via View Intent.
  </summary>
</histogram>

<histogram name="Android.Intent.IdentityShared" enum="Boolean"
    expires_after="2024-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Android only. Boolean histogram denoting whether the package name is
    available by the sender sharing its identity using the new API introduced in
    Android U. This means we can confirm the package name was passed by the
    defined host app. Emitted upon launching the tabbed Chrome Activity via View
    Intent.
  </summary>
</histogram>

<histogram name="Android.Intent.MainFrameIntentLaunch"
    enum="MainFrameIntentLaunch" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when an external app is launched as the result of a navigation.
    Records the source and scheme of the navigation.
  </summary>
</histogram>

<histogram name="Android.Intent.ShareIntentUrlCount" units="URLs"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of URLs present in Text Share intents (ACTION_SEND) received by
    Chrome.
  </summary>
</histogram>

<histogram base="true" name="Android.IsolatedSplits.ClassLoaderReplaced"
    enum="BooleanYesNo" expires_after="2023-06-26">
<!-- Name completed by histogram_suffixes name="AndroidFeatureModuleName" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether a split Context has had its ClassLoader replaced due to b/172602571.
    This is recorded every time a split Context is created.
  </summary>
</histogram>

<histogram base="true" name="Android.IsolatedSplits.ContextCreateTime"
    units="ms" expires_after="2025-02-23">
<!-- Name completed by histogram_suffixes name="AndroidFeatureModuleName" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Amount of time it takes to create a new Context for a split. This will only
    be recorded if isolated splits are enabled.
  </summary>
</histogram>

<histogram base="true" name="Android.IsolatedSplits.PreloadWaitTime" units="ms"
    expires_after="2025-02-01">
<!-- Name completed by histogram_suffixes name="AndroidFeatureModuleName" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Amount of time spent waiting for a split preload task to finish. This will
    only be recorded if isolated splits are enabled. This histogram was expired
    between 2023-11-12 and 2024-08-23.
  </summary>
</histogram>

<histogram name="Android.Jank.AsyncTaskGetOnUiThreadStatus"
    enum="AsyncTaskStatus" expires_after="2024-06-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The status of an AsyncTask when get() is called on the UI thread. This is
    only recorded if the AsyncTask isn't immediately available.

    Seeing the distribution of PENDING vs RUNNING tasks will give us a better
    idea for how to approach these hangs.
  </summary>
</histogram>

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

<histogram name="Android.MediaPickerShown" enum="MediaPickerShown"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded once per batch of files uploaded, when Chrome has made the
    determination of what media picker to show to the user.
  </summary>
</histogram>

<histogram name="Android.MemoryPressureNotification{AndroidProcessType}"
    enum="Android.MemoryPressureNotification" expires_after="2021-12-05">
  <owner>[email protected]</owner>
  <summary>
    Memory pressure notifications sent by Android through ComponentCallbacks2.
    This metric was added 04/2018; for prior data for the browser process see
    MemoryAndroid.NotificationBackground and
    MemoryAndroid.NotificationForeground. {AndroidProcessType}
  </summary>
  <token key="AndroidProcessType">
    <variant name=".Browser" summary="Browser process"/>
    <variant name=".ChildService"
        summary="Child service process (renderer, GPU, etc.)"/>
  </token>
</histogram>

<histogram name="Android.Messages.DismissedWithoutFullyVisible"
    enum="MessageIdentifier" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the message identifier when the message is dismissed without being
    fully visible before. This only tracks the case in which message is
    dismissed by primary action, secondary action, gesture and timer.
  </summary>
</histogram>

<histogram name="Android.Messages.Dismissed{MessageIdentifier}"
    enum="MessageDismissReason" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Recorded once per message when the message is dismissed to capture the
    dismissal reason (e.g. primary button tap, timeout). The histogram can be
    used for measuring user engagement with messages of different types.
  </summary>
  <token key="MessageIdentifier" variants="MessageIdentifiers"/>
</histogram>

<histogram name="Android.Messages.Enqueued" enum="MessageIdentifier"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the message identifier each time a message is enqueued through
    MessageDispatcher (the entry point to Chrome for Android's messages system).
    This histogram can be used for getting a count of messages broken down by
    message identifier.
  </summary>
</histogram>

<histogram name="Android.Messages.Enqueued.Hidden" enum="MessageIdentifier"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the message identifier when an enqueued message is not immediately
    displayed either because there is another message on the secreen or because
    message scope (e.g. tab) is not active. This metric is recorded along with
    Android.Messages.Enqueued.Hiding, which records identifier of currently
    visible message.
  </summary>
</histogram>

<histogram name="Android.Messages.Enqueued.Hiding" enum="MessageIdentifier"
    expires_after="M128">
  <owner>[email protected]</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Recorded when an enqueued message is not immediately displayed. This metric
    records message identifier of a message currently displayed on the screen
    (that prevented the enqueued message from getting displayed immediately).
    INVALID_MESSAGE is recorded when the message isn't displayed because message
    scope (e.g. tab) isn't active or when message queue is suspended.
  </summary>
</histogram>

<histogram name="Android.Messages.Enqueued.Visible" enum="MessageIdentifier"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the message identifier when a message is displayed immediately when
    it is enqueued. This includes cases when there are no other messages on the
    screen as well as cases when the new message is high priority and causes
    some other message to hide.
  </summary>
</histogram>

<histogram name="Android.Messages.Enqueued.{QueueState}"
    enum="MessageIdentifier" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the message identifier when it is enqueued while the queue is
    {QueueState}.
  </summary>
  <token key="QueueState">
    <variant name="Resumed" summary="resumed"/>
    <variant name="Suspended" summary="suspended"/>
  </token>
</histogram>

<histogram name="Android.Messages.Enqueued.{ScopeState}"
    enum="MessageIdentifier" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the message identifier when it is enqueued while its associated
    scope is {ScopeState}.
  </summary>
  <token key="ScopeState">
    <variant name="ScopeActive" summary="active"/>
    <variant name="ScopeInactive" summary="inactive"/>
  </token>
</histogram>

<histogram name="Android.Messages.Error.FullyVisibleNotInformed"
    enum="MessageIdentifier" expires_after="2024-09-29">
  <owner>[email protected]</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the message identifier at the moment of dismissal if the message has
    been fully visible before but the fully visible callback, if set, has never
    been invoked. This use the dismissal type as a proxy for message having
    become visible, inlcuding primary action, secondary action, gesture and
    timer. It is not checked when it is dismissed by reasons, such as
    ScopeDestroyed.
  </summary>
</histogram>

<histogram name="Android.Messages.FullyVisible" enum="MessageIdentifier"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the message identifier every time it becomes fully visible to users.
    Can be recorded multiple times during its lifetime.
  </summary>
</histogram>

<histogram name="Android.Messages.Stacking" enum="StackingAnimationType"
    expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the type of stacking animation when it is triggered. The type
    indicates the relation between current displayed messages and incoming
    messages.
  </summary>
</histogram>

<histogram name="Android.Messages.Stacking.Hidden" enum="MessageIdentifier"
    expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the message identifier of the back message which is hidden by the
    foreground message. Emits when the stacking animation is about to start.
  </summary>
</histogram>

<histogram name="Android.Messages.Stacking.Hiding" enum="MessageIdentifier"
    expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the message identifier of the front message which is hiding the
    background message. Emits when the stacking animation is about to start.
  </summary>
</histogram>

<histogram name="Android.Messages.Stacking.RequestToFullyShow"
    enum="MessageIdentifier" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the id of front message when the candidate requests to show. The
    recorded message is not guranteed to be displayed: it might be blocked by
    unready browser control or unintialized container.
  </summary>
</histogram>

<histogram name="Android.Messages.Stacking.ThreeStacked"
    enum="StackingAnimationThreeStackedType" expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the scenario when 3 message stacking could be possible.
  </summary>
</histogram>

<histogram name="Android.Messages.Stacking.{Action}" enum="MessageIdentifier"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the message identifier when {Action} during a stacking animation.
  </summary>
  <token key="Action">
    <variant name="InsertAtBack" summary="a message is inserted at back."/>
    <variant name="InsertAtFront" summary="a message is inserted at front."/>
    <variant name="PushToBack" summary="a front message is pushed to back."/>
    <variant name="PushToFront" summary="a back message is pushed to front."/>
    <variant name="RemoveBack" summary="a back message is removed."/>
    <variant name="RemoveFront" summary="a front message is removed."/>
  </token>
</histogram>

<histogram name="Android.Messages.Stacking.{Blocker}" enum="MessageIdentifier"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the message identifier of the front message when it is waiting to
    trigger the animation because {Blocker}.
  </summary>
  <token key="Blocker">
    <variant name="BlockedByBrowserControl"
        summary="browser controls aren't ready"/>
    <variant name="BlockedByContainerInitializing"
        summary="container is initializing"/>
    <variant name="BlockedByContainerNotInitialized"
        summary="container initialization hasn't started"/>
  </token>
</histogram>

<histogram name="Android.Messages.TimeToAction.Dismiss{MessageIdentifier}"
    units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the time interval the message was displayed on the screen before the
    user dismissed it with a gesture. The metric is NOT recorded when the user
    presses primary or secondary button or when the message is auto-dismissed
    based on timer. The interval includes both enter and exit animation. The
    metric can be used to analyze the time threshold for the user to give up
    waiting for autodismiss timer and dismiss the message explicitly.
  </summary>
  <token key="MessageIdentifier" variants="MessageIdentifiers"/>
</histogram>

<histogram name="Android.Messages.TimeToAction{MessageIdentifier}" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Records the time interval the message was displayed on the screen before the
    user explicitly dismissed it. The metric is recorded when the user presses
    primary or secondary button, or dismisses the message with a gesture. It is
    not recorded when the message is auto-dismissed based on timer. The interval
    includes both enter and exit animation. The metric can be used to analyze
    the amount of time it takes for the user to understand the message and take
    an action (e.g. click a button, dismiss the message, etc.).
  </summary>
  <token key="MessageIdentifier" variants="MessageIdentifiers"/>
</histogram>

<histogram name="Android.Messages.TimeToFullyShow{MessageIdentifier}"
    units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/components/messages/OWNERS</owner>
  <summary>
    Recorded once per message measuring the duration from the moment it is
    enqueued to the first time it becomes fully shown. Recorded when the message
    becomes fully shown.
  </summary>
  <token key="MessageIdentifier" variants="MessageIdentifiers"/>
</histogram>

<histogram name="Android.MultiInstance.MaxInstanceCount" units="instances"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The maximum number of Chrome instances that ran at the same time in a
    24-hour period. Checked whenever there is an activity state change to log
    the stats once in 24 hours.
  </summary>
</histogram>

<histogram name="Android.MultiInstance.MaxWindowLimitExceeded" enum="Boolean"
    expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the exceeded status when attempted to open a new chrome window. The
    value is set to true when attempted to exceed the maximum number of allowed
    chrome windows, the value is set to false otherwise. See also related
    metrics &quot;Android.MultiInstance.NumActivities&quot; and
    &quot;Android.MultiInstance.NumInstances&quot; which record the count of
    windows.
  </summary>
</histogram>

<histogram name="Android.MultiInstance.NumActivities" units="activities"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of running ChromeTabbedActivity's on every
    ChromeTabbedActivity startup. This includes activities that may not be
    visible on screen (i.e. it includes ChromeTabbedActivity's in the
    &quot;stopped&quot; state). This does not include ChromeTabbedActivity's
    that have been destroyed regardless of whether their owning Android Task may
    be retrieved in Android Recents. Applicable to Android S+ only.
  </summary>
</histogram>

<histogram name="Android.MultiInstance.NumActivities.DesktopWindow"
    units="activities" expires_after="2025-05-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of running ChromeTabbedActivity's on every
    ChromeTabbedActivity startup in a desktop window. This includes activities
    that may not be visible on screen (i.e. it includes ChromeTabbedActivity's
    in the &quot;stopped&quot; state). This does not include
    ChromeTabbedActivity's that have been destroyed regardless of whether their
    owning Android Task may be retrieved in Android Recents. Applicable to
    Android V+ only.
  </summary>
</histogram>

<histogram
    name="Android.MultiInstance.NumActivities.DesktopWindow.{InstanceAllocationType}"
    units="activities" expires_after="2025-05-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of running ChromeTabbedActivity's when a new
    ChromeTabbedActivity is started in a desktop window, as
    {InstanceAllocationType}. This includes activities that may not be visible
    on screen (i.e. it includes ChromeTabbedActivity's in the
    &quot;stopped&quot; state). This does not include ChromeTabbedActivity's
    that have been destroyed regardless of whether their owning Android Task may
    be retrieved in Android Recents. Applicable to Android V+ only.
  </summary>
  <token key="InstanceAllocationType" variants="InstanceAllocationType"/>
</histogram>

<histogram name="Android.MultiInstance.NumInstances" units="instances"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of allocated instance IDs which corresponds to the number of
    retrievable Chrome instances (aka windows). An instance is considered
    retrievable if it has tab state data on disk irrespective of whether that
    data is currently assigned to a running ChromeTabbedActivity. These
    instances may be retrieved from Chrome's in-app window manager from Android
    Recents if they are associated with a live ChromeTabbedActivity or Android
    Task. Recorded on every ChromeTabbedActivity start-up. Applicable to Android
    S+ only.
  </summary>
</histogram>

<histogram name="Android.MultiInstance.NumInstances.DesktopWindow"
    units="instances" expires_after="2025-05-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of allocated instance IDs which corresponds to the number of
    retrievable Chrome instances (aka windows). An instance is considered
    retrievable if it has tab state data on disk irrespective of whether that
    data is currently assigned to a running ChromeTabbedActivity. These
    instances may be retrieved from Chrome's in-app window manager from Android
    Recents if they are associated with a live ChromeTabbedActivity or Android
    Task. Recorded on every ChromeTabbedActivity start-up in a desktop window.
    Applicable to Android V+ only.
  </summary>
</histogram>

<histogram
    name="Android.MultiInstance.NumInstances.DesktopWindow.{InstanceAllocationType}"
    units="instances" expires_after="2025-05-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of allocated instance IDs which corresponds to the number of
    retrievable Chrome instances (aka windows). An instance is considered
    retrievable if it has tab state data on disk irrespective of whether that
    data is currently assigned to a running ChromeTabbedActivity. These
    instances may be retrieved from Chrome's in-app window manager from Android
    Recents if they are associated with a live ChromeTabbedActivity or Android
    Task. Recorded when a ChromeTabbedActivity starts in a desktop window, as
    {InstanceAllocationType}. Applicable to Android V+ only.
  </summary>
  <token key="InstanceAllocationType" variants="InstanceAllocationType"/>
</histogram>

<histogram name="Android.MultiInstance.WindowManager.DesktopWindowModeState"
    enum="DesktopWindowModeState" expires_after="2025-05-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the desktop windowing mode state when the Chrome window manager is
    opened from the app menu.
  </summary>
</histogram>

<histogram name="Android.MultipleUserProfilesState"
    enum="MultipleUserProfilesState" expires_after="2025-04-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether multiple user profiles are present in Android.

    This is recorded every time a metrics log is created.
  </summary>
</histogram>

<histogram name="Android.MultiWindowMode.Active" enum="BooleanEnabled"
    expires_after="never">
<!-- expires-never: topline metric for monitoring multi-window mode usage on Chrome for Android. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records on every metrics upload whether the activity is running in Android N
    multi-window mode or not.
  </summary>
</histogram>

<histogram
    name="Android.MultiWindowMode.AssertIndicesMatch.PreExistingActivityDestroyed"
    enum="PreAssignedActivityState" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When the TabWindowManager allocates a different tab model index than the
    window Id selected by MultiInstanceManagerApi31, it means the requested tab
    model Id was assigned to a different Activity.

    When this mismatch happened, if an activity is found at the requested index,
    track the state recorded in
    &quot;Android.MultiWindowMode.AssertIndicesMatch&quot;, and attach a
    ActivityStateListener. When the observed Activity's #onDestroy is called,
    record the tracked state at the time the observer is attached.
  </summary>
</histogram>

<histogram
    name="Android.MultiWindowMode.AssertIndicesMatch{ActivityIndexMismatchAssignmentState}"
    enum="PreAssignedActivityState" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When the TabWindowManager allocates a different tab model index than the
    window Id selected by MultiInstanceManagerApi31, it means the requested tab
    model Id was assigned to a different Activity.

    When this mismatch happened, record whether the activity at the requested
    index is finishing, whether it is in the same task as the new activity, and
    if it's still visible in ActivityManager#getAppTasks. Record
    &quot;Unknown&quot; if the activity cannot be found. Recorded when the
    mismatched index for the new activity is
    {ActivityIndexMismatchAssignmentState}.
  </summary>
  <token key="ActivityIndexMismatchAssignmentState"
      variants="ActivityIndexMismatchAssignmentState"/>
</histogram>

<histogram name="Android.MultiWindowMode.DraggedTabOpenedNewWindow"
    enum="Boolean" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when a new Chrome window is created from a dragged tab. The
    histogram records true when the dragged tab is successfully reparented to
    the new window, false when the reparenting of the dragged tab is not done.
  </summary>
</histogram>

<histogram
    name="Android.MultiWindowMode.MismatchedIndices.ActivityCreationTimeDelta"
    units="ms" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When the TabWindowManager allocates a different tab model index than the
    window Id selected by MultiInstanceManagerApi31, it means the requested tab
    model Id was assigned to a different Activity.

    When this mismatch happened, record the difference in creation timestamps of
    both activities that are attempting to use the same index.
  </summary>
</histogram>

<histogram name="Android.MultiWindowMode.TotalDuration" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Total time spent in Android N+ multi-window (aka split-screen) mode.
    Recorded when multi-window mode is exited.
  </summary>
</histogram>

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

<histogram name="Android.Omnibox.ActionInSuggest.IntentResult"
    enum="ActionInSuggestIntentResult" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the outcome of the User's interaction with ActionInSuggest chips,
    breaking down the cases where the intent could not be created or started.

    Recorded every time the user interacts with the ActionInSuggest, for the
    Action that the user interacted with. Not recorded if the user does not
    interact with ActionInSuggest.
  </summary>
</histogram>

<histogram name="Android.Omnibox.InputToNavigationControllerStart" units="ms"
    expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records time between the user input that triggered an Omnibox navigation on
    Android to the time the Omnibox code calls into the shared C++ navigation
    code (NavigationController).
  </summary>
</histogram>

<histogram name="Android.Omnibox.InvalidMatch" enum="MatchResult"
    expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded every time AutocompleteController.java interacts with
    autocomplete_controller_android.cc. Indicates how often matches referenced
    by Java are different from the matches referenced by C++ at any position.

    Note: starting Chrome 118, this is recorded every time we detect a
    non-cached match, when Native and Java AutocompleteResult objects differ.
  </summary>
</histogram>

<histogram name="Android.Omnibox.OmniboxAction.Used" enum="BooleanUsage"
    expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the usage of Omnibox actions displayed in the Omnibox when the user
    completed interaction with the Omnibox, if at least one action was shown to
    the user at that time.

    Value &quot;Used&quot; indicates that at least one OmniboxAction was shown
    to the user and it was used. Conversely, value &quot;Not Used&quot;
    signifies that although actions were displayed, none were employed.

    The histogram is not recorded if no actions were visible.

    The histogram is recorded once per Omnibox interaction, where at least one
    Omnibox Action was shown to the user at the time the user completed
    interaction with the Omnibox.
  </summary>
</histogram>

<histogram name="Android.Omnibox.OmniboxAction.Valid" enum="BooleanValid"
    expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the validity of Omnibox actions displayed in the Omnibox when the
    user completed interaction with the Omnibox, if at least one action was
    shown to the user at that time.

    Omnibox Actions can appear at any point, but the histogram only captures the
    ultimate state, disregarding any preceding events.

    An OmniboxAction is &quot;Valid&quot; if both Java and Native objects exist
    and are linked. &quot;Not Valid&quot; indicates a broken relationship, often
    due to Native AutocompleteResult becoming invalid.

    The histogram should ideally show values close to 100% validity.

    The histogram captures one value for every Omnibox Action displayed in the
    Suggestions list when the user completes the interaction with the Omnibox.
  </summary>
</histogram>

<histogram name="Android.Omnibox.RefineActionUsage" enum="RefineActionUsage"
    expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records interactions with the Search Refine button, differentiating by
    context (zero-prefix vs non-zero-prefix), including the cases where the User
    did not interact with the Refine button placed beside the Search suggestion
    at all.

    Recorded once per interaction with the Omnibox and Sugestions, when the
    Omnibox loses focus. This includes cases where the User chooses to navigate
    somewhere (both by using a suggestion or pressing Go button on keyboard), or
    abandons the Omnibox.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SearchActivity.ActivityPresent"
    enum="BooleanPresent" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <summary>
    Records whether intent is updating an already present activity. For the most
    part the expected value here is 'false', indicating that the intent was
    starting a new session. A value of 'true' indicates that the SearchActivity
    was already focused and running when a new intent was received. Such intent
    would need to be emitted while SearchActivity is in foreground.

    Recorded once per intent.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SearchActivity.IntentOrigin"
    enum="SearchActivityIntentOrigin" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <summary>
    Record the origin of an intent (i.e. from where the SearchActivity was
    called). Recorded once per intent.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SearchActivity.LaunchedWithQuery"
    enum="Boolean" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <summary>
    Records whether intent used to launch / update SearchActivity carried an
    (optional) User Query. Recorded once per intent.
  </summary>
</histogram>

<histogram
    name="Android.Omnibox.SearchActivity.NavigationTargetType{IntentOrigin}"
    enum="UrlTargetType" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <summary>
    Records the intended navigation search target type for every navigation
    initiated from the SearchActivity.

    Captures the {IntentOrigin} SearchActivity metrics. Recorded exactly once
    per user initiated navigation. Not recorded if the user abandons
    SearchActivity.
  </summary>
  <token key="IntentOrigin" variants="SearchActivityIntentOriginVariants"/>
</histogram>

<histogram name="Android.Omnibox.SearchActivity.ReferrerValid"
    enum="BooleanValid" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <summary>
    Records whether Intent Referrer field was valid for Searches initiated from
    SearchActivity. Recorded only when IntentOrigin is &quot;Custom Tab&quot;.
    Recorded once per SearchActivity session.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SearchActivity.RequestedSearchType"
    enum="SearchActivitySearchType" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <summary>
    Record the Search type requested from an Intent. Recorded once per intent.
  </summary>
</histogram>

<histogram
    name="Android.Omnibox.SearchActivity.SessionTerminationReason{IntentOrigin}"
    enum="SearchActivityTerminationReason" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <summary>
    Records the reason SearchActivity was closed.

    Captures the {IntentOrigin} SearchActivity metrics. Recorded exactly once
    per SearchActivity session.
  </summary>
  <token key="IntentOrigin" variants="SearchActivityIntentOriginVariants"/>
</histogram>

<histogram name="Android.Omnibox.SetGeolocationHeadersTime" units="ms"
    expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records time spent setting geolocation headers when the user navigates via
    the Omnibox. This time blocks the start of the navigation and is included in
    InputToNavigationStart metrics, but not in NavigationTo* metrics.

    NOTE: there's a possible gap in data between 2024-04-28 and 2024-08-16.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SuggestionList.LayoutTime2" units="ms"
    expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records thread time spent on positioning all suggestions on screen. This
    histogram is recorded every time a new suggestion list is received.

    Smaller values are indicative of better performance, but the time taken
    varies considerably based on, e.g. whether new views need to be inflated and
    the number of suggestions being rendered.

    This metric is reported for all users and uses 100microsecond granularity.

    When comparing Durations measured here, also compare Total Counts for a
    correct indication of how frequently views are laid out and how the overall
    time spent performing layout operation changed.

    This histogram is related to Android.Omnibox.SuggestionView.Reused,
    Android.Omnibox.SuggestionList.MeasureTime2,
    Android.Omnibox.SuggestionView.CreateTime2.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SuggestionList.LayoutTime3" units="ms"
    expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Replacement for Android.Omnibox.SuggestionList.LayoutTime2 that uses wall
    time instead of thread time. Records wall time spent positioning suggestion
    view onto the screen. This histogram is recorded every time a new suggestion
    list is received, which is typically multiple times per keystroke.

    This metric is reported for all users and uses 1ms granularity.

    When comparing durations measured here, also compare Total Counts for a
    correct indication of how frequently views are laid out and how the overall
    time spent performing layout operation changed.

    This histogram is related to Android.Omnibox.SuggestionList.LayoutTime2,
    Android.Omnibox.SuggestionView.CreateTime3, and
    Android.Omnibox.SuggestionList.MeasureTime3
  </summary>
</histogram>

<histogram name="Android.Omnibox.SuggestionList.MeasureTime2" units="ms"
    expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records time spent on measuring all suggestions ahead of positioning them on
    screen. This histogram is recorded every time a new suggestion list is
    received.

    Values recorded here should generally aim to be small, likely below 2ms
    range. Higher values are an indicator of a performance problem.

    Measure operation should take place just once when suggestion view is shown
    for the first time.

    This metric is reported for all users and uses 100microsecond granularity.

    When comparing Durations measured here, also compare Total Counts for a
    correct indication of how frequently views are measured and how the overall
    time spent measuring views changed.

    This histogram is related to Android.Omnibox.SuggestionView.Reused,
    Android.Omnibox.SuggestionList.LayoutTime2,
    Android.Omnibox.SuggestionView.CreateTime2.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SuggestionList.MeasureTime3" units="ms"
    expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Replacement for Android.Omnibox.SuggestionList.MeasureTime2 that uses wall
    time instead of thread time. Records wall time spent on measuring all
    suggestions ahead of positioning them on screen. This histogram is recorded
    every time a new suggestion list is received, which is typically multiple
    times per keystroke.

    This metric is reported for all users and uses 1ms granularity.

    When comparing durations measured here, also compare Total Counts for a
    correct indication of how frequently views are laid out and how the overall
    time spent performing layout operation changed.

    This histogram is related to Android.Omnibox.SuggestionList.MeasureTime2,
    Android.Omnibox.SuggestionView.CreateTime3, and
    Android.Omnibox.SuggestionList.LayoutTime3
  </summary>
</histogram>

<histogram name="Android.Omnibox.SuggestionList.RequestToUiModel.First"
    units="ms" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records time elapsed between requesting the suggestions and converting the
    first (synchronous) set of received suggestions to the UI model.

    For the complete, asynchronous iteration see the
    Android.Omnibox.SuggestionList.RequestToUiModel.Last metric.

    This metric is recorded exactly once per request, including the zero-prefix
    suggestions request.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SuggestionList.RequestToUiModel.Last"
    units="ms" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records time elapsed between requesting the suggestions and converting the
    final (asynchronous) set of received suggestions to the UI model.

    For the short, synchronous iteration see the
    Android.Omnibox.SuggestionList.RequestToUiModel.First metric.

    This metric is recorded at most once per request, including the zero-prefix
    suggestions request. The metric will not be emitted if the current
    Autocomplete cycle was canceled by the user - either by refining the input
    in the omnibox, or by ending the interaction with the Omnibox.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SuggestionsListScrolled.{PageClass}"
    enum="Boolean" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For every interaction with the Omnibox, this metric records whether the user
    scrolled the omnibox while exploring suggestions on {PageClass}.

    This is recorded once per Omnibox interaction, regardless of whether the
    User chooses to navigate somewhere or abandons the interaction.
  </summary>
  <token key="PageClass">
    <variant name="NTP" summary="the New Tab Page"/>
    <variant name="Other" summary="a website"/>
    <variant name="SRP" summary="the Search Results Page"/>
    <variant name="Widget" summary="the Widget Search Activity"/>
  </token>
</histogram>

<histogram name="Android.Omnibox.SuggestionView.CreatedType"
    enum="OmniboxSuggestionUiType" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the type of suggestion that was reused with the help of
    RecyclerView.

    This histogram drives OmniboxSuggestionsDropdown optimization, helping us
    find the balance between the volume of suggestions and amount of memory we
    delegate to re-use the pre-constructed suggestion views.

    Along with the Android.Omnibox.SuggestionView.ReusedType, the two histograms
    paint the picture of which suggestions need to be created more often than
    others vs which suggestions have more capacity than is actually needed.
    Higher reuse means lower latency at the expense of slight increase of memory
    consumption.

    This histogram is related to Android.Omnibox.SuggestionView.ReusedType.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SuggestionView.CreateTime2" units="ms"
    expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records time spent creating a single suggestion.

    Values recorded here should generally aim to be small, below 1ms range.
    Higher values may be an indicator of a performance problem.

    This metric is reported for all users and uses 100microsecond granularity.

    When comparing Durations measured here, also compare Total Counts for a
    correct indication of how frequently views are created and how the overall
    time spent creating views changed.

    This histogram is related to Android.Omnibox.SuggestionList.LayoutTime2,
    Android.Omnibox.SuggestionList.MeasureTime2,
    Android.Omnibox.SuggestionView.Reused.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SuggestionView.CreateTime3" units="ms"
    expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Replacement for Android.Omnibox.SuggestionList.CreateTime2 that uses wall
    time instead of thread time. Records wall time spent on creating a single
    suggestion view. This histogram is recorded every time a new view is
    created, but not when a view is recycled.

    This metric is reported for all users and uses 1ms granularity.

    When comparing Durations measured here, also compare Total Counts for a
    correct indication of how frequently views are created and how the overall
    time spent creating views changed.

    This histogram is related to Android.Omnibox.SuggestionView.CreateTime2,
    Android.Omnibox.SuggestionList.LayoutTime3, and
    Android.Omnibox.SuggestionList.MeasureTime3
  </summary>
</histogram>

<histogram name="Android.Omnibox.SuggestionView.ReusedType"
    enum="OmniboxSuggestionUiType" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the type of suggestion that was reused with the help of
    RecyclerView.

    This histogram drives OmniboxSuggestionsDropdown optimization, helping us
    find the balance between the volume of suggestions and amount of memory we
    delegate to re-use the pre-constructed suggestion views.

    Along with the Android.Omnibox.SuggestionView.CreatedType, the two
    histograms paint the picture of which suggestions need to be created more
    often than others vs which suggestions have more capacity than is actually
    needed. Higher reuse means lower latency at the expense of slight increase
    of memory consumption.

    This histogram is related to Android.Omnibox.SuggestionView.CreatedType.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SuggestionView.SessionViewsCreated"
    units="count" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records number of views created from the moment the Omnibox was focused,
    until the interaction was completed, whether the user navigated somewhere or
    canceled the interaction.

    Values recorded here tell how efficiently the view creation and re-use
    works, highlighting possible issues related to unusually frequent view
    creation; the number of views created should be low and not exceed the sum
    of all the views recycled by HistogramRecordingRecycledViewPool component.
    Any deviation from this are a signal that the RecycledViewPool limits are
    not optimal.

    When observing a higher than expected number of created views, consult the
    Android.Omnibox.SuggestionView.CreatedType to identify view type that is not
    correctly captured and update the limits of the
    HistogramRecordingRecycledViewPool.

    This histogram is related to Android.Omnibox.SuggestionView.CreatedType,
    Android.Omnibox.SuggestionView.SessionViewsReused.
  </summary>
</histogram>

<histogram name="Android.Omnibox.SuggestionView.SessionViewsReused" units="%"
    expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Captures the efficiency of the view re-use from the moment the Omnibox was
    focused, until the interaction was completed, whether the user navigated
    somewhere or canceled the interaction.

    Values captured here directly reflect the efficiency of recycled view pool
    tuning, with the following caveats:

    * short sessions (omnibox focused and defocused, with no inputs) will report
    efficiency of 0% (because all the views had to be created and no views were
    available for re-use).

    * this metric will never truly capture 100% effectiveness, because during
    every input session some views will have to be created.

    The captured value should be at or above 90% re-use. Lower re-use rates may
    be an indication of a possible issue.

    This histogram is related to
    Android.Omnibox.SuggestionView.SessionViewsCreated.
  </summary>
</histogram>

<histogram name="Android.Omnibox.UsedSuggestionFromCache" enum="Boolean"
    expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether users interacted with suggestion originating from Java
    cache.

    Android presents the Cached suggestions for a brief time before the Native
    libraries become available, replacing these with a fresh content as soon as
    Autocomplete subsystem serves them. This histogram records all the events
    where the cached suggestions were shown for an extended period of time -
    long enough for the User to identify and interact with a suggestion of their
    choice.

    Recorded every time the User initiates navigation using the Omnibox or the
    Suggestions list, regardless of context.

    Note: starting Chrome 118 this is recorded for every Autocomplete action
    requiring native AutocompleteMatch instance.
  </summary>
</histogram>

<histogram
    name="Android.Omnibox.{AndroidSearchPrefetch}.GeoLocationHeaderTime.{AndroidNavigationOrSuggestionPrefetch}"
    units="ms" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    {AndroidSearchPrefetch}

    The amount of time it takes to get the Geo Location header for a prefetch
    request.

    {AndroidNavigationOrSuggestionPrefetch}
  </summary>
  <token key="AndroidSearchPrefetch" variants="AndroidSearchPrefetch"/>
  <token key="AndroidNavigationOrSuggestionPrefetch"
      variants="AndroidNavigationOrSuggestionPrefetch"/>
</histogram>

<histogram
    name="Android.Omnibox.{AndroidSearchPrefetch}.NumPrefetchesStartedInOmniboxSession.{AndroidNavigationPrefetchOnly}"
    units="count" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    {AndroidSearchPrefetch}

    The number of prefetches that were successfully started from touch down
    events. This is recorded once per omnibox session.

    {AndroidNavigationPrefetchOnly}
  </summary>
  <token key="AndroidSearchPrefetch" variants="AndroidSearchPrefetch"/>
  <token key="AndroidNavigationPrefetchOnly"
      variants="AndroidNavigationPrefetchOnly"/>
</histogram>

<histogram
    name="Android.Omnibox.{AndroidSearchPrefetch}.TouchDownPrefetchResult.{AndroidNavigationPrefetchOnly}"
    enum="SearchPrefetchTouchDownPrefetchResult" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    {AndroidSearchPrefetch}

    Whether or not the last prefetch started from the touch down trigger was
    used for a navigation. This is recorded once per omnibox session.

    {AndroidNavigationPrefetchOnly}
  </summary>
  <token key="AndroidSearchPrefetch" variants="AndroidSearchPrefetch"/>
  <token key="AndroidNavigationPrefetchOnly"
      variants="AndroidNavigationPrefetchOnly"/>
</histogram>

<histogram
    name="Android.Omnibox.{AndroidSearchPrefetch}.TouchDownProcessTime.{AndroidNavigationPrefetchOnly}"
    units="ms" expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    {AndroidSearchPrefetch}

    The amount of time it takes to process a touch down event for Search
    Prefetch. This includes cases where: 1) the event is filtered out in the
    Java code (native is not initialized, the limit for preetches in an omnibox
    session is reached, etc.), 2) the event is sent to native but the prefetch
    is not started, and 3) the event is sent to native and the prefetch request
    is started.

    {AndroidNavigationPrefetchOnly}
  </summary>
  <token key="AndroidSearchPrefetch" variants="AndroidSearchPrefetch"/>
  <token key="AndroidNavigationPrefetchOnly"
      variants="AndroidNavigationPrefetchOnly"/>
</histogram>

<histogram name="Android.OmniboxFocusReason" enum="OmniboxFocusReason"
    expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Records how the omnibox was focused.</summary>
</histogram>

<histogram name="Android.OpenHistoryFromMenu.PerProfileType"
    enum="BrowserProfileType" expires_after="2023-01-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the clicks on History menu item separately for each profile type in
    Android.
  </summary>
</histogram>

<histogram name="Android.OverscrollFromBottom.BottomControlsStatus"
    enum="BottomControlsStatus" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/ui/android/edge_to_edge/OWNERS</owner>
  <summary>
    Records when user starts a overscroll from the bottom on a tab, the status
    of the bottom browser controls. This only records when the content is
    scrollable, and the scroll starts from the bottom of the content page.
  </summary>
</histogram>

<histogram name="Android.PackageStats.CacheSize" units="MB"
    expires_after="2024-05-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the size of the user's cache at startup on Android O and above.
  </summary>
</histogram>

<histogram name="Android.PackageStats.CodeSize" units="MB"
    expires_after="2024-05-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    At startup, records the space on disk taken by Chrome application including
    APK resources, compiled libraries, and extracted native code. Only recorded
    for Android O and above.
  </summary>
</histogram>

<histogram name="Android.PackageStats.DataSize" units="MB"
    expires_after="2024-05-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the size of the user's data directory at startup on Android O and
    above. Does not include cache size.
  </summary>
</histogram>

<histogram name="Android.PageSummary.DownloadEvents"
    enum="PageSummaryModelDownloadEvents" expires_after="2024-06-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records events related to downloading the page summary model. Only recorded
    when the PageInfoSharing feature is enabled.
  </summary>
</histogram>

<histogram name="Android.PageSummary.ModelResult"
    enum="PageSummaryModelExecutionResults" expires_after="2024-06-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Records the result of executing the page summary model.</summary>
</histogram>

<histogram name="Android.PageSummary.ModelStateOnStartup"
    enum="PageSummaryModelState" expires_after="2024-06-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the availability of the page summary model on startup. Only recorded
    when the PageInfoSharing feature is enabled.
  </summary>
</histogram>

<histogram name="Android.PageSummary.PercentageOfInputUsed" units="%"
    expires_after="2024-06-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the percentage of input that the model used to generate a summary.
  </summary>
</histogram>

<histogram name="Android.PageSummary.Share.IsVisibleInShareSheet"
    enum="PageSummaryShareSheetVisibility" expires_after="2025-01-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records if the &quot;Generate summary&quot; option is available when sharing
    a URL, and if not it includes the reason why. Only recorded when the
    PageInfoSharing feature is enabled.
  </summary>
</histogram>

<histogram name="Android.PageSummary.StartToEndLatency" units="ms"
    expires_after="2024-06-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the total amount of time between the start and end of model
    execution for the page summary model.
  </summary>
</histogram>

<histogram name="Android.PageSummary.StartToStreamLatency" units="ms"
    expires_after="2024-06-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the amount of time between the start of execution and the start of
    result streaming for the page summary model.
  </summary>
</histogram>

<histogram name="Android.PageSummary.StreamToEndLatency" units="ms"
    expires_after="2024-06-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the amount of time between the start of result streaming and the end
    of model execution for the page summary model.
  </summary>
</histogram>

<histogram name="Android.PartnerCustomization.HomepageCustomizationOutcome"
    enum="PartnerCustomizationsHomepage" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the outcome of initial Tab creation relative to Homepage
    customization. The outcome characterizes the initial Tab focusing on an NTP
    and whether it was created correctly. When a custom Homepage was created we
    only record whether it was a Partner Homepage or some other Homepage. At
    this time we don't differentiate between User and Policy Homepages or record
    whether any Homepage was correctly created when customization changes.
    Recorded at the end of customization or initial Tab creation, whichever is
    last.
  </summary>
</histogram>

<histogram
    name="Android.PartnerCustomization.HomepageCustomizationOutcome.{CustomizationDelegate}"
    enum="PartnerCustomizationsHomepage" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the outcome of initial Tab creation relative to Homepage
    customization using delegate &quot;{CustomizationDelegate}&quot;. The
    outcome characterizes the initial Tab focusing on an NTP and whether it was
    created correctly. When a custom Homepage was created we only record whether
    it was a Partner Homepage or some other Homepage. At this time we don't
    differentiate between User and Policy Homepages or record whether any
    Homepage was correctly created when customization changes. Recorded at the
    end of customization or initial Tab creation, whichever is last.
  </summary>
  <token key="CustomizationDelegate" variants="CustomizationDelegate"/>
</histogram>

<histogram
    name="Android.PartnerCustomization.HomepageCustomizationOutcomeNotCached.{CustomizationDelegate}"
    enum="PartnerCustomizationsHomepage" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the outcome of initial Tab creation relative to Homepage
    customization using delegate &quot;{CustomizationDelegate}&quot; when the
    Homepage was not previously cached. The outcome characterizes the initial
    Tab focusing on an NTP and whether it was created correctly. When a custom
    Homepage was created we only record whether it was a Partner Homepage or
    some other Homepage. At this time we don't differentiate between User and
    Policy Homepages or record whether any Homepage was correctly created when
    customization changes. Recorded at the end of customization or initial Tab
    creation, whichever is last.
  </summary>
  <token key="CustomizationDelegate" variants="CustomizationDelegate"/>
</histogram>

<histogram name="Android.PartnerCustomization.TaskCompletion"
    enum="PartnerTaskCompletion" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the outcome of the async initialization task for the partner browser
    customization. This tells us how often the delegate is able to provide
    correct data, is canceled due to timeout, and whether exceptions were
    thrown, etc. Note that the correct data may actually arrive too late to be
    used because Chrome waits only 1/2 second before creating an initial tab,
    but it will be recorded here regardless. This logging of Completed-too-late
    is only done by the Chrome App, but all other values are logged for CCT as
    well. Recorded when the async task is completed or canceled during Chrome's
    start up.
  </summary>
</histogram>

<histogram
    name="Android.PartnerCustomization.TaskCompletion.{CustomizationDelegate}"
    enum="PartnerTaskCompletion" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the outcome of the async initialization task for the partner browser
    customization. This tells us how often the delegate
    &quot;{CustomizationDelegate}&quot; is able to provide correct data, is
    canceled due to timeout, and whether exceptions were thrown, for this
    delegate. Note that the correct data may actually arrive too late to be used
    because Chrome waits only 1/2 second before creating an initial tab, but it
    will be recorded here regardless. This logging of Completed-too-late is only
    done by the Chrome App, but all other values are logged for CCT as well.
    Recorded when the async task is completed or canceled during Chrome's start
    up.
  </summary>
  <token key="CustomizationDelegate" variants="CustomizationDelegate"/>
</histogram>

<histogram
    name="Android.PartnerCustomization.TaskCompletionNotCached.{CustomizationDelegate}"
    enum="PartnerTaskCompletion" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Warning, this histogram may have a data gap since it was expired on
    2023-12-12 and reenabled around 2024-03-01. Records the outcome of the async
    initialization task for the partner browser customization, when there is not
    yet any cached Homepage (likely Chrome's first launch). This tells us how
    often the delegate &quot;{CustomizationDelegate}&quot; is able to provide
    correct data, is canceled due to timeout, and whether exceptions were
    thrown, for this delegate. Note that the correct data may actually arrive
    too late to be used because Chrome waits only 1/2 second before creating an
    initial tab, but it will be recorded here regardless. This logging of
    Completed-too-late is only done by the Chrome App, but all other values are
    logged for CCT as well. Recorded when the async task is completed or
    canceled during Chrome's start up when no homepage is already cached.
  </summary>
  <token key="CustomizationDelegate" variants="CustomizationDelegate"/>
</histogram>

<histogram
    name="Android.PartnerCustomization.TryFailedDuration.{CustomizationDelegate}"
    units="ms" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the amount of time it took for the delegate
    &quot;{CustomizationDelegate}&quot; to run in the async task that does
    partner customization. Recorded when the task completes but was unable to
    use the delegate for some reason. Trying to use the PreloadApk delegate is
    only done when actually needed so these numbers should reflect actual usage
    attempts.
  </summary>
  <token key="CustomizationDelegate" variants="CustomizationDelegate"/>
</histogram>

<histogram
    name="Android.PartnerCustomization.TrySucceededDuration.{CustomizationDelegate}"
    units="ms" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the amount of time it took for the delegate
    &quot;{CustomizationDelegate}&quot; to run in the async task that does
    partner customization. Recorded when the task completes successfully and a
    delegate providing customizations is found. Trying to use the PreloadApk
    delegate is only done when actually needed so these numbers should reflect
    actual usage attempts.
  </summary>
  <token key="CustomizationDelegate" variants="CustomizationDelegate"/>
</histogram>

<histogram name="Android.PartnerCustomization.Usage"
    enum="PartnerCustomizationUsage" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records which customization usage is being invoked, at the time it is
    requested. The possible usages include a custom Homepage URL, suppressing
    incognito, etc.
  </summary>
</histogram>

<histogram name="Android.PartnerHomepageCustomization.Delegate2"
    enum="PartnerCustomizationProviderDelegate" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records which delegate will be used to provide the home page URL that is
    needed for a custom provider's customization. Recorded at startup on
    Android.
  </summary>
</histogram>

<histogram name="Android.Pdf.DownloadUrlDecoded" enum="Boolean"
    expires_after="2024-10-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether the pdf download url is successfully decoded. This is
    recorded when re-download is needed for pdf pages (e.g. Chrome restart or
    navigate back/forward).
  </summary>
</histogram>

<histogram name="Android.Pdf.DownloadUrlEncoded" enum="Boolean"
    expires_after="2024-10-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether the pdf download url is successfully encoded. This is
    recorded when the pdf download starts.
  </summary>
</histogram>

<histogram name="Android.Pdf.IsFrozenWhenDisplayed" enum="Boolean"
    expires_after="2024-10-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether the pdf native page is frozen before the tab is displayed,
    such as being selected from tab switcher or tab strip. Used to determine how
    often the pdf native page is frozen.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.BitmapScalerTask" units="ms"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the amount of time the BitmapScaler spent scaling a bitmap. Note:
    This metric was not logged in June 2023.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.CacheHits" units="Hits"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the total number of images served from the high-res cache during
    the lifetime of the dialog. Note: This metric was not logged in June 2023.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.DecodeRequests" units="Hits"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the total number of images sent for decoding during the lifetime of
    the dialog. Note: This metric was not logged in June 2023.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.DecoderHostFailureOutOfMemory" units="%"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The percentage of out-of-memory decoding failures, per batch of photos (not
    videos) decoded. Intended to help identify if there are devices where
    decoding fails 100% of the time. Be wary at looking at other numbers in the
    histogram, as a value emitted at, say, 50% may represent one failure in a
    two-item decoding or 50 failures in a hundred-item decoding. These are
    qualitatively different experiences for a user. Note: This metric was not
    logged in June 2023.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.DecoderHostVideoFileError" units="%"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The percentage of file error decoding failures, per batch of videos (not
    photos) decoded. Intended to help identify if there are devices where
    decoding fails 100% of the time. Be wary at looking at other numbers in the
    histogram, as a value emitted at, say, 50% may represent one failure in a
    two-item decoding or 50 failures in a hundred-item decoding. These are
    qualitatively different experiences for a user. Note: This metric was not
    logged in June 2023.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.DecoderHostVideoIoError" units="%"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The percentage of IO error decoding failures, per batch of videos (not
    photos) decoded. Intended to help identify if there are devices where
    decoding fails 100% of the time. Be wary at looking at other numbers in the
    histogram, as a value emitted at, say, 50% may represent one failure in a
    two-item decoding or 50 failures in a hundred-item decoding. These are
    qualitatively different experiences for a user. Note: This metric was not
    logged in June 2023.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.DecoderHostVideoRuntimeError" units="%"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The percentage of runtime error decoding failures, per batch of videos (not
    photos) decoded. Intended to help identify if there are devices where
    decoding fails 100% of the time. Be wary at looking at other numbers in the
    histogram, as a value emitted at, say, 50% may represent one failure in a
    two-item decoding or 50 failures in a hundred-item decoding. These are
    qualitatively different experiences for a user. Note: This metric was not
    logged in June 2023.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.DecoderHostVideoUnknownError" units="%"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The percentage of unknown decoding error failures, per batch of videos (not
    photos) decoded. Intended to help identify if there are devices where
    decoding fails 100% of the time. Be wary at looking at other numbers in the
    histogram, as a value emitted at, say, 50% may represent one failure in a
    two-item decoding or 50 failures in a hundred-item decoding. These are
    qualitatively different experiences for a user. Note: This metric was not
    logged in June 2023.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.DialogAction"
    enum="PhotoPickerDialogAction" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records which action the user takes in the PhotoPickerDialog.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.EnumeratedFiles" units="Files"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the total number of files returned from the enumeration operation.
    Measured once at the end of the enumeration operation. Note: This metric was
    not logged in June 2023.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.EnumeratedRate"
    units="Files per 10th of a second" expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the enumeration rate (files per tenths of a second). Measured once
    at the end of the enumeration operation. Note: This metric was not logged in
    June 2023.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.EnumerationTime" units="ms"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the amount of time the BitmapScaler spent enumerating files on
    disk. Measured once at the end of the enumeration operation. Note: This
    metric was not logged in June 2023.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.ExifOrientation" enum="ExifOrientation"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether the EXIF orientation directive is present and what it is set
    to. Collected once per decoded image, but only on Android N and above (and
    when no IO error occurs). Note: This metric was not logged in June 2023.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.ImageByteCount" units="KB"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the byte count of a decoded image. Only recorded on successful
    decodes. Note: This metric was not logged in June 2023.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.ImageDecodeTime" units="ms"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the amount of time it takes the decoder to decode one image. Only
    recorded on successful decodes. Note: This metric was not logged in June
    2023.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.RequestProcessTime" units="ms"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the amount of time it takes to process one image decode request
    (not video) end to end (RPC and actual decoding of the bits by utility
    process). Recorded whether or not the RPC/decode request was successful.
    Note: This metric was not logged in June 2023.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.RequestProcessTimeAnimation" units="ms"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the amount of time it takes to decode all the frames needed to show
    the animation -- end to end (RPC and actual decoding of the bits by utility
    process). Recorded whether or not the RPC/decode request was successful.
    Note: This metric was not logged in June 2023.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.RequestProcessTimeThumbnail" units="ms"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the amount of time it takes to process one video frame request end
    to end (RPC and actual decoding of the bits by utility process). Recorded
    whether or not the RPC/decode request was successful. Note: This metric was
    not logged in June 2023.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.UpscaleLowResBitmap" units="ms"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the amount of time it takes to upscale a bitmap from the low-res
    cache. Recorded only when there a cache miss from the high-res bitmap but a
    cache hit from the low-res (placeholder) bitmap. Note: This metric was not
    logged in June 2023.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.VideoByteCount" units="KB"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the byte count of the first video thumbnail. Only recorded on
    successful decodes. Note: This metric was not logged in June 2023.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.VideoDecodeTimeAnimation" units="ms"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the amount of time it takes the decoder to decode all the frames
    needed to display an animated thumbnail. Only recorded on successful
    decodes. Note: This metric was not logged in June 2023.
  </summary>
</histogram>

<histogram name="Android.PhotoPicker.VideoDecodeTimeThumbnail" units="ms"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the amount of time it takes the decoder to decode the first frame
    of a video. Only recorded on successful decodes. Note: This metric was not
    logged in June 2023.
  </summary>
</histogram>

<histogram name="Android.PlayServices.ShortVersion" enum="GmsShortVersionCode"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The short version code for Google Play Services in a format YYWWV, where YY
    is year, WW is week and V is version (0 for beta releases and 1 for stable
    release). This metric is logged with every UMA upload. 0 is recorded when
    GMS Core is not installed, 1 when GMS Core version can't be parsed and 2
    when GMS Core version doesn't fit into defined range.
  </summary>
</histogram>

<histogram name="Android.PlayServices.Version" units="versioncode"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The version code for Google Play Services if it is installed on the device,
    or 0 if it is not. Recorded during deferred startup.
  </summary>
</histogram>

<histogram name="Android.PrepareMenu.OpenWebApkVisibilityCheck" units="ms"
    expires_after="2024-06-01">
  <owner>[email protected]</owner>
  <owner>src/chrome/android/webapk/OWNERS</owner>
  <summary>
    Measures the amount of time spent querying for whether a WebAPK is already
    installed.
  </summary>
</histogram>

<histogram name="Android.RequestDesktopSite.Changed" enum="SiteLayout"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the changes of request desktop site content settings. This is
    recorded when a user manually switches the global setting between
    mobile/desktop.
  </summary>
</histogram>

<histogram name="Android.RequestDesktopSite.DomainSettingChanged"
    enum="Boolean" expires_after="2024-10-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the new domain level Request Desktop Setting when changed. False
    means Mobile site while true means Desktop site. This is recorded when a
    user manually edits a domain level Request Desktop Setting from the site
    settings exception list.
  </summary>
</histogram>

<histogram name="Android.RequestDesktopSite.SubDomainSettingChanged"
    enum="Boolean" expires_after="2024-10-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the new subdomain level Request Desktop Setting when changed. False
    means Mobile site while true means Desktop site. This is recorded when a
    user manually edits a subdomain level Request Desktop Setting from the site
    settings exception list.
  </summary>
</histogram>

<histogram name="Android.RequestDesktopSite.UseDesktopUserAgent" enum="Boolean"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records if Chrome uses the desktop site user agent to request websites. This
    is recorded when each tab loads a new url or reloads a url.
  </summary>
</histogram>

<histogram name="Android.RequestDesktopSite.UserSwitchToDesktop" enum="Boolean"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records if a user switched to request desktop site from the app menu. This
    is recorded when a user manually switches sites between the desktop/mobile.
  </summary>
</histogram>

<histogram
    name="Android.RequestDesktopSite.UserSwitchToDesktop.DomainSettingAdded"
    enum="Boolean" expires_after="2024-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the new domain level Request Desktop Setting when added. False means
    Mobile site while true means Desktop site. This is recorded when a user
    manually adds a domain level Request Desktop Setting from the Add site
    dialog in Site settings.
  </summary>
</histogram>

<histogram
    name="Android.RequestDesktopSite.UserSwitchToDesktop.SubDomainSettingAdded"
    enum="Boolean" expires_after="2024-10-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the new subdomain level Request Desktop Setting when added. False
    means Mobile site while true means Desktop site. This is recorded when a
    user manually adds a subdomain level Request Desktop Setting from the Add
    site dialog in Site settings.
  </summary>
</histogram>

<histogram name="Android.RequestDesktopSite.WindowSettingChanged"
    enum="Boolean" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the new Request Desktop window setting when changed. If the setting
    is true, Chrome will request mobile view when the window is narrow. This is
    recorded when a user manually changes the Request Desktop window setting
    from the site settings.
  </summary>
</histogram>

<histogram name="Android.RestoreResult" enum="AndroidRestoreResult"
    expires_after="2025-01-14">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether Chrome tried to restore its settings from a previous device or
    installation, and what happened when it did. Only recorded on first run.
  </summary>
</histogram>

<histogram name="Android.RestoreTabsOnFRE.DeviceRestoredFrom"
    enum="RestoreTabsOnFREDeviceRestoredFrom" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether the user restored tabs from the non default selected device.
    Recorded only if the user has multiple synced devices, and once per user
    interaction with the entire workflow on restore.
  </summary>
</histogram>

<histogram name="Android.RestoreTabsOnFRE.EligibleTabsForRestoreCount"
    units="count" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The total count of tabs eligible to be restored from the selected device.
    Recorded once per user attempt to restore tabs from the selected device.
  </summary>
</histogram>

<histogram name="Android.RestoreTabsOnFRE.PromoShowResult2"
    enum="RestoreTabsOnFREPromoShowResult" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The outcome of the promo show attempt from the RestoreTabsFeatureHelper.
    Recorded once per user attempt to show the promo after first run experience.
  </summary>
</histogram>

<histogram name="Android.RestoreTabsOnFRE.RestoredTabsResult"
    enum="RestoreTabsOnFRERestoredTabsResult" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The portion of tabs the user ended up restoring out of the maximum possible
    amount. Recorded once per user attempt to restore tabs from the selected
    device.
  </summary>
</histogram>

<histogram name="Android.RestoreTabsOnFRE.ResultActionFirstShow2"
    enum="RestoreTabsOnFREResultAction" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The result of the workflow action taken on the RestoreTabs promo. Recorded
    once per user interaction with the promo when shown the first time.
  </summary>
</histogram>

<histogram name="Android.RestoreTabsOnFRE.ResultActionSecondShow2"
    enum="RestoreTabsOnFREResultAction" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The result of the workflow action taken on the RestoreTabs promo. Recorded
    once per user interaction with the promo when shown the second time.
  </summary>
</histogram>

<histogram name="Android.RestoreTabsOnFRE.SyncedDevicesCount" units="count"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The total count of synced devices on the user logged in account. Recorded
    once per user interaction with the entire workflow.
  </summary>
</histogram>

<histogram name="Android.RestoreTabsOnFRE.TabsRestoredCount" units="count"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The total count of tabs that were actually restored from the selected
    device. Recorded once per user attempt to restore tabs from the selected
    device.
  </summary>
</histogram>

<histogram name="Android.RestoreTabsOnFRE.TabsRestoredPercentage" units="%"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The ratio between the number of tabs that the user is eligible to restore
    and the number of tabs that were actually restored, from the currently
    selected device calculated as a percentage. Recorded once per user attempt
    to restore tabs from the selected device.
  </summary>
</histogram>

<histogram name="Android.SearchEngineChoice.ChosenSearchEngine"
    enum="OmniboxSearchEngineType" expires_after="2023-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The type of the search engine chosen by the user in Search Engine Choice
    flow.
  </summary>
</histogram>

<histogram name="Android.SearchEngineChoice.Events"
    enum="AndroidSearchEngineChoiceEvents" expires_after="2023-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts occurences of various events related to Search Engine Choice feature.
  </summary>
</histogram>

<histogram name="Android.SearchEngineChoice.EventsV2"
    enum="AndroidSearchEngineChoiceEventsV2" expires_after="2024-05-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts occurences of various events related to Search Engine Choice V2
    feature.
  </summary>
</histogram>

<histogram name="Android.SearchEngineChoice.SearchEngineBeforeChoicePrompt"
    enum="OmniboxSearchEngineType" expires_after="2025-01-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The type of the search engine used before Search Engine Choice flow was
    presented.
  </summary>
</histogram>

<histogram name="Android.SeccompStatus.RendererSandbox"
    enum="AndroidSeccompSandboxStatus" expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <summary>
    Reports the status of the seccomp-bpf sandbox in renderer processes.
    Anything other than &quot;Sandbox Engaged&quot; indicates the sandbox is not
    turned on. See https://crbug.com/477049.
  </summary>
</histogram>

<histogram name="Android.SelectFileDialogContentSelected"
    enum="SelectFileDialogContent" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the types of content selected for upload, focusing mostly on image
    and video types and how they were determined (asking ContentResolver for the
    MIME type or going by extension). Recorded when user uploads files to a
    website (once per item uploaded).
  </summary>
</histogram>

<histogram name="Android.SelectFileDialogImgCount" units="images"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of images selected in either the new Photo Picker or the
    standard Android file picker. Note: Only recorded in situations determined
    to warrant the new Photo Picker (not, for example, if mixed content, like
    images and text files, was requested).
  </summary>
</histogram>

<histogram name="Android.SelectFileDialogScope" enum="SelectFileDialogScope"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the scope of accepted content for a select file dialog when shown by
    a Web developer.
  </summary>
</histogram>

<histogram name="Android.SelectFileDialogUploadMethods"
    enum="SelectFileDialogUploadMethods" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the method of upload for files uploaded from Chrome via the
    SelectFileDialog, focusing mostly on image and video types. Recorded when
    user uploads files to a website (once per item uploaded).
  </summary>
</histogram>

<histogram
    name="Android.ServiceTracingProxyProvider.SuccessesOutOfInitialForty"
    units="count" expires_after="2024-12-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When the number of attempts to proxy Binder services reaches 40, records the
    number of successful proxy installations.

    Recorded only on channels: Dev, Canary, Beta.
  </summary>
</histogram>

<histogram name="Android.ShowSelectionMenuSourceType" enum="MenuSourceType"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the menu source type when a selection menu is shown. Android only.
  </summary>
</histogram>

<histogram name="Android.SpareTab.FinalStatus" enum="SpareTabFinalStatus"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the final status of the spare tab, for example, if the spare tab is
    used, destroyed, crashed, etc. This is recorded when the spare tab is used
    for navigation or destroyed. It is only recorded when a spare tab is
    created, and it is only recorded once per spare tab.
  </summary>
</histogram>

<histogram name="Android.StrictMode.OverrideUrlLoadingTime" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the amount of time due to a StrictMode violation from calling out
    to Android activity manager.
  </summary>
</histogram>

<histogram name="Android.StrictMode.ThumbnailCacheDir" units="ms"
    expires_after="M85">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the amount of time due to a StrictMode violation from fetching for
    the thumbnail cache directory.
  </summary>
</histogram>

<histogram name="Android.Survey.DownloadRequested2" enum="BooleanRequested"
    expires_after="2024-11-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when a survey download is requested. If the download has been
    attemped, but the download request is not sent (e.g. user is not signed-in),
    'not requested' will be recorded.
  </summary>
</histogram>

<histogram name="Android.Survey.DownloadResponseCode2"
    enum="SurveyDownloadResponseCodes2" expires_after="2024-11-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The result of the completed survey download request. A survey download is
    initiated on ChromeTabbedActivity cold start iff the user passes a series of
    eligibility checks. Recorded when a valid survey response is received.
    Android only.
  </summary>
</histogram>

<histogram name="Android.Survey.ShowSurveyStatus"
    enum="SurveyPresentationStatusCode" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The result of the request to show the survey after it has been downloaded.
    This request is initiated when the user accepts to take the survey on the
    survey prompt. This histogram is agnostic to the content of the survey,
    which is configured server side, and will be recorded for all surveys shown
    in Chrome. Android only.
  </summary>
</histogram>

<histogram name="Android.Survey.SurveyCompleted" enum="BooleanCompleted"
    expires_after="2024-11-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether a user completed the survey after it was presented. This histogram
    is agnostic to the content of the survey, which is configured server side,
    and will be recorded for all surveys shown in Chrome. Android only.
  </summary>
</histogram>

<histogram name="Android.Survey.SurveyFilteringResults"
    enum="SurveyFilteringResult" expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The result of the survey filtering process. Each enum represents a different
    filter that caught the user. This is recorded on cold starts when we check
    if a user qualifies for a survey.
  </summary>
</histogram>

<histogram name="Android.Sync.ActualSyncedTabCountPercentage"
    units="% of tab count" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the percentage of sync-eligible tabs that are in local sync storage.
    This is recorded after session restore is completed and local data is
    reconciled.
  </summary>
</histogram>

<histogram name="Android.Tab.BackgroundColorChange"
    enum="BackgroundColorChangeOrigin" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records a change in the background color of a tab resulting in an update to
    tab observers. This background color change may be due to a change in web
    content or web content background, a custom view being set, or a native page
    being shown or hidden. A sharp increase in such updates may have performance
    implications - measuring an increase in such updates is particularly helpful
    for the OSNavBarMatchesTab feature, which has observed some performance
    regressions.
  </summary>
</histogram>

<histogram name="Android.Tab.BackgroundColorChange.PreOptimization"
    enum="BackgroundColorChangeOrigin" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records a potential change in the background color of a tab. This potential
    change may or may not be communicated to observers, as an optimization will
    attempt to avoid redundant notifications. To measure the number of
    notifications that are actually communicated to observers, refer to
    'Android.Tab.BackgroundColorChange'.
  </summary>
</histogram>

<histogram name="Android.Tab.CreateNewTabDuration.{TabLaunchType}" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the duration of new tab creation for {TabLaunchType}. Emitted
    everytime a new tab is finished being created. Take into account that
    low-end devices create tabs more slowly, so adjust your analysis
    accordingly.
  </summary>
  <token key="TabLaunchType">
    <variant name="AppWidget" summary="tabs opened from an app widget"/>
    <variant name="BrowserActions"
        summary="tabs opened from browser actions context menu"/>
    <variant name="ChromeUI" summary="tabs opened via Chrome UI"/>
    <variant name="ExternalApp" summary="tabs opened from an external app"/>
    <variant name="LauncherShortcut"
        summary="tabs opened from launcher shortcut"/>
    <variant name="Link" summary="tabs opened from a link"/>
    <variant name="LongpressBackground"
        summary="tabs opened from the long press context menu which are
                 opened in the background"/>
    <variant name="LongpressBackgroundInGroup"
        summary="tabs opened from long press context menu item 'Open in new
                 tab in group'"/>
    <variant name="LongpressForeground"
        summary="tabs opended from the long press context menu"/>
    <variant name="LongpressIncognito"
        summary="tabs opened from the long press context menu item 'Open in
                 Incognito Tab'"/>
    <variant name="NewIncognitoTab"
        summary="tabs opened by an external application launching a new
                 Chrome incognito tab"/>
    <variant name="ReadingList" summary="tabs opened from the reading list"/>
    <variant name="RecentTabs"
        summary="tabs opened in background from recent tabs"/>
    <variant name="Reparenting" summary="tabs opened from changing windows"/>
    <variant name="Restore" summary="tabs opened from restores"/>
    <variant name="SpeculativeBackgroundCreation"
        summary="tabs opened from CCT in the background"/>
    <variant name="StartSurface" summary="tabs opened from the start surface"/>
    <variant name="Startup" summary="tabs opened during the startup process"/>
    <variant name="SyncBackground"
        summary="tabs opened in the background by sync"/>
    <variant name="TabGroupUI" summary="tabs opened from Tab group UI"/>
    <variant name="TabSwitcherUI" summary="tabs opened from Tab Switcher UI"/>
    <variant name="TypeUnknown"
        summary="tabs opened from a different case than one's listed"/>
    <variant name="Unset" summary="pre-warmed tabs without creation reason"/>
  </token>
</histogram>

<histogram
    name="Android.Tab.CreateNewTabDuration.{TabLaunchType}.WithExistingWebContents"
    units="ms" expires_after="2023-07-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the duration of the creation of a new tab from an existing
    WebContents for {TabLaunchType}. A record is made each time a tab is created
    using an existing WebContents.
  </summary>
  <token key="TabLaunchType">
    <variant name="AppWidget" summary="tabs opened from an app widget"/>
    <variant name="BrowserActions"
        summary="tabs opened from browser actions context menu"/>
    <variant name="ChromeUI" summary="tabs opened via Chrome UI"/>
    <variant name="ExternalApp" summary="tabs opened from an external app"/>
    <variant name="LauncherShortcut"
        summary="tabs opened from launcher shortcut"/>
    <variant name="Link" summary="tabs opened from a link"/>
    <variant name="LongpressBackground"
        summary="tabs opened from the long press context menu which are
                 opened in the background"/>
    <variant name="LongpressBackgroundInGroup"
        summary="tabs opened from long press context menu item 'Open in new
                 tab in group'"/>
    <variant name="LongpressForeground"
        summary="tabs opended from the long press context menu"/>
    <variant name="LongpressIncognito"
        summary="tabs opened from the long press context menu item 'Open in
                 Incognito Tab'"/>
    <variant name="NewIncognitoTab"
        summary="tabs opened by an external application launching a new
                 Chrome incognito tab"/>
    <variant name="ReadingList" summary="tabs opened from the reading list"/>
    <variant name="RecentTabs"
        summary="tabs opened in backrgound from recent tabs"/>
    <variant name="RecentTabsForeground"
        summary="tabs opened in foreground from recent tabs"/>
    <variant name="Reparenting" summary="tabs opened from changing windows"/>
    <variant name="Restore" summary="tabs opened from restores"/>
    <variant name="SpeculativeBackgroundCreation"
        summary="tabs opened from CCT in the background"/>
    <variant name="StartSurface" summary="tabs opened from the start surface"/>
    <variant name="Startup" summary="tabs opened during the startup process"/>
    <variant name="TabGroupUI" summary="tabs opened from Tab group UI"/>
    <variant name="TypeUnknown"
        summary="tabs opened from a different case than one's listed"/>
  </token>
</histogram>

<histogram name="Android.TabGroupParity.TabGroupColorChangeActionType"
    enum="TabGroupColorChangeActionType" expires_after="2025-04-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reports the entrypoint from which a tab group's color icon was changed.
    Record once per user attempt to change the tab group's color in the
    TabGridDialog view.
  </summary>
</histogram>

<histogram name="Android.TabGroupParity.TabGroupCreationDialogResultAction"
    enum="TabGroupCreationDialogResultAction" expires_after="2025-04-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The result of the action taken from the TabGroupCreation dialog. Record once
    per user attempt to create a new tab group through the TabGroupCreation
    modal dialog.
  </summary>
</histogram>

<histogram name="Android.TabGroupParity.TabGroupCreationFinalSelections"
    enum="TabGroupCreationFinalSelections" expires_after="2025-04-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The result of the group color and title selections made when accepting the
    TabGroupCreation dialog. Record once per user attempt to create a new tab
    group through the TabGroupCreation modal dialog.
  </summary>
</histogram>

<histogram name="Android.TabMultiSelectV2.BookmarkTabsCount" units="count"
    expires_after="2025-01-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reports the number of tabs that are bookmarked using the TabListEditor
    bookmark action. Recorded once per user attempt to bookmark tabs in the Tab
    Selection Editor.
  </summary>
</histogram>

<histogram name="Android.TabMultiSelectV2.SharingState"
    enum="TabListEditorShareActionState" expires_after="2025-01-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The result of the share action taken from the TabListEditor. Record once per
    user attempt to share tabs in the Tab Selection Editor.
  </summary>
</histogram>

<histogram name="Android.TabMultiSelectV2.TimeSinceLastShown" units="ms"
    expires_after="2025-01-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time between opening the TabListEditor in milliseconds within a
    given browser activity lifespan. This is recorded when the TabListEditor is
    shown with the exception of the first time it is shown within an activity
    lifespan.
  </summary>
</histogram>

<histogram name="Android.TabNavigationIntercept.Scheme"
    enum="NavigationInterceptScheme" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When a navigation is intercepted, the scheme of the URL being intercepted.
  </summary>
</histogram>

<histogram name="Android.TabNavigationInterceptResult.ForMdoc"
    enum="NavigationInterceptResult" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The distribution of results when running ExternalNavigationHandler for
    mdoc:// navigations which are intercepted. This shows how frequently mdoc://
    navigations trigger a dialog (that the user may potentially cancel to cancel
    the external app launch.)
  </summary>
</histogram>

<histogram name="Android.TabNavigationInterceptResult.ForOpenId4Vp"
    enum="NavigationInterceptResult" expires_after="2025-03-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The distribution of results when running ExternalNavigationHandler for
    openid4vp:// navigations which are intercepted. This shows how frequently
    openid4vp:// navigations trigger a dialog (that the user may potentially
    cancel to cancel the external app launch.)
  </summary>
</histogram>

<histogram name="Android.TabNavigationInterceptResult.For{ProtocolType}"
    enum="NavigationInterceptResult" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The distribution of results when running ExternalNavigationHandler for
    navigations that have an {ProtocolType}. This shows how often we send
    intents to be handled by other applications.
  </summary>
  <token key="ProtocolType">
    <variant name="ExternalProtocol" summary="external protocol"/>
    <variant name="InternalProtocol" summary="internal protocol"/>
  </token>
</histogram>

<histogram name="Android.TabStrip.DelayTempStripRemovalTimedOut"
    enum="BooleanTimedOut" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    We show a temporary tab strip on tablet startup until the real tab strip is
    able to be drawn. The experiment DelayTempStripRemoval delays this until
    either 1) the tab state finishes initializing or 2) a timeout is reached.
    This delay mitigates jank on startup as tabs are restored and the real tab
    strip appears to quickly scroll/flicker as a result. This histogram is
    recorded on tablets on startup and captures whether the temporary tab strip
    was removed before the tab state was initialized, which should give a rough
    estimate for how many startups are janky. This should, hopefully, go down
    when the aforementioned experiment is enabled and should help us tune its
    default timeout of 1000ms.
  </summary>
</histogram>

<histogram name="Android.TabStrip.PlaceholderStripLeftoverTabsCount"
    units="tabs" expires_after="2025-02-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    We show empty placeholder tabs on the tablet tab strip during startup. The
    placeholders will be replaced by real tabs once they are restored,
    preventing a visual flicker/scroll jank as the restored tabs are rapidly
    populated to the strip. The number of placeholders and positioning of the
    active tab is calculated based on tab metadata saved to disk, and thus does
    not account for tabs created by other means during startup (e.g. user
    interaction). This histogram records the number of placeholder tabs, if any
    that are leftover when all tabs have been restored. This is captured when
    all tabs are finished restoring.
  </summary>
</histogram>

<histogram
    name="Android.TabStrip.PlaceholderStripTabsCreatedDuringRestoreCount"
    units="tabs" expires_after="2025-02-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    We show empty placeholder tabs on the tablet tab strip during startup. The
    placeholders will be replaced by real tabs once they are restored,
    preventing a visual flicker/scroll jank as the restored tabs are rapidly
    populated to the strip. The number of placeholders and positioning of the
    active tab is calculated based on tab metadata saved to disk, and thus does
    not account for tabs created by other means during startup (e.g. user
    interaction). This histogram records the number of tabs created in this way
    (and thus are not accounted for in the placeholder strip). This is captured
    when all tabs are finished restoring.
  </summary>
</histogram>

<histogram name="Android.TabStrip.PlaceholderStripTabsNeededDuringRestoreCount"
    units="tabs" expires_after="2024-05-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    We show empty placeholder tabs on the tablet tab strip during startup. The
    placeholders will be replaced by real tabs once they are restored,
    preventing a visual flicker/scroll jank as the restored tabs are rapidly
    populated to the strip. The number of placeholders and positioning of the
    active tab is calculated based on tab metadata saved to disk, and thus does
    not account for tabs created by other means during startup (e.g. user
    interaction). This histogram records the number of restored tabs, if any,
    that we unexpectedly did not allocate a placeholder for. This is captured
    when all tabs are finished restoring.
  </summary>
</histogram>

<histogram name="Android.TabStrip.PlaceholderStripVisibleDuration" units="ms"
    expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    We show empty placeholder tabs on the tablet tab strip during startup. The
    placeholders will be replaced by real tabs once they are restored,
    preventing a visual flicker/scroll jank as the restored tabs are rapidly
    populated to the strip. The number of placeholders and positioning of the
    active tab is calculated based on tab metadata saved to disk, and thus does
    not account for tabs created by other means during startup (e.g. user
    interaction). This histogram records the amount of time for which the
    placeholders are ready to be shown before the tab state is initialized. This
    will roughly measure the amount of time that we could have been seeing the
    flicker/scroll jank without this feature. This is captured when all tabs are
    finished restoring.
  </summary>
</histogram>

<histogram name="Android.TabStrip.TabGroupCollapsed" enum="Boolean"
    expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when the user clicks on the tab group title indicator to collapse
    or expand it. True if the user is collapsing a group and false if a user is
    expanding it. We don't record when the collapsed state changes
    automatically. e.g. Selecting a tab automatically expands its group and
    groups created through sync are automatically collapsed.
  </summary>
</histogram>

<histogram name="Android.TabStrip.TimeToBufferSwapAfterInitializeTabState"
    units="ms" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This captures the time until the buffer swaps (and the real tab strip can be
    drawn) after the tab state is initialized. This is the counterpart to the
    Android.TabStrip.TimeToInitializeTabStateAfterBufferSwap histogram and
    effectively marks how much leeway we had on a startup, before we'd need to
    delay the removal of the temp tab strip to mitigate jank.
  </summary>
</histogram>

<histogram name="Android.TabStrip.TimeToInitializeTabStateAfterBufferSwap"
    units="ms" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This captures the time until the the tab state is initialized after the
    buffer swaps. This is the counterpart to the
    Android.TabStrip.TimeToBufferSwapAfterInitializeTabState histogram and
    effectively marks how much additional time we would have needed to delay the
    removal of the temp tab strip on startup to mitigate jank.
  </summary>
</histogram>

<histogram name="Android.TabStrip.TimeToSwitchTab" units="ms"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This captures the time taken for a user to select a tab after scrolling the
    tab strip as one measure of tab strip switching efficiency. This is recorded
    only when a tab switch event occurs within 60 seconds of the most recent tab
    strip scroll. In the event of multiple back-to-back scrolls, this metric is
    recorded so long as the sequence of scrolls occur within 60 seconds of each
    other and is capped at 3 minutes.
  </summary>
</histogram>

<histogram name="Android.TabStrip.TitleBitmapFactory.getTitleBitmap.Duration"
    units="ms" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <summary>
    The duration of TitleBitmapFactory.getTitleBitmap, recorded once per call.
  </summary>
</histogram>

<histogram name="Android.TabStrip.TitleBitmapFactory.getTitleBitmap.Length"
    units="characters" expires_after="2024-05-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The full (untruncated) length of the title to be converted to a bitmap by
    TitleBitmapFactory.getTitleBitmap.

    Recorded once per call, if the title is neither null nor empty.
  </summary>
</histogram>

<histogram name="Android.TabSwitcher.CreationTime" units="ms"
    expires_after="2024-11-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the time taken to create the StartSurfaceCoordinator and grid tab
    switcher views. Only recorded for tablets.
  </summary>
</histogram>

<histogram name="Android.TabSwitcher.IncognitoClickedIsEmpty" enum="Boolean"
    expires_after="2024-03-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Emitted every time a user uses Incognito button on Tab Switcher. Records
    whether or not there is any Incognito tab when Incognito button is clicked.
  </summary>
</histogram>

<histogram name="Android.TabSwitcher.SetupRecyclerView.Time" units="ms"
    expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the time taken to create TabListCoordinator, which inflates the
    RecyclerView for the grid tab switcher, and bind views.
  </summary>
</histogram>

<histogram name="Android.ThumbnailCache.InMemoryCacheEntries"
    units="thumbnails" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of entries for the in-memory ETC1 and bitmap thumbnail
    cache. Recorded on a Poisson distributed frequency with a mean of 5 minutes
    starting 1 minute after TabContentManager native initialization.
  </summary>
</histogram>

<histogram name="Android.ThumbnailCache.InMemoryCacheSize" units="KiB"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the in-memory ETC1 and bitmap thumbnail cache size in KiB. Recorded
    on a Poisson distributed frequency with a mean of 5 minutes starting 1
    minute after TabContentManager native initialization. Note that this memory
    may be distributed across the GPU process and Browser process.
  </summary>
</histogram>

<histogram
    name="Android.ThumbnailProvider.BitmapCache.Size{ThumbnailProvider_ClientType}"
    units="KB" expires_after="2021-01-30">
<!-- Name completed by histogram_suffixes
     name="ThumbnailProvider.ClientType" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the size of the bitmap cache used. Recorded whenever a bitmap is
    added to the cache. {ThumbnailProvider_ClientType}
  </summary>
  <token key="ThumbnailProvider_ClientType"
      variants="ThumbnailProvider_ClientType"/>
</histogram>

<histogram
    name="Android.ThumbnailProvider.CachedBitmap.Found{ThumbnailProvider_ClientType}"
    enum="BooleanFound" expires_after="2021-01-30">
<!-- Name completed by histogram_suffixes
     name="ThumbnailProvider.ClientType" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the status of a thumbnail query from the thumbnail provider
    in-memory cache. {ThumbnailProvider_ClientType}
  </summary>
  <token key="ThumbnailProvider_ClientType"
      variants="ThumbnailProvider_ClientType"/>
</histogram>

<histogram name="Android.Toolbar.BitmapCapture" enum="ToolbarCaptureType"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when a toolbar view draws itself to a bitmap such that it can be
    passed to the compositor and drawn by native. Performing a bitmap capture is
    somewhat expensive opperation that must be done on the UI thread. It is
    possible that high capture counts are correlated with scroll jank.
  </summary>
</histogram>

<histogram name="Android.TopToolbar.AllowCaptureReason"
    enum="TopToolbarAllowCaptureReason" expires_after="2024-01-14">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded on #isDirty calls that return true. Because #isDirty() is used to
    control when bitmap captures happen, this histogram holds the reason that
    the capture was allowed. Note that there there's an assert that calls into
    #isDirty() from #getBitmap(), which can cause these to be double counted. If
    Canary starts running assert code, this will cause this metric to double in
    report volume.
  </summary>
</histogram>

<histogram name="Android.TopToolbar.BlockCaptureReason"
    enum="TopToolbarBlockCaptureReason" expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded on #isDirty calls that return false. Because #isDirty() is used to
    control when bitmap captures happen, this histogram holds the reason that
    the capture was not allowed.
  </summary>
</histogram>

<histogram name="Android.TopToolbar.InMotionStage" enum="ToolbarInMotionStage"
    expires_after="2023-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Captures the stages reached in the Toolbar's in motion handling. Recorded
    every time the in motion state of the compositor changes, before the event
    is routed to the renderer process. Motion states include: flinging, swiping,
    and any gesture that the CompositorViewHolder is processing. This metric
    shows how often the in motion handling had to request the toolbar's capture
    readiness state, which is a computationally expensive operation, and could
    slow down input handling.
  </summary>
</histogram>

<histogram name="Android.TopToolbar.SnapshotDifference"
    enum="ToolbarSnapshotDifference" expires_after="2023-05-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When the allow reason for a bitmap capture was that the snapshots were
    different, then this histogram is recorded with the reason that the
    snapshots were different. Often there may be multiple differences but one is
    arbitrarily and consistently picked.
  </summary>
</histogram>

<histogram name="Android.UIDialogShown" enum="AndroidDialogType"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Logs when an Android dialog is shown from either Chrome or WebView. Logs the
    specific type of dialog which is being shown to the user.
  </summary>
</histogram>

<histogram name="Android.Unfold.Latency" units="ms" expires_after="2023-09-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the time taken by chrome to display the first frame presented after
    unfolding(folding) a foldable device. This histogram aims to capture the
    unfold latency in devices which switch to tablet mode(phone mode) when
    unfolded(folded), and is recorded every time the device is unfolded(folded).
    The begin timestamp of the metric is the timestamp from the start of the
    first OnPause activity lifecycle callback before the activity recreates. The
    end timestamp is the timestamp when Chrome displays the first frame on the
    new screen.
  </summary>
</histogram>

<histogram name="Android.UnfoldToTablet.Latency" units="ms"
    expires_after="2024-07-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the time taken by chrome to display the first frame presented after
    unfolding a foldable device. This histogram aims to capture the unfold
    latency in devices which switch to tablet mode when unfolded, and is
    recorded every time the device is unfolded. The begin timestamp of the
    metric is the timestamp from the start of the first OnPause activity
    lifecycle callback before the activity recreates. The end timestamp is the
    timestamp when Chrome displays the first frame on the new screen.
  </summary>
</histogram>

<histogram name="Android.UnfoldToTablet.Latency2" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the time taken by chrome to display the first frame presented after
    unfolding a foldable device when Chrome is on top. This histogram aims to
    capture the unfold latency in devices which switch to tablet mode when
    unfolded, and is recorded every time the device is unfolded. The begin
    timestamp of the metric is the timestamp from the start of the first OnPause
    activity lifecycle callback before the activity recreates. The end timestamp
    is the timestamp when Chrome displays the first frame on the new screen.
  </summary>
</histogram>

<histogram name="Android.VersionCode" enum="VersionCode"
    expires_after="2025-04-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Version code identifies which bundle is used. It's effectively a version
    from the Play Store point of view. There can be multiple version codes for a
    given Chrome version. See go/chrome-android-version-codes.

    This is recorded every time a metrics log is created.
  </summary>
</histogram>

<histogram name="Android.View.onDraw.30Seconds" units="count"
    expires_after="2023-05-07">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Keeps a counter of each onDraw invoked on the root view and emits the count
    once every 30 seconds. Thus this is the amount of times android attempted to
    draw/update a java view in the last 30 seconds.

    NOTE: 30 second intervals with 0 draws are not reported.
  </summary>
</histogram>

<histogram name="Android.Wallet.BoardingPass.Detected" enum="BooleanDetected"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records detected flight boarding pass barcode images on each page load. It's
    only enabled on the Chrome Android app. It's only emitted once on page load,
    either detected or not detected.
  </summary>
</histogram>

<histogram name="Android.WebContentsState.SavedStateVersion" units="version"
    expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>src/chrome/browser/tab/OWNERS</owner>
  <summary>
    Logs which version of the WebContentsState saved state is being deserialized
    by ExtractNavigationEntries() and related functions.

    This is recorded every time a WebContentsState is deserialized.
  </summary>
</histogram>

<histogram name="Android.WebView.AndroidX.ApiCall" enum="AndroidXWebkitApiCall"
    expires_after="2024-10-31">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records calls to WebView APIs from AndroidX. Some AndroidX-originating calls
    may plumb through the corresponding platform (framework) API if the device
    OS version supports the platform API. In this case the API call will be
    logged by the &quot;Android.WebView.ApiCall&quot; histogram instead. This is
    logged each time an AndroidX API is called through the &quot;boundary
    interface&quot; code path (see //android_webview/support_library/README.md
    for more details).
  </summary>
</histogram>

<histogram name="Android.WebView.ApiCall" enum="WebViewApiCall"
    expires_after="2024-10-31">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records calls to WebView APIs through the platform (framework) APIs. This
    may include AndroidX API calls on OS versions where the AndroidX library
    just calls through the platform API (see
    &quot;Android.WebView.AndroidX.ApiCall&quot; for details). This is logged
    each time an API is called.

    For historical data (before M99), see &quot;WebView.ApiCall&quot;.
  </summary>
</histogram>

<histogram
    name="Android.WebView.ApiCall.Duration.Framework.LOAD_DATA_WITH_BASE_URL"
    units="ms" expires_after="2025-06-30">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    How long the WebView loadDataWithBaseURL API takes to run. This measures the
    sync time the API takes to return not the actual time until the page loads.
    This is logged only when the app calls loadDataWithBaseURL explicitly.
  </summary>
</histogram>

<histogram name="Android.WebView.ApiCall.Duration.Framework.LOAD_URL"
    units="ms" expires_after="2025-06-30">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    How long the WebView loadUrl API takes to run. This measures the sync time
    the API takes to return not the actual time until the page loads. This is
    logged only when the app calls loadUrl explicitly.
  </summary>
</histogram>

<histogram
    name="Android.WebView.ApiCall.Duration.Framework.LOAD_URL_ADDITIONAL_HEADERS"
    units="ms" expires_after="2025-06-30">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    How long the WebView loadUrl with addtional headers API takes to run. This
    measures the sync time the API takes to return not the actual time until the
    page loads. This is logged only when the app calls loadUrl with addtional
    headers explicitly.
  </summary>
</histogram>

<histogram name="Android.WebView.ApiCall.Overridden.WebChromeClient"
    enum="WebChromeClientMethod" expires_after="2025-05-31">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records which methods of WebChromeClient the caller has overridden when
    calling WebView.setWebChromeClient. The goal of this histogram is to
    determine the popularity of the various callback methods present in
    WebChromeClient.

    This histogram is logged every time a WebChromeClient is set.
  </summary>
</histogram>

<histogram name="Android.WebView.ApiCall.Overridden.WebChromeClient.Count"
    units="Methods" expires_after="2025-05-31">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records how many methods of WebChromeClient the caller has overridden when
    calling WebView.setWebChromeClient. The goal of this histogram is to track
    how many methods apps override to assist the analysis of API usage in
    WebView.

    This histogram is logged every time a WebChromeClient is set.
  </summary>
</histogram>

<histogram name="Android.WebView.ApiCall.Overridden.WebViewClient"
    enum="WebViewClientMethod" expires_after="2025-05-31">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records which methods of WebViewClient the caller has overridden when
    calling WebView.setWebViewClient. The goal of this histogram is to determine
    the popularity of the various callback methods present in WebViewClient.

    This histogram is logged every time a WebViewClient is set.
  </summary>
</histogram>

<histogram name="Android.WebView.ApiCall.Overridden.WebViewClient.Count"
    units="Methods" expires_after="2025-05-31">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records how many methods of WebViewClient the caller has overridden when
    calling WebView.setWebViewClient. The goal of this histogram is to track how
    many methods apps override to assist the analysis of API usage in WebView.

    This histogram is logged every time a WebViewClient is set.
  </summary>
</histogram>

<histogram name="Android.WebView.ApiCall.Static" enum="WebViewApiCallStatic"
    expires_after="2024-08-22">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records calls to static WebView APIs through the platform (framework) APIs.
    This may include AndroidX API calls on OS versions where the AndroidX
    library just calls through the platform API (see
    &quot;Android.WebView.AndroidX.ApiCall&quot; for details). This is logged
    each time an API is called.

    Recorded in M118+.
  </summary>
</histogram>

<histogram name="Android.WebView.ApiCall.Static.First"
    enum="WebViewApiCallStatic" expires_after="2024-08-22">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the first call to a static WebView API through the platform
    (framework) APIs after the native library was loaded and the browser process
    was started (meaning that this static method call caused the
    initialization).

    This may include AndroidX API calls on OS versions where the AndroidX
    library just calls through the platform API (see
    &quot;Android.WebView.AndroidX.ApiCall&quot; for details).

    Recorded in M125+.
  </summary>
</histogram>

<histogram name="Android.WebView.ApiCall.System" enum="WebViewApiCallSystem"
    expires_after="2024-08-22">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records calls to WebView APIs made by the system through the platform
    (framework) APIs. This is logged each time an API is called.

    Recorded in M118+.
  </summary>
</histogram>

<histogram name="Android.WebView.AppDataDirectory.Size" units="KiB"
    expires_after="2023-06-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Size on disk taken by the embedding app's data directory, recorded once per
    WebView startup after a small delay.
  </summary>
</histogram>

<histogram name="Android.WebView.AppDataDirectory.TimeToComputeSize" units="ms"
    expires_after="2023-06-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Time to compute the size on disk taken by the embedding app's data
    directory, recorded once per WebView startup after a small delay.
  </summary>
</histogram>

<histogram name="Android.WebView.AwContentsConstructorTime{IsFirst}" units="ms"
    expires_after="2025-02-28">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Time it takes to run the AwContents constructor. Recorded {IsFirst} time the
    constructor is run.
  </summary>
  <token key="IsFirst">
    <variant name="" summary="each"/>
    <variant name=".First" summary="the first"/>
  </token>
</histogram>

<histogram name="Android.WebView.Callback.Counts" enum="WebViewCallbackType"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the invocation count of WebView callbacks. Starting with M117,
    records shouldInterceptRequest counts.
  </summary>
</histogram>

<histogram name="Android.WebView.ComponentUpdater.CPSDirectorySize" units="KB"
    expires_after="2024-11-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Size on disk taken by the ComponentsProviderService serving directory. This
    is logged once per run of the update job in AwComponentUpdateService.
  </summary>
</histogram>

<histogram name="Android.WebView.ComponentUpdater.CUSDirectorySize" units="KB"
    expires_after="2024-11-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Size on disk taken by the AwComponentUpdateService directory. This is logged
    once per update job in AwComponentUpdateService.
  </summary>
</histogram>

<histogram name="Android.WebView.ComponentUpdater.GetFilesDuration" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Duration of ComponentsProviderService getFilesForComponent request. This
    method retrieves FileDescriptors for an installed component. This is logged
    at the end of every request the service receives.
  </summary>
</histogram>

<histogram name="Android.WebView.ComponentUpdater.GetFilesResult"
    enum="WebViewComponentUpdaterGetFilesResult" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Logs the result of ComponentsProviderService getFilesForComponent request.
    This method retrieves FileDescriptors for an installed component. This is
    logged once for every request the service receives.
  </summary>
</histogram>

<histogram name="Android.WebView.ComponentUpdater.SafeModeActionExecuted"
    enum="Boolean" expires_after="2024-11-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Whether a SafeMode action was executed by Component Updater services. This
    is logged whenever a nonembedded Component Updater service checks whether
    SafeMode is enabled.
  </summary>
</histogram>

<histogram name="Android.WebView.ComponentUpdater.UnexpectedExit"
    enum="Boolean" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Whether AwComponentUpdateService quit unexpectedly on the previous run. This
    might indicate a crash occurred during the previous job. This is logged once
    per run of AwComponentUpdateService.
  </summary>
</histogram>

<histogram name="Android.WebView.ComponentUpdater.UpdateJobDuration" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Duration of AwComponentUpdateService update job. This job is responsible for
    updating and installing components. This is logged once per run of the job.
  </summary>
</histogram>

<histogram name="Android.WebView.ComponentUpdater.UpdateJobFilesChanged"
    units="count" expires_after="2024-11-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    How many components were updated by AwComponentUpdateService update job.
    This is logged once per run of the job, and is capped at 1000.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.ForceDarkBehavior"
    enum="WebViewForceDarkBehavior" expires_after="2023-06-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records WebView force dark behavior settings on each main frame navigation
    entry committed.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.ForceDarkMode"
    enum="WebViewForceDarkMode2" expires_after="2023-06-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records WebView force dark mode settings on each main frame navigation entry
    committed.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.InDarkMode" enum="Boolean"
    expires_after="2023-06-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records if WebView applies the algorithmic darkening on each main frame
    navigation entry committed.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.InDarkModeVsLightTheme"
    enum="WebViewInDarkModeVsLightTheme" expires_after="2023-06-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records if the application has light theme and if WebView applies the
    algorithmic darkening on each main frame navigation entry committed.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.InDarkModeVsNightMode"
    enum="WebViewInDarkModeVsNightMode" expires_after="2023-06-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records if the application is in the night mode and if WebView applies the
    algorithmic darkening on each main frame navigation entry committed.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.LightTheme" enum="LightTheme"
    expires_after="2023-06-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records if the application has light theme on each main frame navigation
    entry committed.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.NightMode" enum="NightMode"
    expires_after="2023-06-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records application's night mode bit related to
    android.content.res.Configuration.UI_MODE_NIGHT_MASK on each main frame
    navigation entry committed.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.NightModeVsLightTheme"
    enum="WebViewNightModeVsLightTheme" expires_after="2023-06-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records if application is in night mode and if it has light theme on each
    main frame navigation entry committed.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.PageDarkenedAccordingToAppTheme"
    enum="Boolean" expires_after="2023-06-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records WebView is darkened or not when the prefers-color-scheme is set to
    dark according to the app theme not FORCE_DARK_AUTO setting. This histogram
    is recorded on main frame's color scheme inferred for every committed
    navigation.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.PrefersDarkFromTheme"
    enum="BooleanYesNo" expires_after="2023-06-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records if WebView shall set prefers-color-scheme to dark according to app's
    theme after FORCE_DARK_AUTO fails. It is recorded on each main frame
    navigation entry committed.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.PrimaryTextLuminanceVsLightTheme"
    enum="WebViewPrimaryTextLuminanceVsLightTheme" expires_after="2023-06-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records if the application has light theme and if its theme's
    textColorPrimary attribute is light on each main frame navigation entry
    committed.
  </summary>
</histogram>

<histogram name="Android.WebView.DarkMode.PrimaryTextLuminanceVsNightMode"
    enum="WebViewPrimaryTextLuminanceVsNightMode" expires_after="2023-06-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records if the application is in night mode and if its theme's
    textColorPrimary attribute is light on each main frame navigation entry
    committed.
  </summary>
</histogram>

<histogram name="Android.WebView.DevUi.AppLaunch" enum="Boolean"
    expires_after="2025-01-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the number of times the developer UI app was launched. This only
    ever logs the value &quot;true&quot; because we only care about the total
    count. This is logged in the developer UI app during Activity#onCreate.
  </summary>
</histogram>

<histogram name="Android.WebView.DevUi.CrashList.CollectionState"
    enum="AndroidWebViewCrashCollectionState" expires_after="2025-01-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the state of crash collection, as seen by the developer UI. This is
    recorded when launching the crash UI, but only if the UI is not already
    showing an error message for another problem (ex. WebView package error).
    This only logs the first state we detect: ex. if the user has enabled crash
    reporting by opting in and also with the flag UI, this only logs the flag UI
    case.
  </summary>
</histogram>

<histogram name="Android.WebView.DevUi.CrashList.CrashInteraction"
    enum="AndroidWebViewCrashInteraction" expires_after="2025-01-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the user's interaction with crashes in the developer UI's crash
    list. Specifically, this tracks how the user interacts with the &quot;hide
    crash&quot;, &quot;upload this crash report&quot; or the &quot;file bug
    report&quot; buttons and possible subsequent dialogs. Since the latter two
    buttons are connected (the user must upload a crash before they can file a
    bug report), we track interaction with both in the same histogram. This is
    recorded for each button press in the crash list and is not recorded if the
    user does not interact with any crashes.
  </summary>
</histogram>

<histogram name="Android.WebView.DevUi.DeveloperModeEnabled"
    enum="BooleanEnabled" expires_after="2025-01-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records whether or not WebView is starting up in &quot;developer mode.&quot;
    This is a mode where the user has enabled debugging features through the
    WebView developer UI. This is recorded once during startup.
  </summary>
</histogram>

<histogram name="Android.WebView.DevUi.FlagLoadingBlockingTime" units="ms"
    expires_after="2025-01-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the time spent blocking WebView startup to load flags from the
    developer UI. This is recorded only once during WebView startup, and only if
    we've already detected developer mode is enabled (see
    &quot;Android.WebView.DevUi.DeveloperModeEnabled&quot;).
  </summary>
</histogram>

<histogram name="Android.WebView.DevUi.FlagsUi.ToggledFromSearch"
    enum="Boolean" expires_after="2025-01-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    This is recorded each time a user toggles a flag in the developer UI
    (changing a flag's state), and logs whether the user found this flag with
    the search bar (&quot;true&quot; means there was a non-empty search query).
    This is only recorded when the user toggles an individual flag through the
    Spinner dialog, not when they press the &quot;reset all flags&quot; button.
  </summary>
</histogram>

<histogram
    name="Android.WebView.DevUi.FragmentNavigation{Android_WebView_DevUi_NavType}"
    enum="AndroidWebViewDevUiFragments" expires_after="2025-01-16">
<!-- Name completed by histogram_suffixes
     name="Android.WebView.DevUi.NavType" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the user's navigation to a Fragment. &quot;FromIntent&quot; tracks
    navigations triggered by an Intent (ex. navigating to HomeFragment on
    launch) and &quot;NavBar&quot; tracks user interaction with the bottom
    navigation bar. &quot;AnyMethod&quot; should be the sum of the other two.
    {Android_WebView_DevUi_NavType}
  </summary>
  <token key="Android_WebView_DevUi_NavType">
    <variant name=".AnyMethod" summary="User navigation through any means"/>
    <variant name=".FromIntent"
        summary="User navigation through the bottom navigation bar"/>
    <variant name=".NavBar" summary="User navigation in response to an Intent"/>
  </token>
</histogram>

<histogram name="Android.WebView.DevUi.MenuSelection"
    enum="AndroidWebViewDevUiMenu" expires_after="2025-01-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the user's selection in the developer UI overflow menu or action
    bar, recorded after each selection.
  </summary>
</histogram>

<histogram name="Android.WebView.DevUi.NetLogsCalled" enum="Boolean"
    expires_after="2025-04-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the number of times the Net Logs were captured. This only ever logs
    the value &quot;true&quot; because we only care about the total count. This
    is logged in the nonembedded AwNetLogService when the net-logs flag is
    enabled and a webview is launched.
  </summary>
</histogram>

<histogram base="true" name="Android.WebView.DevUi.SessionDuration2" units="ms"
    expires_after="2025-01-16">
<!-- Name completed by histogram_suffixes
     name="AndroidWebViewFragments" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the time spent using a specific tool, from creation to destruction.
  </summary>
</histogram>

<histogram name="Android.WebView.DevUi.ToggledFlagCount" units="flags"
    expires_after="2025-01-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the number of flags we will toggle for this run of WebView. This is
    recorded only once during WebView startup, and only if we've already
    detected developer mode is enabled (see
    &quot;Android.WebView.DevUi.DeveloperModeEnabled&quot;). If developer mode
    is disabled, we will not toggle any flags through this mechanism.
  </summary>
</histogram>

<histogram name="Android.WebView.FileChooserResultOutsideAppDataDir"
    enum="Boolean" expires_after="2024-12-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records how often the onShowFileChooser returns files outside of the app's
    own data directory (excluding WebView resources and assets, and URIs that
    don't use the 'file:' schema). Recorded once per file selected when the
    dialog closes.
  </summary>
</histogram>

<histogram name="Android.WebView.ForceDarkBehavior"
    enum="WebViewForceDarkBehavior" expires_after="2023-06-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records strategy to be used by force dark in WebView when
    setForceDarkBehavior API is called by the embedding application.
  </summary>
</histogram>

<histogram name="Android.WebView.ForceDarkMode" enum="WebViewForceDarkMode"
    expires_after="2023-06-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records WebView's force dark setting and the UI's night mode when
    setForceDark API is called by the embedding application.
  </summary>
</histogram>

<histogram name="Android.WebView.Gfx.HardwareDrawType"
    enum="WebViewDrawAndSubmissionType" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks invalidate and frame submission status for WebView hardware draw.
    Result is enum that represent three flags: did we called invalidate this
    frame, did renderer submitted compositor frame and whether DrawParams from
    Android HWUI changed. This is logged once per WebView draw functor call.
  </summary>
</histogram>

<histogram name="Android.WebView.Gfx.SaveHWUIStateNonANGLEMicroseconds"
    units="microseconds" expires_after="2024-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the amount of time that it took for WebView to save HWUI's GL state
    when not using ANGLE (when using ANGLE, the corresponding interval is
    recorded within ANGLE as GPU.ANGLE.SyncFromNativeContextMicroseconds; the
    method of recording is not quite identical, but the two metrics should be
    comparable at a high level). Recorded once per saving of HWUI state when
    drawing with GL. This is recorded only on devices that support high
    resolution timers. Note: Expired on June 1 2024 and revived on June 10 2024.
  </summary>
</histogram>

<histogram name="Android.WebView.HistoricalApplicationExitInfo.Counts"
    enum="AndroidProcessExitReason" expires_after="2024-11-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Enumerates over the historical list of ApplicationExitInfo and their exit
    reasons for an application. Records the latest exit reason for the embedding
    application.
  </summary>
</histogram>

<histogram
    name="Android.WebView.HistoricalApplicationExitInfo.Counts.BACKGROUND"
    enum="AndroidProcessExitReason" expires_after="2024-11-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Enumerates over the historical list of ApplicationExitInfo and their exit
    reasons for an application. Records the latest exit reason for the embedding
    application, specifically when WebView's last recorded state before exiting
    was the background state.
  </summary>
</histogram>

<histogram
    name="Android.WebView.HistoricalApplicationExitInfo.Counts.DESTROYED"
    enum="AndroidProcessExitReason" expires_after="2024-11-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Enumerates over the historical list of ApplicationExitInfo and their exit
    reasons for an application. Records the latest exit reason for the embedding
    application, specifically when WebView's last recorded state before exiting
    was the destroyed state.
  </summary>
</histogram>

<histogram
    name="Android.WebView.HistoricalApplicationExitInfo.Counts.FOREGROUND"
    enum="AndroidProcessExitReason" expires_after="2024-11-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Enumerates over the historical list of ApplicationExitInfo and their exit
    reasons for an application. Records the latest exit reason for the embedding
    application, specifically when WebView's last recorded state before exiting
    was the foreground state.
  </summary>
</histogram>

<histogram name="Android.WebView.HistoricalApplicationExitInfo.Counts.UNKNOWN"
    enum="AndroidProcessExitReason" expires_after="2024-11-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Enumerates over the historical list of ApplicationExitInfo and their exit
    reasons for an application. Records the latest exit reason for the embedding
    application, specifically when WebView's last recorded state before exiting
    was the detached state.
  </summary>
</histogram>

<histogram name="Android.WebView.HistoricalApplicationExitInfo.Delta"
    units="ms" expires_after="2024-11-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Tracks the deltas (in ms) between the current time of recording and the last
    time of recording historical application exit info data. Only recorded if
    the last time at recording was non-zero and there was some exit reason
    recorded.
  </summary>
</histogram>

<histogram name="Android.WebView.InputStreamTime" units="ms"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures how long InputStreams take from creation to completion. This is
    emitted for all streams whether they succeed or fail. This metric was
    expired between December 2023 and May 2024. Data from that period will be
    incomplete.
  </summary>
</histogram>

<histogram name="Android.WebView.isDebuggable" enum="DebuggingEnabled"
    expires_after="2025-05-18">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the number of times the WebView is debuggable or not debuggable, if
    it is debuggable then also how it has been set set, whether it is from the
    app or from the OS or from calling setWebContentsDebuggingEnabled(true).
    This is logged each time the MetricsService uploads metrics.
  </summary>
</histogram>

<histogram name="Android.WebView.JavaBridge.InvocationIsInPrimaryMainFrame"
    enum="BooleanMainFrame" expires_after="2023-04-19">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records whether an invocation of a JavaScript method exposed through
    WebView's Java Bridge happened on a page's main frame or one of its sub
    frames. Recorded for each invocation of such methods.
  </summary>
</histogram>

<histogram name="Android.WebView.LoadUrl.UrlScheme" enum="WebViewUrlScheme"
    expires_after="2024-06-13">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the scheme for the URL loaded by a browser-initiated navigation.
    Specifically, this is the scheme of the URL passed to loadUrl() (and its
    overloads), postUrl(), and loadData() (this is implicitly
    &quot;data:&quot;). also records if this value is &quot;empty&quot;, which
    means either null or &quot;about:blank&quot;. This intentionally excludes
    loadDataWithBaseURL().
  </summary>
</histogram>

<histogram name="Android.WebView.MediaIntegrity.ApiStatusV2"
    enum="AndroidWebViewMediaIntegrityApiStatus" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the Media Integrity API Status set by the embedding application.
    This status can be different for different URLs, but this histogram just
    records the reported API status without any URL information.

    This metric is logged when the API status for the source origin is checked.
    This is done during the initial call to supply a token provider to the Blink
    Renderer Extension.
  </summary>
</histogram>

<histogram name="Android.WebView.MediaIntegrity.ContentBindingSizeLog2"
    units="log2(bytes)" expires_after="2024-11-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the ceil(log2(x)) of the size of the provided content binding on a
    requestToken call.

    Play restricts the length of the content binding to 500, but this histogram
    is recorded before calling Play, so any values higher that 9 would likely
    have led to a client error.

    This histogram is recorded as an exact linear histogram with a max value of
    32.
  </summary>
</histogram>

<histogram name="Android.WebView.MediaIntegrity.GetTokenCumulativeV2"
    units="calls" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Counts the number of calls to 'requestToken' for a token provider. This
    metric is counted individually for each token provider, and is emitted when
    the request for a token is made.

    The metric will show the usage pattern of token providers by individual
    clients, by showing how many times they are used by the client

    As a cumulative value, this value is incremented and logged for each
    successive call. This means that when this histogram is logged for the Nth
    time, it will already have been emitted for all values [1 ... N-1]. Before
    analysing the histogram, it should be normalised by subtracting the raw
    count of the next higher bucket from the bucket count. The interesting value
    is &quot;how far did the app get&quot;. By subtracting the raw count of N+1
    from bucket N, you remove all the counts where the app continued to emit the
    next value in the sequence.
  </summary>
</histogram>

<histogram name="Android.WebView.MediaIntegrity.GetTokenProviderCumulativeV2"
    units="calls" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Counts the number of times the WebView Media Integrity getIntegrityProvider
    method has been called by web content since the app loaded.

    This metric will be used to analyse the usage pattern of the Media Integrity
    API in apps, specifically to understand if apps are causing multiple
    sessions to be created, or if apps are instead creating a single webpage
    that loads a single resource which instantiates the API once.

    The metric is logged whenever a valid request is made from Web Content.

    As a cumulative value, this value is incremented and logged for each
    successive call. This means that when this histogram is logged for the Nth
    time, it will already have been emitted for all values [1 ... N-1]. Before
    analysing the histogram, it should be normalised by subtracting the raw
    count of the next higher bucket from the bucket count. The interesting value
    is &quot;how far did the app get&quot;. By subtracting the raw count of N+1
    from bucket N, you remove all the counts where the app continued to emit the
    next value in the sequence.
  </summary>
</histogram>

<histogram name="Android.WebView.MediaIntegrity.GetTokenProviderResponseTime"
    units="ms" expires_after="2024-11-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the end-to-end time for a GetTokenProvider call to a successfull
    response. This will be the time observed by a JavaScript client waiting for
    a new token provider.

    This includes both responses served from the cache and responses that go to
    Play. This histogram is not logged if the call results in an error.
  </summary>
</histogram>

<histogram name="Android.WebView.MediaIntegrity.GetTokenProviderStatus"
    enum="AndroidWebViewMediaIntegrityStatus" expires_after="2024-11-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Logs the status of calling the Play getTokenProvider API.

    This histogram is logged on both successful responses and error responses.

    The error enum corresponds to the StandardIntegrityErrorCode, but introduces
    an UNKNOWN_ERROR code to catch situations where the Play client library
    introduces a new error code.
  </summary>
</histogram>

<histogram name="Android.WebView.MediaIntegrity.GetTokenStatus"
    enum="AndroidWebViewMediaIntegrityStatus" expires_after="2024-11-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Logs the status of calling the Play request token API on the
    StandardIntegrityTokenProvider.

    This histogram is logged on both successful responses and error responses.

    The error enum corresponds to the StandardIntegrityErrorCode, but introduces
    an UNKNOWN_ERROR code to catch situations where the Play client library
    introduces a new error code.
  </summary>
</histogram>

<histogram name="Android.WebView.MediaIntegrity.GetTokenTime" units="ms"
    expires_after="2024-11-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the time from the beginning of a getToken request to a successful
    response is returned to JavaScript.
  </summary>
</histogram>

<histogram name="Android.WebView.MediaIntegrity.InvalidInteraction"
    enum="AndroidWebViewMediaIntegrityInvalidInteraction"
    expires_after="2024-11-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Logs invalid calls from JavaScript to the Media Integrity API Java
    implementation.

    This histogram will be used to understand the extend to which clients are
    bypassing the JavaScript client API and sending unexpected requests to Java.
  </summary>
</histogram>

<histogram
    name="Android.WebView.MediaIntegrity.TokenProviderCacheEvictionsCumulativeV2"
    units="evictions" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Counts the number of times the token provider cache size has been exceeded,
    or in other words how many times an existing token provider was evicted from
    the cache in order to make room for a new one. The purpose of this histogram
    is to measure the effectiveness of the current cache size parameter, and
    will help inform if it should be changed, by giving us a histogram of how
    much larger it should have been to avoid evictions.

    This metric is logged every time a token provider is evicted.

    As a cumulative value, this value is incremented and logged for each
    successive call. This means that when this histogram is logged for the Nth
    time, it will already have been emitted for all values [1 ... N-1]. Before
    analysing the histogram, it should be normalised by subtracting the raw
    count of the next higher bucket from the bucket count. The interesting value
    is &quot;how far did the app get&quot;. By subtracting the raw count of N+1
    from bucket N, you remove all the counts where the app continued to emit the
    next value in the sequence.
  </summary>
</histogram>

<histogram
    name="Android.WebView.MediaIntegrity.TokenProviderCacheHitsCumulativeV2"
    units="hits" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Counts the number of times a cached token provider is returned in response
    to a request from web content.

    This metric will help gauge the effectiveness of the token provider cache,
    especially if the cache size is changed in the future. It serves as a way to
    measure the savings on requests to Play caused by the cache.

    The metric is logged when a cached token provider is found in the cache.

    As a cumulative value, this value is incremented and logged for each
    successive call. This means that when this histogram is logged for the Nth
    time, it will already have been emitted for all values [1 ... N-1]. Before
    analysing the histogram, it should be normalised by subtracting the raw
    count of the next higher bucket from the bucket count. The interesting value
    is &quot;how far did the app get&quot;. By subtracting the raw count of N+1
    from bucket N, you remove all the counts where the app continued to emit the
    next value in the sequence.
  </summary>
</histogram>

<histogram
    name="Android.WebView.MediaIntegrity.TokenProviderCacheMissesCumulativeV2"
    units="misses" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Counts the number of cache misses for the token provider cache in an
    application.

    This metric will help gauge the effectiveness of the token provider cache,
    especially if the cache size is changed in the future. It serves as a way to
    measure the savings on requests to Play caused by the cache.

    The metric is logged when a cached token provider is not found the cache.

    As a cumulative value, this value is incremented and logged for each
    successive call. This means that when this histogram is logged for the Nth
    time, it will already have been emitted for all values [1 ... N-1]. Before
    analysing the histogram, it should be normalised by subtracting the raw
    count of the next higher bucket from the bucket count. The interesting value
    is &quot;how far did the app get&quot;. By subtracting the raw count of N+1
    from bucket N, you remove all the counts where the app continued to emit the
    next value in the sequence.
  </summary>
</histogram>

<histogram
    name="Android.WebView.MediaIntegrity.TokenProviderCreatedCumulativeV2"
    units="providers" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Logs how many times a new TokenProvider is created by Play.

    This metric will show how many different token providers are requested from
    Play. With the token provider cache in place, this count is expected to be
    lower than GetTokenProviderCumulative.

    This metric is logged when a provider is returned from Play.

    As a cumulative value, this value is incremented and logged for each
    successive call. This means that when this histogram is logged for the Nth
    time, it will already have been emitted for all values [1 ... N-1]. Before
    analysing the histogram, it should be normalised by subtracting the raw
    count of the next higher bucket from the bucket count. The interesting value
    is &quot;how far did the app get&quot;. By subtracting the raw count of N+1
    from bucket N, you remove all the counts where the app continued to emit the
    next value in the sequence.
  </summary>
</histogram>

<histogram name="Android.WebView.MediaIntegrity.TokenProviderCreationTime"
    units="ms" expires_after="2024-11-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the time from requesting a new token provider from Play to receiving
    a successful response. This histogram is not emitted if the call results in
    an error.
  </summary>
</histogram>

<histogram name="Android.WebView.Memory.FunctorReclaim.OtherPrivateDirty"
    units="MB" expires_after="2024-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reports the app's &quot;other private dirty&quot; memory usage after some
    time in background. Collects the same data as
    Memory.Experimental.Gpu2.OtherPss, with the same caveats. Due to these, this
    should not be relied on to get accurate estimates of memory usage or deltas,
    but mostly used as a signal in Finch experiments. This is intended to
    evaluate the impact of draw functor reclaim.
  </summary>
</histogram>

<histogram name="Android.WebView.Memory.FunctorReclaim.OtherPss" units="MB"
    expires_after="2024-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reports the app's &quot;other PSS&quot; memory usage after some time in
    background. Collects the same data as Memory.Experimental.Gpu2.OtherPss,
    with the same caveats. Due to these, this should not be relied on to get
    accurate estimates of memory usage or deltas, but mostly used as a signal in
    Finch experiments. This is intended to evaluate the impact of draw functor
    reclaim.
  </summary>
</histogram>

<histogram name="Android.WebView.MixedContent.Mode"
    enum="WebViewMixedContentMode" expires_after="2024-08-25">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the mixed content mode set when an app uses the
    WebSettings.setMixedContentMode API.
  </summary>
</histogram>

<histogram name="Android.WebView.NonEmbeddedMetrics.HistogramRecordAge"
    units="minutes" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the time interval between when a histogram is recorded in a
    non-embedded WebView process and when it's actually sent to the UMA API in
    an embedded WebView. This is recorded during WebView startup for each
    histogram retrieved and replayed successfully from WebView non-embedded
    metrics service.
  </summary>
</histogram>

<histogram name="Android.WebView.NonEmbeddedMetrics.NumHistograms"
    units="histograms" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the number of histograms received from WebView's non-embedded
    histogram service. This is recorded once during WebView startup, after
    retrieving histograms from the service (if the proto can be parsed).
  </summary>
</histogram>

<histogram name="Android.WebView.NonEmbeddedMetrics.ParsingLogResult"
    enum="AndroidWebViewNonEmbeddedMetricsParsingLogResult"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records whether metrics parsing from file in non-embedded histogram service
    was successful. It's recorded during service startup by adding it to records
    list. It captures the most recent file parsing result for the last service
    launch before the client connects to the service.
  </summary>
</histogram>

<histogram name="Android.WebView.NonEmbeddedMetrics.TransmissionResult"
    enum="AndroidWebViewDevUiMetricsTransmission" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records whether metrics transmission from the non-embedded histogram service
    was successful. This is recorded once during WebView startup, after
    retrieving histograms from the service.
  </summary>
</histogram>

<histogram name="Android.WebView.OnGeolocationPermissionsShowPrompt.Granted"
    enum="BooleanGranted" expires_after="2025-06-30">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records whether geolocation permission was granted by the embedded app.

    This histogram is emitted when the app calls the result callback for the
    permission prompt.
  </summary>
</histogram>

<histogram
    name="Android.WebView.OnGeolocationPermissionsShowPrompt.ResponseTime"
    units="ms" expires_after="2025-06-30">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the response time from the embedding app to a
    onGeoLocationPermissionShowPrompt callback. This metric will help us
    determine if apps are likely responding based on internal logic or if they
    are showing a UI prompt to the user, as the latter will be reflected in
    longer response times. Since geo-location requires an Android permission, we
    might see two peaks in this histogram for apps that only show the Android
    permission prompt.

    This histogram is emitted when the app calls the result callback for the
    permission prompt.
  </summary>
</histogram>

<histogram name="Android.WebView.OnGeolocationPermissionsShowPrompt.Retain"
    enum="BooleanRetain" expires_after="2025-06-30">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records whether the app indicated that geolocation permission decision
    should be retained by WebView.

    This histogram is emitted when the app calls the result callback for the
    permission prompt.
  </summary>
</histogram>

<histogram name="Android.WebView.OnPermissionRequest.Granted"
    enum="BooleanGranted" expires_after="2025-06-30">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records if the permissions requested by the web contents were granted by the
    embedding app. We only record this histogram if the app responds, so it will
    not contain any default implementation results. The intention of the
    histogram is to understand how apps interact with the current permission
    APIs.

    This histogram is emitted when the app calls either the grant or deny
    callback method.
  </summary>
</histogram>

<histogram name="Android.WebView.OnPermissionRequest.RequestedResourceCount"
    units="resources" expires_after="2025-06-30">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records how many resources are in a callback to onPermissionRequest. The
    onPermissionRequests callback method supports requests for more than one
    resource at a time, and requires that the app grants all permissions,
    otherwise the whole request is denied. This histogram will help us
    understand how often apps actually see more than a single resource in a
    request, to help us plan a new permission solution.

    This histogram is emitted when the WebChromeClient.onPermissionRequest
    callback is invoked by WebView.
  </summary>
</histogram>

<histogram name="Android.WebView.OnPermissionRequest.RequestedResources"
    enum="PermissionResourceBitfield" expires_after="2025-06-30">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records which resources are in a callback to onPermissionRequest. The
    histogram is a sparse histogram and records the set of resources as a
    bitfield, which is how it is also represented internally.

    The onPermissionRequests callback method supports requests for more than one
    resource at a time, and requires that the app grants all permissions,
    otherwise the whole request is denied. This histogram will help us
    understand which resources are requested together, to help us plan a new
    permission solution.

    This histogram is emitted when the WebChromeClient.onPermissionRequest
    callback is invoked by WebView.
  </summary>
</histogram>

<histogram name="Android.WebView.OnPermissionRequest.ResponseTime" units="ms"
    expires_after="2025-06-30">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the response time from the embedding app to a onPermissionRequest
    callback. This metric will help us determine if apps are likely responding
    based on internal logic or if they are showing a UI prompt to the user, as
    the latter will be reflected in longer response times. Since video and
    microphone requires an Android permission, we might see two peaks in this
    histogram for apps that only show the Android permission prompt.

    This histogram is emitted when the app calls either the grant or deny
    callback method.
  </summary>
</histogram>

<histogram name="Android.WebView.OnRenderProcessGoneResult"
    enum="AndroidWebViewRenderProcessGoneResult" expires_after="2024-06-21">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    This captures two pieces of information about renderer crashes: did the app
    developer handle the renderer crash to recover and what type of crash was
    this? This is recorded once each time the renderer process dies
    unexpectedly, and is logged after we have notified the app via the
    onRenderProcessGone() callback.

    Prior to M99, this histogram did not distinguish between crashes vs. kills
    if the renderer crash was handled by the app.
  </summary>
</histogram>

<histogram name="Android.WebView.OptionallyBlockableMixedContentLoaded.Mode"
    enum="WebViewMixedContentMode" expires_after="2024-08-25">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the mixed content mode set when an app loads optionally blockable
    mixed content (images, audio, or video). This histogram is logged on page
    load, once per subresource (i.e. a single page load can cause multiple
    records if the page contains multiple mixed content subresources).
  </summary>
</histogram>

<histogram name="Android.WebView.OriginsVisited" units="origins"
    expires_after="2024-11-14">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Measures the count of distinct http and https origins visited per day in
    WebView. The purpose of this metric is to slice it by package name to help
    characterize the usage of that package.
  </summary>
</histogram>

<histogram name="Android.WebView.PrimaryCpuAbiBitness"
    enum="PrimaryCpuAbiBitness" expires_after="2025-04-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Primary bitness of the bundle. This may be different from bitness of
    Browser. On WebView, Browser always follows bitness of the app, whereas
    Renderer follows bitness of the bundle (provided that such bitness is
    supported, so look at it in combination with CpuAbiBitnessSupport).

    This is recorded every time a metrics log is created.
  </summary>
</histogram>

<histogram name="Android.WebView.RelatedSitesVisitedWeekly" units="sites"
    expires_after="2025-06-25">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    This is the same as Android.WebView.SitesVisitedWeekly. The only difference
    is this metric is filtered to only be reported for sites where the app
    declared it has a relationship with the site. A site is considered related
    if the app references it in its manifest through web links or app links.
  </summary>
</histogram>

<histogram name="Android.WebView.RequestedWithHeader.CommittedHeaderMode"
    enum="CommittedRequestedWithHeaderMode" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the type of X-Requested-With HTTP header that is set on request from
    WebView. This enum is recorded by
    |InterceptedRequest::InterceptResponseReceived| for all requests. It may
    differ from the user settings, as it also captures if the header has been
    set explicitly on the request by other means, such as javascript or
    embedding code.
  </summary>
</histogram>

<histogram
    name="Android.WebView.RequestedWithHeader.HadWebContentsForPartitionOrigin"
    enum="BooleanAvailable" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records whether a suitable WebContents was available for use to look up the
    partition origin for the XRequestedWith deprecation origin trial. This
    histogram is recorded when the AwProxyingUrlLoader attemps to get the last
    committed origin of the top frame for partitioning use, which is on all
    requests that are not top frame navigation requests. If the WebContents is
    not available, an opaque origin will be used for partitioning, which will
    result in a failed lookup.
  </summary>
</histogram>

<histogram
    name="Android.WebView.RequestedWithHeader.OnNavigationRequestedWithHeaderAllowListSize"
    units="entries" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the size of the XRequestedWithHeaderAllowList that was used on page
    navigation. This is recorded to gain insight into the distribution of size
    when used, which will give an idea of the impact to the ecosystem.
  </summary>
</histogram>

<histogram name="Android.WebView.RequestedWithHeader.OriginTrialEnabled"
    enum="BooleanEnabled" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records if the WebViewXRequestedWithDeprecation Origin Trial was enabled on
    a resource request. This histogram is recorded on every request sent by
    WebView if Persistent Origin Trials are enabled.
  </summary>
</histogram>

<histogram name="Android.WebView.RequestedWithHeader.PageSchemeIsCryptographic"
    enum="BooleanSecure" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records if the WebViewXRequestedWithDeprecation Origin Trial was enabled on
    a resource request with a scheme that uses cryptography, i.e. HTTPS or WSS.
    This histogram is recorded on every request sent by WebView if the
    WebViewXRequestedWithDeprecation trial is enabled and the scheme is either
    HTTP/HTTPS or WS/WSS.
  </summary>
</histogram>

<histogram
    name="Android.WebView.RequestedWithHeader.SetRequestedWithHeaderModeAllowListSize"
    units="entries" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the size of the allow-list passed to
    WebSettingsCompat#setRequestedWithHeaderOriginAllowList when called by the
    embedding app.
  </summary>
</histogram>

<histogram
    name="Android.WebView.RequestedWithHeader.SetServiceWorkerRequestedWithHeaderModeAllowListSize"
    units="entries" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the size of the allow-list passed to
    ServiceWorkerWebSettingsCompat#setRequestedWithHeaderOriginAllowList when
    called by the embedding app.
  </summary>
</histogram>

<histogram
    name="Android.WebView.RestrictedContentBlocking.ApiCallMatchesDiskCache"
    enum="BooleanMatched" expires_after="2025-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records whether the SafeBrowsingClient.getSupportedThreatTypes API call
    returns a result which matches our disk cache. This does not record the
    actual value of that call: a log of &quot;true&quot; means that the return
    value matches the disk cache and a log of &quot;false&quot; means that the
    disk cache didn't match.

    This histogram is recorded when the task completes, which can be on either
    success, failure, or timeout.
  </summary>
</histogram>

<histogram
    name="Android.WebView.RestrictedContentBlocking.GetSupportedThreatTypes.CallDuration"
    units="ms" expires_after="2025-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the duration of the call to
    SafeBrowsingClient.getSupportedThreatTypes during the flow to determine if
    restricted content blocking should be enabled.

    This histogram is recorded when the task completes, which can be on either
    success, failure, or timeout.
  </summary>
</histogram>

<histogram
    name="Android.WebView.RestrictedContentBlocking.GetSupportedThreatTypes.Result"
    enum="AndroidWebViewSupportedThreatTypesResult" expires_after="2025-08-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the result of the call to SafeBrowsingClient.getSupportedThreatTypes
    during the flow to determine if restricted content blocking should be
    enabled. It will log success/failure/timeout.

    This histogram is recorded when the task completes, which can be on either
    success, failure, or timeout.
  </summary>
</histogram>

<histogram name="Android.WebView.SafeMode.ActionName"
    enum="AndroidWebViewSafeModeActionName" expires_after="never">
<!-- expires-never: Needed for tracking SafeMode during an incident. -->

  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records which SafeModeAction was executed. This is recorded once during
    WebView startup and only if SafeMode is enabled (see
    &quot;Android.WebView.SafeMode.SafeModeEnabled&quot;).
  </summary>
</histogram>

<histogram name="Android.WebView.SafeMode.ExecutionResult"
    enum="AndroidWebViewSafeModeResult" expires_after="never">
<!-- expires-never: Needed for tracking SafeMode during an incident. -->

  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records whether SafeMode was able to execute all the specified SafeMode
    actions or if it encountered an error. This is recorded once during WebView
    startup and only if SafeMode is enabled (see
    &quot;Android.WebView.SafeMode.SafeModeEnabled&quot;). If multiple fixes
    have different statuses, then this will log a single status in the following
    precedence: a. Unknown error b. Action failed c. Unrecognized action d.
    Success (If all actions were successful).
  </summary>
</histogram>

<histogram name="Android.WebView.SafeMode.QueryAndExecuteBlockingTime"
    units="ms" expires_after="never">
<!-- expires-never: Needed for tracking SafeMode during an incident. -->

  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the time spent blocking WebView startup to both retrieve the list of
    SafeMode actions from the SafeModeService and to execute those actions. This
    is recorded once during startup only if SafeMode is enabled (see
    &quot;Android.WebView.SafeMode.SafeModeEnabled&quot;). This can be
    interpreted as the additional startup cost caused by enabling SafeMode.
  </summary>
</histogram>

<histogram name="Android.WebView.SafeMode.ReceivedFix" enum="BooleanEnabled"
    expires_after="never">
<!-- expires-never: Needed for tracking SafeMode during an incident. -->

  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records whether or not the WebView nonembedded service receives a SafeMode
    fix configuration. This is recorded once for each SafeMode config the
    WebView receives. This only ever logs true since WebView won't need to log
    anything when safemode is not activated. This is only relevant for the app
    recovery activation pathway.
  </summary>
</histogram>

<histogram name="Android.WebView.SafeMode.SafeModeEnabled"
    enum="BooleanEnabled" expires_after="never">
<!-- expires-never: Needed for tracking SafeMode during an incident. -->

  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records whether or not WebView is starting up in SafeMode. This is a mode
    where WebView takes extra steps during startup to reduce the risk of
    starting in a bad state. This is recorded once during WebView startup,
    regardless of whether SafeMode is enabled.
  </summary>
</histogram>

<histogram name="Android.WebView.ScheduleOnVizAndBlockTime"
    units="microseconds" expires_after="2024-11-20">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the total time spent running a blocking task in
    TaskQueueWebView::ScheduleOnVizAndBlock(). This is recorded only on devices
    that support high resolution timers.
  </summary>
</histogram>

<histogram name="Android.WebView.SecureCookieAction" enum="SecureCookieAction"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the action WebView took (if any) to &quot;fix up&quot; secure
    cookies for backwards compatibility.
  </summary>
</histogram>

<histogram name="Android.WebView.SetAcceptThirdPartyCookies"
    enum="BooleanAccepted" expires_after="2025-06-13">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records whether third party cookies are being accepted following every
    Android API call, initiated by the hosting Android app, to
    CookieManager.setAcceptThirdPartyCookies().
  </summary>
</histogram>

<histogram name="Android.WebView.ShouldInterceptRequest.IsRequestIntercepted"
    enum="Boolean" expires_after="2024-06-13">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Whether the network request was intercepted by the embedder of Android
    WebView. Intercepted requests are requests for which the
    shouldInterceptRequest() callback returned a non-null response. This is
    logged each time the shouldInterceptRequest() callback API is invoked by
    WebView, which corresponds to every network request.

    This histogram was added in M116. Prior milestones logged
    &quot;Android.WebView.ShouldInterceptRequest.InterceptionType2&quot;,
    however that histogram further broke down the &quot;intercepted ==
    true&quot; case by which URL scheme was used for the URL.
  </summary>
</histogram>

<histogram name="Android.WebView.SingleOrMultiProcess"
    enum="AndroidWebViewSingleOrMultiProcess" expires_after="never">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records whether WebView is being run in a single process or multi-process.
    This is recorded each time logs are uploaded. This is used as a dashboard
    filter.
  </summary>
</histogram>

<histogram name="Android.WebView.SitesVisitedWeekly" units="sites"
    expires_after="2024-11-14">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Measures the count of distinct sites visited per week in WebView. This is
    recorded at the time of a navigation when stored hashed site navigations are
    older than a week. The purpose of this metric is to slice it by package name
    to help characterize the usage of that package. This histogram uses eTLD+1
    as the definition of a site.
  </summary>
</histogram>

<histogram name="Android.WebView.Startup.CreationTime.InitReason"
    enum="WebViewStartupCallSite" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the reason for initialization (startChromiumLocked call), such as
    creating a WebView instance, calling a static method through getStatics() or
    other static methods.

    Recorded in M125+.
  </summary>
</histogram>

<histogram name="Android.WebView.Startup.CreationTime.Stage1.FactoryInit"
    units="ms" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    How long it takes to initialize a WebViewChromiumFactoryProvider. This is
    the first major phase of the WebViewChromium construction.
  </summary>
</histogram>

<histogram name="Android.WebView.Startup.CreationTime.Stage2.ProviderInit.Cold"
    units="ms" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    How long it takes to initialize a WebViewProvider, the first time that one
    is initialized. WebViewProvider initialization is the second major phase of
    WebViewChromium construction. The first initialization is recorded
    separately because it is usually much slower than subsequent ones.
  </summary>
</histogram>

<histogram name="Android.WebView.Startup.CreationTime.Stage2.ProviderInit.Warm"
    units="ms" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    How long it takes to initialize a WebViewProvider, when it is initialized
    the second or later times. WebViewProvider initialization is the second
    major phase of WebViewChromium construction. When it is not the first time,
    it is faster and thus recorded separately.
  </summary>
</histogram>

<histogram name="Android.WebView.Startup.CreationTime.StartChromiumLocked"
    units="ms" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>How long it takes to run startChromiumLocked.</summary>
</histogram>

<histogram name="Android.WebView.Startup.CreationTime.TotalFactoryInitTime"
    units="ms" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    The total time to initialize WebViewChromiumFactoryProvider. Reported on S+.

    This measurement is different from Stage1.FactoryInit as it takes into
    account time spent in framework. Does not overlap with
    Android.WebView.Startup.CreationTime.Stage2.* measurements.
  </summary>
</histogram>

<histogram name="Android.WebView.Startup.CreationTime.waitForUIThreadInit"
    units="ms" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records how long it took to wait for the UI thread before running
    startChromiumLocked. Only recorded if startChromiumLocked was posted as a
    task.

    Recorded in M125+.
  </summary>
</histogram>

<histogram
    name="Android.WebView.Startup.NonblockingServiceConnectionDelay.{ServiceName}"
    units="ms" expires_after="2023-09-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the delay between calling Context#bindService until the
    ServiceConnection#onServiceConnected is called. This should give an idea of
    how long it takes for nonembedded service connections to be established and
    capture any regressions in this. In the case when a service connection is
    dropped and then reconnected by the system, the histogram is only recorded
    for the first connection.
  </summary>
  <token key="ServiceName">
    <variant name="MetricsBridgeService"/>
    <variant name="VariationsSeedServer"/>
  </token>
</histogram>

<histogram name="Android.WebView.StorageAccessAutoGrantTime" units="ms"
    expires_after="2025-07-26">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the time it takes to auto grant a storage access request for calls
    to requestStorageAccess and requestStorageAccess for.

    Specifically used for WebView storage access auto grant checks which are
    checked against asset statements. We need to make a network call to request
    the asset statement from websites for this check. We only record this metric
    after we have attempted to make that network call.
  </summary>
</histogram>

<histogram name="Android.WebView.StorageAccessRelation2"
    enum="WebViewStorageAccessAppRelation" expires_after="2025-07-26">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the relation the top level origin has to the WebView application
    when requesting storage access. Recorded for both requestStorageAccess and
    requestStorageAccessFor.

    This metric can help inform future decisions for the storage access API
    shape in Android WebView.

    We deprecated Android.WebView.StorageAccessRelation in favor of this because
    that metric checked for any manfiest reference but we only want to compare
    storage access requests against manifest metadata moving forwards.

    Note: We cache our storage access request results so this metric is only
    recorded the first time SAA is requested pre-cache.
  </summary>
</histogram>

<histogram name="Android.WebView.SupervisedUser.UrlCheckResult"
    enum="AndroidWebViewSupervisedUserUrlCheckResult"
    expires_after="2025-08-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records whether a given URL is allowed to be loaded by the current device
    user. This is based on a combination of a call to GMS Core, which checks if
    the url is allowed, and the setting
    AwFeatures.WEBVIEW_SUPERVISED_USER_SITE_BLOCK, which determines if we
    actually block urls or only log the results.
  </summary>
</histogram>

<histogram name="Android.WebView.SupervisedUser.UrlCheckTime" units="ms"
    expires_after="2025-08-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the time taken to return from the call to GMS Core that checks if a
    given URL is allowed to be loaded by the current device user.
  </summary>
</histogram>

<histogram name="Android.WebView.SupervisedUser.UrlCheckTime.FirstRequest"
    units="ms" expires_after="2025-08-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the time taken to return from the call to GMS Core that checks if a
    given URL is allowed to be loaded by the current device user. This metric is
    only recorded on the first call to GMS Core.
  </summary>
</histogram>

<histogram name="Android.WebView.SupervisedUser.UrlCheckTime.SubsequentRequest"
    units="ms" expires_after="2025-08-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the time taken to return from the call to GMS Core that checks if a
    given URL is allowed to be loaded by the current device user. This metric is
    not recorded on the first call, only on subsequent ones.
  </summary>
</histogram>

<histogram name="Android.WebView.SupportLibrary.ClientIsCompat"
    enum="WebViewClientTypeEnum" expires_after="2025-07-31">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records whether the WebViewClient provided by the app is an instance of
    WebViewClientCompat (and therefore exposes AndroidX callbacks). This is
    recorded each time the app sets a new WebViewClient via
    WebView#setWebViewClient().
  </summary>
</histogram>

<histogram name="Android.WebView.TargetSdkVersion" enum="AndroidApiLevel"
    expires_after="2024-06-21">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    The version of the target SDK of the app WebView is running in. This is
    recorded once during startup.
  </summary>
</histogram>

<histogram name="Android.WebView.TextSelectionMenuOrdering"
    enum="AndroidWebViewTextSelectionMenuOrdering" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Counts the number of times Samsung specific text selection menu item
    ordering is used. Recorded when a WebView is initialized.
  </summary>
</histogram>

<histogram
    name="Android.WebView.UniversalAccess.OriginUrlMismatchInHistoryUtil"
    enum="BooleanAllowed" expires_after="2024-11-03">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records when we allow a cross origin push state from a file URL solely
    because AllowUniversalAccessFromFileURLs is enabled. This is logged from the
    implementation of history.
  </summary>
</histogram>

<histogram
    name="Android.WebView.UniversalAccess.OriginUrlMismatchInRenderFrame"
    enum="BooleanAllowed" expires_after="2023-12-10">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records when we allow a cross origin push state from a file URL solely
    because AllowUniversalAccessFromFileURLs is enabled. This is logged from the
    implementation of the frame renderer. This metric was expired between June
    4-23, 2023 and may be missing data.
  </summary>
</histogram>

<histogram name="Android.WebView.UsedInPopupWindow"
    enum="WebViewUsedInPopupWindow" expires_after="2024-12-01">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Recorded when a WebView is attached to the window. Records whether the
    window the WebView is attached to is a PopupWindow.
  </summary>
</histogram>

<histogram name="Android.WebView.UserAgentClientHintsMetadata.AvailableType"
    enum="UserAgentMetadataAvailableType" expires_after="2024-12-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records when we propagate user-agent client hints metadata in different
    cases. This give us an idea to understand better how the user-agent metadata
    overrides and user-agent overrides work. This is recorded every time webview
    updates the user-agent or user-agent medatadata for the request.
  </summary>
</histogram>

<histogram name="Android.WebView.VariationsHeaderLength" units="bytes"
    expires_after="2023-07-22">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the length of the WebView variations header. Recorded every time
    WebViewCompat.getVariationsHeader() is called.
  </summary>
</histogram>

<histogram name="Android.WebView.Visibility.Global" enum="WebViewVisibility"
    expires_after="2024-11-14">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the global visibility state of WebView in seconds, updated with
    every Metrics upload. The Visible bucket counts total seconds that any
    WebView was visible (the view itself was visible, and was attached to the
    view hierarchy of a visible window). The NotVisible bucket counts time since
    WebView initialization for which no WebView was considered visible, or no
    WebView existed. The total of these two buckets reflects the amount of time
    covered by metrics collection.
  </summary>
</histogram>

<histogram name="Android.WebView.Visibility.PerWebView"
    enum="WebViewVisibility" expires_after="2024-11-14">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records per-WebView visibility duration in seconds, updated with every
    Metrics upload. The Visible bucket counts the total time in seconds that
    each WebView was considered visible (the view itself was visible, and was
    attached to the view hierarchy of a visible window). If more than one
    WebView is considered visible, then each WebView contributes independently.
    The NotVisible bucket counts the duration that each WebView exists but not
    in a visible state. As with the Visible bucket, each WebView contributes
    independently, and thus this bucket is not incremented when no WebViews
    exist.
  </summary>
</histogram>

<histogram name="Android.WebView.VisibleScheme.Global" enum="WebViewUrlScheme"
    expires_after="2024-11-14">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the number of seconds any WebView was visible (the view itself was
    visible, and was attached to the view hierarchy of a visible window) with a
    particular URL scheme in the primary main frame. Updated with every Metrics
    upload. Note that the seconds are logged as the count for the scheme enum
    values.
  </summary>
</histogram>

<histogram name="Android.WebView.VisibleScheme.PerWebView"
    enum="WebViewUrlScheme" expires_after="2024-11-14">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the number of seconds each WebView was visible (the view itself was
    visible, and was attached to the view hierarchy of a visible window) with a
    particular URL scheme in the primary main frame. Updated with every Metrics
    upload. Note that the seconds are logged as the count for the scheme enum
    values.
  </summary>
</histogram>

<histogram name="Android.WebView.VisibleScreenCoverage.Global" units="%"
    expires_after="2024-11-14">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the number of seconds any WebView was visible (the view itself was
    visible, and was attached to the view hierarchy of a visible window) by
    screen coverage percentage. The screen coverage of all WebViews is merged so
    overlaps do not count more than once and do not increase the percentage.
    Updated with every Metrics upload. Not recorded when there is no visible
    WebView. Fractional percentages are rounded down. Note that the seconds are
    logged as the count for the percentages.
  </summary>
</histogram>

<histogram name="Android.WebView.VisibleScreenCoverage.PerWebView" units="%"
    expires_after="2024-11-14">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the number of seconds each WebView was visible (the view itself was
    visible, and was attached to the view hierarchy of a visible window) by
    screen coverage percentage. The screen coverage of these WebViews is not
    merged. Updated with every Metrics upload. Not recorded when there is no
    visible WebView. Fractional percentages are rounded down. Note that the
    seconds are logged as the count for the percentages.
  </summary>
</histogram>

<histogram name="Android.WebView.VisibleScreenCoverage.PerWebView.{scheme}"
    units="%" expires_after="2024-11-14">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the number of seconds each WebView was visible (the view itself was
    visible, and was attached to the view hierarchy of a visible window) with a
    {scheme} scheme in the primary main frame by screen coverage percentage. The
    screen coverage of these WebViews is not merged. Updated with every Metrics
    upload. Not recorded when there is no visible WebView. Fractional
    percentages are rounded down. Note that the seconds are logged as the count
    for the percentages.
  </summary>
  <token key="scheme">
    <variant name="about"/>
    <variant name="blob"/>
    <variant name="chrome"/>
    <variant name="content"/>
    <variant name="data"/>
    <variant name="empty"/>
    <variant name="file"/>
    <variant name="ftp"/>
    <variant name="http"/>
    <variant name="https"/>
    <variant name="intent"/>
    <variant name="javascript"/>
    <variant name="unknown"/>
  </token>
</histogram>

<histogram name="Android.WebView.VizCompositorRunnerPostTaskBlockTime"
    units="microseconds" expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>src/android_webview/OWNERS</owner>
  <summary>
    Records the total time spent running a blocking task in
    VizCompositorThreadRunnerWebView::PostTaskAndBlock(). This is recorded only
    on devices that support high resolution timers.
  </summary>
</histogram>

<histogram name="AndroidSearchEngineLogo.Events"
    enum="AndroidSearchEngineLogoEvents" expires_after="2024-09-22">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts occurences of various events related to the Search Engine Logo
    feature. When enabled, the feature will show the logo of the default search
    engine in the omnibox. These events record the performance of fetching
    non-Google logos.
  </summary>
</histogram>

</histograms>

</histogram-configuration>