<!--
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 Chrome histograms
along with a detailed description for each histogram.

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

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

<histogram-configuration>

<histograms>

<histogram name="Chrome.AppMenu.MenuHostInitToNextFramePresented" units="ms"
    expires_after="2026-09-06">
  <owner>robliao@chromium.org</owner>
  <summary>
    Records time from when Widget::Show() is called to when the first frame is
    presented for the App Menu. It's logged every time the app menu opens.
  </summary>
</histogram>

<histogram name="Chrome.BuildState.BuildStateUpdateType"
    enum="BuildStateUpdateType" expires_after="2027-02-02">
  <owner>ajgo@chromium.org</owner>
  <owner>anunoy@chromium.org</owner>
  <summary>
    Result of polling for the installed version of Chrome. Logged once at
    startup then approximately every two hours.
  </summary>
</histogram>

<histogram name="Chrome.BuildState.PageBlockingUpdate"
    enum="PageBlockingUpdate" expires_after="2027-02-02">
  <owner>ajgo@chromium.org</owner>
  <owner>ellyjones@chromium.org</owner>
  <summary>
    Emitted during every upload of UMA records for the current session when a
    single tab and a single window are blocking an update from applying. The
    chrome:// scheme value is not logged if a more specific value could be
    logged. Only recorded on Windows, Linux and Mac.
  </summary>
</histogram>

<histogram name="Chrome.BuildState.PendingUpdateState"
    enum="PendingUpdateState" expires_after="2027-02-02">
  <owner>ajgo@chromium.org</owner>
  <owner>ellyjones@chromium.org</owner>
  <summary>
    Records if an update is available, and the state of the client that is
    currently blocking an update from applying. Recorded on every upload of UMA
    data for the current session. Only recorded on Windows, Linux and Mac.
  </summary>
</histogram>

<histogram name="Chrome.BuildState.TimeSinceUpdateAvailable" units="minutes"
    expires_after="2027-02-02">
  <owner>ajgo@chromium.org</owner>
  <owner>ellyjones@chromium.org</owner>
  <summary>
    The time since an update has been available. Recorded on every upload of UMA
    data for the current session when an update is available. Only recorded on
    Windows, Linux and Mac.
  </summary>
</histogram>

<histogram name="Chrome.DWriteFontProxy.GetFontFailedHResult" enum="Hresult"
    expires_after="2026-11-01">
  <owner>andresrperez@chromium.org</owner>
  <owner>anthonyvd@chromium.org</owner>
  <owner>drott@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <summary>
    The HResult of failed GetFont calls in
    DWriteFontProxyImpl::GetFontFileHandles.
  </summary>
</histogram>

<histogram name="Chrome.DWriteFontProxy.GetFontFamilyFailedHResult"
    enum="Hresult" expires_after="2026-08-31">
  <owner>andresrperez@chromium.org</owner>
  <owner>anthonyvd@chromium.org</owner>
  <owner>drott@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <summary>
    The HResult of failed GetFontFamily calls in
    DWriteFontProxyImpl::GetFontFileHandles.
  </summary>
</histogram>

<histogram name="Chrome.DWriteFontProxy.InvokedIPC" enum="DWriteFontProxyIPC"
    expires_after="2027-01-03">
  <owner>andresrperez@chromium.org</owner>
  <owner>drott@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <owner>anthonyvd@chromium.org</owner>
  <owner>chrome-catan@google.com</owner>
  <summary>
    Records when an IPC is made to DwriteFontProxy. The bucket recorded is the
    IPC invoked.
  </summary>
</histogram>

<histogram name="Chrome.DWriteFontProxy.WinLastError" enum="WinGetLastError"
    expires_after="2027-01-03">
  <owner>andresrperez@chromium.org</owner>
  <owner>drott@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <summary>
    The Windows last error obtained from a call to GetLastError after a failed
    attempt to obtain the file handle for a font.
  </summary>
</histogram>

