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

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

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

<histogram-configuration>

<histograms>

<variants name="HardFaultCheckpoint">
  <variant name="MessageLoopStart"
      summary="from startup to the start of the main thread's message loop,
               not including first runs of the browser"/>
  <variant name="WindowFirstPaint"
      summary="when the first browser window finishes painting, including
               launches where ShouldLogStartupHistogram() is false"/>
</variants>

<variants name="StartActivityType">
  <variant name="Tabbed"
      summary="Chrome starts up with intent to ChromeTabbedActivity"/>
  <variant name="WebApk"
      summary="Chrome starts up with intent to WebApkActivity"/>
</variants>

<!-- LINT.IfChange(StartupLaunchInfoBarType) -->

<variants name="StartupLaunchInfoBarType">
  <variant name="ForegroundOptIn"
      summary="Opt-in to foreground launch on login"/>
  <variant name="ForegroundOptOut"
      summary="Opt-out of foreground launch on login"/>
</variants>

<!-- LINT.ThenChange(//chrome/browser/startup/startup_launch_infobar_manager.h:InfoBarType) -->

<!-- LINT.IfChange(StartupLaunchMode) -->

<variants name="StartupLaunchMode">
  <variant name="Foreground" summary="Foreground"/>
</variants>

<!-- LINT.ThenChange(//chrome/browser/startup/startup_launch_features.h:LaunchOnStartupMode) -->

<variants name="StartupTemperature">
  <variant name="" summary="All startups"/>
  <variant name=".ColdStartup"
      summary="Startup was cold (mostly hard faults)."/>
  <variant name=".LukewarmStartup"
      summary="Startup was lukewarm (hard-fault count between the warm and
               cold thresholds)."/>
  <variant name=".WarmStartup"
      summary="Startup was warm (almost no hard faults)."/>
</variants>

<variants name="StartupType">
  <variant name="NewTabPage" summary="Chrome starts into the New Tab Page."/>
</variants>

<histogram name="Startup.AfterStartupTaskCount" units="units"
    expires_after="2025-10-26">
  <owner>michaeln@chromium.org</owner>
  <summary>
    The number of after-startup tasks that were queued prior to startup
    completion and deferred until that time.
  </summary>
</histogram>

<histogram name="Startup.AfterStartupTaskDelayedUntilTime" units="ms"
    expires_after="2027-01-17">
  <owner>michaeln@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time from the process creation until deferred after-startup tasks began
    running. The histogram was expired and extended in M119 again.
  </summary>
</histogram>

<histogram name="Startup.Android.BrowserProcessCreationReason"
    enum="ProcessCreationReason" expires_after="2027-01-03">
  <owner>mthiesse@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Records the first type of component created after process creation - most
    likely the reason the process was created - at the time the component is
    created on Android P+.

    Differences in distribution between Android versions (particularly with
    respect to ContentProviders) likely indicate a change to Android startup
    that broke our detection.
  </summary>
</histogram>

<histogram
    name="Startup.Android.Cold.ExperimentalProcessStart.TimeToFirstContentfulPaint.{StartActivityType}"
    units="ms" expires_after="2027-02-14">
  <owner>nafisabedin@google.com</owner>
  <owner>pasko@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time from process creation to FirstContentfulPaint happening in this
    activity. Cold start is determined by whether the process creation reason is
    Activity. This also filters out non-Activity launches.

    Recorded only for tabbed activity and on cold starts. Therefore it cannot be
    recorded more than once in the application lifetime.

    Preserves the same recording semantics as
    Startup.Android.Cold.TimeToFirstContentfulPaint3.{StartActivityType}.
  </summary>
</histogram>

<histogram
    name="Startup.Android.Cold.ExperimentalProcessStart.TimeToFirstNavigationCommit.{StartActivityType}"
    units="ms" expires_after="2027-02-14">
  <owner>nafisabedin@google.com</owner>
  <owner>pasko@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time from process start to the FirstNavigationCommit happening for a
    particular {StartActivityType}. Cold start is determined by whether the
    process creation reason is Activity. This also filters out non-Activity
    launches.

    Recorded for both Tabbed Activities and WebApks only during cold starts.

    Preserves the same recording semantics as
    Startup.Android.Cold.TimeToFirstNavigationCommit3.{StartActivityType}.
  </summary>
</histogram>

<histogram
    name="Startup.Android.Cold.ExperimentalProcessStart.TimeToFirstVisibleContent"
    units="ms" expires_after="2027-02-14">
  <owner>nafisabedin@google.com</owner>
  <owner>pasko@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time from process start to the moment Chrome first appears ready to the
    user. Cold start is determined by whether the process creation reason is
    Activity. This also filters out non-Activity launches.

    Recorded once per application launch and only during cold starts.

    Preserves the same recording semantics as
    Startup.Android.Cold.TimeToFirstVisibleContent4.
  </summary>
</histogram>

<histogram name="Startup.Android.Cold.FirstSafeBrowsingApiResponseTime2.Tabbed"
    units="ms" expires_after="2027-02-14">
  <owner>xinghuilu@chromium.org</owner>
  <owner>nafisabedin@google.com</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time it took GmsCore SafeBrowsing API to respond to the first
    SafeBrowsing request for the Tabbed Activity during a cold start. Cold start
    is determined by whether the process creation reason is Activity.

    Similarly to Startup.Android.Cold.TimeToFirstVisibleContent2 omits recording
    a sample:

    1. when the first Activity is a CCT/WebAPK/TWA,

    2. when an error page is committed,

    3. for non-http(s) pages,

    4. for downloads,

    5. when another activity was shown and hidden before the first navigation
    committed,

    6. when the first navigation was preceded by showing a NTP (New Tab Page).

    This v2 metric is recorded at the same time as
    Startup.Android.Cold.TimeToFirstNavigationCommit3.Tabbed, utilizing
    ColdStartTracker. Only logged if the URL of the first navigation is checked
    by SafeBrowsing API.

    NOTE: This metric is broken before October 2024 on Pixel 6+ on Android 14+
    due to an issue with the recording of BrowserProcessCreationReason affecting
    ColdStartTracker downstream.
  </summary>
</histogram>

<histogram
    name="Startup.Android.Cold.TimeToFirstContentfulPaint3.{StartActivityType}"
    units="ms" expires_after="2027-02-14">
  <owner>pasko@chromium.org</owner>
  <owner>nafisabedin@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time from activity creation on a cold start to FirstContentfulPaint
    happening in this activity. Cold start is determined by whether the process
    creation reason is Activity.

    Recorded only for tabbed activity and on cold starts. Therefore it cannot be
    recorded more than once in the application lifetime.

    Similarly to Startup.Android.Cold.TimeToFirstVisibleContent2 omits recording
    a sample:

    1. when the first Activity is a CCT/WebAPK/TWA,

    2. when an error page is committed,

    3. for non-http(s) pages,

    4. for downloads,

    5. when another activity was shown and hidden before the first navigation
    committed,

    6. when the first navigation was preceded by showing a NTP (New Tab Page).

    This v3 metric uses ColdStartTracker and is a rename for
    Startup.Android.Experimental.FirstContentfulPaint.Tabbed. It otherwise
    preserves the same semantics and aims to replace the original v1 metric as
    well.

    NOTE: This metric is broken before October 2024 on Pixel 6+ on Android 14+
    due to an issue with the recording of BrowserProcessCreationReason affecting
    ColdStartTracker downstream. {StartActivityType}
  </summary>
</histogram>

<histogram name="Startup.Android.Cold.TimeToFirstFrame2" units="ms"
    expires_after="2027-07-02">
  <owner>nafisabedin@google.com</owner>
  <owner>yfriedman@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time from process start to the moment the first frame is drawn for the
    app, as determined by Android. Recorded regardless of what is loaded (i.e.
    NTP, web, etc.). The intent is to provide a general overview of
    user-perceived cold start time.

    Recorded once per application launch, only when the start is determined to
    be cold. Utilizes ApplicationStartInfo's getStartComponent() which is only
    available starting with Android 16. The metric isn't recorded if Chrome is
    backgrounded in between activity creation and recording of the metric.
  </summary>
</histogram>

<histogram
    name="Startup.Android.Cold.TimeToFirstNavigationCommit3.{StartActivityType}"
    units="ms" expires_after="never">
<!-- expires-never: used for a guiding metric: TimeToFirstVisibleContent4 -->

  <owner>pasko@chromium.org</owner>
  <owner>agrieve@chromium.org</owner>
  <owner>nafisabedin@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time from activity creation on a cold start to the FirstNavigationCommit
    happening for a particular {StartActivityType}. Cold start is determined by
    whether the process creation reason is Activity.

    Recorded for both Tabbed Activities and WebApks only during cold starts.

    Omits recording a sample:

    1. when the first Activity is a CCT/TWA,

    2. when an error page is committed,

    3. for non-http(s) pages,

    4. for downloads,

    5. when another activity was shown and hidden before the first navigation
    committed,

    6. when the first navigation was preceded by showing a NTP (New Tab Page).

    NOTE: This metric is broken before October 2024 on Pixel 6+ on Android 14+
    due to an issue with the recording of BrowserProcessCreationReason affecting
    ColdStartTracker downstream.
  </summary>
</histogram>

<histogram name="Startup.Android.Cold.TimeToFirstVisibleContent4" units="ms"
    expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->

  <owner>yfriedman@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <owner>fredmello@chromium.org</owner>
  <owner>nafisabedin@google.com</owner>
  <owner>chrome-ds@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time from the first Chrome tabbed activity creation to the moment Chrome
    first appears ready to the user.

    This metric captures when the omnibox is painted and either a navigation has
    committed or a Paint Preview is shown. The intent is to reflect Clank's
    perceived cold start performance regardless of different launch paths, while
    controlling for the factors that we have the most direct influence over and
    minimizing external factors. Note that network connectivity is mostly but
    not entirely omitted as it does impact the initial response time for a site
    which impacts the omnibox UX and loading metric.

    This metric captures the value of the first emitted metric out of the
    'Startup.Android.Cold.TimeToFirstNavigationCommit3.Tabbed' and
    'Browser.PaintPreview.TabbedPlayer.TimeToFirstBitmap' metrics and emits the
    value, skipping the record when both are missing.

    This metric is only recorded once per application lifetime, and only for the
    cold starts. An important requirement for the startup to be Cold is that the
    Tabbed Activity has to be the process creation Reason. See histogram
    Startup.Android.BrowserProcessCreationReason and code in ColdStartTracker.
    Determining the process creation reason is only reliable starting at Android
    P.

    Specifically, it is recorded for the first foreground committed http(s) URL
    in the primary frame if that first navigation is not: an error,
    same-document navigation, or fragment navigation.

    This metric is not recorded:

    - If another navigation occurs before the first navigation commit and the
    Paint Preview show.

    - If the navigation is pre-warmed, is a background navigation, or fails to
    be committed (e.g. cancelled, network error, or error due to lack of
    connectivity).

    - If the activity was ever backgrounded between activity creation and this
    metric reporting.

    - If the app opens to the Chrome Start page.

    - For WebApps, PWAs or WebApks.

    - For NTP.

    This metric is expected be stable from milestone to milestone. Updating
    Chrome or the Android system image on the device are expected to result in a
    noticeable slowdown on the first cold startup after.

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

<histogram name="Startup.Android.Cold.TimeToStartupFcpOrPaintPreview"
    units="ms" expires_after="2026-12-27">
  <owner>ckitagawa@chromium.org</owner>
  <owner>nafisabedin@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Android: The time from the activity creation point to the moment the content
    may first appear ready to a user. The intent is to capture readiness of
    Chrome regardless of whether Chrome is launched into native UI or a web
    page. The recorded value is the minimum of
    'Startup.Android.Cold.TimeToFirstContentfulPaint3.Tabbed'
    'Browser.PaintPreview.TabbedPlayer.TimeToFirstBitmap' metric values.

    This metric is only recorded once per application lifetime, and only for
    cold starts. TimeToFirstContentfulPaint3.Tabbed utilizes ColdStartTracker
    which is only reliable starting with Android P as ProcessCreationReason is
    used to determine cold starts.
  </summary>
</histogram>

<histogram
    name="Startup.Android.Cold.WithPersistentState.TimeToFirstContentfulPaint3.{StartActivityType}"
    units="ms" expires_after="2027-02-07">
  <owner>pasko@chromium.org</owner>
  <owner>nafisabedin@google.com</owner>
  <owner>clhager@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time from activity creation on a cold start to FirstContentfulPaint
    happening in this activity. Cold start is determined by whether the process
    creation reason is Activity.

    Recorded only for tabbed activity when persistent state is being restored
    and on cold starts. Therefore it cannot be recorded more than once in the
    application lifetime.

    Similarly to Startup.Android.Cold.TimeToFirstVisibleContent2 omits recording
    a sample:

    1. when the first Activity is a CCT/WebAPK/TWA,

    2. when an error page is committed,

    3. for non-http(s) pages,

    4. for downloads,

    5. when another activity was shown and hidden before the first navigation
    committed,

    6. when the first navigation was preceded by showing a NTP (New Tab Page).

    This v3 metric uses ColdStartTracker and is a rename for
    Startup.Android.Experimental.FirstContentfulPaint.Tabbed. It otherwise
    preserves the same semantics and aims to replace the original v1 metric as
    well.

    NOTE: This metric is broken before October 2024 on Pixel 6+ on Android 14+
    due to an issue with the recording of BrowserProcessCreationReason affecting
    ColdStartTracker downstream. {StartActivityType}
  </summary>
</histogram>

<histogram
    name="Startup.Android.Cold.WithPersistentState.TimeToFirstVisibleContent4"
    units="ms" expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->

  <owner>yfriedman@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <owner>fredmello@chromium.org</owner>
  <owner>nafisabedin@google.com</owner>
  <owner>clhager@google.com</owner>
  <owner>chrome-ds@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time from the first Chrome tabbed activity creation to the moment Chrome
    first appears ready to the user, if the activity was launched by the system
    with persistent state to be restored.

    This metric captures when the omnibox is painted and either a navigation has
    committed or a Paint Preview is shown. The intent is to reflect Clank's
    perceived cold start performance regardless of different launch paths, while
    controlling for the factors that we have the most direct influence over and
    minimizing external factors. Note that network connectivity is mostly but
    not entirely omitted as it does impact the initial response time for a site
    which impacts the omnibox UX and loading metric.

    This metric captures the value of the first emitted metric out of the
    'Startup.Android.Cold.TimeToFirstNavigationCommit3.Tabbed' and
    'Browser.PaintPreview.TabbedPlayer.TimeToFirstBitmap' metrics and emits the
    value, skipping the record when both are missing.

    This metric is only recorded once per application lifetime, and only for the
    cold starts. An important requirement for the startup to be Cold is that the
    Tabbed Activity has to be the process creation Reason. See histogram
    Startup.Android.BrowserProcessCreationReason and code in ColdStartTracker.
    Determining the process creation reason is only reliable starting at Android
    P.

    Specifically, it is recorded for the first foreground committed http(s) URL
    in the primary frame if that first navigation is not: an error,
    same-document navigation, or fragment navigation.

    This metric is not recorded:

    - If another navigation occurs before the first navigation commit and the
    Paint Preview show.

    - If the navigation is pre-warmed, is a background navigation, or fails to
    be committed (e.g. cancelled, network error, or error due to lack of
    connectivity).

    - If the activity was ever backgrounded between activity creation and this
    metric reporting.

    - If the app opens to the Chrome Start page.

    - For WebApps, PWAs or WebApks.

    - For NTP.

    This metric is expected be stable from milestone to milestone. Updating
    Chrome or the Android system image on the device are expected to result in a
    noticeable slowdown on the first cold startup after.

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

<histogram name="Startup.Android.Cold.{FirstDrawSurface}.TimeToFirstDraw"
    units="ms" expires_after="2027-02-07">
  <owner>nafisabedin@google.com</owner>
  <owner>yfriedman@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time from the start of the activity on a cold start until the first draw
    pass on the root view (for Java NTP) or first visually non-empty paint (for
    WebUI NTP). This usually indicates when the fixed UI elements are shown to
    the user, but the articles might not be filled in yet.

    Metric is recorded once per application lifetime during a cold start.

    Utilizes ColdStartTracker to determine if a start was cold based on process
    creation reason. Therefore, it is recommended to limit analysis of the data
    to Android P+ because on prior versions the cold start detection is
    time-based and therefore less robust.
  </summary>
  <token key="FirstDrawSurface">
    <variant name="NewTabPage"/>
    <variant name="SearchActivity"/>
  </token>
</histogram>

<histogram name="Startup.Android.Cold.{StartupType}.TimeSpentInBinder"
    units="ms" expires_after="2027-02-07">
  <owner>nafisabedin@google.com</owner>
  <owner>yfriedman@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Records the total time spent handling Binder calls on a cold start for a
    particular {StartupType}.

    Metric is recorded once per application lifetime during a cold start, only
    when the cold start metric (e.g. TimeToFirstDraw) pertaining to
    {StartupType} is also recorded.

    The underlying mechanism used to determine this relies on undocumented
    Android APIs, meaning that it may break in the future.
  </summary>
  <token key="StartupType" variants="StartupType"/>
</histogram>

<histogram name="Startup.Android.Cold.{StartupType}.TotalBinderTransactions"
    units="counts" expires_after="2027-02-07">
  <owner>nafisabedin@google.com</owner>
  <owner>yfriedman@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Records the total number of Binder transactions made during a cold start for
    a particular {StartupType}.

    Metric is recorded once per application lifetime during a cold start, only
    when the cold start metric (e.g. TimeToFirstDraw) pertaining to
    {StartupType} is also recorded.

    The underlying mechanism used to determine this relies on undocumented
    Android APIs, meaning that it may break in the future.
  </summary>
  <token key="StartupType" variants="StartupType"/>
</histogram>

<histogram name="Startup.Android.DurationSinceLastBackgroundTime" units="ms"
    expires_after="2027-05-17">
  <owner>hanxi@chromium.org</owner>
  <owner>xinyiji@chromium.org</owner>
  <summary>
    Android: The elapsed time from the last time when Chrome goes to background
    till it becomes foreground again. The histogram is recorded when
    onResumeWithNative() is called.
  </summary>
</histogram>

<histogram name="Startup.Android.FirstDrawCompletedTime" units="ms"
    expires_after="2027-01-15">
  <owner>hanxi@chromium.org</owner>
  <owner>wychen@chromium.org</owner>
  <summary>
    Records the time duration from a cold start until the first draw pass of the
    native Android View hierarchy completes (specifically, the
    android.R.id.content view). This reflects the time until the native Chrome
    app shell or placeholder UI is painted to the screen by Android, which
    occurs well before the web renderer paints the actual page content (which is
    tracked by metrics like Startup.FirstWebContents.NonEmptyPaint3).
  </summary>
</histogram>

<histogram name="Startup.Android.GURLEnsureMainDexInitialized" units="ms"
    expires_after="2027-01-10">
  <owner>mthiesse@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the amount of time startup has likely been delayed due to GURL
    waiting on the native library to be initialized.
  </summary>
</histogram>

<histogram name="Startup.Android.InitializeFeatureListTime" units="ms"
    expires_after="2027-02-07">
  <owner>martinkong@google.com</owner>
  <owner>agrieve@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time spent in InitializeFeatureList.initializeFeatureList() during
    process startup. This measures how long the C++ FeatureList creation takes
    during early startup.
  </summary>
</histogram>

<histogram name="Startup.Android.IsLastBackgroundTimeLogged" enum="Boolean"
    expires_after="2027-05-17">
  <owner>hanxi@chromium.org</owner>
  <owner>xinyiji@chromium.org</owner>
  <summary>
    Android: Records whether the last time when Chrome went to background or
    closed was logged. The histogram is recorded when onResumeWithNative() is
    called.
  </summary>
</histogram>

<histogram name="Startup.Android.IsLastVisibleTimeLogged" enum="Boolean"
    expires_after="2027-05-17">
  <owner>hanxi@chromium.org</owner>
  <owner>xinyiji@chromium.org</owner>
  <summary>
    Android: Records whether the last time when Chrome was showing in foreground
    was logged. The histogram is recorded when onResumeWithNative() is called.
  </summary>
</histogram>

<histogram name="Startup.Android.MainIconLaunchTotalWaitTime" units="ms"
    expires_after="2026-08-16">
  <owner>nafisabedin@google.com</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    The total time a user waits for the Clank startup ablation study. The
    enabled arms of the study prescribes an amount of time to delay the launch
    of Clank, and this histogram records the amount of time waited to verify
    ablation and any additional delay.

    Recorded only when the main Chrome launcher icon is used to start the app
    (i.e. LaunchCauseType is MAIN_LAUNCHER_ICON or MAIN_LAUNCHER_ICON_SHORTCUT)
    and after the ablation occurs.
  </summary>
</histogram>

<histogram name="Startup.Android.MainIntentIsColdStart" enum="Boolean"
    expires_after="2027-01-17">
  <owner>nafisabedin@google.com</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records whether Chrome started cold or warm when the main Chrome launcher
    icon is used to start the app i.e. LaunchCauseType is MAIN_LAUNCHER_ICON or
    MAIN_LAUNCHER_ICON_SHORTCUT.

    Utilizes ColdStartTracker to determine if a start was cold based on process
    creation reason. Therefore, it is recommended to limit analysis of the data
    to Android P+ because on prior versions the cold start detection is
    time-based and therefore less robust.

    NOTE: This metric is broken before October 2024 on Pixel 6+ on Android 14+
    due to an issue with the recording of BrowserProcessCreationReason affecting
    ColdStartTracker downstream.
  </summary>
</histogram>

<histogram name="Startup.Android.OptionalPromoTypeShown"
    enum="OptionalPromoType" expires_after="2027-03-25">
  <owner>mschillaci@google.com</owner>
  <owner>agazal@google.com</owner>
  <owner>twellington@google.com</owner>
  <summary>
    Records the type of optional promo shown during startup, if any. Optional
    promos are from the TabbedRootUICoordinator's &quot;maybeShowPromo&quot;
    method, which have the lowest priority in the queue. Recorded when a promo
    is chosen to show. The &quot;None shown&quot; (NONE_SHOWN) bucket refers
    only to this method's return and not promos in general, i.e. some feature
    implementations may trigger a promo from a different location (e.g.
    notification opt-in).
  </summary>
</histogram>

<histogram name="Startup.Android.StartComponent" enum="ProcessCreationReason"
    expires_after="2027-01-03">
  <owner>nafisabedin@google.com</owner>
  <owner>mthiesse@chromium.org</owner>
  <summary>
    Records the component type that was being started which triggered the start
    as determined by Android's ApplicationStartInfo API. Only available starting
    with Android B and above.
  </summary>
</histogram>

<histogram name="Startup.Android.Temperature" enum="AndroidStartupTemperature"
    expires_after="2027-02-07">
  <owner>nafisabedin@google.com</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Uses Android's ApplicationStartInfo API to determine the temperature of the
    start: unset, cold, warm or hot every time Clank is brought to the
    foreground. Only available starting with API Level 35.
  </summary>
</histogram>

<histogram name="Startup.Android.Warm.MainIntentTimeToFirstDraw" units="ms"
    expires_after="2027-01-03">
  <owner>nafisabedin@google.com</owner>
  <owner>mthiesse@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Records the time duration from a warm, main intent launch until the first
    draw completes.
  </summary>
</histogram>

<histogram name="Startup.BringToForegroundReason"
    enum="BooleanBringToForegroundReason" expires_after="2027-02-07">
  <owner>peter@chromium.org</owner>
  <summary>
    Records the cause, each time Chrome is brought to the foreground. Currently
    only checks if a NotificationUIManager notification was shown in the last 5
    seconds (includes Web Notifications, but not media or Cast).
  </summary>
</histogram>

<histogram name="Startup.BrowserMainRunnerImplInitializeLongTime" units="ms"
    expires_after="2027-01-17">
  <owner>robliao@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The amount of time that elapsed during BrowserMainRunnerImpl::Initialize.
  </summary>
</histogram>

<histogram name="Startup.BrowserMessageLoopFirstIdle{StartupTemperature}"
    units="ms" expires_after="2027-01-31">
  <owner>gab@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time from application start to the first time MainMessageLoopRun() reaches
    idle. This is a new (Feb'2021) metric intended to capture UI jank caused by
    the long queue of tasks post initialization. This is believed to capture
    performance issues (startup responsiveness) none of the other Startup.*
    metrics capture (crbug.com/1175074). Recording is dropped if blocking UI is
    shown before first-idle is reached (as this blocks main loop progress on
    unbounded user interaction).

    On ChromeOS: Was not being recorded when the device started at the login
    screen. Fixed in M129.

    {StartupTemperature}
  </summary>
</histogram>

<histogram
    name="Startup.BrowserMessageLoopStart.To.NonEmptyPaint2{StartupTemperature}"
    units="ms" expires_after="never">
<!-- expires-never: breakdown metric for Startup.FirstWebContents.NonEmptyPaint2
     guardrail metrics -->

  <owner>etienneb@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time between Startup.BrowserMessageLoopStartTime and
    Startup.FirstWebContents.NonEmptyPaint2. Recorded explicitly to allow easy
    breakdown of Startup.FirstWebContents.NonEmptyPaint2 when diagnosing issues.

    On ChromeOS: This metric was broken before M129. The code considered
    displaying the login screen as impeding the initial foreground tab even
    though a browser window doesn't even exist at that stage. Since it's common
    for the device to boot to the login screen, this metric was being recorded a
    small percentage of the time. This metric was fixed in M129 to be recorded
    for the active browser window's initial foreground tab from a full ChromeOS
    user session restore. However, since the arbitrarily long amount of time
    that the user spends at the login screen is incorporated into this
    measurement, it is highly recommended to analyze
    Startup.FirstWebContents.NonEmptyPaint3 instead.

    {StartupTemperature}
  </summary>
</histogram>

<histogram name="Startup.BrowserMessageLoopStartTime.FirstRun" units="ms"
    expires_after="never">
<!-- expires-never: only metric to ensure that first run doesn't regress -->

  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time from application start to the start of the main thread's message loop.
    Recorded for a first run of the browser.

    April 8, 2020: Changed the reference from process creation to application
    start. See Startup.FirstWebContents.NonEmptyPaint3 for a definition of
    application start.

    On ChromeOS: Was not being recorded when the device started at the login
    screen. Fixed in M129.
  </summary>
</histogram>

<histogram name="Startup.BrowserMessageLoopStartTime{StartupTemperature}"
    units="ms" expires_after="never">
<!-- expires-never: used to diagnose regressions to Startup.FirstWebContents.NonEmptyPaint3 -->

  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time from application start to the start of the main thread's message loop.
    Not recorded for first run.

    April 8, 2020: Changed the reference from process creation to application
    start. See Startup.FirstWebContents.NonEmptyPaint3 for a definition of
    application start.

    On ChromeOS: Was not being recorded when the device started at the login
    screen. Fixed in M129.

    {StartupTemperature}
  </summary>
</histogram>

<histogram name="Startup.BrowserStartupCompleteReason"
    enum="StartupIsCompleteReason" expires_after="2026-11-16">
  <owner>joenotcharles@google.com</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    Recorded when SetBrowserStartupIsComplete() is called, indicating the reason
    browser startup has been marked complete.
  </summary>
</histogram>

<histogram name="Startup.BrowserWindow.FirstPaint{StartupTemperature}"
    units="ms" expires_after="2027-02-07">
  <owner>gab@chromium.org</owner>
<!-- expires-never: used to diagnose regressions to Startup.FirstWebContents.NonEmptyPaint3 -->

  <owner>mblsha@yandex-team.ru</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time from application start to the time the first Browser window has
    finished painting its children.

    April 8, 2020: Changed the reference from process creation to application
    start. See Startup.FirstWebContents.NonEmptyPaint3 for a definition of
    application start.

    On ChromeOS: This metric was broken before M129. The code considered
    displaying the login screen as impeding the initial foreground tab even
    though a browser window doesn't even exist at that stage. Since it's common
    for the device to boot to the login screen, this metric was being recorded a
    small percentage of the time. This metric was fixed in M129 to be recorded
    for the active browser window's initial foreground tab from a full ChromeOS
    user session restore. The latency is measured from the time the browser
    window restore begins, rather than application start. Browser window restore
    begins after login either immediately or after the user clicks a
    notification prompting them to do so, depending on their settings. If the
    user did not have a Chrome browser window open in the previous session, this
    metric is not recorded.

    {StartupTemperature}
  </summary>
</histogram>

<histogram name="Startup.BrowserWindowDisplay{StartupTemperature}" units="ms"
    expires_after="never">
<!-- expires-never: used to diagnose regressions to Startup.FirstWebContents.NonEmptyPaint3 -->

  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time from application start to the time the browser window initially becomes
    visible.

    April 8, 2020: Changed the reference from process creation to application
    start. See Startup.FirstWebContents.NonEmptyPaint3 for a definition of
    application start.

    {StartupTemperature}
  </summary>
</histogram>

<histogram name="Startup.Browser{HardFaultCheckpoint}HardFaultBytes"
    units="bytes" expires_after="2027-08-10">
  <owner>aattar@google.com</owner>
  <owner>olivierli@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Approximate number of bytes loaded via hard faults in the browser process
    {HardFaultCheckpoint}.

    This is a normalized metric calculated as (HardFaultCount * OSPageSize) to
    allow comparison between platforms with different page sizes (e.g. 16KB on
    Apple Silicon Mac vs 4KB on Windows/Linux/Intel Mac). Note that this is a
    lower bound since a single page-in operation can read multiple pages.
  </summary>
  <token key="HardFaultCheckpoint" variants="HardFaultCheckpoint"/>
</histogram>

<histogram name="Startup.Browser{HardFaultCheckpoint}HardFaultCount"
    units="faults" expires_after="never">
<!-- expires-never: MessageLoopStart is calibration metric for
     StartupTemperature, see kColdStartHardFaultCountThreshold and
     WarmStartHardFaultCountThreshold in startup_metric_utils.cc for details -->

  <owner>aattar@google.com</owner>
  <owner>olivierli@chromium.org</owner>
  <owner>chrisha@chromium.org</owner>
  <owner>fdoray@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The cumulative number of hard faults (page-in operations) recorded in the
    browser process {HardFaultCheckpoint}.

    On Windows this is derived from SYSTEM_PROCESS_INFORMATION.HardFaultCount;
    on macOS from Mach task_info (pageins); on Linux from getrusage (ru_majflt).
    Absolute values are not directly comparable across platforms, and may not be
    comparable even between OS versions (as changes to how the OS starts and
    times the startup of applications can affect the metrics). This counts
    OS-level page-in operations rather than individual pages. A single operation
    may read multiple pages.
  </summary>
  <token key="HardFaultCheckpoint" variants="HardFaultCheckpoint"/>
</histogram>

<histogram name="Startup.ColdStartFromMain" units="ms"
    expires_after="2027-02-14">
  <owner>justincohen@chromium.org</owner>
  <owner>olivierrobin@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The duration of all initializations from the call to main to UI ready to
    receive input. iOS specific, from M125+

    The process can only be created in response to a user action, either tapping
    the icon, tapping a link that opens in Chrome, or using the app switcher to
    switch to Chrome after it has been background-killed by the OS.

    The metric is recorded at the point where the Chrome window starts receiving
    input events like touches and keypresses. However, the Chrome splash screen
    is showing at this point, so there aren't any UI elements for a user to
    interact with.

    It does not include code loading and static initializers.

    The total counts in this histogram can be compared with the number of emits
    to the user action MobileWillEnterForeground. The former reports the number
    of cold starts. The latter is only recorded when Chrome comes to the
    foreground on non-cold starts.

    {StartupTemperature}
  </summary>
</histogram>

<histogram name="Startup.ConsecutiveDidFinishLaunchingWithoutLaunch"
    units="count" expires_after="2025-09-18">
  <owner>olivierrobin@chromium.org</owner>
  <owner>justincohen@chromium.org</owner>
  <summary>
    [IOS] The number of time [UIApplicationDelegate
    application:didFinishLaynching] was called but no scene was activated.
    Recorded when first scene is becomes active.
  </summary>
</histogram>

<histogram name="Startup.ConsecutiveLoadsWithoutLaunch" units="count"
    expires_after="2025-08-03">
  <owner>olivierrobin@chromium.org</owner>
  <owner>justincohen@chromium.org</owner>
  <summary>
    [IOS] The number of time +load was called but no scene was activated.
    Recorded when first scene is becomes active.
  </summary>
</histogram>

<histogram name="Startup.CrashBubbleShown" enum="BooleanShown"
    expires_after="2027-02-14">
  <owner>spvm@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Whether the session restore crash bubble was shown on startup. Recorded once
    every startup, during early startup, when initializing the infobar. Recorded
    only on platforms with the crash bubble (i.e. desktop).
  </summary>
</histogram>

<histogram name="Startup.CreateFirstProfile" units="ms" expires_after="never">
<!-- expires-never: used to diagnose regressions to Startup.FirstWebContents.NonEmptyPaint3 -->

  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    How long it takes to load the original profile synchronously on the UI
    thread.
  </summary>
</histogram>

<histogram name="Startup.CreateProcessLauncher2.{Status}" units="ms"
    expires_after="2025-02-05">
  <owner>ganesh@chromium.org</owner>
  <owner>grt@chromium.org</owner>
  <summary>
    Records the time it took for the creation attempt of the ProcessLauncher COM
    class when {Status}. The `AtStartup` variants record the creation attempt
    times for when Windows has just started up, and the non-`AtStartup` variants
    record the creation attempt times for all the other cases. Only recorded on
    Windows.
  </summary>
  <token key="Status">
    <variant name="TimedWaitFailed"/>
    <variant name="TimedWaitFailedAtStartup"/>
    <variant name="TimedWaitSucceeded"/>
    <variant name="TimedWaitSucceededAtStartup"/>
  </token>
</histogram>

<histogram name="Startup.FirstWebContents.FinishReason"
    enum="StartupProfilingFinishReason" expires_after="never">
<!-- expires-never: used to understand user behavior shifts when Startup.FirstWebContents.NonEmptyPaint3 regresses -->

  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <summary>
    [Desktop] The reason for which startup profiling was deemed complete. Logged
    once per session on startup.

    On ChromeOS: This metric was broken before M129. Since the device typically
    boots to the login screen (at which point a browser window doesn't exist),
    `kAbandonNoInitiallyVisibleContent` was recorded most of the time.
    WebContents-related startup metrics were fixed in M129 to be recorded after
    login during a full ChromeOS user session restore. `kDone` is expected to be
    the predominant recording after the fix.
  </summary>
</histogram>

<histogram name="Startup.FirstWebContents.FirstContentfulPaint" units="ms"
    expires_after="2027-05-10">
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <owner>chrdavis@microsoft.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    [Desktop] Measure the elapsed time from the application start to the first
    contentful paint of the first web contents. Only comprised of cases where
    the initial foreground tab gets to complete its rendering task unimpeded.

    Application start is a time recorded as early as possible in the startup
    process. See Startup.FirstWebContents.NonEmptyPaint3 for a definition of
    application start.
  </summary>
</histogram>

<histogram name="Startup.FirstWebContents.LargestContentfulPaint" units="ms"
    expires_after="2027-05-10">
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <owner>chrdavis@microsoft.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    [Desktop] Measure the elapsed time from the application start to the largest
    contentful paint of the first web contents. Only comprised of cases where
    the initial foreground tab gets to complete its rendering task unimpeded.
    Recorded at page completion.

    Application start is a time recorded as early as possible in the startup
    process. See Startup.FirstWebContents.NonEmptyPaint3 for a definition of
    application start.
  </summary>
</histogram>

<histogram
    name="Startup.FirstWebContents.MainNavigationFinished{StartupTemperature}"
    units="ms" expires_after="never">
<!-- expires-never: used to diagnose regressions to Startup.FirstWebContents.NonEmptyPaint3 -->

  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    [Desktop] Measure the elapsed time from application start to the moment when
    the navigation is committed (first bytes received) in the first web
    contents' main frame.

    April 8, 2020: Changed the reference from process creation to application
    start. See Startup.FirstWebContents.NonEmptyPaint3 for a definition of
    application start.

    On ChromeOS: This metric was broken before M129. The code considered
    displaying the login screen as impeding the initial foreground tab even
    though a browser window doesn't even exist at that stage. Since it's common
    for the device to boot to the login screen, this metric was being recorded a
    small percentage of the time. This metric was fixed in M129 to be recorded
    for the active browser window's initial foreground tab from a full ChromeOS
    user session restore. The latency is measured from the time the browser
    window restore begins, rather than application start. Browser window restore
    begins after login either immediately or after the user clicks a
    notification prompting them to do so, depending on their settings. If the
    user did not have a Chrome browser window open in the previous session, this
    metric is not recorded.

    {StartupTemperature}
  </summary>
</histogram>

<histogram
    name="Startup.FirstWebContents.MainNavigationStart{StartupTemperature}"
    units="ms" expires_after="never">
<!-- expires-never: used to diagnose regressions to Startup.FirstWebContents.NonEmptyPaint3 -->

  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    [Desktop] Measure the elapsed time from application start to the beginning
    of navigation in the first web contents' main frame.

    April 8, 2020: Changed the reference from process creation to application
    start. See Startup.FirstWebContents.NonEmptyPaint3 for a definition of
    application start.

    On ChromeOS: This metric was broken before M129. The code considered
    displaying the login screen as impeding the initial foreground tab even
    though a browser window doesn't even exist at that stage. Since it's common
    for the device to boot to the login screen, this metric was being recorded a
    small percentage of the time. This metric was fixed in M129 to be recorded
    for the active browser window's initial foreground tab from a full ChromeOS
    user session restore. The latency is measured from the time the browser
    window restore begins, rather than application start. Browser window restore
    begins after login either immediately or after the user clicks a
    notification prompting them to do so, depending on their settings. If the
    user did not have a Chrome browser window open in the previous session, this
    metric is not recorded.

    {StartupTemperature}
  </summary>
</histogram>

<histogram name="Startup.FirstWebContents.NonEmptyPaint3.AutoLaunchByOs"
    units="ms" expires_after="2026-12-27">
  <owner>atharvmaan@google.com</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Similar to Startup.FirstWebContents.NonEmptyPaint3, but recorded only for
    browser launches initiated automatically by the OS.
  </summary>
</histogram>

<histogram name="Startup.FirstWebContents.NonEmptyPaint3{StartupTemperature}"
    units="ms" expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->

  <owner>etiennep@chromium.org</owner>
  <owner>fdoray@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <owner>chrome-ds@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    [Desktop] Measure the elapsed time from the application start to the first
    non empty paint of the first web contents. Only comprised of cases where the
    initial foreground tab gets to complete its rendering task unimpeded (an
    improvement over Startup.FirstWebContents.NonEmptyPaint).

    Application start is a time recorded as early as possible in the startup
    process. On Windows, application start is when chrome.exe:main starts,
    before chrome.dll is loaded. On other platforms, it is when
    ChromeMainDelegate is constructed.

    On ChromeOS: This metric was broken before M129. The code considered
    displaying the login screen as impeding the initial foreground tab even
    though a browser window doesn't even exist at that stage. Since it's common
    for the device to boot to the login screen, this metric was being recorded a
    small percentage of the time. This metric was fixed in M129 to be recorded
    for the active browser window's initial foreground tab from a full ChromeOS
    user session restore. The latency is measured from the time the browser
    window restore begins, rather than application start. Browser window restore
    begins after login either immediately or after the user clicks a
    notification prompting them to do so, depending on their settings. If the
    user did not have a Chrome browser window open in the previous session, this
    metric is not recorded.

    If kWebUIReloadButtonDeferBrowserViewShow is enabled, the browser window
    display is deferred until the initial WebUI is ready. The measurement
    initiates using the first active WebContents without requiring its strict
    visibility, and the measurement is recorded in the same way once that
    WebContents gets to complete its first non-empty painting.

    Do not modify this metric in any way without contacting
    chrome-ds@google.com.

    {StartupTemperature}
  </summary>
</histogram>

<histogram name="Startup.GPU.LoadTime.ApplicationStartToGpuInitialized"
    units="ms" expires_after="2027-02-14">
  <owner>spvm@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time from when the application started to when the GPU finishes its
    initialization.

    Application start is a time recorded as early as possible in GPU process
    startup. On Windows, application start is at the start of the GPU process'
    chrome.exe:main, before chrome.dll is loaded. On other platforms, it is when
    ChromeMainDelegate is constructed.

    It should be noted that this does not include rendezvous starts, since in
    that case, a new GPU process is not launched.

    This metric is recorded every time the GPU process finishes its
    initialization, including the case where the process restarts several times
    during the same browser session. This does not include the GPU info
    collection process, as that process does not use the GpuServiceImpl.
  </summary>
</histogram>

<histogram name="Startup.GPU.LoadTime.ChromeMainToGpuInitialized" units="ms"
    expires_after="2027-02-14">
  <owner>spvm@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time from when ChromeMain was entered in the GPU process to when the GPU
    finishes its initialization.

    This metric is recorded every time the GPU process finishes its
    initialization, including the case where the GPU process restarts several
    times during the same browser session.
  </summary>
</histogram>

<histogram name="Startup.GPU.LoadTime.ProcessCreationToGpuInitialized"
    units="ms" expires_after="2027-01-03">
  <owner>spvm@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time from when the GPU process was created according to the OS, to when the
    GPU finishes its initialization.

    Mostly useful on Windows, where much time is spent in pre-main.

    This metric is recorded every time the GPU process finishes its
    initialization, including the case where the GPU process restarts several
    times during the same browser session.
  </summary>
</histogram>

<histogram name="Startup.IncognitoForcedStart" enum="IncognitoForcedStart"
    expires_after="M140">
  <owner>arabm@google.com</owner>
  <owner>dullweber@chromium.org</owner>
  <owner>chrome-incognito@google.com</owner>
  <summary>
    Records whether Incognito switch was present in commmand line switches and
    if Incognito mode was enforced or denied. This is recorded during browser
    startup when commandline is processed.
  </summary>
</histogram>

<histogram name="Startup.IOSColdStartType" enum="IOSColdStartType"
    expires_after="2027-04-01">
  <owner>jlebel@chromium.org</owner>
  <owner>chrome-signin-team@chromium.org</owner>
  <summary>
    Records session type for a cold start. It is recorded at cold start.
    Histogram only for iOS.
  </summary>
</histogram>

<histogram name="Startup.Launch.InfoBar.{StartupLaunchInfoBarType}.Interaction"
    enum="StartupLaunchInfoBarInteraction" expires_after="2027-02-05">
  <owner>atharvmaan@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records user interactions with the {StartupLaunchInfoBarType} infobar.
  </summary>
</histogram>

<histogram name="Startup.Launch.InfoBar.{StartupLaunchInfoBarType}.Shown"
    units="times" expires_after="2027-02-05">
  <owner>atharvmaan@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records how many times {StartupLaunchInfoBarType} infobar has been shown to
    the user.
  </summary>
</histogram>

<histogram name="Startup.Launch.{StartupLaunchMode}.PreferenceChanged"
    enum="BooleanEnabled" expires_after="2027-02-05">
  <owner>atharvmaan@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Records the new value of the {StartupLaunchMode} launch on login preference
    when it is changed by the user.
  </summary>
</histogram>

<histogram
    name="Startup.LoadTime.ApplicationStartToChromeMain{StartupTemperature}"
    units="ms" expires_after="never">
<!-- expires-never: used to diagnose regressions to Startup.FirstWebContents.NonEmptyPaint3 -->

  <owner>fdoray@chromium.org</owner>
  <owner>etiennep@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time from the application start to the C++ ChromeMain() function being
    invoked.

    On ChromeOS: Was not being recorded when the device started at the login
    screen. Fixed in M129.

    {StartupTemperature}
  </summary>
</histogram>

<histogram
    name="Startup.LoadTime.ProcessCreateToApplicationStart{StartupTemperature}"
    units="ms" expires_after="never">
<!-- expires-never: used to diagnose regressions to Startup.FirstWebContents.NonEmptyPaint3 -->

  <owner>fdoray@chromium.org</owner>
  <owner>etiennep@chromium.org</owner>
  <owner>gab@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time from the process creation to application start, i.e. time recorded as
    early as possible in the startup process.

    On ChromeOS: Was not being recorded when the device started at the login
    screen. Fixed in M129.

    {StartupTemperature}
  </summary>
</histogram>

<histogram name="Startup.LoadTime.RecordedProcessCreation" enum="Boolean"
    expires_after="2024-12-30">
  <owner>spvm@chromium.org</owner>
  <owner>fdoray@chromium.org</owner>
  <summary>
    Whether Process::Current().CreationTime() was able to acquire the process
    startup time. Recorded once per process startup, as early as possible.
  </summary>
</histogram>

<histogram name="Startup.MobileSessionStartAction"
    enum="MobileSessionStartAction" expires_after="2027-01-31">
  <owner>thegreenfrog@chromium.org</owner>
  <owner>olivierrobin@chromium.org</owner>
  <summary>
    The action requested on the application startup when called from another app
    or the OS.
  </summary>
</histogram>

<histogram name="Startup.MobileSessionStartFromApps"
    enum="MobileSessionCallerApp" expires_after="2027-02-07">
  <owner>thegreenfrog@chromium.org</owner>
  <owner>olivierrobin@chromium.org</owner>
  <summary>The calling application (if any).</summary>
</histogram>

<histogram name="Startup.PrefetchOverrideErrorCode" enum="WinGetLastError"
    expires_after="2025-03-30">
  <owner>spvm@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <summary>
    Error code returned by ::SetProcessInformation() when overriding the
    prefetch parameter for subsequent browser launches. On success,
    ERROR_SUCCESS is recorded. On failure, the result of ::GetLastError() is
    used. Recorded when a user is in the kOverridePrefetchOnSingleton
    experiment, and reaches PostEarlyInitialization(). It is therefore recorded
    at most once per browser process launch. See crbug.com/380088804 for
    details.
  </summary>
</histogram>

<histogram name="Startup.PreMainMessageLoopRunImplLongTime" units="ms"
    expires_after="2025-09-14">
  <owner>rkaplow@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The amount of time that elapsed during
    ChromeBrowserMainParts::PreMainMessageLoopRunImpl.
  </summary>
</histogram>

<histogram
    name="Startup.Renderer.LoadTime.ApplicationStartToRendererStartRunLoop"
    units="ms" expires_after="2027-01-31">
  <owner>spvm@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time from application start to renderer run loop start.

    Application start is a time recorded as early as possible in renderer
    process startup. Application start is at the start of the renderer process'
    chrome.exe:main, before chrome.dll is loaded.

    This metric is only recorded on Windows, and is recorded every time a
    renderer process starts its run loop, meaning that many instances of this
    metric will be recorded throughout one execution of the browser.
  </summary>
</histogram>

<histogram name="Startup.Renderer.LoadTime.ChromeMainToRendererStartRunLoop"
    units="ms" expires_after="2027-02-07">
  <owner>spvm@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time from when ChromeMain in the renderer process was entered to when the
    renderer run loop was started.

    This metric is only recorded on Windows, and is recorded every time a
    renderer process starts its run loop, meaning that many instances of this
    metric will be recorded throughout one execution of the browser.
  </summary>
</histogram>

<histogram
    name="Startup.Renderer.LoadTime.ProcessCreationToRendererStartRunLoop"
    units="ms" expires_after="2027-01-31">
  <owner>spvm@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time from when the renderer process was created (CreateProcess call) to when
    the renderer run loop is started.

    This metric is only recorded on Windows, and is recorded every time a
    renderer process starts its run loop, meaning that many instances of this
    metric will be recorded throughout one execution of the browser.
  </summary>
</histogram>

<histogram name="Startup.ShowDefaultPromoFromApps"
    enum="MobileSessionCallerApp" expires_after="2027-02-04">
  <owner>olivierrobin@chromium.org</owner>
  <owner>bling-pandamonium@google.com</owner>
  <summary>
    The external application requesting showing the default browser settings.
    Logged when the command is received from the external application. Histogram
    only for iOS.

    Warning: This histogram expired in 2023 and was re-enabled in M153.
  </summary>
</histogram>

<histogram name="Startup.StartupBrowserCreator.LaunchBrowser" units="ms"
    expires_after="2027-02-14">
  <owner>hidehiko@chromium.org</owner>
  <owner>junis@google.com</owner>
  <owner>cros-sw-perf+metrics@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The amount of time that elapsed during
    StartupBrowserCreator::LaunchBrowser().
  </summary>
</histogram>

<histogram name="Startup.StartupTabs.IsWelcomePageSkipped"
    enum="BooleanSkipped" expires_after="2026-10-18">
  <owner>dgn@chromium.org</owner>
  <owner>chrome-signin-team@google.com</owner>
  <summary>
    Whether a chrome://welcome page requested from startup tabs has been
    skipped. Logged on first runs where that page is included in the startup
    tabs, usually provided by installers in the initial_preferences files. Only
    the positive value is logged, the histogram's purpose is to verify the
    reduction in usage of this configuration.
  </summary>
</histogram>

<histogram name="Startup.Temperature" enum="StartupTemperature"
    expires_after="2026-12-27">
<!-- expires-after: Diagnosis metric for changes in StartupTemperature suffix.
     Shouldn't truly expire but kColdStartHardFaultCountThreshold should be
     surveyed yearly. -->

  <owner>chrisha@chromium.org</owner>
  <owner>fdoray@chromium.org</owner>
  <summary>
    Indicates whether or not the given startup was warm, cold or unable to be
    determined. This is based off observing the number of hard faults that occur
    during startup prior to Startup.BrowserMessageLoopStartTime. The threshold
    for cold startup was updated Jan 2020, a bump in the metric is expected.
  </summary>
</histogram>

<histogram name="Startup.TimeFromMainToDidFinishLaunchingCall" units="ms"
    expires_after="2027-02-14">
  <owner>olivierrobin@chromium.org</owner>
  <owner>justincohen@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    [IOS] The duration between the call to main and the call to
    [UIApplicationDelegate didFinishLaunching:]. Recorded when first scene is
    becomes active.
  </summary>
</histogram>

<histogram name="Startup.TimeFromMainToSceneConnection" units="ms"
    expires_after="2026-10-11">
  <owner>olivierrobin@chromium.org</owner>
  <owner>justincohen@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    [IOS] The duration between the call to main and the call to the first scene
    connection. Recorded when first scene is becomes active.
  </summary>
</histogram>

<histogram name="Startup.{Process}.LoadTime.PreReadFile" units="ms"
    expires_after="2027-01-31">
  <owner>spvm@chromium.org</owner>
  <owner>fdoray@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time that it took to call base::PreReadFile() during main DLL
    initialization. Only recorded on Windows. Recorded once on {Process} process
    startup, as early as possible, but only if base::PreReadFile() was called.
  </summary>
  <token key="Process">
    <variant name="Browser"/>
    <variant name="GPU"/>
    <variant name="Renderer"/>
  </token>
</histogram>

</histograms>

</histogram-configuration>
