<!--
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 Memory 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="GpuPeakMemoryUsage">
  <variant name="ChangeTab2"
      summary="Changing tabs. Note that this histogram uses presentation
               callbacks to determine the end of the tab change (which is
               when the tab change is presented on the screen). However,
               before M110 it was possible that the callback was called even
               if the next submitted frame failed to present successfully.
               Since M110, the histogram switched to using presentation
               callbacks that are only called when the first following frame
               is successfully presented on the screen (hence version 2)"/>
  <variant name="PageLoad" summary="Page load"/>
  <variant name="Scroll" summary="Scroll"/>
</variants>

<variants name="ProfiledProcess">
  <variant name="" summary="all process types, aggregated"/>
  <variant name=".Browser" summary="the Browser process"/>
  <variant name=".GPU" summary="the GPU process"/>
  <variant name=".NetworkService" summary="the NetworkService process"/>
  <variant name=".Renderer" summary="a Renderer process"/>
  <variant name=".Utility" summary="a Utility process"/>
</variants>

<variants name="UtilityProcessType">
  <variant name="AudioService">
    <owner>olka@chromium.org</owner>
    <owner>fhernqvist@google.com</owner>
    <owner>tguilbert@chromium.org</owner>
    <owner>webrtc-audio-uma@google.com</owner>
  </variant>
  <variant name="CdmService">
    <owner>xhwang@chromium.org</owner>
    <owner>media-dev-uma@chromium.org</owner>
  </variant>
  <variant name="MediaFoundationService">
    <owner>xhwang@chromium.org</owner>
    <owner>media-dev-uma@chromium.org</owner>
  </variant>
  <variant name="PaintPreviewCompositor">
    <owner>ckitagawa@chromium.org</owner>
    <owner>fredmello@chromium.org</owner>
  </variant>
  <variant name="Utility">
    <owner>jam@chromium.org</owner>
  </variant>
</variants>

<variants name="VmmSwapVmName">
  <variant name="ARCVM" summary="ARCVM"/>
</variants>

<histogram name="HeapProfiling.AndroidStackUnwinder"
    enum="AndroidStackUnwinder" expires_after="2024-01-14">
  <owner>joenotcharles@google.com</owner>
  <owner>chrome-memory@google.com</owner>
  <summary>
    The stack unwinder implementation used by the SamplingHeapProfiler. Emitted
    on Android devices only each time the profiler is started, which happens at
    Chrome launch when HeapProfiling.InProcess.Enabled is true.
  </summary>
</histogram>

<histogram name="HeapProfiling.InProcess.AndroidNonChromeFrames{Process}"
    units="%" expires_after="2023-06-05">
  <owner>joenotcharles@google.com</owner>
  <owner>chrome-memory@google.com</owner>
  <summary>
    For every stack captured by the in-process heap profiler in {Process} on
    Android, records the percentage of stack frames whose address was not found
    in the Chrome module. Emitted at the time a snapshot is taken with an entry
    for every stack in the snapshot.
  </summary>
  <token key="Process" variants="ProfiledProcess"/>
</histogram>

<histogram name="HeapProfiling.InProcess.AndroidShortStacks{Process}"
    enum="Boolean" expires_after="2023-06-05">
  <owner>joenotcharles@google.com</owner>
  <owner>chrome-memory@google.com</owner>
  <summary>
    For every stack captured by the in-process heap profiler in {Process} on
    Android, records if it has fewer than 5 frames. Stacks with few frames are
    low-quality and may indicate a problem with the stack unwinder. Emitted at
    the time a snapshot is taken with an entry for every stack in the snapshot.
  </summary>
  <token key="Process" variants="ProfiledProcess"/>
</histogram>

<histogram name="HeapProfiling.InProcess.Enabled{Process}"
    enum="BooleanEnabled" expires_after="2024-06-05">
  <owner>joenotcharles@google.com</owner>
  <owner>chrome-memory@google.com</owner>
  <summary>
    One metric is emitted on every process start, recording whether the
    in-process heap profiler is enabled in {Process} for this Chrome session.
  </summary>
  <token key="Process" variants="ProfiledProcess"/>
</histogram>

<histogram name="HeapProfiling.InProcess.SamplesPerSnapshot{Process}"
    units="samples" expires_after="2024-06-05">
  <owner>joenotcharles@google.com</owner>
  <owner>chrome-memory@google.com</owner>
  <summary>
    The number of samples in a heap snapshot taken in {Process}. Emitted once
    per snapshot when the in-process heap profiler is enabled.
  </summary>
  <token key="Process" variants="ProfiledProcess"/>
</histogram>

<histogram
    name="HeapProfiling.InProcess.SnapshotInterval.{Platform}.{RecordingTime}{Process}"
    units="ms" expires_after="2024-06-05">
  <owner>joenotcharles@google.com</owner>
  <owner>chrome-memory@google.com</owner>
  <summary>
    The time between heap snapshots taken in {Process} on {Platform}. Emitted
    for each snapshot when the in-process heap profiler is enabled, at the
    beginning and end of the snapshot interval. *.Scheduled histograms are
    recorded at the beginning of the interval, when the snapshot is scheduled.
    *.Taken histograms are recorded at the end of the interval, when the
    snapshot is taken. Entries in *.Scheduled that don't appear in *.Taken show
    which snapshot intervals are interrupted before the snapshot is taken.
  </summary>
  <token key="Platform">
    <variant name="Desktop" summary="All desktop platforms"/>
    <variant name="Mobile" summary="Android and iOS"/>
  </token>
  <token key="RecordingTime">
    <variant name="Scheduled"
        summary="Recorded when the snapshot is scheduled."/>
    <variant name="Taken" summary="Recorded when the snapshot is taken."/>
  </token>
  <token key="Process" variants="ProfiledProcess"/>
</histogram>

<histogram name="HeapProfiling.InProcess.TotalSampledMemory{Process}"
    units="MB" expires_after="2024-02-20">
  <owner>joenotcharles@google.com</owner>
  <owner>etienneb@chromium.org</owner>
  <owner>chrome-memory@google.com</owner>
  <summary>
    The total amount of memory in a heap snapshot taken in {Process}. This is an
    estimate of total memory allocations in the code being sampled. Because it
    is collected through random sampling it is only statistically accurate when
    aggregated over many reports. Emitted once per snapshot when the in-process
    heap profiler is enabled.
  </summary>
  <token key="Process" variants="ProfiledProcess"/>
</histogram>

<histogram name="HeapProfiling.SamplingIntervalKB" units="KB"
    expires_after="2024-02-25">
  <owner>joenotcharles@google.com</owner>
  <owner>chrome-memory@google.com</owner>
  <summary>
    The mean number of kilobytes between samples used by the
    SamplingHeapProfiler. Emitted each time the profiler is started, which
    happens at Chrome launch when HeapProfiling.InProcess.Enabled is true.
  </summary>
</histogram>

<histogram name="Memory.BackingStore" units="units" expires_after="M85">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>TBD.</summary>
</histogram>

<histogram name="Memory.Browser.MemoryFootprint" units="MB"
    expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->

  <owner>erikchen@chromium.org</owner>
  <owner>ajuma@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <summary>
    This metric is only recorded on iOS. This measures the sum of
    PrivateMemoryFootprint and SharedMemoryFootprint, which is possible because
    Chromium on iOS is single-process. Note that this does not include memory
    consumed by WebKit-launched processes, such as the WebContent and Network
    processes.

    Emitted when closing a log in order to upload it. This happens shortly after
    startup and again at regular intervals (usually 5 minutes, regardless of the
    type of network connection). Not emitted in logs that are closed when Chrome
    loses focus or closes. Yet, it is emitted on logs that are constructed from
    data persisted from a previous session, i.e., persisted from an unclean
    shutdown.

    Many changes in memory usage on iOS come from changes to WebKit, rather than
    changes within Chromium code. To assess whether a change in this metric is
    caused by a WebKit change, split by OS version. WebKit changes always come
    with an OS version change.

    As with other memory metrics, memory use tends to increase over time.
    Restarts due to OS or Chrome updates tend to make this metric drop.

    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="Memory.Browser.MemoryFootprint.Active" units="MB"
    expires_after="2024-02-05">
  <owner>justincohen@chromium.org</owner>
  <owner>ajuma@chromium.org</owner>
  <summary>
    This metric is only recorded on iOS. Same as Memory.Browser.MemoryFootprint
    but only recorded when UIApplication.sharedApplication.applicationState is
    UIApplicationStateActive.
  </summary>
</histogram>

<histogram name="Memory.Browser.MemoryFootprint.Active.Over200MBWatermark"
    enum="BooleanGreaterOrEqualThan200MB" expires_after="2024-02-05">
  <owner>justincohen@chromium.org</owner>
  <owner>ajuma@chromium.org</owner>
  <summary>
    This metric is only recorded on iOS when
    UIApplication.sharedApplication.applicationState is
    UIApplicationStateActive. True if the sum of PrivateMemoryFootprint and
    SharedMemoryFootprint is greater than 200MB. According to Apple, apps on
    iPhone 6 and older devices get terminated by the OS if memory usage crosses
    200MB watermark, so it's important to keep the memory usage under 200MB.
    &quot;true&quot; value may not show up on iPhone 6 and older devices if iOS
    is strict about the advertised watermark.
  </summary>
</histogram>

<histogram name="Memory.Browser.MemoryFootprint.Background" units="MB"
    expires_after="2024-02-05">
  <owner>justincohen@chromium.org</owner>
  <owner>ajuma@chromium.org</owner>
  <summary>
    This metric is only recorded on iOS. Same as Memory.Browser.MemoryFootprint
    but only recorded when UIApplication.sharedApplication.applicationState is
    UIApplicationStateBackground. According to Apple, apps get terminated by the
    OS if memory usage in background crosses 50MB watermark, so it's important
    to keep the memory usage under 50MB. The timing of this metric will line up
    so that it rarely occurs when the app is in the background. With a small
    data set, the metrics might be biased in ways that we can't think of right
    now.
  </summary>
</histogram>

<histogram name="Memory.Browser.MemoryFootprint.Inactive" units="MB"
    expires_after="2024-02-05">
  <owner>justincohen@chromium.org</owner>
  <owner>ajuma@chromium.org</owner>
  <summary>
    This metric is only recorded on iOS. Same as Memory.Browser.MemoryFootprint
    but only recorded when UIApplication.sharedApplication.applicationState is
    UIApplicationStateInactive. The timing of this metric will line up so that
    it rarely occurs when the app is inactive. With a small data set, the
    metrics might be biased in ways that we can't think of right now.
  </summary>
