<!--
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>

<histogram name="Startup.AfterStartupTaskCount" units="units"
    expires_after="2024-03-14">
  <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="2024-03-14">
  <owner>michaeln@chromium.org</owner>
  <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="2024-09-13">
  <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.CachedFeedVisibilityConsistency"
    enum="BooleanConsistent" expires_after="2024-03-17">
  <owner>hanxi@chromium.org</owner>
  <owner>wychen@chromium.org</owner>
  <summary>
    Records whether or not the cached Feed visibility in the SharedPreferences
    is consistent with the Feed visibility user preference on the disk. It's
    recorded when overview mode is shown because of Return to Tab Switcher, and
    only on cold start. By recording this histogram, the number of mismatches
    between the criteria of whether the Feed placeholder of Instant Start
    pre-native is shown and the criteria of whether Feed articles after native
    initialization are shown is recorded.
  </summary>
</histogram>

<histogram
    name="Startup.Android.Cold.FirstNavigationCommitOccurredPreForeground"
    enum="Boolean" expires_after="2024-03-24">
  <owner>blundell@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records whether the first navigation commit after a cold start occurred
    before UmaUtils.hasComeToForegroundWithNative() became true. Recorded only
    for startups in which startup metrics were being tracked.
  </summary>
</histogram>

<histogram name="Startup.Android.Cold.FirstPaintOccurredPreForeground"
    enum="Boolean" expires_after="2024-02-04">
  <owner>blundell@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    Records whether the first paint of StartupPaintPreview after a cold start
    occurred before UmaUtils.hasComeToForegroundWithNative() became true.
    Recorded only for startups in which startup metrics were being tracked.
  </summary>
</histogram>

<histogram name="Startup.Android.Cold.FirstSafeBrowsingApiResponseTime.Tabbed"
    units="ms" expires_after="2024-03-18">
  <owner>xinghuilu@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The time it took GmsCore SafeBrowsing API to respond to SafeBrowsing request
    (either through hash-prefix database or hash-prefix real time) in the
    process lifetime. Recorded at the same time as
    Startup.Android.Cold.TimeToFirstNavigationCommit.Tabbed. Only logged if the
    URL of the first navigation is checked by SafeBrowsing API.
  </summary>
</histogram>

<histogram name="Startup.Android.Cold.FirstSafeBrowsingResponseTime.Tabbed"
    units="ms" expires_after="2024-03-10">
  <owner>pasko@chromium.org</owner>
  <owner>xinghuilu@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    The time it took GmsCore SafetyNet API to respond to the first hash-prefix
    SafeBrowsing database request in the process lifetime. Recorded at the same
    time as Startup.Android.Cold.TimeToFirstNavigationCommit.Tabbed. Only logged
    if the URL of the first navigation is checked by SafetyNet API.
  </summary>
</histogram>

<histogram base="true" name="Startup.Android.Cold.TimeToFirstContentfulPaint"
    units="ms" expires_after="2024-02-11">
  <owner>pasko@chromium.org</owner>
  <owner>alexilin@chromium.org</owner>
  <summary>
    Android: The time from the activity creation point to the first contentful
    paint of the first loaded page. It's not recorded when the first loaded page
    is non http(s) page like a chrome error page, a new tab page, a blank page.
    It's also not recorded if the application wasn't in the foreground since the
    start till the end of event.
  </summary>
</histogram>

<histogram base="true" name="Startup.Android.Cold.TimeToFirstNavigationCommit"
    units="ms" expires_after="2024-02-11">
  <owner>pasko@chromium.org</owner>
  <owner>alexilin@chromium.org</owner>
  <summary>
    Android: The time from the activity creation point to the moment the first
    navigation is committed, i.e. when renderer gets the first byte of the
    document. It's not recorded when the first loaded page is non http(s) page
    like a chrome error page, a new tab page, a blank page. It's also not
    recorded if the application wasn't in the foreground since the start till
    the end of event.
  </summary>
</histogram>

<histogram name="Startup.Android.Cold.TimeToFirstNavigationCommit2.Tabbed"
    units="ms" expires_after="2024-02-11">
  <owner>pasko@chromium.org</owner>
  <owner>agrieve@chromium.org</owner>
  <summary>
    Experimental. Same as
    Startup.Android.Cold.TimeToFirstNavigationCommit.Tabbed with two
    modifications.

    The first difference is to record navigation commits happening before
    post-native initialization. The second modifications is not to record
    samples when FRE is shown.
  </summary>