<histogram name="Chrome.FetchKeepAlive.ProcessAlive.HeldPastLastWindowClose"
    enum="Boolean" expires_after="2027-06-30">
  <owner>helmutjanuschka@chromium.org</owner>
  <owner>mych@chromium.org</owner>
  <summary>
    Recorded each time Chrome releases the FETCH_KEEPALIVE_REQUEST
    ScopedKeepAlive. True if no browser windows were open at that moment, i.e.
    this keep-alive was the only reason the process was still alive. Desktop
    only; only when kKeepAliveBrowserProcessAlive is enabled. See
    https://crbug.com/408010432.
  </summary>
</histogram>

<histogram name="Chrome.FetchKeepAlive.ProcessAlive.HoldDuration" units="ms"
    expires_after="2027-06-30">
  <owner>helmutjanuschka@chromium.org</owner>
  <owner>mych@chromium.org</owner>
  <summary>
    Wall-clock duration the FETCH_KEEPALIVE_REQUEST ScopedKeepAlive was held
    (in-flight fetch keepalive URLLoader count 0 -&gt; &gt;0 -&gt; 0). Desktop
    only; only when kKeepAliveBrowserProcessAlive is enabled. See
    https://crbug.com/408010432.
  </summary>
</histogram>

<histogram name="Chrome.FetchKeepAlive.ProcessAlive.MaxConcurrentLoaders"
    units="loaders" expires_after="2027-06-30">
  <owner>helmutjanuschka@chromium.org</owner>
  <owner>mych@chromium.org</owner>
  <summary>
    Peak number of fetch keepalive URLLoaders in flight during a single hold of
    the FETCH_KEEPALIVE_REQUEST ScopedKeepAlive. Desktop only; only when
    kKeepAliveBrowserProcessAlive is enabled. See https://crbug.com/408010432.
  </summary>
</histogram>

<histogram name="Chrome.FontDataManager.NumMappedFiles" units="files"
    expires_after="2027-01-10">
  <owner>andresrperez@chromium.org</owner>
  <owner>drott@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <owner>anthonyvd@chromium.org</owner>
  <owner>chrome-catan@google.com</owner>
  <summary>
    Records the amount of currently mapped font files in a renderer's Font Data
    Manager. This is recorded whenever a new mapped file is added to the cache.
  </summary>
</histogram>

<histogram name="Chrome.FontDataService.CreateResult"
    enum="FontDataServiceCreateResult" expires_after="2027-01-03">
  <owner>andresrperez@chromium.org</owner>
  <owner>drott@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <owner>anthonyvd@chromium.org</owner>
  <owner>chrome-catan@google.com</owner>
  <summary>
    Records the result of creating the typeface result object in the browser
    process following a request for matching font name from a renderer process.
  </summary>
</histogram>

<histogram name="Chrome.FontDataService.EmptyPathOnGetFileHandle"
    enum="Boolean" expires_after="2027-01-03">
  <owner>andresrperez@chromium.org</owner>
  <owner>drott@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <summary>
    Records whether the font path is empty when attempting to obtain the file
    handle for a font.
  </summary>
</histogram>

<histogram name="Chrome.FontDataService.FileHandlePathReferencesParent"
    enum="Boolean" expires_after="2026-11-01">
  <owner>andresrperez@chromium.org</owner>
  <owner>drott@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <owner>anthonyvd@chromium.org</owner>
  <owner>chrome-catan@google.com</owner>
  <summary>
    Records whether the font path references a parent (contains &quot;..&quot;)
    when trying to get a file handle to a font in FontDataService. This would
    prevent the creation of the base::File from succeeding.
  </summary>
</histogram>

<histogram name="Chrome.FontDataService.InvokedIPC" enum="FontDataServiceIPC"
    expires_after="2027-01-03">
  <owner>andresrperez@chromium.org</owner>
  <owner>drott@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <owner>anthonyvd@chromium.org</owner>
  <owner>chrome-catan@google.com</owner>
  <summary>
    Records when an IPC is made to FontDataService. The bucket recorded is the
    IPC invoked.
  </summary>
</histogram>