</histogram>

<histogram name="Memory.Browser.MemoryFootprint.NumLiveOverscroll" units="tabs"
    expires_after="2021-09-12">
  <owner>ajuma@chromium.org</owner>
  <owner>rkgibson@google.com</owner>
  <summary>
    Investigation into crbug.com/1102494 shows that OverscrollActionsController
    is allocating thousands of objects in it's -initWithScrollView:. This is
    likely because thousands of OverscrollActionsControllers are being
    initialized. The theory is that there are users that have many many tabs,
    causing many OverscrollActionsControllers to be allocated. This histogram
    tests that theory by logging how many live OverscrollActionsControllers
    there are. This is recorded every time histograms are uploaded.
  </summary>
</histogram>

<histogram name="Memory.Browser.MemoryFootprint.NumOpenTabs" units="tabs"
    expires_after="2024-02-05">
  <owner>ajuma@chromium.org</owner>
  <owner>rkgibson@google.com</owner>
  <summary>
    Investigation into crbug.com/1102494 shows that OverscrollActionsController
    is allocating thousands of objects in it's -initWithScrollView:. This is
    likely because thousands of OverscrollActionsControllers are being
    initialized. The theory is that there are users that have many many tabs,
    causing many OverscrollActionsControllers to be allocated. This histogram
    tests that theory by logging how many open tabs there are. This is recorded
    every time histograms are uploaded.
  </summary>
</histogram>

<histogram name="Memory.Browser.MemoryFootprint.OnBackground" units="MiB"
    expires_after="2024-02-05">
  <owner>justincohen@chromium.org</owner>
  <owner>ajuma@chromium.org</owner>
  <summary>
    This metric is only recorded on iOS. Same as Memory.Browser.MemoryFootprint
    but recorded right after the app transitions into background. According to
    Apple, apps get terminated by the OS if memory usage in background crosses
    50MiB watermark so it's important to keep the memory usage under 50MiB.
  </summary>
</histogram>

<histogram name="Memory.Browser.PrivateMemoryFootprint" units="MB"
    expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->

  <owner>erikchen@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    A rough estimate of the private memory footprint of the browser process.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.

    This memory footprint metric cannot be compared across platforms because
    each platform relies on platform-level APIs for accounting. As such, though
    this attempts to measure private memory footprint as best as possible, it
    does not measure the same thing on each platform. We have not found a good
    way to compare any system level memory metric across platforms due to the
    different nature of memory management on each platform.

    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="Memory.Browser.PrivateMemoryFootprint.HasZombieProfile"
    units="MB" expires_after="2022-08-21">
  <obsolete>
    This histogram was used to measure the impact of the
    DestroyProfileOnBrowserClose prior to its general launch. Now that it's 100%
    launched, there is no active A/B test.
  </obsolete>
  <owner>nicolaso@chromium.org</owner>
  <owner>cbe-eng@google.com</owner>
  <summary>
    Same as Memory.Browser.PrivateMemoryFootprint, but only gets recorded after
    a Profile becomes safe to delete during this browsing session. This lets us
    measure the memory impact of destroying Profile objects and their
    KeyedServices.

    This is not meant to be compared with Memory.Browser.PrivateMemoryFootprint,
    as it measures a different scenario. Instead, it should be compared with
    itself in an A/B test with the DestroyProfileOnBrowserClose variation.
  </summary>
</histogram>

<histogram name="Memory.Browser.PrivateSwapFootprint" units="MB"
    expires_after="2024-03-24">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    An amount of private memory of the browser process placed in swap (VmSwap).
    Available on Android, Linux and ChromeOS.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram name="Memory.Browser.ResidentSet" units="MiB" expires_after="never">
<!-- expires-never: Generic system health metric used to diagnose various performance issues. -->

  <owner>fdoray@chromium.org</owner>
  <summary>
    The size of the resident memory in the browser process. This is influenced
    by factors we control (e.g. memory that is not accessed can be swapped) and
    factors we don't control (e.g. an unrelated process using a lot of memory
    can force memory in our process to be swapped). Recorded on
    Windows/Linux/ChromeOS/Android.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.

    This resident memory metric cannot be compared across platforms because each
    platform relies on platform-level APIs for accounting. As such, though this
    attempts to measure private memory footprint as best as possible, it does
    not measure the same thing on each platform. We have not found a good way to
    compare any system level memory metric across platforms due to the different
    nature of memory management on each platform.
  </summary>
</histogram>

<histogram name="Memory.Browser.SharedMemoryFootprint" units="MB"
    expires_after="2024-03-24">
  <owner>erikchen@chromium.org</owner>
  <summary>
    A rough estimate of the shared memory footprint of the browser process.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram name="Memory.CachedFontAndDC" units="units" expires_after="M85">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>TBD.</summary>
</histogram>

<histogram name="Memory.Discardable.FreeListReleaseTime" units="microseconds"
    expires_after="2022-11-13">
  <obsolete>
    No longer needed since the experiment was not launched.
  </obsolete>
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Records how long it takes for memory to be released from the freelist of the
    discardable shared memory allocator with |madvise|.

    Note that clients without high-resolution clocks will report 0 for very
    short times.
  </summary>
</histogram>

<histogram name="Memory.Discardable.FreelistSize.Dirty" units="KiB"
    expires_after="2022-12-18">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Amount of resident memory that was in use but has now been moved to the
    freelist. Recorded during |OnMemoryDump|.
  </summary>
</histogram>

<histogram name="Memory.Discardable.FreelistSize.Foreground" units="KiB"
    expires_after="2023-03-05">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Freelist size used by ClientDiscardableMemoryManager in the foreground only.
    Recorded during |OnMemoryDump|.
  </summary>
</histogram>

<histogram name="Memory.Discardable.LargeAllocationFromFreelist"
    enum="BooleanLargeAllocationFromFreelist" expires_after="2023-03-19">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Boolean metric which tracks whether or not large chunks of discardable
    memory are allocated from the freelist or via IPC.
  </summary>
</histogram>

<histogram name="Memory.Discardable.LockingSuccess"
    enum="BooleanLockingSuccess" expires_after="2023-05-07">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Boolean metric which tracks whether or not discardable memory had already
    been discarded when an attempt is made to lock it.
  </summary>
</histogram>

<histogram name="Memory.Discardable.Size.Foreground" units="KiB"
    expires_after="2023-03-05">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Effective memory used by ClientDiscardableMemoryManager in the foreground
    only. Recorded during |OnMemoryDump|.
  </summary>
</histogram>

<histogram name="Memory.Discardable.VirtualSize.Foreground" units="KiB"
    expires_after="2023-03-19">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Virtual memory used by ClientDiscardableMemoryManager in the foreground
    only. Recorded during |OnMemoryDump|.
  </summary>
</histogram>

<histogram name="Memory.DiscardableAllocationSize" units="KB"
    expires_after="2023-03-19">
  <owner>reveman@chromium.org</owner>
  <owner>thiabaud@google.com</owner>
  <summary>
    The discardable memory allocation size in KB. Recorded each time a new
    discardable memory instance is created.
  </summary>
</histogram>

<histogram name="Memory.Experimental.AvailableMemoryMB" units="MB"
    expires_after="2024-03-10">
  <owner>anthonyvd@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    The amount of available physical memory on the system as reported by
    base::SysInfo::AmountOfAvailablePhysicalMemory().

    Recorded every 2 minutes.
  </summary>
</histogram>

<histogram name="Memory.Experimental.AvailableMemoryPercent" units="%"
    expires_after="2024-02-04">
  <owner>anthonyvd@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    The percentage of physical memory on the system considered
    &quot;available&quot; by base::SysInfo::AmountOfAvailablePhysicalMemory()
    and base::SysInfo::AmountOfPhysicalMemory().

    Recorded every 2 minutes.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Browser2" units="MB"
    expires_after="2024-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocator2" -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The browser process's memory usage reported by the memory instrumentation
    service in MB.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Browser2.Custom" units="bytes"
    expires_after="2024-03-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorCustom2" -->

  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The browser process's memory usage reported by the memory instrumentation
    service in bytes.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Browser2.Small" units="KB"
    expires_after="2024-03-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorSmall2" -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The browser process's memory usage reported by the memory instrumentation
    service in KB.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Browser2.Tiny" units="bytes"
    expires_after="2024-03-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorTiny2" -->

  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The browser process's memory usage reported by the memory instrumentation
    service in bytes.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Extension2" units="MB"
    expires_after="2024-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocator2" -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The extension process's memory usage reported by the memory instrumentation
    service in MB.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Extension2.Custom"
    units="bytes" expires_after="2024-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorCustom2" -->

  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The extension process's memory usage reported by the memory instrumentation
    service in bytes.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Extension2.Small" units="KB"
    expires_after="2024-03-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorSmall2" -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The extension process's memory usage reported by the memory instrumentation
    service in KB.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Extension2.Tiny" units="bytes"
    expires_after="2024-03-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorTiny2" -->

  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The extension process's memory usage reported by the memory instrumentation
    service in bytes.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram name="Memory.Experimental.Gpu.PhysicalFootprint.MacOS" units="MB"
    expires_after="M85">
  <owner>erikchen@chromium.org</owner>
  <summary>
    The physical footprint of the GPU process on macOS. Other measurements fail
    to correctly account for OpenGL memory usage. This metric also has flaws and
    is not intended for permanent use. It's an emergency measure added to help
    debug https://crbug.com/713854.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Gpu2" units="MB"
    expires_after="2024-03-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocator2" -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The gpu process's memory usage reported by the memory instrumentation
    service in MB.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Gpu2.Custom" units="bytes"
    expires_after="2024-03-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorCustom2" -->

  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The gpu process's memory usage reported by the memory instrumentation
    service in bytes.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Gpu2.Small" units="KB"
    expires_after="2024-03-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorSmall2" -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The gpu process's memory usage reported by the memory instrumentation
    service in KB.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Gpu2.Tiny" units="bytes"
    expires_after="2024-03-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorTiny2" -->

  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The gpu process's memory usage reported by the memory instrumentation
    service in bytes.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram name="Memory.Experimental.MacAvailableMemoryPercentFreePageCache2"
    units="%" expires_after="2024-02-04">
  <owner>anthonyvd@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    The percentage of physical memory on the system considered
    &quot;available&quot; by base::SysInfo::AmountOfAvailablePhysicalMemory()
    and base::SysInfo::AmountOfPhysicalMemory(). The amount of
    &quot;file-backed&quot; memory is subtracted from the amount of available
    memory to attempt to estimate the available memory, counting the Page Cache
    as available.

    Recorded every 2 minutes on MacOS.
  </summary>