</histogram>

<histogram name="Startup.Android.Cold.TimeToFirstVisibleContent" 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>chrome-analysis-team@google.com</owner>
  <summary>
    The time from Chrome tabbed activity creation to the moment the Chrome first
    appears ready.

    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.TimeToFirstNavigationCommit.Tabbed' and
    'Browser.PaintPreview.TabbedPlayer.TimeToFirstBitmap' metrics and emits the
    value.

    This metric is only recorded once per application lifetime during cold
    startup i.e. when Chrome's native library is not loaded at first activity
    creation. 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 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. The total counts
    changes for this histogram are not of significant importance; however, a
    non-trivial increase in total counts could signal more background kills, for
    example.

    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.

    Bugs:

    - This metric does not get recorded when the first navigation commit happens
    before post-native initialization. This behaviour is not intentional, see
    crbug.com/1273097. TimeToFirstVisibleContent2 addresses this issue.

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

<histogram name="Startup.Android.Cold.TimeToFirstVisibleContent2" units="ms"
    expires_after="2024-02-04">
  <owner>yfriedman@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <owner>fredmello@chromium.org</owner>
  <summary>
    The time from Chrome tabbed activity creation to the moment the Chrome first
    appears ready.

    Currently experimental. Has the same semantics as
    Startup.Android.Cold.TimeToFirstVisibleContent, without the known bug.
  </summary>
</histogram>

<histogram name="Startup.Android.Cold.TimeToForegroundSessionStart" units="ms"
    expires_after="2024-02-04">
  <owner>pasko@chromium.org</owner>
  <owner>mthiesse@chromium.org</owner>
  <summary>
    The time from activity creation till the point when UMA foreground session
    starts.
  </summary>
</histogram>

<histogram name="Startup.Android.Cold.TimeToVisibleContent" units="ms"
    expires_after="2024-02-25">
  <owner>ckitagawa@chromium.org</owner>
  <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.TimeToFirstContentfulPaint.Tabbed' and
    'Browser.PaintPreview.TabbedPlayer.TimeToFirstBitmap' metric values.

    Not to be mistaken with the Startup.Android.Cold.TimeToFirstVisibleContent
    histogram, as this metric is intended for the use of the Paint Preview
    owners and the other is intended to track Clank's perceived cold start
    performance.
  </summary>
</histogram>

<histogram name="Startup.Android.DurationSinceLastBackgroundTime" units="ms"
    expires_after="2024-03-17">
  <owner>hanxi@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 base="true" name="Startup.Android.FeedContentFirstLoadedTime"
    units="ms" expires_after="2023-11-12">
<!-- Name completed by histogram_suffixes name="JavaStartMode" -->

  <owner>hanxi@chromium.org</owner>
  <owner>wychen@chromium.org</owner>
  <summary>
    Records the time duration from a cold start till the Feeds articles are
    first loaded on the StartSurface. This histogram is only recorded when
    StartSurface is shown at launch due to &quot;return to tab switcher&quot;
    feature.
  </summary>
</histogram>

<histogram name="Startup.Android.FeedsLoadingPlaceholderShown.Instant"
    units="ms" expires_after="2023-11-12">
  <owner>hanxi@chromium.org</owner>
  <owner>wychen@chromium.org</owner>
  <summary>
    Records the time duration from a cold start till the Feeds loading
    placeholder is shown on the StartSurface. This placeholder is only shown
    when the feature flag InstantStart is enabled and StartSurface is shown at
    launch due to &quot;return to tab switcher&quot; feature.
  </summary>
</histogram>

<histogram base="true" name="Startup.Android.FeedStreamCreatedTime" units="ms"
    expires_after="2024-01-14">
<!-- Name completed by histogram_suffixes name="JavaStartMode" -->

  <owner>hanxi@chromium.org</owner>
  <owner>wychen@chromium.org</owner>
  <summary>
    Records the time duration from a cold start till the Feeds stream is created
    on the StartSurface. This histogram is only recorded when StartSurface is
    shown at launch due to &quot;return to tab switcher&quot; feature.
  </summary>
</histogram>

<histogram base="true" name="Startup.Android.FirstDrawCompletedTime" units="ms"
    expires_after="2024-03-17">