<histogram name="Chrome.FontDataService.MatchLocalFont.FilterSuccess"
    enum="Boolean" expires_after="2026-12-31">
  <owner>andresrperez@chromium.org</owner>
  <owner>drott@chromium.org</owner>
  <owner>dileepmaurya@microsoft.com</owner>
  <summary>
    Records whether the local font matching found a matching font during a
    MatchLocalFont call. True means a font was found by PostScript name or full
    font name, false means no match was found in the system font set.
  </summary>
</histogram>

<histogram name="Chrome.FontDataService.MemoryMapCacheSize" units="count"
    expires_after="2027-01-03">
  <owner>andresrperez@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <summary>
    Records the size of the assets cache used when using a shared memory region.
    If the cache is over the size limit, a dump without crashing is triggered.
  </summary>
</histogram>

<histogram name="Chrome.FontDataService.WinLastError" enum="WinGetLastError"
    expires_after="2027-01-03">
  <owner>andresrperez@chromium.org</owner>
  <owner>drott@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <summary>
    The Windows last error obtained from a call to GetLastError after a failed
    attempt to obtain the file handle for a font.
  </summary>
</histogram>

<histogram name="Chrome.Headless.Action" enum="HeadlessChromeAction"
    expires_after="2027-12-31">
  <owner>kvitekp@google.com</owner>
  <owner>headless-owners@chromium.org</owner>
  <component>1456776</component>
  <summary>
    Records headless chrome action, e.g. remote debugging, screenshot, print to
    PDF, DOM dump. Reported once when the browser process is launched in
    headless mode. If more than one action is requested only one will be
    reported.

    This histogram expired in December 2023 and was revived in M142.
  </summary>
</histogram>

<histogram name="Chrome.ProcessSingleton.CreateLockFileWithTimeout.ErrorCode"
    enum="WinGetLastError" expires_after="2027-06-01">
  <owner>etienneb@chromium.org</owner>
  <owner>grt@chromium.org</owner>
  <summary>
    Records the Windows last error code (GetLastError) when lock file creation
    fails for a reason other than a sharing violation. Recorded once per fatal
    failure on Windows.
  </summary>
</histogram>

<histogram name="Chrome.ProcessSingleton.CreateLockFileWithTimeout.Result"
    enum="BooleanSuccess" expires_after="2027-06-01">
  <owner>etienneb@chromium.org</owner>
  <owner>grt@chromium.org</owner>
  <summary>
    Records whether creating the lock file eventually succeeded. Recorded once
    per attempt to create the lock file with a timeout on Windows.
  </summary>
</histogram>

<histogram name="Chrome.ProcessSingleton.CreateLockFileWithTimeout.RetryCount"
    units="retries" expires_after="2027-06-01">
  <owner>etienneb@chromium.org</owner>
  <owner>grt@chromium.org</owner>
  <summary>
    Records the number of retries it took to successfully acquire the lock file.
    Recorded once per successful lock file creation on Windows. A value of 0
    indicates that the lock file was successfully acquired on the first attempt
    with no retries.
  </summary>
</histogram>

<histogram name="Chrome.ProcessSingleton.NotifyResult" enum="NotifyResult"
    expires_after="2027-06-29">
  <owner>gab@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <summary>
    The result of every rendez-vous reported once per browser process launch.
  </summary>
</histogram>

<histogram name="Chrome.ProcessSingleton.RemoteHungProcessTerminateReason"
    enum="RemoteHungProcessTerminateReason" expires_after="2027-06-29">
  <owner>gab@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <summary>The reason of remote hang processes termination.</summary>
</histogram>

<histogram name="Chrome.ProcessSingleton.RemoteProcessInteractionResult"
    enum="RemoteProcessInteractionResult" expires_after="2027-06-29">
  <owner>gab@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <summary>
    Used to send the result of interaction with remote process as histograms in
    case when remote process influences on start.
  </summary>
</histogram>

<histogram name="Chrome.ProcessSingleton.TerminateProcessErrorCode.Posix"
    enum="PopularOSErrno" expires_after="2027-06-29">
  <owner>gab@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <summary>
    The error code of remote process termination on Posix in case when remote
    process hung.
  </summary>