</histogram>

<histogram name="Memory.Experimental.MacFileBackedMemoryMB2" units="MB"
    expires_after="2024-02-04">
  <owner>anthonyvd@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    The amount of memory reported as &quot;file-backed&quot; or associated to
    &quot;external_pages&quot; by vm_stat.

    Recorded every 2 minutes on MacOS.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.NetworkService2" units="MiB"
    expires_after="2024-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocator2" -->

  <owner>mmenke@chromium.org</owner>
  <owner>morlovich@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The network service process's memory usage reported by the memory
    instrumentation service in MiB.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.NetworkService2.Custom"
    units="bytes" expires_after="2024-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorCustom2" -->

  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The network service process's memory usage reported by the memory
    instrumentation service in bytes.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.NetworkService2.Small"
    units="KiB" expires_after="2024-03-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorSmall2" -->

  <owner>mmenke@chromium.org</owner>
  <owner>morlovich@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The network service process's memory usage reported by the memory
    instrumentation service in KiB.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.NetworkService2.Tiny"
    units="bytes" expires_after="2024-03-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorTiny2" -->

  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The network service process's memory usage reported by the memory
    instrumentation service in bytes.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.OomIntervention.RendererPrivateMemoryFootprintAtOOM"
    units="MB" expires_after="M85">
  <owner>ssid@chromium.org</owner>
  <owner>bashi@chromium.org</owner>
  <summary>
    The renderer process' private memory footprint when a foreground OOM occurs.
    This was last recorded metric by renderer a few seconds before getting
    killed.
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.OomIntervention.RendererTimeSinceLastNavigationAtDetection"
    units="seconds" expires_after="2019-07-31">
  <owner>yuzus@chromium.org</owner>
  <owner>keishi@chromium.org</owner>
  <summary>
    Records the time since last main frame navigation start on the renderer
    process when high memory usage is detected. Record only when navigation
    happened at least once.
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.OomIntervention.RendererTimeSinceLastNavigationAtOOM"
    units="seconds" expires_after="M82">
  <owner>ssid@chromium.org</owner>
  <owner>haraken@chromium.org</owner>
  <summary>
    Records the time since last main frame navigation start on the renderer
    process when it OOMs in foreground visible state. Record 0 if no navigation
    was started.
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.OomIntervention.RendererTimeSinceStartMonitoringAtDetection"
    units="seconds" expires_after="2019-07-31">
  <owner>yuzus@chromium.org</owner>
  <owner>keishi@chromium.org</owner>
  <summary>
    Records the time since starting monitor on renderer when high memory usage
    is detected.
  </summary>
</histogram>

<histogram name="Memory.Experimental.Renderer.HighestPrivateMemoryFootprint"
    units="MB" expires_after="2024-02-25">
  <owner>tasak@google.com</owner>
  <owner>bartekn@google.com</owner>
  <summary>
    The highest private memory footprint of a renderer process in (X mins after
    the first page navigation, Y mins after the first page navigation]. (X, Y]
    is (0, 2], (2, 4], (4, 8], and (8, 16]. The metric is recorded at the Y's
    timing.

    This memory footprint metric cannot be compared across platforms because
    each platform relies on platform-level APIs for accounting. As such, though
    this attempts to measure private memory footprint as best as possible, it
    does not measure the same thing on each platform. We have not found a good
    way to compare any system level memory metric across platforms due to the
    different nature of memory management on each platform.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Renderer2" units="MB"
    expires_after="2024-03-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocator2" -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The renderer process's memory usage reported by the memory instrumentation
    service in MB.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Renderer2.Custom"
    units="bytes" expires_after="2024-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorCustom2" -->

  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The renderer process's memory usage reported by the memory instrumentation
    service in bytes.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Renderer2.Small" units="KB"
    expires_after="2024-03-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorSmall2" -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The renderer process's memory usage reported by the memory instrumentation
    service in KB.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Renderer2.Tiny" units="bytes"
    expires_after="2024-03-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorTiny2" -->

  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The renderer process's memory usage reported by the memory instrumentation
    service in bytes.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.UserLevelMemoryPressureSignal.RendererPrivateMemoryFootprintAfter"
    units="MB" expires_after="2019-09-30">
  <owner>keishi@chromium.org</owner>
  <owner>tasak@chromium.org</owner>
  <summary>
    The renderer process' private memory footprint 10 seconds after a memory
    pressure signal is generated.
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.UserLevelMemoryPressureSignal.RendererPrivateMemoryFootprintBefore"
    units="MB" expires_after="2022-05-01">
  <owner>keishi@chromium.org</owner>
  <owner>tasak@chromium.org</owner>
  <summary>
    The renderer process' private memory footprint right before a memory
    pressure signal is generated.

    This memory footprint metric cannot be compared across platforms because
    each platform relies on platform-level APIs for accounting. As such, though
    this attempts to measure private memory footprint as best as possible, it
    does not measure the same thing on each platform. We have not found a good
    way to compare any system level memory metric across platforms due to the
    different nature of memory management on each platform.
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.UserLevelMemoryPressureSignal.TotalPrivateMemoryFootprintAfter"
    units="MB" expires_after="2024-03-03">
  <owner>tasak@google.com</owner>
  <owner>chrome-memory-tok@google.com</owner>
  <summary>
    The total private memory footprint 10 seconds after a user-level memory
    pressure signal is generated. Recorded on Android.
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.UserLevelMemoryPressureSignal.TotalPrivateMemoryFootprintBefore"
    units="MB" expires_after="2024-03-03">
  <owner>tasak@google.com</owner>
  <owner>chrome-memory-tok@google.com</owner>
  <summary>
    The total private memory footprint right before a user-level memory pressure
    signal is generated. Recorded on Android.

    This memory footprint metric cannot be compared across platforms because
    each platform relies on platform-level APIs for accounting. As such, though
    this attempts to measure private memory footprint as best as possible, it
    does not measure the same thing on each platform. We have not found a good
    way to compare any system level memory metric across platforms due to the
    different nature of memory management on each platform.
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.UserLevelMemoryPressureSignal.TotalPrivateMemoryFootprintVisibleOrHigherPriorityRenderersAfter"
    units="MB" expires_after="2024-03-03">
  <owner>tasak@google.com</owner>
  <owner>chrome-memory-tok@google.com</owner>
  <summary>
    The total private memory footprint excluding lower priority renderers' 10
    seconds after a user-level memory pressure signal is generated. Recorded on
    Android.
  </summary>
</histogram>

<histogram
    name="Memory.Experimental.UserLevelMemoryPressureSignal.TotalPrivateMemoryFootprintVisibleOrHigherPriorityRenderersBefore"
    units="MB" expires_after="2024-03-03">
  <owner>tasak@google.com</owner>
  <owner>chrome-memory-tok@google.com</owner>
  <summary>
    The total private memory footprint excluding lower priority renderers' right
    before a user-level memory pressure signal is generated. Recorded on
    Android.

    This memory footprint metric cannot be compared across platforms because
    each platform relies on platform-level APIs for accounting. As such, though
    this attempts to measure private memory footprint as best as possible, it
    does not measure the same thing on each platform. We have not found a good
    way to compare any system level memory metric across platforms due to the
    different nature of memory management on each platform.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Utility2" units="MB"
    expires_after="2024-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocator2" -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The utility process's memory usage reported by the memory instrumentation
    service in MB.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Utility2.Custom" units="bytes"
    expires_after="2024-01-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorCustom2" -->

  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The utility process's memory usage reported by the memory instrumentation
    service in bytes.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Utility2.Small" units="KB"
    expires_after="2024-03-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorSmall2" -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The utility process's memory usage reported by the memory instrumentation
    service in KB.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram base="true" name="Memory.Experimental.Utility2.Tiny" units="bytes"
    expires_after="2024-03-10">
<!-- Name completed by histogram_suffixes name="ProcessMemoryAllocatorTiny2" -->

  <owner>sashamcintosh@chromium.org</owner>
  <owner>chromeos-gfx@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    The utility process's memory usage reported by the memory instrumentation
    service in bytes.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram name="Memory.Extension.PrivateMemoryFootprint" units="MB"
    expires_after="2024-03-24">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    A rough estimate of the private memory footprint of the extension process.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.

    This memory footprint metric cannot be compared across platforms because
    each platform relies on platform-level APIs for accounting. As such, though
    this attempts to measure private memory footprint as best as possible, it
    does not measure the same thing on each platform. We have not found a good
    way to compare any system level memory metric across platforms due to the
    different nature of memory management on each platform.
  </summary>
</histogram>

<histogram name="Memory.Extension.ResidentSet" units="MiB"
    expires_after="never">
<!-- expires-never: Generic system health metric used to diagnose various performance issues. -->

  <owner>fdoray@chromium.org</owner>
  <summary>
    The size of the resident memory in an extension process. This is influenced
    by factors we control (e.g. memory that is not accessed can be swapped) and
    factors we don't control (e.g. an unrelated process using a lot of memory
    can force memory in our process to be swapped). Recorded on
    Windows/Linux/ChromeOS.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.

    This resident memory metric cannot be compared across platforms because each
    platform relies on platform-level APIs for accounting. As such, though this
    attempts to measure private memory footprint as best as possible, it does
    not measure the same thing on each platform. We have not found a good way to
    compare any system level memory metric across platforms due to the different
    nature of memory management on each platform.
  </summary>
</histogram>

<histogram name="Memory.Extension.SharedMemoryFootprint" units="MB"
    expires_after="M77">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    A rough estimate of the shared memory footprint of the extension process.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram name="Memory.GlyphPagesPerLoad" units="units" expires_after="M85">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The number of glyph pages present in the renderer when it commits a load.
    Since this is per-sub-process, you can get the average number of glyph pages
    in the system by multiplying this number with the average number of
    renderers. Note that this typically won't count the glyph pages added as a
    result of the load that just committed, since layout will happen after the
    commit. There are 512 bytes per glyph page, but this number also very
    closely approximates the number of glyph width map pages in the same
    renderer. The only difference is that if you have font fallback, it will
    make a new glyph page and no width page, but in most common cases there is
    no fallback). Width pages are 1K each (256 floats), so you could think of
    this value as being the number of &quot;1.5K units related to glyphs per
    renderer per page load&quot;.
  </summary>
</histogram>