<!-- Name completed by histogram_suffixes name="JavaStartMode" -->

  <owner>hanxi@chromium.org</owner>
  <owner>wychen@chromium.org</owner>
  <summary>
    Records the time duration from a cold start till the first draw completes.
  </summary>
</histogram>

<histogram name="Startup.Android.GURLEnsureMainDexInitialized" units="ms"
    expires_after="2024-03-04">
  <owner>mthiesse@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <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.IsHomepagePolicyManagerInitialized"
    enum="Boolean" expires_after="2024-03-17">
  <owner>hanxi@chromium.org</owner>
  <owner>xinyiji@chromium.org</owner>
  <summary>
    Records whether the HompagePolicyManager is initialized with native in
    startup when the check of whether to show Start surface when there isn't any
    Tab happens. The histogram is recorded only on startup when Chrome is
    launched from app icon and there isn't any Tab to restore.
  </summary>
</histogram>

<histogram name="Startup.Android.IsLastBackgroundTimeLogged" enum="Boolean"
    expires_after="2024-03-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="2024-03-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.LastVisitedTabIsSRPWhenOverviewShownAtLaunch"
    enum="Boolean" expires_after="2023-11-12">
  <owner>hanxi@chromium.org</owner>
  <owner>fredmello@chromium.org</owner>
  <summary>
    Records whether or not the last visited tab is a search result page when
    StartSurface is shown at launch. This histogram is only recorded when
    StartSurface is shown at launch due to &quot;return to tab switcher&quot;
    feature.
  </summary>
</histogram>

<histogram
    name="Startup.Android.PrivacySandbox.DialogNotShownDueToTabLaunchedFromExternalApp"
    enum="Boolean" expires_after="2024-03-31">
  <owner>tommasin@chromium.org</owner>
  <owner>kartoffel-core-eng@google.com</owner>
  <summary>
    Android: PrivacySandbox dialog not shown because Chrome Tab was launched
    from an external app.
  </summary>
</histogram>

<histogram base="true" name="Startup.Android.SingleTabTitleAvailableTime"
    units="ms" expires_after="2023-11-12">
<!-- Name completed by histogram_suffixes name="JavaStartMode" -->

  <owner>hanxi@chromium.org</owner>
  <owner>wychen@chromium.org</owner>
  <summary>
    Records the time duration from a cold start till the title of the single Tab
    is shown on the StartSurface. This histogram is only recorded when
    StartSurface is shown at launch due to &quot;return to tab switcher&quot;
    feature.
  </summary>
</histogram>

<histogram name="Startup.Android.StartSurfaceShownAtStartup" enum="Boolean"
    expires_after="2024-03-17">
  <owner>hanxi@chromium.org</owner>
  <owner>wychen@chromium.org</owner>
  <summary>
    Records whether the Start surface homepage is showing at a cold startup when
    the Start surface is enabled. This histogram is recorded in a deferred
    startup task after Chrome is launched.
  </summary>
</histogram>

<histogram name="Startup.BlockForCrashpadHandlerStartupTime" units="ms"
    expires_after="M85">
  <owner>mark@chromium.org</owner>
  <owner>crashpad-dev@chromium.org</owner>
  <summary>
    The amount of time that elapsed during in
    crash_report::BlockUntilHandlerStarted().
  </summary>
</histogram>

<histogram name="Startup.BringToForegroundReason"
    enum="BooleanBringToForegroundReason" expires_after="2024-02-25">
  <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="2024-03-17">
  <owner>robliao@chromium.org</owner>
  <summary>
    The amount of time that elapsed during BrowserMainRunnerImpl::Initialize.
  </summary>
</histogram>

<histogram name="Startup.BrowserMessageLoopFirstIdle" units="ms"
    expires_after="2024-03-17">
  <owner>gab@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <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).
  </summary>
</histogram>

<histogram name="Startup.BrowserMessageLoopStart.To.NonEmptyPaint2" 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>
  <summary>
    Time between Startup.BrowserMessageLoopStartTime and
    Startup.FirstWebContents.NonEmptyPaint2. Recorded explicitly to allow easy
    breakdown of Startup.FirstWebContents.NonEmptyPaint2 when diagnosing issues.
  </summary>
</histogram>

<histogram name="Startup.BrowserMessageLoopStartHardFaultCount" units="faults"
    expires_after="never">