</histogram>

<histogram name="Chrome.ProcessSingleton.TerminateProcessTime" units="ms"
    expires_after="2027-06-29">
  <owner>gab@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <summary>
    Time it takes from TerminateProcess call to the moment when we stop waiting
    for remote process switches to signal state.
  </summary>
</histogram>

<histogram name="Chrome.ProcessSingleton.TerminationWaitErrorCode.Windows"
    enum="WinGetLastError" expires_after="2027-06-29">
  <owner>gab@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <summary>
    The error code of waiting for remote process termination on Windows.
  </summary>
</histogram>

<histogram name="Chrome.ProcessSingleton.TimeToCreate" units="ms"
    expires_after="2027-06-29">
  <owner>etienneb@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Time it takes to grab the process singleton. Reported once per successful
    attempt at obtaining the singleton.
  </summary>
</histogram>

<histogram name="Chrome.ProcessSingleton.TimeToNotify" units="ms"
    expires_after="2027-06-29">
  <owner>etienneb@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Time it takes to find the process singleton owner and notify it. Reported
    once per successful rendez-vous. This does not include time spent in the
    fast notification path (chrome_exe_main_win.cc).
  </summary>
</histogram>

<histogram
    name="Chrome.SystemNetworkContextManager.NetworkSandboxEarlyLaunchCrashed"
    enum="Boolean" expires_after="2026-07-05">
  <owner>wfh@chromium.org</owner>
  <owner>mmenke@chromium.org</owner>
  <summary>
    Reported if the network service process crashed early in startup, before IPC
    and mojo services are available.
  </summary>
</histogram>

<histogram
    name="Chrome.SystemNetworkContextManager.NetworkSandboxLaunchFailed.ErrorCode"
    enum="LaunchErrorCodes" expires_after="2026-07-05">
  <owner>wfh@chromium.org</owner>
  <owner>mmenke@chromium.org</owner>
  <summary>
    The platform-specific error code returned from a failed attempt to launch
    the network service process sandboxed. This is recorded if an attempt is
    made to launch a sandboxed network service process, and the launch fails.
    See also ChildProcess.LaunchFailed.UtilityProcessErrorCode.
  </summary>
</histogram>

<histogram
    name="Chrome.SystemNetworkContextManager.NetworkSandboxLaunchFailed.WinLastError"
    enum="WinGetLastError" expires_after="2025-12-31">
  <owner>wfh@chromium.org</owner>
  <owner>mmenke@chromium.org</owner>
  <summary>
    The Windows last error obtained from a call to GetLastError after a failed
    attempt to launch the network service process sandboxed. This is recorded if
    an attempt is made to launch a sandboxed network service process on Windows,
    and the launch fails. See also ChildProcess.LaunchFailed.WinLastError.
  </summary>
</histogram>

<histogram name="Chrome.SystemNetworkContextManager.NetworkSandboxState"
    enum="NetworkSandboxState" expires_after="2027-01-17">
  <owner>wfh@chromium.org</owner>
  <owner>mmenke@chromium.org</owner>
  <summary>
    The operational state of the network sandbox. This is recorded each time the
    browser attempts to launch the network service process. This might be
    recorded multiple times from the same client if the network service process
    crashes or does not launch correctly. This is not recorded if the network
    service is running in-process.
  </summary>
</histogram>

<histogram name="Chrome.Tabs.AnimationSmoothness.TabLoading" units="%"
    expires_after="2027-01-09">
  <owner>yichenz@chromium.org</owner>
  <owner>chromeos-wmp@google.com</owner>
  <summary>
    Tracks the animation smoothness of tab loading animation. A tracker starts
    when the first tab loading animation starts and stops after the last one
    stops for each browser window. The metric is emitted when the tracker stops.
  </summary>
</histogram>