<histogram name="Memory.GPU.PeakMemoryAllocationSource2.{Usage}.{Source}"
    units="MB" expires_after="2024-04-30">
  <owner>jonross@chromium.org</owner>
  <owner>graphics-dev@chromium.org</owner>
  <summary>
    The maximum amount of memory of the GPU process allocated by {Source} during
    the following user interaction: {Usage}.

    See Memory.GPU.PeakMemoryUsage2.
  </summary>
  <token key="Usage" variants="GpuPeakMemoryUsage"/>
  <token key="Source">
    <variant name="CommandBuffer" summary="GPU command buffer"/>
    <variant name="SharedContextState" summary="Shared Context State"/>
    <variant name="SharedImageStub" summary="Shared Image Stub"/>
    <variant name="Skia" summary="Skia"/>
    <variant name="Unknown" summary="an unknown source"/>
  </token>
</histogram>

<histogram name="Memory.GPU.PeakMemoryUsage2.{Usage}" units="MB"
    expires_after="2024-04-30">
  <owner>jonross@chromium.org</owner>
  <owner>graphics-dev@chromium.org</owner>
  <summary>
    The maximum amount of memory of the GPU process during the following user
    interaction: {Usage}.
  </summary>
  <token key="Usage" variants="GpuPeakMemoryUsage"/>
</histogram>

<histogram name="Memory.Gpu.PrivateMemoryFootprint" units="MB"
    expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    A rough estimate of the private memory footprint of the gpu process.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.

    This memory footprint metric cannot be compared across platforms because
    each platform relies on platform-level APIs for accounting. As such, though
    this attempts to measure private memory footprint as best as possible, it
    does not measure the same thing on each platform. We have not found a good
    way to compare any system level memory metric across platforms due to the
    different nature of memory management on each platform.

    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="Memory.Gpu.PrivateSwapFootprint" units="MB"
    expires_after="M77">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    An amount of private memory of the GPU process placed in swap (VmSwap).
    Available on Android, Linux and ChromeOS.
  </summary>
</histogram>

<histogram name="Memory.Gpu.ResidentSet" units="MiB" expires_after="never">
<!-- expires-never: Generic system health metric used to diagnose various performance issues. -->

  <owner>fdoray@chromium.org</owner>
  <summary>
    The size of the resident memory in the GPU process. This is influenced by
    factors we control (e.g. memory that is not accessed can be swapped) and
    factors we don't control (e.g. an unrelated process using a lot of memory
    can force memory in our process to be swapped). Recorded on
    Windows/Linux/ChromeOS/Android.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.

    This resident memory metric cannot be compared across platforms because each
    platform relies on platform-level APIs for accounting. As such, though this
    attempts to measure private memory footprint as best as possible, it does
    not measure the same thing on each platform. We have not found a good way to
    compare any system level memory metric across platforms due to the different
    nature of memory management on each platform.
  </summary>
</histogram>

<histogram name="Memory.Gpu.SharedMemoryFootprint" units="MB"
    expires_after="2024-03-24">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    A rough estimate of the shared memory footprint of the gpu process.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram name="Memory.Graphics" units="MB" expires_after="never">
<!-- expires-never: "heartbeat" metric (internal: used for chromeos memory) -->

  <owner>hajimehoshi@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <summary>
    System-wide graphics driver memory consumption. Recorded on Chrome OS for
    platforms where it is exposed by the kernel (for example, Intel i915 and
    Exynos Mali). Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.LowMemoryKiller.Count" units="low-memory kills"
    expires_after="2024-03-24">
  <owner>khmel@google.com</owner>
  <owner>vovoy@google.com</owner>
  <summary>
    Cumulative count of low memory kills in one user session. This is recorded
    by MemoryKillsMonitor every time a low memory kill occurs.
  </summary>
</histogram>

<histogram name="Memory.LowMemoryKiller.FirstKillLatency" units="ms"
    expires_after="2024-03-24">
  <owner>khmel@google.com</owner>
  <owner>vovoy@google.com</owner>
  <summary>
    When Chrome OS is in low memory state, TabManager kills some victims to free
    memory. This value is the elapsed time between TabManager receiving the low
    memory notification and the first kill.
  </summary>
</histogram>

<histogram name="Memory.LowMemoryKiller.FreedSize" units="KB"
    expires_after="2024-03-10">
  <owner>khmel@google.com</owner>
  <owner>vovoy@google.com</owner>
  <summary>The memory size freed by each low memory kill event.</summary>
</histogram>

<histogram name="Memory.NativeLibrary.MappedAndResidentMemoryFootprint3"
    units="KB" expires_after="2024-02-04">
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    The size of the resident memory for the native library code across all
    processes. This metric is computed by parsing proc/self/pagemap and counting
    native library pages that are mapped and present in RAM for at least one
    Chrome process.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram
    name="Memory.NativeLibrary.MappedAndResidentMemoryFootprintCollectionStatus"
    enum="MappedAndResidentPagesDumpState" expires_after="2024-02-04">
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Result of an attempt to read /proc/self/pagemap when determining the amount
    of resident memory mapped by the current process. Reading the file is
    performed as part of computing the
    Memory.NativeLibrary.MappedAndResidentMemoryFootprint2 histogram. Available
    only on Android.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram name="Memory.NativeLibrary.NotResidentOrderedCodeMemoryFootprint"
    units="KB" expires_after="2024-02-04">
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    The size of the native library code which was ordered, yet is not resident
    in memory, across all processes. This metric is computed by parsing
    proc/self/pagemap and counting native library pages that are mapped and
    present in RAM for at least one Chrome process. Available only on Android.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram name="Memory.NativeLibrary.ResidentNotOrderedCodeMemoryFootprint"
    units="KB" expires_after="2024-02-04">
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    The size of the native library code which is outside the ordered section,
    yet is resident in memory, across all processes. This metric is computed by
    parsing proc/self/pagemap and counting native library pages that are mapped
    and present in RAM for at least one Chrome process. Available only on
    Android.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram name="Memory.NetworkService.PrivateMemoryFootprint" units="MiB"
    expires_after="2024-02-25">
  <owner>mmenke@chromium.org</owner>
  <owner>morlovich@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    A rough estimate of the private memory footprint of the network service
    process.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.

    This memory footprint metric cannot be compared across platforms because
    each platform relies on platform-level APIs for accounting. As such, though
    this attempts to measure private memory footprint as best as possible, it
    does not measure the same thing on each platform. We have not found a good
    way to compare any system level memory metric across platforms due to the
    different nature of memory management on each platform.
  </summary>
</histogram>

<histogram name="Memory.NetworkService.PrivateSwapFootprint" units="MiB"
    expires_after="2023-01-10">
  <owner>mmenke@chromium.org</owner>
  <owner>morlovich@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    An amount of private memory of the network service process placed in swap
    (VmSwap). Available on Android, Linux and ChromeOS.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.

    Note: Histogram data may be missing for mid-2020 due to expiry.
  </summary>
</histogram>

<histogram name="Memory.NetworkService.ResidentSet" units="MiB"
    expires_after="2020-05-06">
  <owner>mmenke@chromium.org</owner>
  <owner>morlovich@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    The size of the resident memory in a network service process. This is
    influenced by factors we control (e.g. memory that is not accessed can be
    swapped) and factors we don't control (e.g. an unrelated process using a lot
    of memory can force memory in our process to be swapped). Recorded on
    Windows/Linux/ChromeOS/Android.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.

    This resident memory metric cannot be compared across platforms because each
    platform relies on platform-level APIs for accounting. As such, though this
    attempts to measure private memory footprint as best as possible, it does
    not measure the same thing on each platform. We have not found a good way to
    compare any system level memory metric across platforms due to the different
    nature of memory management on each platform.
  </summary>
</histogram>

<histogram name="Memory.NetworkService.SharedMemoryFootprint" units="MiB"
    expires_after="2024-01-28">
  <owner>mmenke@chromium.org</owner>
  <owner>morlovich@chromium.org</owner>
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    A rough estimate of the shared memory footprint of the network service
    process.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.

    Note: Histogram data may be missing for mid-2020 due to expiry.
  </summary>
</histogram>

<histogram name="Memory.OOMKill.Contents.MemAllocatedMB" units="MB"
    expires_after="2021-11-07">
  <owner>oshima@chromium.org</owner>
  <owner>alemate@chromium.org</owner>
  <summary>
    System-wide memory allocation right after a renderer was killed by
    oom-killer, roughly equivalent to the sum of memory allocated with malloc()
    in userspace plus graphics driver memory.
  </summary>
</histogram>

<histogram name="Memory.OOMKill.Contents.MemShmemMB" units="MB"
    expires_after="2021-02-25">
  <owner>oshima@chromium.org</owner>
  <owner>alemate@chromium.org</owner>
  <summary>
    System-wide shared memory right after a renderer was killed by oom-killer.
    Used primarily for shared buffers in the graphics system. Tracked because
    it's a historical source of leaks on Chrome OS.
  </summary>
</histogram>

<histogram name="Memory.OOMKill.Extensions.MemAllocatedMB" units="MB"
    expires_after="2021-11-07">
  <owner>oshima@chromium.org</owner>
  <owner>alemate@chromium.org</owner>
  <summary>
    System-wide memory allocation right after a renderer was killed by
    oom-killer, roughly equivalent to the sum of memory allocated with malloc()
    in userspace plus graphics driver memory.
  </summary>
</histogram>

<histogram name="Memory.OOMKill.Extensions.MemAvailableMB" units="MB"
    expires_after="2021-02-25">
  <owner>oshima@chromium.org</owner>
  <owner>alemate@chromium.org</owner>
  <summary>
    System-wide file-backed memory plus free memory right after a renderer was
    killed by oom-killer, which should be smaller than or close to what the
    kernel uses to trigger low-memory notifications for tab discards. If this is
    higher than the kernel's threshold for tab discards, renderers may be killed
    due to reasons other than out-of-memory.
  </summary>
</histogram>

<histogram name="Memory.OOMKill.Extensions.MemGraphicsMB" units="MB"
    expires_after="2021-11-07">
  <owner>oshima@chromium.org</owner>
  <owner>alemate@chromium.org</owner>
  <summary>
    Graphics driver (GEM object) memory right after a renderer was killed by
    oom-killer.
  </summary>
</histogram>