<!-- expires-never: calibration metric for StartupTemperature, see
     kColdStartHardFaultCountThreshold and WarmStartHardFaultCountThreshold in
     startup_metric_utils.cc for details -->

  <owner>chrisha@chromium.org</owner>
  <owner>fdoray@chromium.org</owner>
  <summary>
    The number of hard faults incurred in the browser process from startup to
    start of the main thread's message loop, not including first runs of the
    browser.
  </summary>
</histogram>

<histogram name="Startup.BrowserMessageLoopStartTime" 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>
  <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.
  </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>
  <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.
  </summary>
</histogram>

<histogram name="Startup.BrowserProcessImpl_PreMainMessageLoopRunTime"
    units="ms" expires_after="M85">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during
    BrowserProcessImpl::PreMainMessageLoopRun.
  </summary>
</histogram>

<histogram name="Startup.BrowserWindow.FirstPaint" units="ms"
    expires_after="2024-03-17">
  <owner>gab@chromium.org</owner>
  <owner>mblsha@yandex-team.ru</owner>
  <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.
  </summary>
</histogram>

<histogram name="Startup.BrowserWindowDisplay" 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>
  <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.
  </summary>
</histogram>

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

  <owner>djean@chromium.org</owner>
  <owner>olivierrobin@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <summary>
    The duration of all initializations from process creation time to UI ready
    to receive input. iOS specific, from M91+

    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 includes 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.

    Do not modify this metric in any way without contacting
    chrome-analysis-team@google.com.
  </summary>
</histogram>

<histogram name="Startup.ConsecutiveDidFinishLaunchingWithoutLaunch"
    units="count" expires_after="2024-09-18">
  <owner>olivierrobin@chromium.org</owner>
  <owner>ajuma@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="2024-06-19">
  <owner>olivierrobin@chromium.org</owner>
  <owner>ajuma@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.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>
  <summary>
    How long it takes to load the original profile synchronously on the UI
    thread.
  </summary>
</histogram>

<histogram base="true" name="Startup.DoUpgradeTasks.{Status}" units="ms"
    expires_after="M99">
  <owner>gab@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <summary>
    Records the time it took to complete upgrade_util::DoUpgradeTasks() when
    {Status}.
  </summary>
  <token key="Status">
    <variant name="NoRelaunch"/>
    <variant name="RelaunchFailed"/>
    <variant name="RelaunchSucceeded"/>
  </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.
  </summary>
</histogram>

<histogram name="Startup.FirstWebContents.MainNavigationFinished" 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>
  <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.
  </summary>
</histogram>

<histogram name="Startup.FirstWebContents.MainNavigationStart" 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>
  <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.
  </summary>
</histogram>

<histogram name="Startup.FirstWebContents.NonEmptyPaint3" 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-analysis-team@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.

    Do not modify this metric in any way without contacting
    chrome-analysis-team@google.com.
  </summary>
</histogram>

<histogram name="Startup.GPU.LoadTime.ApplicationStartToGpuInitialized"
    units="ms" expires_after="2024-06-01">
  <owner>spvw@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <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="2024-06-01">
  <owner>spvw@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <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="2024-06-01">
  <owner>spvw@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <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="M119">
  <owner>arabm@google.com</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="2024-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.LoadTime.ApplicationStartToChromeMain" 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>
  <summary>
    Time from the application start to the C++ ChromeMain() function being
    invoked.
  </summary>
</histogram>

<histogram name="Startup.LoadTime.ProcessCreateToApplicationStart" 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>
  <summary>
    Time from the process creation to application start, i.e. time recorded as
    early as possible in the startup process.
  </summary>
</histogram>

<histogram name="Startup.MobileSessionStartAction"
    enum="MobileSessionStartAction" expires_after="2024-02-11">
  <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="2024-02-11">
  <owner>thegreenfrog@chromium.org</owner>
  <owner>olivierrobin@chromium.org</owner>
  <summary>The calling application (if any).</summary>
</histogram>

<histogram name="Startup.OSX.AwakeFromNib" units="ms"
    expires_after="2018-08-30">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The amount of time that elapsed between main entry and the invocation of
    -[AppControllerMac awakeFromNib].
  </summary>
</histogram>