<histogram name="ChromeColors.ColorOnLoad" enum="ChromeColorsInfo"
    expires_after="2027-02-07">
  <owner>tiborg@chromium.org</owner>
  <owner>chrome-desktop-ntp@google.com</owner>
  <summary>
    Records installed color id every time theme service is initialized from
    prefs. Happens once per profile load if the user has a GM2 color installed.

    This histogram records only GM2 colors. For tracking the installed GM3 color
    see the ChromeColors.DynamicColorOnLoad histogram. Or see the
    ChromeColors.ColorType histogram for the type of installed Chrome color.
  </summary>
</histogram>

<histogram name="ChromeColors.ColorSchemeOnLoad" enum="BrowserColorScheme"
    expires_after="2027-06-01">
  <owner>dpenning@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Recorded every time the theme service is initialized from prefs (happens
    once per profile load). Records the browser color scheme mode (Light, Dark,
    System).
  </summary>
</histogram>

<histogram name="ChromeColors.ColorType" enum="ChromeColorType"
    expires_after="2027-01-03">
  <owner>tiborg@chromium.org</owner>
  <owner>chrome-desktop-ntp@google.com</owner>
  <summary>
    Records installed color type every time theme service is initialized from
    prefs. Happens once per profile load if the user has a Chrome color
    installed.

    To track, which color is installed see the ChromeColors.ColorOnLoad
    histogram for GM2 colors and the ChromeColors.DynamicColorOnLoad histogram
    for GM3 colors.
  </summary>
</histogram>

<histogram name="ChromeColors.DynamicColorOnLoad"
    enum="DynamicChromeColorsInfo" expires_after="2026-12-27">
  <owner>tiborg@chromium.org</owner>
  <owner>chrome-desktop-ntp@google.com</owner>
  <summary>
    Records installed color id every time theme service is initialized from
    prefs. Happens once per profile load if the user has a GM3 color installed.

    This histogram records only GM3 colors. For tracking the installed GM2 color
    see the ChromeColors.ColorOnLoad histogram. Or see the
    ChromeColors.ColorType histogram for the type of installed Chrome color.
  </summary>
</histogram>

<histogram name="ChromeElf.ApplyHookResult" enum="NTSTATUS"
    expires_after="M121">
  <owner>pmonette@chromium.org</owner>
  <owner>kristianm@chromium.org</owner>
  <summary>
    Records the NTSTATUS result that was returned when attempting to hook
    NtMapViewOfSection during chrome_elf.dll initialization. Emitted
    asynchronously shortly after startup. This histogram was expired between M82
    and M114.
  </summary>
</histogram>

<histogram name="ChromeElf.Beacon.RetryAttemptsBeforeSuccess" units="units"
    expires_after="M121">
  <owner>pmonette@chromium.org</owner>
  <owner>kristianm@chromium.org</owner>
  <summary>
    Records the number of attempts needed before third-party DLL blocking was
    properly set up. This is logged immediately after a successful setup. Only
    recorded on Windows. This histogram was expired between M82 and M114.
  </summary>
</histogram>

<histogram name="ChromeElf.Beacon.SetupStatus" enum="BlocklistSetup"
    expires_after="M121">
  <owner>pmonette@chromium.org</owner>
  <owner>kristianm@chromium.org</owner>
  <summary>
    Records the successes and failures when running the third-party DLL blocking
    setup code, taking into account the safety beacon. Used to determine how
    often the third-party DLL blocking is disabled because it failed to
    initialize properly twice in a row. Only recorded on Windows. This histogram
    was expired between M82 and M114.
  </summary>
</histogram>

<histogram name="ChromeElf.ExtensionPoint.EnableState"
    enum="ExtensionPointEnableState" expires_after="M121">
  <owner>wfh@chromium.org</owner>
  <owner>ssmole@microsoft.com</owner>
  <summary>
    Records the outcome of the heuristic to selectively enable or disable the
    ProcessExtensionPointDisablePolicy. Used to determine how often the policy
    will be enabled in practice, as the heuristic detects the presence of third
    party software. Only recorded on Windows. This histogram was expired between
    M93 and M114.
  </summary>
</histogram>

</histograms>

</histogram-configuration>