<histogram name="Memory.OOMKill.Extensions.MemShmemMB" units="MB"
    expires_after="2021-08-01">
  <owner>oshima@chromium.org</owner>
  <owner>alemate@chromium.org</owner>
  <summary>
    System-wide shared memory right after a renderer was killed by oom-killer.
    Used primarily for shared buffers in the graphics system. Tracked because
    it's a historical source of leaks on Chrome OS.
  </summary>
</histogram>

<histogram name="Memory.OOMKills.Count" units="kills"
    expires_after="2024-02-25">
  <owner>vovoy@google.com</owner>
  <owner>wvk@google.com</owner>
  <summary>Cumulative count of OOM kills in one user session.</summary>
</histogram>

<histogram name="Memory.OOMKills.Daily" units="kills"
    expires_after="2024-02-11">
  <owner>vovoy@google.com</owner>
  <owner>src/chromeos/ash/components/memory/OWNERS</owner>
  <summary>
    The number of OOM kills since last emit. The emit interval is at least 24
    hours, see metrics::DailyEvent for more details.
  </summary>
</histogram>

<histogram base="true" name="Memory.OpenFDs" units="files" expires_after="M85">
<!-- Name completed by histogram_suffixes name="MemoryFDsBroswerGpuAndRendererProcess" and name="MemoryFDsAllProcesses" -->

  <owner>dcastagna@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    The total number of open file descriptors opened per process. Recorded once
    per UMA ping.
  </summary>
</histogram>

<histogram base="true" name="Memory.OpenFDsSoftLimit" units="files"
    expires_after="M85">
<!-- Name completed by histogram_suffixes name="MemoryFDsBroswerGpuAndRendererProcess" -->

  <owner>dcastagna@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    The limit of open file descriptors that can be opened per process. Recorded
    once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.ParkableImage.DiskIsUsable.5min" enum="BooleanYesNo"
    expires_after="2023-12-25">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Whether the disk allocator is usable. Recorded at the same time as
    &quot;Memory.ParkableImage.*.5min&quot;. The disk may not be usable for
    several reasons, including the profile being an Incognito one, permssions
    error, or disk write error.
  </summary>
</histogram>

<histogram name="Memory.ParkableImage.OnDiskSize.5min" units="KiB"
    expires_after="2023-12-25">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Size of encoded image data of ParkableImages that are on disk. Collected
    once, 5 minutes after the first ParkableImage is created.
  </summary>
</histogram>

<histogram name="Memory.ParkableImage.Read.Latency" units="microseconds"
    expires_after="2023-12-25">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Recorded each time a ParkableImage is read from disk. Records the time taken
    to read a ParkableImage from disk. Note: This metric drops reports on
    clients with low-resolution clocks, which means these reports will be biased
    against a portion of the population on Windows. See
    Windows.HasHighResolutionTimeTicks for the affected sample.
  </summary>
</histogram>

<histogram name="Memory.ParkableImage.Read.Throughput" units="MiBps"
    expires_after="2024-02-25">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Recorded each time a ParkableImage is read from disk. Records the throughput
    of reading the ParkableImage from disk, in MiB/s.
  </summary>
</histogram>

<histogram name="Memory.ParkableImage.TotalReadTime.5min" units="ms"
    expires_after="2023-12-25">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Total time spent reading images from disk. Collected once, 5 minutes after
    the first ParkableImage is created.
  </summary>
</histogram>

<histogram name="Memory.ParkableImage.TotalSize.5min" units="KiB"
    expires_after="2023-12-25">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Total size of encoded image data of ParkableImages. Collected once, 5
    minutes after the first ParkableImage is created.
  </summary>
</histogram>

<histogram name="Memory.ParkableImage.TotalWriteTime.5min" units="ms"
    expires_after="2023-12-25">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Total time spent writing images to disk. Collected once, 5 minutes after the
    first ParkableImage is created.
  </summary>
</histogram>

<histogram name="Memory.ParkableImage.UnparkedSize.5min" units="KiB"
    expires_after="2023-12-25">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Size of encoded image data of ParkableImages that are not written to disk.
    Collected once, 5 minutes after the first ParkableImage is created.
  </summary>
</histogram>

<histogram name="Memory.ParkableImage.Write.Latency" units="microseconds"
    expires_after="2023-12-25">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Recorded each time a ParkableImage is written to disk. Records the time
    taken to write the ParkableImage to disk. Note: This metric drops reports on
    clients with low-resolution clocks, which means these reports will be biased
    against a portion of the population on Windows. See
    Windows.HasHighResolutionTimeTicks for the affected sample.
  </summary>
</histogram>

<histogram name="Memory.ParkableImage.Write.Size" units="KiB"
    expires_after="2023-12-25">
  <owner>thiabaud@google.com</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Recorded each time a ParkableImage is written to disk. Records the size of
    the write, in KiB.
  </summary>
</histogram>

<histogram name="Memory.ParkableString.CompressedSizeKb" units="KB"
    expires_after="M87">
  <owner>lizeb@chromium.org</owner>
  <summary>
    Total size of compressed ParkableStrings, in KB. Recorded at the same time
    as &quot;Memory.ParkableString.TotalSizeKb&quot;.
  </summary>
</histogram>

<histogram name="Memory.ParkableString.Compression.Latency"
    units="microseconds" expires_after="2024-03-17">
  <owner>lizeb@chromium.org</owner>
  <owner>thiabaud@google.com</owner>
  <summary>
    Time to compress a ParkableString, in us. Note: This metric drops reports on
    clients with low-resolution clocks, which means these reports will be biased
    against a portion of the population on Windows. See
    Windows.HasHighResolutionTimeTicks for the affected sample.
  </summary>
</histogram>

<histogram name="Memory.ParkableString.Compression.SizeKb" units="KB"
    expires_after="2024-02-11">
  <owner>lizeb@chromium.org</owner>
  <owner>thiabaud@google.com</owner>
  <summary>
    Size of a compressed ParkableString, recorded at compression time.
  </summary>
</histogram>

<histogram name="Memory.ParkableString.CompressionRatio.5min" units="%"
    expires_after="2023-07-02">
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Average compression ratio, 100 * compressed_size / initial_size, for all
    compressed ParkableStrings. Recorded at the same time as
    &quot;Memory.ParkableString.TotalSizeKb.5min&quot;.
  </summary>
</histogram>

<histogram name="Memory.ParkableString.Decompression.Latency"
    units="microseconds" expires_after="2023-07-02">
  <owner>lizeb@chromium.org</owner>
  <owner>thiabaud@google.com</owner>
  <summary>
    Time to decompress a ParkableString, in us. Note: This metric drops reports
    on clients with low-resolution clocks, which means these reports will be
    biased against a portion of the population on Windows. See
    Windows.HasHighResolutionTimeTicks for the affected sample.
  </summary>
</histogram>

<histogram name="Memory.ParkableString.Decompression.ThroughputMBps"
    units="MBps" expires_after="2023-07-02">
  <owner>lizeb@chromium.org</owner>
  <owner>thiabaud@google.com</owner>
  <summary>
    Original size of a compressed ParkableString, recorded at decompression
    time.
  </summary>
</histogram>

<histogram name="Memory.ParkableString.DiskReadTime.5min" units="ms"
    expires_after="2024-02-11">
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Total main thread time used by ParkableStrings for reading over the first 5
    minutes of a renderer lifetime. Starting time is from the first
    ParkableString being added.
  </summary>
</histogram>

<histogram name="Memory.ParkableString.DiskWriteTime.5min" units="ms"
    expires_after="2023-06-18">
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Total time used by ParkableStrings for writing to disk over the first 5
    minutes of a renderer lifetime. Starting time is from the first
    ParkableString being added.
  </summary>
</histogram>

<histogram name="Memory.ParkableString.OnDiskSizeKb.5min" units="KB"
    expires_after="2023-01-22">
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Total size of ParkableStrings discarded to disk, excluding allocator waste,
    in KB. Recorded once, 5 minutes after the first ParkableString is added to a
    renderer, at the same time as
    &quot;Memory.ParkableString.MemorySavings.5min&quot;.
  </summary>
</histogram>

<histogram name="Memory.ParkableString.Read.Latency" units="microseconds"
    expires_after="2023-02-26">
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Time to read a ParkableString from disk, in us. Note: This metric drops
    reports on clients with low-resolution clocks, which means these reports
    will be biased against a portion of the population on Windows. See
    Windows.HasHighResolutionTimeTicks for the affected sample.
  </summary>
</histogram>

<histogram name="Memory.ParkableString.SavingsKb" units="KB"
    expires_after="M87">
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Sum of memory saved by compression, in KB. Recorded at the same time as
    &quot;Memory.ParkableString.TotalSizeKb&quot;.
  </summary>
</histogram>

<histogram name="Memory.ParkableString.TotalSizeKb.5min" units="KB"
    expires_after="2023-08-06">
  <owner>lizeb@chromium.org</owner>
  <owner>pasko@chromium.org</owner>
  <summary>
    Total size of ParkableStrings assuming no compression, in KB. Recorded once,
    5 minutes after the first ParkableString is added to a renderer, at the same
    time as &quot;Memory.ParkableString.MainThreadTime.5min&quot;.
  </summary>
</histogram>

<histogram name="Memory.PartitionAlloc.MemoryReclaim" units="microseconds"
    expires_after="2024-02-25">
  <owner>lizeb@chromium.org</owner>
  <owner>bartekn@chromium.org</owner>
  <summary>
    Time it takes for PartitionAlloc's MemoryReclaimer to reclaim once.
    Collected at each reclaim, for all process types.

    Note that clients without high-resolution clocks will report 0 for very
    short times.
  </summary>
</histogram>

<histogram name="Memory.PartitionAlloc.PartitionRoot.ExtrasSize" units="bytes"
    expires_after="2024-05-22">
  <owner>bartekn@chromium.org</owner>
  <owner>keishi@chromium.org</owner>
  <summary>
    Size of the extras configured for PartitionAlloc's `PartitionRoot` struct.
    This is specific to the main partition, which powers the bulk of
    PartitionAlloc-Everywhere. Recorded once for each process during allocator
    shim configuration.

    Extras are optional. Extras can include the PartitionAlloc cookie (16B) and
    the MiraclePtr ref-count (up to 16B).
  </summary>
</histogram>

<histogram name="Memory.PartitionAlloc.PeriodicPurge" units="microseconds"
    expires_after="2024-03-17">
  <owner>lizeb@chromium.org</owner>
  <owner>bartekn@chromium.org</owner>
  <summary>
    Time it takes for PartitionAlloc's periodic purge to run once. Collected at
    each purge, for all process types.

    Note that clients without high-resolution clocks will report 0 for very
    short times.
  </summary>