<histogram name="Startup.OSX.DockIconWillFinishBouncing" units="ms"
    expires_after="M77">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The amount of time that elapsed between main entry and the invocation of
    -[AppControllerMac didFinishLaunching:]. At that point, the dock icon will
    finish its current animation and stop bouncing.
  </summary>
</histogram>

<histogram name="Startup.OSX.PostMainMessageLoopStart" units="ms"
    expires_after="M85">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The amount of time that elapsed between main entry and the invocation of
    ChromeBrowserMainPartsMac::PostMainMessageLoopStart.
  </summary>
</histogram>

<histogram name="Startup.OSX.PostProfileInit" units="ms" expires_after="M77">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The amount of time that elapsed between main entry and the invocation of
    ChromeBrowserMainPartsMac::PostProfileInit.
  </summary>
</histogram>

<histogram name="Startup.OSX.PreMainMessageLoopStart" units="ms"
    expires_after="2018-08-30">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The amount of time that elapsed between main entry and the invocation of
    ChromeBrowserMainPartsMac::PreMainMessageLoopStart.
  </summary>
</histogram>

<histogram name="Startup.OSX.PreProfileInit" units="ms"
    expires_after="2018-08-30">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The amount of time that elapsed between main entry and the invocation of
    ChromeBrowserMainPartsMac::PreProfileInit.
  </summary>
</histogram>

<histogram name="Startup.OSX.WillFinishLaunching" units="ms"
    expires_after="2018-08-30">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The amount of time that elapsed between main entry and the invocation of
    -[AppControllerMac willFinishLaunching:].
  </summary>
</histogram>

<histogram name="Startup.PreMainMessageLoopRunImplLongTime" units="ms"
    expires_after="2024-02-11">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during
    ChromeBrowserMainParts::PreMainMessageLoopRunImpl.
  </summary>
</histogram>

<histogram
    name="Startup.Renderer.LoadTime.ApplicationStartToRendererStartRunLoop"
    units="ms" expires_after="2024-09-01">
  <owner>spvw@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <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="2024-09-01">
  <owner>spvw@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <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="2024-09-01">
  <owner>spvw@chromium.org</owner>
  <owner>etienneb@chromium.org</owner>
  <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="2023-05-23">
  <owner>djean@chromium.org</owner>
  <owner>olivierrobin@chromium.org</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.
  </summary>
</histogram>

<histogram name="Startup.StartupBrowserCreator_Start" units="ms"
    expires_after="M77">
  <owner>rkaplow@chromium.org</owner>
  <summary>
    The amount of time that elapsed during StartupBrowserCreator::Start().
  </summary>
</histogram>

<histogram name="Startup.Temperature" enum="StartupTemperature"
    expires_after="2024-03-17">
<!-- 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.TimeFromProcessCreationToDidFinishLaunchingCall"
    units="ms" expires_after="2024-06-19">
  <owner>olivierrobin@chromium.org</owner>
  <owner>ajuma@chromium.org</owner>
  <summary>
    [IOS] The duration between process spawn (returned by sysctl) and call to
    [UIApplicationDelegate didFinishLaunching:]. Recorded when first scene is
    becomes active.
  </summary>
</histogram>

<histogram name="Startup.TimeFromProcessCreationToLoad" units="ms"
    expires_after="2024-02-11">
  <owner>olivierrobin@chromium.org</owner>
  <owner>ajuma@chromium.org</owner>
  <summary>
    [IOS] The duration between process spawn (returned by sysctl) and library
    load (logged on +load method). Recorded when first scene is becomes active.
  </summary>
</histogram>

<histogram name="Startup.TimeFromProcessCreationToMainCall" units="ms"
    expires_after="2024-04-02">
  <owner>olivierrobin@chromium.org</owner>
  <owner>ajuma@chromium.org</owner>
  <summary>
    [IOS] The duration between process spawn (returned by sysctl) and call to
    main. Recorded when first scene is becomes active.
  </summary>
</histogram>

<histogram name="Startup.TimeFromProcessCreationToSceneConnection" units="ms"
    expires_after="2024-06-19">
  <owner>olivierrobin@chromium.org</owner>
  <owner>ajuma@chromium.org</owner>
  <summary>
    [IOS] The duration between process spawn (returned by sysctl) and call to
    the first scene connection. Recorded when first scene is becomes active.
  </summary>
</histogram>

</histograms>

</histogram-configuration>