</histogram>

<histogram name="Memory.PartitionAlloc.ThreadCache.BatchFillRate{ThreadType}"
    units="%" expires_after="M102">
  <owner>lizeb@chromium.org</owner>
  <owner>bartekn@chromium.org</owner>
  <summary>
    Fraction of PartitionAlloc's thread cache allocations requests that required
    a batch fill, that is cache hits touching the central allocator. Recorded
    during memory dumps, at the same time as the Memory.*.PartitionAlloc.*
    histograms. Data is collected for {ThreadType}.
  </summary>
  <token key="ThreadType">
    <variant name="" summary="all threads"/>
    <variant name=".MainThread" summary="the main thread only"/>
  </token>
</histogram>

<histogram name="Memory.PartitionAlloc.ThreadCache.HitRate{ThreadType}"
    units="%" expires_after="M102">
  <owner>lizeb@chromium.org</owner>
  <owner>bartekn@chromium.org</owner>
  <summary>
    Hit rate for PartitionAlloc's thread cache. Recorded during memory dumps, at
    the same time as the Memory.*.PartitionAlloc.* histograms. Data is collected
    for {ThreadType}.
  </summary>
  <token key="ThreadType">
    <variant name="" summary="all threads"/>
    <variant name=".MainThread" summary="the main thread only"/>
  </token>
</histogram>

<histogram name="Memory.PressureLevel2" enum="MemoryPressureLevel"
    expires_after="never">
<!-- expires-never: Generic system health metric used to diagnose various performance issues. -->

  <owner>fdoray@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    The time spent in each memory pressure state, in seconds. Recorded when the
    memory pressure state changes, at shutdown, or when it hasn't been recorded
    in the last 5 minutes.

    The values from this histogram shouldn't be used directly, users of this
    metric should look at the percentage of samples in each bucket to understand
    the average time that Chrome spend in each pressure state.
  </summary>
</histogram>

<histogram name="Memory.PressureLevelChanges" enum="MemoryPressureLevelChanges"
    expires_after="M85">
  <owner>chrisha@chromium.org</owner>
  <summary>
    The number of pressure level state changes for each possible pairwise state
    change.
  </summary>
</histogram>

<histogram base="true" name="Memory.PressureWindowDuration" units="ms"
    expires_after="2024-03-17">
<!-- Name completed by histogram_suffixes name="Memory.Pressure.TransitionType" -->

  <owner>fdoray@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    The time spent in each of the memory pressure state. Recorded when
    transitioning from a memory pressure state to the other and when exiting
    memory pressure.
  </summary>
</histogram>

<histogram name="Memory.ProcessCount" units="processes"
    expires_after="2024-03-24">
  <owner>creis@chromium.org</owner>
  <owner>nasko@chromium.org</owner>
  <summary>
    The count of all active processes.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram name="Memory.Renderer.BlinkCachedMetadataGetResult"
    enum="CachedMetadataHandlerState" expires_after="M87">
  <owner>pasko@chromium.org</owner>
  <owner>leszeks@chromium.org</owner>
  <summary>
    The state of CachedMetadata on every attempt to use it for a script
    resource. Used for experiment in http://crbug.com/1045052.
  </summary>
</histogram>

<histogram name="Memory.Renderer.EstimatedDroppableEncodedSize" units="KB"
    expires_after="M77">
  <owner>hajimehoshi@chromium.org</owner>
  <summary>
    The esitimated memory size which would be reduced when reusing disk cache is
    implemented. If it is 100% sure that the encoded data is in disk cache, the
    same data in memory can be dropped to reduce memory usage. This is rencorded
    when an ImageResource is pruned. See crbug/664437.
  </summary>
</histogram>

<histogram name="Memory.Renderer.PrivateMemoryFootprint" units="MB"
    expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    A rough estimate of the private memory footprint of the renderer process.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.

    This memory footprint metric cannot be compared across platforms because
    each platform relies on platform-level APIs for accounting. As such, though
    this attempts to measure private memory footprint as best as possible, it
    does not measure the same thing on each platform. We have not found a good
    way to compare any system level memory metric across platforms due to the
    different nature of memory management on each platform.

    Do not modify this metric in any way without contacting
    speed-metrics-dev@chromium.org AND chrome-analysis-team@google.com.
  </summary>
</histogram>

<histogram name="Memory.Renderer.ResidentSet" units="MiB" expires_after="never">
<!-- expires-never: Generic system health metric used to diagnose various performance issues. -->

  <owner>fdoray@chromium.org</owner>
  <summary>
    The size of the resident memory in a renderer process. This is influenced by
    factors we control (e.g. memory that is not accessed can be swapped) and
    factors we don't control (e.g. an unrelated process using a lot of memory
    can force memory in our process to be swapped). Recorded on
    Windows/Linux/ChromeOS/Android.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.

    This resident memory metric cannot be compared across platforms because each
    platform relies on platform-level APIs for accounting. As such, though this
    attempts to measure private memory footprint as best as possible, it does
    not measure the same thing on each platform. We have not found a good way to
    compare any system level memory metric across platforms due to the different
    nature of memory management on each platform.
  </summary>
</histogram>

<histogram name="Memory.Renderer.SharedMemoryFootprint" units="MB"
    expires_after="2024-03-24">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    A rough estimate of the shared memory footprint of the renderer process.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram name="Memory.RendererProcessCount" units="processes"
    expires_after="2024-02-25">
  <owner>creis@chromium.org</owner>
  <owner>nasko@chromium.org</owner>
  <summary>
    The count of active renderer processes. Excludes renderers hosting
    chrome-extension:// and/or chrome:// URLs.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.

    Computed based on OS data.

    WARNINGS: Not reliable on Android, see https://crbug.com/875400. Ignores
    processes that do not host a widget, see https://crbug.com/949977#c36.
    Consider using Memory.RenderProcessHost.Count.* instead.
  </summary>
</histogram>

<histogram name="Memory.RenderProcessHost.Count.All" units="processes"
    expires_after="2024-03-24">
  <owner>alexmos@chromium.org</owner>
  <owner>creis@chromium.org</owner>
  <owner>lukasza@chromium.org</owner>
  <owner>nasko@chromium.org</owner>
  <summary>
    The count of all renderer processes. Covers all renderer processes,
    including ones hosting web content (i.e. http(s):// and/or file://),
    extensions (i.e. chrome-extension://) and WebUI (i.e. chrome://).

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.

    Computed based on count of RenderProcessHost objects, even if 1) they have
    not been launched yet (e.g. during session restore) or 2) they are dead
    (e.g. killed by the browser process or the OS).
  </summary>
</histogram>

<histogram name="Memory.RenderProcessHost.Count.InitializedAndNotDead"
    units="processes" expires_after="2024-03-24">
  <owner>alexmos@chromium.org</owner>
  <owner>creis@chromium.org</owner>
  <owner>lukasza@chromium.org</owner>
  <owner>nasko@chromium.org</owner>
  <summary>
    The count of active renderer processes. Recorded once per UMA ping. Covers
    all renderer processes, including ones hosting web content (i.e. http(s)://
    and/or file://), extensions (i.e. chrome-extension://) and WebUI (i.e.
    chrome://).

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.

    Computed based on count of RenderProcessHost objects that are
    IsInitializedAndNotDead (i.e. have been launched and not terminated yet).
  </summary>
</histogram>

<histogram name="Memory.RenderProcessHost.Count.OriginAgentClusterOverhead"
    units="processes" expires_after="2024-02-04">
  <owner>wjmaclean@chromium.org</owner>
  <owner>alexmos@chromium.org</owner>
  <owner>creis@chromium.org</owner>
  <summary>
    An estimate of additional processes created due to OriginAgentCluster (OAC).
    Computed assuming no coalescing of multiple BrowsingInstances into a single
    RenderProcess (including no subframe process reuse), and only when
    cross-process origin isolation occurs due to the OAC header. Given this, the
    count of additional SiteInstances corresponds exactly to the additional
    number of RenderProcesses that OAC gives rise to, and therefore gives a
    sense of how much process count overhead it creates. Recorded once per UMA
    ping.
  </summary>
</histogram>

<histogram name="Memory.RenderProcessHost.Count.SandboxedIframeOverhead"
    units="processes" expires_after="2024-03-10">
  <owner>wjmaclean@chromium.org</owner>
  <owner>alexmos@chromium.org</owner>
  <owner>creis@chromium.org</owner>
  <summary>
    The number of renderer processes that represent sandboxed iframes, computed
    by counting the number of RenderProcessHosts allocated to them. This will be
    zero when SiteIsolationPolicy::AreIsolatedSandboxedIframesEnabled() is
    false. Recorded once per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.RenderProcessHost.Percent.OriginAgentClusterOverhead"
    units="%" expires_after="2023-10-22">
  <owner>wjmaclean@chromium.org</owner>
  <owner>alexmos@chromium.org</owner>
  <owner>creis@chromium.org</owner>
  <summary>
    The percentage of the total renderer process count that is due to the
    OriginAgentCluster (OAC) header, based on the overhead estimate from
    Memory.RenderProcessHost.Count.OriginAgentClusterProcesses. That value is
    computed assuming no coalescing of multiple BrowsingInstances into a single
    RenderProcess (including no subframe process reuse), and only when
    cross-process origin isolation occurs due to the OAC header. Given this, the
    percentage of total SiteInstances due to the OAC header corresponds exactly
    to the percentage of RenderProcesses that OAC gives rise to. Recorded once
    per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.ShmemDir.AmountOfFreeSpace" units="MB"
    expires_after="M77">
  <owner>reveman@chromium.org</owner>
  <summary>
    The amount of free space in temporary directory for shared memory files.
    Recorded each time a new discardable memory manager instance is created.
  </summary>
</histogram>

<histogram name="Memory.StackSamplingProfiler.StackSampleSize" units="KB"
    expires_after="M119">
  <obsolete>
    Replaced by Memory.StackSamplingProfiler.StackSampleSize2. Min bucket size
    was too large to be useful. Replaced April 2023.
  </obsolete>
  <owner>iby@chromium.org</owner>
  <owner>cros-telemetry@google.com</owner>
  <summary>
    The size of the stack copied during a stack-sampled metric capture. One
    sample per 199 stack captures. Only recorded by clients in the stack-sampled
    metrics experiment. ChromeOS only.
  </summary>
</histogram>

<histogram name="Memory.StackSamplingProfiler.StackSampleSize2" units="KB"
    expires_after="2024-03-10">
  <owner>iby@chromium.org</owner>
  <owner>cros-telemetry@google.com</owner>
  <summary>
    The size of the stack copied during a stack profiler capture. One sample per
    199 stack captures. Only recorded by clients in the stack-sampled metrics
    experiment or recording a Chrometto trace. ChromeOS only.
  </summary>
</histogram>

<histogram name="Memory.Swap.Worker" units="KB" expires_after="M85">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The swap used by each worker process. Each worker process provides one
    sample. Recorded once per process per UMA ping if the system has swapped.
  </summary>
</histogram>

<histogram name="Memory.System.AvailableMB" units="MB"
    expires_after="2024-03-17">
  <owner>fdoray@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    The amount of available physical memory on the system. Recorded every 5
    seconds on Windows only.

    From
    https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/ns-sysinfoapi-memorystatusex,
    this is memory that can be reused without having to write its content to
    disk first. It includes the standby, free and zero lists.
  </summary>
</histogram>

<histogram name="Memory.System.MemAvailableMB" units="MB"
    expires_after="2024-03-24">
  <owner>andreaorru@chromium.org</owner>
  <owner>hidehiko@chromium.org</owner>
  <summary>
    System-wide estimate of memory available in ChromeOS, without swapping.
    Calculated from MemFree, SReclaimable, the size of the file LRU lists, and
    the low watermarks in each zone. The estimate takes into account that the
    system needs some page cache to function well, and that not all reclaimable
    slab will be reclaimable, due to items being in use.
  </summary>
</histogram>

<histogram name="Memory.System.MemUsedMB" units="MB" expires_after="2024-03-24">
  <owner>andreaorru@chromium.org</owner>
  <owner>hidehiko@chromium.org</owner>
  <summary>
    System-wide estimate of memory used in ChromeOS, calculated as the
    difference between the amount of total and available memory.
  </summary>
</histogram>

<histogram name="Memory.Total.HibernatedCanvas.OriginalSize" units="MB"
    expires_after="2024-02-11">
  <owner>lizeb@chromium.org</owner>
  <owner>chrome-memory@chromium.org</owner>
  <summary>
    Total size of all hibernated canvases across all renderers, prior to
    compression.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android.
  </summary>
</histogram>

<histogram name="Memory.Total.HibernatedCanvas.Size" units="MB"
    expires_after="2024-02-11">
  <owner>lizeb@chromium.org</owner>
  <owner>chrome-memory@chromium.org</owner>
  <summary>
    Total size of all hibernated canvases across all renderers.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android.
  </summary>
</histogram>

<histogram name="Memory.Total.PrivateMemoryFootprint" units="MB"
    expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    A rough estimate of the private memory footprint of all processes.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.

    This memory footprint metric cannot be compared across platforms because
    each platform relies on platform-level APIs for accounting. As such, though
    this attempts to measure private memory footprint as best as possible, it
    does not measure the same thing on each platform. We have not found a good
    way to compare any system level memory metric across platforms due to the
    different nature of memory management on each platform.

    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="Memory.Total.PrivateMemoryFootprint.HasZombieProfile"
    units="MB" expires_after="2022-08-21">
  <obsolete>
    This histogram was used to measure the impact of the
    DestroyProfileOnBrowserClose prior to its general launch. Now that it's 100%
    launched, there is no active A/B test.
  </obsolete>
  <owner>nicolaso@chromium.org</owner>
  <owner>cbe-eng@google.com</owner>
  <summary>
    Same as Memory.Total.PrivateMemoryFootprint, but only gets recorded after a
    Profile becomes safe to delete during this browsing session. This lets us
    measure the memory impact of destroying Profile objects and their
    KeyedServices.

    This is not meant to be compared with Memory.Total.PrivateMemoryFootprint,
    as it measures a different scenario. Instead, it should be compared with
    itself in an A/B test with the DestroyProfileOnBrowserClose variation.
  </summary>
</histogram>

<histogram name="Memory.Total.PrivateMemoryFootprintExcludingWaivedRenderers"
    units="MB" expires_after="2024-02-11">
  <owner>ckitagawa@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    A rough estimate of the private memory footprint of all processes on Android
    ignoring Renderers with only Waived process bindings.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android.
  </summary>
</histogram>

<histogram
    name="Memory.Total.PrivateMemoryFootprintVisibleOrHigherPriorityRenderers"
    units="MB" expires_after="2024-02-11">
  <owner>ckitagawa@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    A rough estimate of the private memory footprint of all visible or higher
    importance processes on Android. This ignores Renderers with Waived or Not
    Perceptible effective process bindings.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android.
  </summary>
</histogram>

<histogram name="Memory.Total.RendererBlinkGC" units="MB"
    expires_after="2024-03-03">
  <owner>fdoray@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Memory from the Blink heap in all renderer processes.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram name="Memory.Total.RendererBlinkGC.Fragmentation" units="MB"
    expires_after="2024-03-03">
  <owner>fdoray@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <summary>
    Memory from the Blink heap which is not used by allocated objects in all
    renderer processes.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram name="Memory.Total.RendererMalloc" units="MB"
    expires_after="2022-10-01">
  <owner>keishi@chromium.org</owner>
  <owner>bartekn@chromium.org</owner>
  <summary>
    A rough estimate of memory allocated by malloc in all renderer processes.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram name="Memory.Total.RendererPrivateMemoryFootprint" units="MB"
    expires_after="2024-02-25">
  <owner>tommckee@chromium.org</owner>
  <summary>
    A rough estimate of the private memory footprint of all renderer processes.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.

    This memory footprint metric cannot be compared across platforms because
    each platform relies on platform-level APIs for accounting. As such, though
    this attempts to measure private memory footprint as best as possible, it
    does not measure the same thing on each platform. We have not found a good
    way to compare any system level memory metric across platforms due to the
    different nature of memory management on each platform.
  </summary>
</histogram>

<histogram name="Memory.Total.RendererPrivateMemoryFootprintExcludingWaived"
    units="MB" expires_after="2023-12-10">
  <owner>ckitagawa@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    A rough estimate of the private memory footprint of all renderer processes
    on Android ignoring Renderers with only Waived process bindings.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android.
  </summary>
</histogram>

<histogram
    name="Memory.Total.RendererPrivateMemoryFootprintVisibleOrHigherPriority"
    units="MB" expires_after="2024-02-11">
  <owner>ckitagawa@chromium.org</owner>
  <owner>yfriedman@chromium.org</owner>
  <summary>
    A rough estimate of the private memory footprint of all renderer processes
    with visible or higher importance on Android. This ignores Renderers with
    Waived or Not Perceptible effective process bindings.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android.
  </summary>
</histogram>

<histogram name="Memory.Total.ResidentSet" units="MiB" expires_after="never">
<!-- expires-never: Generic system health metric used to diagnose various performance issues. -->

  <owner>fdoray@chromium.org</owner>
  <summary>
    The size of the resident memory in all processes. This is influenced by
    factors we control (e.g. memory that is not accessed can be swapped) and
    factors we don't control (e.g. an unrelated process using a lot of memory
    can force memory in our process to be swapped). Recorded on
    Windows/Linux/ChromeOS/Android.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.

    Note: This metric is a simple sum of the resident set of all processes and
    this cause some double accounting for the shared portion of the working set.
    As a result this metric doesn't give an exact representation of how much
    physical memory is used by Chrome.

    This resident memory metric cannot be compared across platforms because each
    platform relies on platform-level APIs for accounting. As such, though this
    attempts to measure private memory footprint as best as possible, it does
    not measure the same thing on each platform. We have not found a good way to
    compare any system level memory metric across platforms due to the different
    nature of memory management on each platform.
  </summary>
</histogram>

<histogram name="Memory.Total.SharedMemoryFootprint" units="MB"
    expires_after="2024-03-24">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    A rough estimate of the shared memory footprint of all processes.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram name="Memory.Total.SystemCommitLimit" units="GB"
    expires_after="2023-05-07">
  <owner>zmo@chromium.org</owner>
  <owner>graphics-dev@chromium.org</owner>
  <summary>
    Records the system commit limit (number of total pages) x page size,
    collected in the info collection GPU process, once per UMA ping. This is
    Windows platform only.
  </summary>
</histogram>

<histogram name="Memory.Total.TileMemory" units="MB" expires_after="2024-02-25">
  <owner>lizeb@chromium.org</owner>
  <owner>chrome-gpu-memory@google.com</owner>
  <summary>
    Total (GPU) memory used for tiles, across all consumers.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.
  </summary>
</histogram>

<histogram name="Memory.VmmSwap.TotalBytesWrittenInAWeek" units="MiB"
    expires_after="2024-01-31">
  <owner>kawasin@google.com</owner>
  <owner>sstan@google.com</owner>
  <summary>
    The total bytes written by vmm-swap feature for a week. This is sent weekly
    once any disk writes for vmm-swap has done. Once reporting has started it
    reports weekly even if the total bytes written is zero.
  </summary>
</histogram>

<histogram name="Memory.VmmSwap.{VmName}.ActiveAfterEnableDuration"
    units="Hours" expires_after="2024-01-31">
  <owner>kawasin@google.com</owner>
  <owner>sstan@google.com</owner>
  <summary>
    The duration how long it was spent with vmm-swap enabled. This is sent with
    &quot;.InactiveBeforeEnableDuration&quot; metrics when vmm-swap is disabled.
    Shorter &quot;.InactiveBeforeEnableDuration&quot; and longer
    &quot;.ActiveAfterEnableDuration&quot; indicates the vmm-swap policies are
    doing a good job at deciding when to enable vmm-swap.
  </summary>
  <token key="VmName" variants="VmmSwapVmName"/>
</histogram>

<histogram name="Memory.VmmSwap.{VmName}.AvgPagesInFile" units="Pages"
    expires_after="2024-01-31">
  <owner>kawasin@google.com</owner>
  <owner>sstan@google.com</owner>
  <summary>
    An lower bound estimate of the average number of pages resident on disk over
    the duration of the vmm-swap period. Even if the actual page size is not
    4KiB, it is recalculated to be the number of 4KiB pages. This is sent when
    vmm-swap is disabled.
  </summary>
  <token key="VmName" variants="VmmSwapVmName"/>
</histogram>

<histogram name="Memory.VmmSwap.{VmName}.DisableReason"
    enum="VmmSwapDisableReason" expires_after="2024-01-31">
  <owner>kawasin@google.com</owner>
  <owner>sstan@google.com</owner>
  <summary>
    Tracks events that would cause vmm-swap to be disabled. This is sent
    regardless of whether or not vmm-swap was actually active - i.e. alongside
    both &quot;.ActiveAfterEnableDuration&quot; and
    &quot;.InactiveNoEnableDuration&quot;. Each event type is broken down into
    two enum values - one for the inactive and one for the active case.
  </summary>
  <token key="VmName" variants="VmmSwapVmName"/>
</histogram>

<histogram name="Memory.VmmSwap.{VmName}.InactiveBeforeEnableDuration"
    units="Hours" expires_after="2024-01-31">
  <owner>kawasin@google.com</owner>
  <owner>sstan@google.com</owner>
  <summary>
    The duration how long it was spent waiting to enable vmm-swap since it
    becomes swappable-idle. This is sent with
    &quot;.ActiveAfterEnableDuration&quot; metrics when vmm-swap is disabled.
  </summary>
  <token key="VmName" variants="VmmSwapVmName"/>
</histogram>

<histogram name="Memory.VmmSwap.{VmName}.InactiveNoEnableDuration"
    units="Hours" expires_after="2024-01-31">
  <owner>kawasin@google.com</owner>
  <owner>sstan@google.com</owner>
  <summary>
    The duration how long it was spend without vmm-swap enabled and it exits
    swappable-idle. This is sent when vmm-swap is disabled. If reported values
    are mostly long, it indicates that the policies are missing chances to
    enable vmm-swap.
  </summary>
  <token key="VmName" variants="VmmSwapVmName"/>
</histogram>

<histogram name="Memory.VmmSwap.{VmName}.MinPagesInFile" units="Pages"
    expires_after="2024-01-31">
  <owner>kawasin@google.com</owner>
  <owner>sstan@google.com</owner>
  <summary>
    The minimum number of pages resident on disk any given point during the
    vmm-swap period. Even if the actual page size is not 4KiB, it is
    recalculated to be the number of 4KiB pages. This is sent when vmm-swap is
    disabled.
  </summary>
  <token key="VmName" variants="VmmSwapVmName"/>
</histogram>

<histogram name="Memory.VmmSwap.{VmName}.PageAverageDurationInFile"
    units="Seconds" expires_after="2024-01-31">
  <owner>kawasin@google.com</owner>
  <owner>sstan@google.com</owner>
  <summary>
    The average duration of each page of the guest memory lives in the swap
    file. We expect most cold pages live in the swap file for a long time and
    hot pages are not swapped out but kept in the memory. The durations are
    measured every 10 minutes to estimate the average duration. This is sent
    when vmm-swap is disabled.
  </summary>
  <token key="VmName" variants="VmmSwapVmName"/>
</histogram>

<histogram name="Memory.VmmSwap.{VmName}.PolicyResult"
    enum="VmmSwapPolicyResult" expires_after="2024-01-31">
  <owner>kawasin@google.com</owner>
  <owner>sstan@google.com</owner>
  <summary>
    Tracks the policy decision made when deciding how to handle a swap enable
    dbus request. Indicates if a request was accepted or why it was rejected.
    Each decision result is further broken down into whether it occured while
    handling an initial enable request or a maintenance request.
  </summary>
  <token key="VmName" variants="VmmSwapVmName"/>
</histogram>

<histogram name="Memory.VmmSwap.{VmName}.State" enum="VmmSwapState"
    expires_after="2024-01-31">
  <owner>kawasin@google.com</owner>
  <owner>sstan@google.com</owner>
  <summary>
    Sends the vmm-swap state (enabled or disabled) every 10 minutes while the vm
    is swappable-idle. Vmm-swap may not be enabled by policies to protect disk.
    This metrics indicates what percentage of time in the swappable-idle state
    is spent with vmm-swap enabled and how well the policies works.
  </summary>
  <token key="VmName" variants="VmmSwapVmName"/>
</histogram>

<histogram name="Memory.Worker" units="KB" expires_after="M85">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    The private working set used by each worker process. Each worker process
    provides one sample. Recorded once per process per UMA ping.
  </summary>
</histogram>

<histogram name="Memory.WorkingSetTrim.ArcProcessTrimCount"
    units="ProcessesTrimmed" expires_after="M95">
  <owner>bgeffon@chromium.org</owner>
  <owner>fdoray@chromium.org</owner>
  <summary>
    Cumulative number of ARC processes trimmed during a user's session, recorded
    each time an ARC process is trimmed. Available on ChromeOS.
  </summary>
</histogram>

<histogram name="Memory.WorkingSetTrim.ArcVmTrimCountPer30Mins"
    units="VMsTrimmed" expires_after="2022-04-03">
  <owner>khmel@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <summary>
    Number of ARCVM's crosvm trimmed in the last 30 minutes. Recorded every 30
    minutes as long as ARCVM trimming is enabled. Available on ChromeOS. Also,
    one last report is emitted for the &lt;= 30 minute period since the last
    report, at browser exit, and that the sample is scaled. For example, when 1
    trim was done since the last report and the browser exits 15 minutes after
    the last report, 2 is recorded on the browser exit.
  </summary>
</histogram>

<histogram name="Memory.WorkingSetTrim.ArcVmTrimFailCountPer30Mins"
    units="failures" expires_after="2022-10-15">
  <owner>raging@google.com</owner>
  <owner>khmel@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <summary>
    Tracks the number of failures that resulted from ArcVM trim operations.
    Recorded every 30 minutes as long as ARCVM trimming is enabled. Available on
    ChromeOS. Also, one last report is emitted for the &lt;= 30 minute period
    since the last report, at browser exit.
  </summary>
</histogram>

<histogram name="Memory.WorkingSetTrim.ArcVmTrimPageLimit" units="pages"
    expires_after="2022-10-15">
  <owner>raging@google.com</owner>
  <owner>khmel@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <summary>
    Tracks the ongoing computed value used to limit the number of pages to trim
    each time the ArcVM operation runs. Available on ChromeOS. If VM trimming is
    enabled, this is recorded at the start of every trim operation, with the
    page limit computed for each operation. Values tracked as zero mean
    unlimited trimming.
  </summary>
</histogram>

<histogram name="Memory.WorkingSetTrim.RendererTrimCount"
    units="RenderersTrimmed" expires_after="M95">
  <owner>bgeffon@chromium.org</owner>
  <owner>fdoray@chromium.org</owner>
  <summary>
    Cumulative number of renderers trimmed during a user's session, recorded
    each time a renderer is trimmed. Available on Windows and ChromeOS.
  </summary>
</histogram>

<histogram name="Memory.{UtilityProcessType}.PrivateMemoryFootprint" units="MB"
    expires_after="never">
<!-- expires-never: useful diagnostic metric for changes in
     Memory.Total.PrivateMemoryFootprint, which never expires. -->

  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    A rough estimate of the private memory footprint of the {UtilityProcessType}
    process.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.

    This memory footprint metric cannot be compared across platforms because
    each platform relies on platform-level APIs for accounting. As such, though
    this attempts to measure private memory footprint as best as possible, it
    does not measure the same thing on each platform. We have not found a good
    way to compare any system level memory metric across platforms due to the
    different nature of memory management on each platform.
  </summary>
  <token key="UtilityProcessType" variants="UtilityProcessType"/>
</histogram>

<histogram name="Memory.{UtilityProcessType}.PrivateSwapFootprint" units="MB"
    expires_after="2024-07-16">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    An amount of private memory of the {UtilityProcessType} process placed in
    swap (VmSwap). Available on Android, Linux and ChromeOS.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.

    Note: Histogram data may be missing for mid-2020 due to expiry.
  </summary>
  <token key="UtilityProcessType" variants="UtilityProcessType"/>
</histogram>

<histogram name="Memory.{UtilityProcessType}.ResidentSet" units="MiB"
    expires_after="never">
<!-- expires-never: Generic system health metric used to diagnose various performance issues. -->

  <owner>fdoray@chromium.org</owner>
  <summary>
    The size of the resident memory in a {UtilityProcessType} process. This is
    influenced by factors we control (e.g. memory that is not accessed can be
    swapped) and factors we don't control (e.g. an unrelated process using a lot
    of memory can force memory in our process to be swapped). Recorded on
    Windows/Linux/ChromeOS/Android.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.

    This resident memory metric cannot be compared across platforms because each
    platform relies on platform-level APIs for accounting. As such, though this
    attempts to measure private memory footprint as best as possible, it does
    not measure the same thing on each platform. We have not found a good way to
    compare any system level memory metric across platforms due to the different
    nature of memory management on each platform.
  </summary>
  <token key="UtilityProcessType" variants="UtilityProcessType"/>
</histogram>

<histogram name="Memory.{UtilityProcessType}.SharedMemoryFootprint" units="MB"
    expires_after="2024-07-16">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    A rough estimate of the shared memory footprint of the {UtilityProcessType}
    process.

    Recorded at Poisson sampled time intervals with a mean of 5 minutes on
    Android and 30 minutes on other platforms.

    Note: Histogram data may be missing between M77 to M87 due to expiry.
  </summary>
  <token key="UtilityProcessType" variants="UtilityProcessType"/>
</histogram>

<histogram name="MemoryAndroid.EvictedTreeSize2" units="units"
    expires_after="2024-02-04">
  <owner>jonross@chromium.org</owner>
  <owner>chrome-gpu-metrics@google.com</owner>
  <summary>
    The total count of viz::SurfaceIds being evicted for the current FrameTree.
    Along with any surfaces that were embedded before a navigation occurred.

    This will be emitted whenever we evict one DelegatedFrameHostAndroid.
  </summary>
</histogram>

<histogram name="MemoryAndroid.EvictionReason" enum="AndroidEvictionReason"
    expires_after="M85">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Reasons behind evictions of individual tabs, recorded upon each tab
    eviction.
  </summary>
</histogram>

<histogram name="MemoryAndroid.LowMemoryLoadedTabCount" units="units"
    expires_after="M85">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kenjibaheux@google.com</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Number of loaded (memory-resident) tabs when LowMemory notification is
    delivered.
  </summary>
</histogram>

<histogram name="MemoryAndroid.LowRamDevice" enum="Boolean"
    expires_after="never">
<!-- expires-never: used internally for filtering -->

  <owner>ssid@chromium.org</owner>
  <owner>chrome-metrics-team@google.com</owner>
  <summary>
    Whether Chrome is running in low ram mode. This histogram is reported on
    every upload by Android devices. A device is considered low-RAM if it has
    512MiB of RAM or lower (see SysUtils.detectLowEndDevice()).
  </summary>
</histogram>

</histograms>

</histogram-configuration>
